Так как я наконец-то запилил самодельные отладочные платки , самое время начать веселье.
Заправившись под завязку кофеином я занырнул в SDK на esp8266 на этих выходных. Внутри как всегда треш и угар в тяжелой форме. Отвечая на вопросы страждущих — нет, я не буду править код референсной прошивки с AT командами. Это прошивка дерьмо. Точка. Насколько первосортное, что даже как пример ее использовать сложно. Так что нам нужна… замена.
Вот эту-то замену я за эти дни и запилил, и теперь она находится в ранней альфа-версии.
Приветствуйте Frankenstein Firmware для ESP8266.
Как Вы, наверное, догадались, я начал с того что портировал на ESP8266 мою доморощенную билдсистему antares. Нет, не добавил в antates библиотеку для работы с AT командами, как сделано было для ардуины. Нет, antares теперь может собирать код для ESP8266. Сказать тут особенно нечего, так как код очень страшен, содержит проприетарные блобы(tm), и попадет в ветку master не раньше, чем блобы будут заменены открытым решением. Потому кроме как собственно kconfig и сборка проекта ничего не поддерживается. Ни ANTARES_INIT макросы, ни атомики, ни delaylib.
Теперь по прошивке. Собственно, Франкенштейном я это как раз и обозвал за то, что собрана она из разных запчастей разбросанных по интернету и оживлено при помощи лошадиной дозы кофеина матерным заклинанием в полнолуние.
В отличие от прошивки с AT-командами, эта прошивка имеет интерфейс командной строки с редактированием, историей и дополнением. Я таки затащил туда немного доработанную открытую microrl (Micro Readline) библиотечку, за которую огромное спасибо автору.
Выглядит оно очень похоже на шелл u-boot’а или бизибокса. Лучшей демонстрацией будет вывод терминала при выполнении нескольких команд. Франкенштейн уже умеет сканировать сети, подключаться к беспроводной сети, настраивать и поднимать точку доступа, менять состояние ног GPIO. Непосредственно работа с сетью в зачаточной страдии. Нужно больше кофеина!
Frankenstein ESP8266 Firmware Powered by Antares 0.2-rc1, Insane Mushroom (c) Andrew 'Necromant' Andrianov 2014This is free software (where possible), published under the terms of GPLv2 Memory Layout: data : 0x3ffe8000 ~ 0x3ffe8aa8, len: 2728 rodata: 0x3ffe8ab0 ~ 0x3ffea254, len: 6052 bss : 0x3ffea258 ~ 0x3fff1688, len: 29744 heap : 0x3fff1688 ~ 0x3fffc000, len: 43384 === Press enter to activate this console === blackblade > help help - Show this message apconfig - Setup Access Point. apconfig name OPEN/WEP/WPA_PSK/WPA2_PSK/WPA_WPA2_PSK [password] iwconnect - Join a network/Display connection status. iwconnect ssid password iwmode - Get/set wireless mode. Available modes: NONE, STA, AP, APSTA iwmode STA iwscan - Scan for available stations ifconfig - Show/setup network interfaces ifconfig [iface] [ipaddr] [netmask] [gateway] ifconfig sta0 192.168.0.1 255.255.255.0 192.168.0.8 argtest - Print out argc/argv deepsleep - Enter deep sleep for some microseconds deepsleep 10000 reset - Soft-reboot the device meminfo - Display memory information version - Display version information and copyright gpio - Control gpio lines. gpio mode line [value] gpio in 0 gpio out 0 1 spi_dump - Hexdump flash contents spi_dump start len spi_wipe - Wipe the whole spi flash blank wipe listen - Listen for incoming data ona port listen 8080 blackblade > iwscan BSSID a8:15:1d:0c:b1:0c channel 03 rssi -54 auth WPA2_PSK shadowgate BSSID 1a:e6:e4:0c:f3:e4 channel 03 rssi -61 auth WPA2_PSK frostgate blackblade > ifconfig sta0: WiFi Client Interface state: Connected inet addr:192.168.0.198 Mask:255.255.255.0 Gateway:192.168.0.20 blackblade > iwmode AP Wireless mode change: STA -> AP blackblade > ifconfig ap0: WiFi Access Point Interface state: Running inet addr:192.168.4.1 Mask:255.255.255.0 Gateway:192.168.4.1 blackblade > iwmode APSTA Wireless mode change: AP -> APSTA blackblade > ifconfig sta0: WiFi Client Interface state: Connected inet addr:192.168.0.198 Mask:255.255.255.0 Gateway:192.168.0.20 ap0: WiFi Access Point Interface state: Running inet addr:192.168.4.1 Mask:255.255.255.0 Gateway:192.168.4.1 blackblade > apconfig SSID: dummy AUTH 0 BSSID: 1a:fe:34:98:dc:9e blackblade > apconfig test WPA2_PKS 12345678 Invalid encryption mode: WPA2_PKS. See help. blackblade > apconfig test WPA2_PSK 12345678 blackblade > apconfig SSID: test AUTH 3 BSSID: 1a:fe:34:98:dc:9e blackblade >
Собственно, пока хитрый план таков:
- Понять как все же размечена SPI флешка. Блобы где-то на нее пишут некоторую конфигурацию, кривая конфигурация при поднятии интерфейса может нас уронить в exception. Очень раздражает
- Найти как заставить DHCP клиент передавать имя хоста. Настраивать имя хоста руками очень лениво
- DHCP сервер для AP режима. Код в SDK, надо только причесать
- Команды для работы с сетью. Для начала ping, потом все остальное.
- Мост с TCP на UART
- Сетевая консоль с ssl и авторизацией
- Рефакторинг…
- …
- PROFIT
Сделано, сеть можно уже послушать командой listen
Если есть желание помочь — хватаем код на github’е и кидаем мне письмо, разъясню как настраивать систему для разработки, и что и где надо делать.
Поправочка: Добавил последние куски, нужные для того, чтобы взлетела сеть, и сделал команду listen которая будет слушать трафик на нужном порту. Вот только остановить эту штуку стандартным API как-то не получается, се ля ви. Мост с усб на уарт и сетевая консолька на очереди.