ESP — различия между версиями

Материал из CADR
Перейти к: навигация, поиск
(Загрузка прошивки)
 
(не показано 16 промежуточных версий 2 участников)
Строка 1: Строка 1:
 +
= Общая информация =
 +
* [http://www.esploradores.com/wp-content/uploads/2018/04/A-Beginners-Guide-to-the-ESP8266-1.pdf A Beginner's Guide to the ESP8266]
 +
 +
= ESP8266 =
 +
Инструкция подготовлена Владимиром Слугиным на базе описания следующего видео: https://www.youtube.com/watch?v=64_9O9sKuqM
 +
 +
== Настройка IDE ==
 +
# Установить IDE (http://www.arduino.cc/en/Main/Software)
 +
# Запустить [[может использовать::Arduino IDE]], далее Файл – Настройки – в поле Additional Boards Manager URLs вставить ссылку http://arduino.esp8266.com/package_es...
 +
# Инструменты – Плата – Boards Manager
 +
# В Boards Manager найти и установить (около 130 мб) [[маркировка::ESP8266]] by ESP8266 Community Forum
 +
# В меню Инструменты выбрать Плата – Generic ESP8266. При необходимости установить: частота - 80MHz, скорость записи - 9600, Flash Size - 512K.
 +
 +
== Схема подключения к компьютеру ==
 +
использован USB-UART (UART - ESP8266):
 +
* GND - GND
 +
* RxD - TxD
 +
* TxD - RxD
 +
* 3.3v (!!) - Vcc + (через резистор 10-20К) CH_PD
 +
 +
== Скетч для записи в esp8266 ==
 +
# В Arduino IDE Файл – Образцы – ESP8266WebServer – HelloServer
 +
# В файле указать ssid (название) точки доступа WiFi (const char* ssid = "....";) и пароль (const char* password = "....";)
 +
 +
== Запись в esp8266 ==
 +
# Соединить GND (UART) с gpio0 (esp)
 +
# Подключить UART к компьютеру
 +
# Разомкнуть GND и gpio0
 +
# Нажать кнопку Вгрузить в Arduino IDE
 +
# После завершения загрузки переподключить UART (вместе с esp)
 +
 +
== Подключение к веб серверу esp8266 ==
 +
# Подключится к точке доступа esp (у меня называется ESPap)
 +
# Ввести ip адрес (192.168.4.1) в поисковой строке браузера
 +
 
= ESP-32S =
 
= ESP-32S =
 +
 
== Описание ==
 
== Описание ==
 +
* Pinout: https://www.14core.com/wp-content/uploads/2017/04/ESP32-Pinout-DIagram.jpg
 +
* Описание CPU: http://ip.cadence.com/uploads/533/Cadence_Tensillica_Xtensa_LX6_ds-pdf
 +
 
== Получение toolchain'а ==
 
== Получение toolchain'а ==
 +
<pre>
 +
$ cd /path/to/arduino/
 +
$ mkdir -p hardware/espressif
 +
$ cd hardware/espressif
 +
$ git clone https://github.com/espressif/arduino-esp32.git esp32
 +
$ cd esp32/tools/
 +
$ python get.py
 +
</pre>
 +
 
== Сборка проекта ==
 
== Сборка проекта ==
 
Для сборки необходимо выполнить следующую команду:
 
Для сборки необходимо выполнить следующую команду:
<code>
+
<pre>
 
./build.py /path/to/sketch/
 
./build.py /path/to/sketch/
</code>
+
</pre>
  
Собранный проект будет в подкаталоге в '/tmp'.
+
Собранный проект будет в подкаталоге в <code>/tmp</code>.
  
  
Строка 26: Строка 74:
 
$ eselect python set 1
 
$ eselect python set 1
 
</pre>
 
</pre>
 +
==== warning: no return statement in function returning non-void ====
 +
Проблема возникает при использовании библиотеки [https://github.com/squix78/esp8266-oled-ssd1306 esp8266-oled-ssd1306].
 +
 +
===== Симптомы =====
 +
 +
<pre>
 +
In file included from /home/avp/sketchbook/libraries/ESP8266_Oled_Driver_for_SSD1306_display/SSD1306Wire.h:31:0,
 +
                from /home/avp/sketchbook/libraries/ESP8266_Oled_Driver_for_SSD1306_display/SSD1306.h:30,
 +
                from /tmp/arduino_8d8be8ad7edc7c39c779408e245d8629/SSD1306ClockDemo.ino:32:
 +
/home/avp/sketchbook/libraries/ESP8266_Oled_Driver_for_SSD1306_display/OLEDDisplay.h: In member function 'virtual bool OLEDDisplay::connect()':
 +
/home/avp/sketchbook/libraries/ESP8266_Oled_Driver_for_SSD1306_display/OLEDDisplay.h:253:29: warning: no return statement in function returning non-void [-Wreturn-type]
 +
    virtual bool connect() {};
 +
</pre>
 +
 +
===== Решение =====
 +
Поменять файл <code>platform.txt</code> в каталоге с проектом, выключив сигнализацию ошибок для некоторых предупреждений:
 +
 +
<pre>
 +
diff --git a/platform.txt b/platform.txt
 +
index 3a8b30b..370b1df 100644
 +
--- a/platform.txt
 +
+++ b/platform.txt
 +
@@ -27,7 +27,7 @@ compiler.c.cmd=xtensa-esp32-elf-gcc
 +
compiler.c.flags=-std=gnu99 -Os -g3 -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib -Wpointer-arith {compiler.warning_flags} -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -Wno-old-style-declaration -MMD -c
 +
 +
compiler.cpp.cmd=xtensa-esp32-elf-g++
 +
-compiler.cpp.flags=-std=gnu++11 -fno-exceptions -fno-rtti -Os -g3 -Wpointer-arith -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib {compiler.warning_flags} -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -fno-rtti -MMD -c
 +
+compiler.cpp.flags=-std=gnu++11 -fno-exceptions -fno-rtti -Os -g3 -Wpointer-arith -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib {compiler.warning_flags} -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -fno-rtti -MMD -Wno-error=return-type -Wno-error=switch -Wno-error=maybe-uninitialized -c
 +
 +
compiler.S.cmd=xtensa-esp32-elf-gcc
 +
compiler.S.flags=-c -g3 -x assembler-with-cpp -MMD -mlongcalls
 +
</pre>
 +
 
== Загрузка прошивки ==
 
== Загрузка прошивки ==
 
Из Arduino IDE загрузку следует выполнять на скорости 115200.
 
Из Arduino IDE загрузку следует выполнять на скорости 115200.
Строка 31: Строка 112:
 
После загрузки нужно перезагрузить МК -- можно через кнопку, если таковая есть на плате.
 
После загрузки нужно перезагрузить МК -- можно через кнопку, если таковая есть на плате.
  
=== Troubleshooting ===
+
== Bluetooth ==
==== Прошивка загрузилась, но не работает ====
+
* [https://github.com/espressif/esp-idf/tree/master/examples/bluetooth Примеры программ]
 +
* https://hackaday.io/project/28904-read-phone-notifications-using-esp
 +
 
 +
== Troubleshooting ==
 +
=== Прошивка загрузилась, но не работает ===
 
В этом случае следует перезагрузить МК.
 
В этом случае следует перезагрузить МК.
 +
 +
=== Brownout detector was triggered ===
 +
==== Симптомы ====
 +
При работе с Bluetooth система выдаёт в последовательный порт следующее сообщение:
 +
<code><pre>
 +
ets Jun  8 2016 00:22:57
 +
 +
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
 +
configsip: 0, SPIWP:0xee
 +
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
 +
mode:DIO, clock div:1
 +
load:0x3fff0018,len:4
 +
load:0x3fff001c,len:956
 +
load:0x40078000,len:0
 +
load:0x40078000,len:13076
 +
entry 0x40078ad0
 +
Starting BLE wor0k!
 +
 +
Brownout detector was triggered
 +
</pre></code>
 +
 +
==== Причина ====
 +
Использование BLE приводит к повышению энергопотребления.  Если источник питания не может обеспечить необходимое напряжение, то при падении напряжения до заданного минимума срабатывает "brownout detector" и микроконтроллер автоматически перезагружается.  Это сделано для того, чтобы МК не находился в промежуточном состоянии "вроде работает, а вроде и нет", так как в этом случае возможны случайные сбои в его работе, которые могут привести к выходу МК из строя.<ref name="brownout-detector">https://electronics.stackexchange.com/questions/37561/what-is-a-brownout-condition</ref>
 +
 +
==== Решение ====
 +
Заменить USB-провод подключения на более качественный, или использовать более мощный БП для запитки МК.
 +
 +
=== Watchdog reset ===
 +
==== Симптомы ====
 +
На монитор приходят сообщения, похожие на
 +
<code><pre>
 +
Exception (0):
 +
epc1=0x4021372a epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
 +
 +
>>>stack>>>
 +
 +
ctx: sys
 +
sp: 3fffed10 end: 3fffffb0 offset: 01a0
 +
3fffeeb0:  00000000 402132ac 0000004c 40100808 
 +
3fffeec0:  9b0110ac e50110ac 3fffef30 402132ac 
 +
3fffeed0:  3ffef15a 3ffef134 00000002 3ffed5b0 
 +
3fffeee0:  3ffee434 000000f8 000000f8 401005b8 
 +
3fffeef0:  3fffdc80 3ffeee5c 3ffef11c 3ffeeea4 
 +
3fffef00:  00000608 3ffee84c 3ffef134 4020aa8c 
 +
3fffef10:  3fffdc80 3ffeee5c 3ffef11c 4020a8a7 
 +
3fffef20:  402298f6 3ffeee5c 3ffef11c 40229907 
 +
3fffef30:  3ffef144 3ffef134 00000000 3fffdcb0 
 +
3fffef40:  3ffedca8 00000000 3ffef11c 4022b573 
 +
3fffef50:  40000f49 3fffdab0 3fffdab0 40000f49 
 +
3fffef60:  40000e19 40001878 00000004 00000000 
 +
3fffef70:  3fffff10 aa55aa55 00000000 401047dc 
 +
3fffef80:  401047e2 00000004 00000000 00000000 
 +
3fffef90:  4010000d 40102f8e 00040000 b302b935 
 +
3fffefa0:  40100a94 3fffef3c 40100a41 3fffff68 
 +
3fffefb0:  3fffffc0 00000000 00000000 feefeffe 
 +
3fffefc0:  feefeffe feefeffe feefeffe feefeffe
 +
...
 +
 +
 +
<<<stack<<<
 +
 +
ets Jan  8 2013,rst cause:4, boot mode:(3,6)
 +
 +
wdt reset
 +
load 0x4010f000, len 1384, room 16
 +
tail 8
 +
chksum 0x2d
 +
csum 0x2d
 +
v951aeffa
 +
~ld
 +
</pre></code>
 +
 +
 +
==== Причина ====
 +
Сторожевой таймер может срабатывать из-за недостаточного уровня питания, либо реже - утечки памяти.
 +
Команды в духе ESP.wdtDisable(); ESP.wdtFeed(); не помогут. Вочдог находится на какой-то внещней схеме.<ref name="wstresetreasons">https://github.com/esp8266/Arduino/issues/3535</ref> yield(); автору тоже не помог.
 +
 +
 +
==== Решение ====
 +
 +
Можно попрыгать вокруг вашего устройства с бубном. По крайней мере, этот метод не применялся. А можете разобраться, как работает Arduino ESP8266/ESP32 Exception Stack Trace Decoder.
 +
 +
= Общая информация =
 +
== Подключение оборудования ==
 +
* http://www.esp8266learning.com/wemos-oled-shield-example.php
 +
* http://arduino-project.net/oled-l2c-arduino-uno/
 +
 +
= [[маркировка::ESP8285]] + WiFi Repeater =
 +
<code><pre>
 +
$ apt install esptool
 +
$ cd $ESP_REPEATER_SOURCE_PATH/firmware
 +
$ esptool --port /dev/ttyUSB0 write_flash -fs 1MB -fm dout 0x00000 0x00000.bin 0x02000 0x02000.bin
 +
</pre></code>
 +
 +
https://gustavovelascoh.wordpress.com/2017/11/07/how-to-set-a-wifi-repeater-using-an-esp8285/
 +
 +
= Ссылки =
 +
<references/>
 +
 +
[[Категория:База знаний]]

Текущая версия на 22:00, 28 августа 2021

Общая информация

ESP8266

Инструкция подготовлена Владимиром Слугиным на базе описания следующего видео: https://www.youtube.com/watch?v=64_9O9sKuqM

Настройка IDE

  1. Установить IDE (http://www.arduino.cc/en/Main/Software)
  2. Запустить Arduino IDE, далее Файл – Настройки – в поле Additional Boards Manager URLs вставить ссылку http://arduino.esp8266.com/package_es...
  3. Инструменты – Плата – Boards Manager
  4. В Boards Manager найти и установить (около 130 мб) ESP8266 by ESP8266 Community Forum
  5. В меню Инструменты выбрать Плата – Generic ESP8266. При необходимости установить: частота - 80MHz, скорость записи - 9600, Flash Size - 512K.

Схема подключения к компьютеру

использован USB-UART (UART - ESP8266):

  • GND - GND
  • RxD - TxD
  • TxD - RxD
  • 3.3v (!!) - Vcc + (через резистор 10-20К) CH_PD

Скетч для записи в esp8266

  1. В Arduino IDE Файл – Образцы – ESP8266WebServer – HelloServer
  2. В файле указать ssid (название) точки доступа WiFi (const char* ssid = "....";) и пароль (const char* password = "....";)

Запись в esp8266

  1. Соединить GND (UART) с gpio0 (esp)
  2. Подключить UART к компьютеру
  3. Разомкнуть GND и gpio0
  4. Нажать кнопку Вгрузить в Arduino IDE
  5. После завершения загрузки переподключить UART (вместе с esp)

Подключение к веб серверу esp8266

  1. Подключится к точке доступа esp (у меня называется ESPap)
  2. Ввести ip адрес (192.168.4.1) в поисковой строке браузера

ESP-32S

Описание

Получение toolchain'а

$ cd /path/to/arduino/
$ mkdir -p hardware/espressif
$ cd hardware/espressif
$ git clone https://github.com/espressif/arduino-esp32.git esp32
$ cd esp32/tools/
$ python get.py

Сборка проекта

Для сборки необходимо выполнить следующую команду:

./build.py /path/to/sketch/

Собранный проект будет в подкаталоге в /tmp.


Troubleshooting

TypeError: unorderable types: PartitionDefinition PartitionDefinition

На данный момент (2017-06-28) для работы утилит из toolchain'а необходим Python 2:

 https://github.com/espressif/esp-idf-template/issues/3

На Gentoo GNU/Linux проблема решается на переключение на нужную версию Python:

$ eselect python list
Available Python interpreters:
  [1]   python2.7
  [2]   python3.3
  [3]   python3.4 *
$ eselect python set 1

warning: no return statement in function returning non-void

Проблема возникает при использовании библиотеки esp8266-oled-ssd1306.

Симптомы
In file included from /home/avp/sketchbook/libraries/ESP8266_Oled_Driver_for_SSD1306_display/SSD1306Wire.h:31:0,
                 from /home/avp/sketchbook/libraries/ESP8266_Oled_Driver_for_SSD1306_display/SSD1306.h:30,
                 from /tmp/arduino_8d8be8ad7edc7c39c779408e245d8629/SSD1306ClockDemo.ino:32:
/home/avp/sketchbook/libraries/ESP8266_Oled_Driver_for_SSD1306_display/OLEDDisplay.h: In member function 'virtual bool OLEDDisplay::connect()':
/home/avp/sketchbook/libraries/ESP8266_Oled_Driver_for_SSD1306_display/OLEDDisplay.h:253:29: warning: no return statement in function returning non-void [-Wreturn-type]
     virtual bool connect() {};
Решение

Поменять файл platform.txt в каталоге с проектом, выключив сигнализацию ошибок для некоторых предупреждений:

diff --git a/platform.txt b/platform.txt
index 3a8b30b..370b1df 100644
--- a/platform.txt
+++ b/platform.txt
@@ -27,7 +27,7 @@ compiler.c.cmd=xtensa-esp32-elf-gcc
 compiler.c.flags=-std=gnu99 -Os -g3 -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib -Wpointer-arith {compiler.warning_flags} -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -Wno-old-style-declaration -MMD -c
 
 compiler.cpp.cmd=xtensa-esp32-elf-g++
-compiler.cpp.flags=-std=gnu++11 -fno-exceptions -fno-rtti -Os -g3 -Wpointer-arith -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib {compiler.warning_flags} -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -fno-rtti -MMD -c
+compiler.cpp.flags=-std=gnu++11 -fno-exceptions -fno-rtti -Os -g3 -Wpointer-arith -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib {compiler.warning_flags} -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -fno-rtti -MMD -Wno-error=return-type -Wno-error=switch -Wno-error=maybe-uninitialized -c
 
 compiler.S.cmd=xtensa-esp32-elf-gcc
 compiler.S.flags=-c -g3 -x assembler-with-cpp -MMD -mlongcalls

Загрузка прошивки

Из Arduino IDE загрузку следует выполнять на скорости 115200.

После загрузки нужно перезагрузить МК -- можно через кнопку, если таковая есть на плате.

Bluetooth

Troubleshooting

Прошивка загрузилась, но не работает

В этом случае следует перезагрузить МК.

Brownout detector was triggered

Симптомы

При работе с Bluetooth система выдаёт в последовательный порт следующее сообщение:

ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:956
load:0x40078000,len:0
load:0x40078000,len:13076
entry 0x40078ad0
Starting BLE wor0k!

Brownout detector was triggered

Причина

Использование BLE приводит к повышению энергопотребления. Если источник питания не может обеспечить необходимое напряжение, то при падении напряжения до заданного минимума срабатывает "brownout detector" и микроконтроллер автоматически перезагружается. Это сделано для того, чтобы МК не находился в промежуточном состоянии "вроде работает, а вроде и нет", так как в этом случае возможны случайные сбои в его работе, которые могут привести к выходу МК из строя.[1]

Решение

Заменить USB-провод подключения на более качественный, или использовать более мощный БП для запитки МК.

Watchdog reset

Симптомы

На монитор приходят сообщения, похожие на

Exception (0):
epc1=0x4021372a epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

>>>stack>>>

ctx: sys
sp: 3fffed10 end: 3fffffb0 offset: 01a0
3fffeeb0:  00000000 402132ac 0000004c 40100808  
3fffeec0:  9b0110ac e50110ac 3fffef30 402132ac  
3fffeed0:  3ffef15a 3ffef134 00000002 3ffed5b0  
3fffeee0:  3ffee434 000000f8 000000f8 401005b8  
3fffeef0:  3fffdc80 3ffeee5c 3ffef11c 3ffeeea4  
3fffef00:  00000608 3ffee84c 3ffef134 4020aa8c  
3fffef10:  3fffdc80 3ffeee5c 3ffef11c 4020a8a7  
3fffef20:  402298f6 3ffeee5c 3ffef11c 40229907  
3fffef30:  3ffef144 3ffef134 00000000 3fffdcb0  
3fffef40:  3ffedca8 00000000 3ffef11c 4022b573  
3fffef50:  40000f49 3fffdab0 3fffdab0 40000f49  
3fffef60:  40000e19 40001878 00000004 00000000  
3fffef70:  3fffff10 aa55aa55 00000000 401047dc  
3fffef80:  401047e2 00000004 00000000 00000000  
3fffef90:  4010000d 40102f8e 00040000 b302b935  
3fffefa0:  40100a94 3fffef3c 40100a41 3fffff68  
3fffefb0:  3fffffc0 00000000 00000000 feefeffe  
3fffefc0:  feefeffe feefeffe feefeffe feefeffe
...


<<<stack<<<

 ets Jan  8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v951aeffa
~ld


Причина

Сторожевой таймер может срабатывать из-за недостаточного уровня питания, либо реже - утечки памяти. Команды в духе ESP.wdtDisable(); ESP.wdtFeed(); не помогут. Вочдог находится на какой-то внещней схеме.[2] yield(); автору тоже не помог.


Решение

Можно попрыгать вокруг вашего устройства с бубном. По крайней мере, этот метод не применялся. А можете разобраться, как работает Arduino ESP8266/ESP32 Exception Stack Trace Decoder.

Общая информация

Подключение оборудования

ESP8285 + WiFi Repeater

$ apt install esptool
$ cd $ESP_REPEATER_SOURCE_PATH/firmware
$ esptool --port /dev/ttyUSB0 write_flash -fs 1MB -fm dout 0x00000 0x00000.bin 0x02000 0x02000.bin

https://gustavovelascoh.wordpress.com/2017/11/07/how-to-set-a-wifi-repeater-using-an-esp8285/

Ссылки