Дмитрий DarkByte Москин

Мой блог, да.
logo

Первое знакомство с новым ESP32 (ESP31B)

Опубликовано 06.01.2016 автором Дмитрий Москин
Компания Espressif не перестаёт радовать энтузиастов. Пару лет назад они выпустили шикарный чип с маркировкой ESP8266, и тогда это был прорыв, ведь всего за пару баксов в рознице можно было купить готовый модуль с данным чипом вместе с флешкой на 1мб. И если до этого кому-нибудь нужно было добавить к ардуине возможность общаться с внешним миром через WiFi, то приходилось покупать модули ценой от $15 и функционалом уровня UART-WiFI моста, то теперь в большинстве случаев отпала необходимость в самой ардуине (читать - микроконтроллере). Ведь ESP8266 представлял из себя систему-на-чипе с интегрированным радио-модулем, поддерживающим работу с WiFi b/g/n. Кроме того, что модуль мог подключаться к точкам доступа, он и сам мог работать в режиме точки доступа, что в теории позволяло создать mesh сеть из данных модулей.




Кроме возможности работы с WiFi данный чип предоставлял 13 GPIO выводов с аппаратной поддержкой SDIO, SPI, I2C, UART, PWM, плюс одноканальный АЦП. А так же поддерживал режим сна с потреблением до 1мА в режиме поддержания связи с точной доступа (не передачи данных, а поддержание канала связи для возможности пробуждения и отправки данных менее, чем за 22мс) и 60мкА в режиме глубокого сна с пробуждением по таймеру. Энтузиасты быстро портировали nodelua и ардуину под данный чип, китайцы не заставили долго ждать, и выпустили пачку различных план для встраиваемой автоматики с поддержкой данного модуля.

Но не обошлось и без минусов. По какой-то причине Espressif не дали разработчикам доступ к спецификациям и SDK самого чипа, вместо этого они написали свою обёртку над системными вызовами чипа, упаковали это в бинарные блобы с экспортированными функциями, которые и могли использовать разработчики. И всё было бы ничего, но данные блобы кишили ошибками, а по большей части экспортированных из них функций попросту не было документации и заголовочных файлов (для I2S, насколько я знаю, до сих пор нет). Но за такую цену энтузиасты не отчаивались, дизассемблировали блобы, восстанавливая по ним заголовочные файлы, патчили баги прямо в бинарных файлах. В общем было весело.

Но вот недавно Espressif анонсировали новую версию своего чипа - ESP32, на этот раз обещают два ядра, два гига, поддержку HT40 (ширина канала 40МГц, скорость до 144Мбит), поддержку Bluetooth 4.2 (BLE), размер оперативной памяти увеличили до 400Кб, в режиме глубокого сна появилась возможность использовать АЦП с триггером по пороговым значениям, как и раньше аппаратно поддерживаются I2C, I2S, UART, SPI, SDIO, PWM, так же появилась аппаратная поддержка AES и SSL, хотя обычно разработчики встраиваемых систем думают о безопасности в последнюю очередь. Так же количество GPIO увеличено до 35, из них 16 могут работать в режиме АЦП, два как ЦАП, остальные могут быть сконфигурированы для подключения периферии по перечисленным выше интерфейсам, ровно как использоваться в качестве ёмкостных датчиков прикосновения, или просто для моргания светодиодами. Более полную информацию о спецификациях нового чипа можно почитать на страничке Espressif ESP32 (ESP31B) Specifications.



Звучит круто, но есть нюанс. Когда анонсировали ESP8266, то тоже было много обещаний, но на деле оказалось, что большая часть функционала просто не тестировалась, что-то совсем не работает, а где-то нужно городить костыли. Тем ни менее это был крутой чип, хотя бы из-за цены. Цену на новый ESP32 пока что не сообщают, и на данный момент разосланы только 200 тестовых экземпляров, один из которых мы сейчас и запустим.



Тестовый экземпляр приходит в красивой фирменной коробочке, внутри которой антистатический пакет с самим модулем и отладочный платой-адаптером (ESP_Module_Testboard), для того, чтобы модуль можно было воткнуть в макетную плату. После запайки модуля и пинов проверяем визуально и тестером, что как минимум между радом расположенными на плате пинами нет короткого замыкания. После чего можно подавать питание на плату.



В ESP32 отсутствует отдельный пин Reset, вместо него для сброса можно использовать Enable. Пин Enable болтается в воздухе, поэтому если его никуда не подключить, то чип будет беспорядочно включаться и выключаться. При логической единице на данном пине чип включается, при логическом нуле выключается. Для тестового включения достаточно подключить питание (3.3В на 3V3, землю на GND) и подключить EN к VCC. К сожалению, на плате отсутствуют какие-либо статусные светодиоды, но если всё сделано правильно, то через несколько секунд должна появиться WiFi точка с именем ESP32_AP_94000000. Вывод в консоль будет примерно следующий:
 ets Jul  5 2015,rst cause:1, boot mode:(33)

_stack_sentry: 0x3fffe1d0, __stack: 0x40000000,
_bss_start: 0x3fffcd48, _bss_end: 0x3fffe1d0,
_data_start: 0x3fffc000, _data_end: 0x3fffc864
load 0x40040000, len 2912, room 16
tail 0
chksum 0x6e
load 0x3ffd8000, len 1424, room 8
tail 8
chksum 0x1a
load 0x3ffd8590, len 568, room 0
tail 8
chksum 0xf3
csum 0xf3

********************************
* hello espressif ESP32! *
* pro cpu 2nd boot is running! *
********************************

2nd boot version : 1.0
SPI Speed : 40MHz
SPI Mode : DIO
SPI Flash Size : 1MB

jump to run addr @ 0x40000

rc_cal: rc=44, wifi: 73, 73, 28, 28, bt: 98, 98
txcap: 15, 5, 3, 15, 6, 3, 15, 5, 3, 15, 5, 3,
vdd33=2328, -13; temp_code=120
0x5f, 0x120, 58
0x1f, 0x120, 1
tx_pwctrl:6, 11, 16, 22, 26, 37, -1, 12, 17, 23, 30, 40, -10, 13, 17, 27, 31, 40, -16, 5, 10, 18, 24, 34,
tx_backoff:1, 5, 10, 10,
txiq: 0, 36, 4, 0, -3
txiq: 1, 36, 4, 0, -1
txiq: 2, 4, 4, 0, -2
tx_gain: pa=0x1f, bbc=0x20, bbf=0x4
bt: pa=0x10, bb=0,40
11606945, rxiq: amp=6, pha=4
12032391, rxiq: amp=4, pha=5
11197885, rxiq: amp=4, pha=7
16308699, rxiq: amp=8, pha=3
14541077, rxiq: amp=6, pha=2
13258235, rxiq: amp=5, pha=3

phy, 20151218, 722
ht20 ,2412
pp_task_hdl : 3ffe4af4, prio:23, stack:512
tcpip_task_hdl : 3ffe54e4, prio:20,stack:512
frc2_timer_task_hdl:3ffe8f2c, prio:22, stack:512

ESP32 RTOS SDK: 1.0.0(0394de4) compiled @ Nov 20 2015 18:57:56
SDK version2015121218:1.0.0(0394de4)
[esp32_packet_softap_ssid,43]wifi mode:60 01 94 00 00 00
[esp32_packet_softap_ssid,47]packet ssid[ESP32_AP_94000000]
[esp32_udata_init,66]ok to run AP+STA mode


*****************************
Start app OK!
*****************************
mode : sta(60:01:94:00:00:00) + softAP(62:01:94:00:00:00)
add if0
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
add if1
ht20 ,2412
bcn 100
[smple_socket_demo_thread,42]*********
[smple_socket_demo_thread,42]*********


К сожалению, мне не известен пароль от данной точки, но в целом он и не нужен, ведь в следующей статье мы соберём свою прошивку и зальём её на флешку.