ESP8266: Привет, Франкенштейн

Так как я наконец-то запилил самодельные отладочные платки , самое время начать веселье.
Заправившись под завязку кофеином я занырнул в 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 2014 
This 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 > 

Собственно, пока хитрый план таков:

  1. Понять как все же размечена SPI флешка. Блобы где-то на нее пишут некоторую конфигурацию, кривая конфигурация при поднятии интерфейса может нас уронить в exception. Очень раздражает
  2. Сделано

  3. Найти как заставить DHCP клиент передавать имя хоста. Настраивать имя хоста руками очень лениво
  4. DHCP сервер для AP режима. Код в SDK, надо только причесать
  5. Команды для работы с сетью. Для начала ping, потом все остальное.
  6. Сделано, сеть можно уже послушать командой listen

  7. Мост с TCP на UART
  8. Сетевая консоль с ssl и авторизацией
  9. Рефакторинг…
  10. PROFIT

Если есть желание помочь – хватаем код на github’е и кидаем мне письмо, разъясню как настраивать систему для разработки, и что и где надо делать.

Поправочка: Добавил последние куски, нужные для того, чтобы взлетела сеть, и сделал команду listen которая будет слушать трафик на нужном порту. Вот только остановить эту штуку стандартным API как-то не получается, се ля ви. Мост с усб на уарт и сетевая консолька на очереди.

Добавить комментарий