Arduino IDE: комфортная миграция с AVR на ESP32

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

если честно, то на AVR было тесновато всегда: 8-мь бит, скромная частота камня, объём флеша и оперативки были как бы достаточны, но не очень...

поэтому, да - переезжаю на ESP32 вместе со всем своим скромным барахлом кода.

возможно, когда-то на форуме образуется отдельный раздел по ESP32, а пока буду здесь писать заметки о граблях, неявных но важных местах, задавать вопросы, давать ответы.

 

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

официальный сайт производителя https://www.espressif.com/en/products/hardware/esp32/overview

github https://github.com/espressif

мегасборник ссылок на ресурсы о ESP32 http://esp32.net/

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

инсталляция.

https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md - установит программную поддержку зоопарка плат с ESP32.

https://github.com/me-no-dev/arduino-esp32fs-plugin - ручками установить плагин поддержки SPIFFS файловой системы.

здесь можно посмотреть пример реализации работы с SPIFFS - считывает бинарник биоса из файла в массив, сохраняет массив в бинарник, грузит бейсиковые проги из текстового файла в эмулируемый недокомп https://github.com/Klapautsiy/6502_EhBASIC_ESP32_Arduino

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

настройки Arduino IDE.

конфигурация ESP32 без радио-интерфейсов.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

Железка.

все грабли ниже применимы к такой плате.

Esp32s NodeMCU board

и, такому адаптору на CP2102

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Клапауций 003, я откуда помню (откуда именно - уже забыл), что по ней нет как такового даташита и вообще официальной документации. Это правда?

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

Ворота пишет:

Клапауций 003, я откуда помню (откуда именно - уже забыл), что по ней нет как такового даташита и вообще официальной документации. Это правда?

а, что есть? - тоже, не помню.

это не? https://www.espressif.com/en/support/download/documents

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Клапауций 003 пишет:

это не?

Спасибо!

Понятно, почему я помню, что нету. У самых полезных документов совсем свежие копирайты.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

Ворота, так это #7 то, что нужно или не совсем то?

*хотя, и меня гложут смутные сомнения, что китайцы украли у кого-то то, что должно было появиться на рынке намного позже, не по такой смешной цене и не всё в одном.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

кратко, что из себя представляет аппаратно.

микросборка с процессором, микросхемой флеша, интегрированной антенной, опционально запаяна на плату с обвесом стабилизатора напряжения 3.3V и парой светодиодов. 

фото с демонтированным экраном

330px-Espressif_ESP-WROOM-32_Wi-Fi_%26_B

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Клапауций 003 пишет:

*хотя, и меня гложут смутные сомнения, что китайцы украли у кого-то то, что должно было появиться на рынке намного позже, не по такой смешной цене и не всё в одном.

Скорее всего китайцы "украли" специалистов. Пора привыкнуть что китайцы это могут разрабатывать самостоятельно .

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

загрузчик.

представляет из себя комлекс, обеспечивающий не только прошивку, но и программную поддержку железа на низком уровне при работе в обычном режиме - прошивается производителем.

*на форумах народ иногда спорит - что там аппаратное, а что программное.

фьюзы.

так понял, что отсутсвуют или доступны исключительно производителю.

пин Reset(EN).

управляет контроллером питания  - выключает питание контроллера.

фактичекски ресетит, но нет - выключает.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

маленькие грабли №0

плата #4 не прошивается без удержания кнопки BOOT - вроде как должно прошиваться без неё, но тогда не понятно, зачем она(кнопка) нужна.

некритично.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

pinout.

подробности по ссылкам выше, но что бы не наступить на неявное и не посчитать это граблями, то нужно знать, что:

- пины GPIO34-39 работают исключительно в режиме input mode и к ним неприменимы функции pullup и pulldown, т.е. если очень нужна подтяжка этих пинов, то только внешним резистором.

- пины GPIO6-11 зарезервированы для обслуживания флеш-микросхемы сборки, не смотря на то, что разведены на плату, использовать их не получится.

- пины GPIO1, 3 - это UART0, подключенный к CP2102, т.е. если программно используется UART0, то ничего сюда подключать не стоит или совсем не стоит. нужно пробовать.

- пин GPIO15 по умолчанию сконфигурирован как input mode pullup, замыкание его на землю отключает загрузочные сообщения в UART0.

так же радует такое:

pinMode(pin, INPUT_PULLDOWN);
pinMode(pin, INPUT_PULLUP);
 
из странного и явно ну очень метафорически китайского:
 
- ёмкостные сенсорные кнопки (10шт.) и даже программная приблуда есть на сайте производителя для их тонкой настройки. о_О
 
 
Клапауций 003
Offline
Зарегистрирован: 20.07.2019

как этот болезный собрался выяснять по схеме модуля, как будут себя вести неактивированные программно, но активные при загрузке/включении пины UART0 - дьяволу в его голове известно.

останутся они активными или нет, как на это среагирует CP2102 - переходят ли его пины в состояние Z.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Клапауций 003 пишет:

Ворота, так это #7 то, что нужно или не совсем то?

Да, спасибо. Там есть именно даташиты. А то я где-то читал, что мол "даже объём памяти известен лишь приблизительно" :)

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

Ворота пишет:

А то я где-то читал, что мол "даже объём памяти известен лишь приблизительно" :)

таки, не зря писали - только последний год доки начали публиковать.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

полезный хак.

если на плате Esp32s NodeMCU заменить LDO AMS1117 на AP7361C-33ER, то батарейное питание платы будет проще реализовать.

полная версия здесь https://blog.voneicken.com/2018/lp-wifi-esp32-boards/

Клапауций 003
Offline
Зарегистрирован: 20.07.2019
Sidorchuk
Offline
Зарегистрирован: 22.07.2016

Оч любопытно - что за проекты ваяет сумрачный украинский гений в которых мощи авр-ок не хватает? Тоже хочу что-нибудь слепить, но не знаю что(

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

Sidorchuk пишет:
Оч любопытно - что за проекты ваяет сумрачный украинский гений в которых мощи авр-ок не хватает?

всё тоже самое, но быстрей, с радио-фейсами и файловой системой на борту.

Sidorchuk пишет:
Тоже хочу что-нибудь слепить, но не знаю что(

https://www.google.com/search?q=esp32

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

как пример - класс титановый велосипед для тактовой кнопки.

таки, да - сотня кнопок на той же атмега328 отъедает практически всю оперативку и сей факт рвёт на клочки эмбеддера и ещё одного.

попытки объяснить, что это всё может прекрасно жить на отдельном контроллере клавиатуры, вызывают вопли: а, как же отсальная программа?!

ну, аппаратно как-то так https://m5stack.com/collections/m5-unit/products/cardkb-mini-keyboard

CARDKB_1200x1200.jpg?v=1560395718

 

Logik
Offline
Зарегистрирован: 05.08.2014

Как жеж его торкнуло! Аж на другой контролер убежал. На что токо люди не пойдут лиш бы головой не думать! :)

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

Logik пишет:

Как жеж его торкнуло! Аж на другой контролер убежал. На что токо люди не пойдут лиш бы головой не думать! :)

эмбедера выпилили из темы - желаешь за ним следом последовать, думатель головой?

крокодил
Offline
Зарегистрирован: 05.09.2019

Ребята ни кто не сталкивался с проблемой адресных светодиодов WS8212 и ESP32.

Все работает пока не использую Wi-Fi. Только включаю wi-fi. Светодиоды начинают мерцать.

В чем дела?

 

b707
Offline
Зарегистрирован: 26.05.2017

С ЕСП32 не работал, могу только предположить.

Адрессные светодиоды очень нагружают процессор и чувствительны к точным длинам импульсов управления. Если во время работы с диодами запущен Вай-Фай - процессор не будет успевать отрабатывать импульсы на диоды и они будут мерцать.

Logik
Offline
Зарегистрирован: 05.08.2014

Если бы про ESP8266 такое писалос, то я бы согласился с b707 , но у ESP32 вроде как 2 ядра обещано. Одно для Wi-Fi, а другое для пользовательского кода. И такого быть не должно. Может питание от Wi-Fi проседает? Как светодиоды мерцают? Только яркость проседает или сбивается отображение?

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

ESP32 BLE Keyboard https://github.com/T-vK/ESP32-BLE-Keyboard

думал, что придётся повозиться, что бы взлетело, но "нет" - с полпинка.


#include <Button.h>
#include <BleKeyboard.h>

Button button;

BleKeyboard bleKeyboard;


void setup() {

pinMode( 2, OUTPUT);
digitalWrite( 2, 0);

Serial.begin(115200);

//===================================
button.NO(); // N.O. Normal Open
button.pullUp();
button.duration_bounce       (  50);
button.duration_click_Db     ( 250);
button.duration_inactivity_Up(5000);
button.duration_inactivity_Dn(1000);
button.duration_press        ( 500);
button.button( 0);
//===================================

bleKeyboard.begin();

}

void loop() {

button.read();

if(bleKeyboard.isConnected() == 1) digitalWrite( 2, 1); else digitalWrite( 2, 0);

if(bleKeyboard.isConnected() == 1 && button.event_click_Dn(0) == 1) {

bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);
Serial.println("KEY_MEDIA_PLAY_PAUSE");

}

}

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Давно присматриваюсь к есп32, но пока активно работаю с 8266.

Ограничивает начало экспериментов отсутствие (имхо) ряда библиотек. в частности интересуют:

I2c для дисплея и матричной клавы, i2c для чипов реального времени, i2c для памяти eeprom и fram, wire и ds18b20,  webserver и webclient, ntp.

По крайней мере не нашел, в тч и описания, что есть что то работающее.

может быть использующие поделятся ссылками на проверенную коллекцию библиотек для ESP32?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

ds18b20, webserver и webclient, ntp. Точно все работает, остальное я думаю вы плохо искали примеры.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

inspiritus пишет:

...и матричной клавы.

таки, да  - библиотеки матричной клавы в ESP32 очень не хватает.

кушать не могу - хочу матричную клаву подключить к ESP.

О_о

а, тут #21 о чём я писал?

о матричной клаве на ESP32? - враги лгут! это не матричная клава и не ESP, а m5stack

inspiritus
Offline
Зарегистрирован: 17.12.2012

Конечно же о матричной клавиатуре на 328 камне пишите Вы, только я ведь спрашивал о матричной клаве через i2c, извините не конкретизировал, через расширитель PCF8574.

однако клава на 328 тоже не может не вызвать интереса, по какому интерфейсу она опрашивается, используются ли прерывания?

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

inspiritus пишет:

по какому интерфейсу она опрашивается, используются ли прерывания?

фиг его знает, по какому интерфейсу и нафига human interface device прерывания?

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

пока рою блютузную клаву, страждующие библиотек на ESP32 могут позалипать тут https://m5stack.com/

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

заказал джойстики,  хочу прикрутить к World War Heroes Arduino через ESP32, ну никак не привыкну к сенсорному управлению.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019
ок. вроде всё работает адекватно.
 
простой, но практичный проект на один вечер - блютузный пульт для плеера на смартфоне.
 
четыре кнопки:
KEY_MEDIA_PLAY_PAUSE
KEY_MEDIA_MUTE
KEY_MEDIA_VOLUME_UP
KEY_MEDIA_VOLUME_DOWN
 
если мало кнопок, то именования доступных кнопок/символов смотрим в файле BleKeyboard.h библиотеки.
 
как это работает:
- подключаем кнопки.
- прошиваем.
- подключаем питание.
- на смартфоне включаем блютуз-модуль, из списка обнаруженных устройств выбираем ESP32 BLE Keyboard.
- всё. жмём кнопки.
 
!внимательно: если после сопряжения клавы и смартфона дёргать питание ESP32, то связь ломается - нужно: сначала подключать питание ESP32, затем блютуз на смартфоне.
если, таки, сломалось, то выкл./вкл. блютуз на смартфоне.
 
*пробуем, тестируем, докладываем о результатах...
 
 

#include <Button.h>
#include <BleKeyboard.h>

Button button;

BleKeyboard bleKeyboard;


void setup() {

pinMode( 2, OUTPUT); // синий LED на борту платы Esp32s NodeMCU
digitalWrite( 2, 0);

//==================================================================
button.NO();
button.pullUp();
button.duration_bounce( 50);
button.button( 0, 27, 14, 12); // кнопки на GND и GPIO 0, 27, 14, 12
//==================================================================

bleKeyboard.begin();

}

void loop() {

if (bleKeyboard.isConnected() == 1) {
    button.read();
if (button.event_click_Dn(0) == 1) bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);
if (button.event_click_Dn(1) == 1) bleKeyboard.write(KEY_MEDIA_MUTE);
if (button.event_click_Dn(2) == 1) bleKeyboard.write(KEY_MEDIA_VOLUME_UP);
if (button.event_click_Dn(3) == 1) bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN);
       digitalWrite( 2, 1); // клава подключена.
} else digitalWrite( 2, 0); // клава отключена.

}

 

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

забыл. вдогонку к пердыдущему посту:

плата настроена так:

Arduino IDE 1.8.8

ядро ESP32 в менеджере плат 1.0.4

телепон с залипаниями(привет 4PDA): Samsung Galaxy M20, Android 9.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

люблю такое в технической документации:

китайский брат пишет:

The design of a touch sensor system requires the pursuit of craftsmanship.

Конструкция сенсорной системы требует стремления к мастерству.

https://github.com/espressif/esp-iot-solution/blob/master/documents/touch_pad_solution/touch_sensor_design_en.md

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

так понимаю, что цветную часть картинко рисовал инженер, а потом пришёл на всю голову заземлённый гуманитарий и пририсовал палец - очевидно же, что все люди ходят по земле, а земля - это что? правильно: земля у гуманитариев - это GND у инженеров.

поэтому, да - перед использованием тач-кнопки, всем купить полтора метра медной шины и вбить в сырую землю рядом с собой урановый лом. шину прикрутить к лому - иначе, тач-кнопка не будет работать.

https://github.com/espressif/esp-iot-solution/blob/master/documents/touch_pad_solution/touch_sensor_design_en.md

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

походу, это какой-то вирусняк сенсорной кнопки с заземлённым пальцем.

кто-то старался рекомендации по разводке плат писал, что бы работало, но в пень это всё, если достаточно один конец провода на корпус, а второй - в зубах зажать... и юзай тач.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

думал, это у меня глюки:

Цитата:

Примечание. На момент написания данного руководства в IDE Arduino возникла проблема с назначением сенсорных контактов. GPIO 33 заменяется на GPIO 32 в назначении. Это означает, что если вы хотите обратиться к GPIO 32, вы должны использовать T8 в коде. Если вы хотите обратиться к GPIO33, вы должны использовать T9.

https://randomnerdtutorials.com/esp32-touch-pins-arduino-ide/

 

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

продолжение проекта #35

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

получилось в стиле "конторский служащий за рабочим столом слушает вражескую музыку на Ёптафоне".

пока не захотелось лечь на диванчик и там продолжить разлагаться под мощным потоком империалистической пропаганды насилия и русофобии.

поэтому - "да": дублируем аппаратные кнопки, валяющимся без дела IR-пультом.

код:


/*BLE клавиатура с кнопочным и IR интерфейсами управления*/

/*https://github.com/Klapautsiy/titanium-bicycle-for-button/archive/BUTTON-v14.1.zip*/
#include <Button.h>

Button button;

/*https://github.com/T-vK/ESP32-BLE-Keyboard/releases/download/0.1.0/ESP32-BLE-Keyboard.zip*/
#include <BleKeyboard.h>

BleKeyboard bleKeyboard;

/*https://github.com/crankyoldgit/IRremoteESP8266/archive/v2.7.0.zip*/
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

IRrecv irrecv(36); // TSOP 1736 на GPIO 36

decode_results results;

void setup() {

pinMode( 2, OUTPUT); // синий LED на борту платы Esp32s NodeMCU
digitalWrite( 2, 0);
pinMode( 4, OUTPUT); // подключенный к GPIO 4 LED
digitalWrite( 4, 0);

Serial.begin(115200);
Serial.println("Serial OK!");

//====================================================================================
button.NO();
button.pullUp();
button.duration_bounce( 50);
button.button(13, 12, 14, 27, 33, 32); // кнопки на GND и GPIO 13, 12, 14, 27, 33, 32
//====================================================================================

bleKeyboard.begin();

irrecv.enableIRIn(); // Start the receiver

}

uint64_t ir = 0xFFFFFFFFFFFFFFFF;

void loop() {

if (bleKeyboard.isConnected() == 1) {digitalWrite( 2, 1); // клава подключена к android

    button.read();
if (button.event_click_Dn(0) == 1) bleKeyboard.write(KEY_MEDIA_MUTE);
if (button.event_click_Dn(1) == 1) bleKeyboard.write(KEY_MEDIA_VOLUME_UP);
if (button.event_click_Dn(2) == 1) bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN);
if (button.event_click_Dn(3) == 1) bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);
if (button.event_click_Dn(4) == 1) bleKeyboard.write(KEY_MEDIA_NEXT_TRACK);
if (button.event_click_Dn(5) == 1) bleKeyboard.write(KEY_MEDIA_PREVIOUS_TRACK);

if (irrecv.decode(&results)) {digitalWrite( 4, 1); // получен код IR

uint64_t ir_ = results.value;

if (ir != ir_) {ir = ir_;
switch(ir) {// пульт типа RC-6(с двойными, чередующимися кодами кнопок)
case 0x0000000000000530: case 0x0000000000000D30: bleKeyboard.write(KEY_MEDIA_MUTE); break;
case 0x0000000000000410: case 0x0000000000000C10: bleKeyboard.write(KEY_MEDIA_VOLUME_UP); break;
case 0x0000000000000411: case 0x0000000000000C11: bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN); break;
case 0x0000000000000535: case 0x0000000000000D35: bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE); break;
case 0x0000000000000520: case 0x0000000000000D20: bleKeyboard.write(KEY_MEDIA_NEXT_TRACK); break;
case 0x0000000000000521: case 0x0000000000000D21: bleKeyboard.write(KEY_MEDIA_PREVIOUS_TRACK); break;
}
}

irrecv.resume();  // Receive the next value

// печатать в сериал принятый код в HEX формате
serialPrintUint64(ir, HEX);
Serial.println("");

} else digitalWrite( 4, 0); // не получен код IR

} else digitalWrite( 2, 0); // клава отключена от android

}

!аппаратные заметки:

- приёмник типа TSOP 1736 для стабильной работы рекомендуется питать 5.0V через резистор 100 Om, фильтровать по питанию керамикой и танталлом.

- пульт типа RC-6 c двойными, чередующимися кодами кнопок. актуальные коды кнопок можно увидеть в мониторе сериала, прошив скетч выше и, затем забив подсмотренные коды в текст кода.

Maka
Offline
Зарегистрирован: 24.10.2015

Note: ADC2 pins cannot be used when Wi-Fi is used. So, if you’re using Wi-Fi and you’re having trouble getting the value from an ADC2 GPIO, you may consider using an ADC1 GPIO instead, that should solve your problem.

 
 
Я понял что пины, относящиеся к  ADC2 не работают вместе с WIFI. Только непонятно, не работают как аналоговые входы или вообще? То есть analogRead() точно нельзя. А digitalRead() или analogWrite() можно? 
 
 
Клапауций 003
Offline
Зарегистрирован: 20.07.2019

я запретил.