• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ArduinoIDE для ESP8266

Нужна ли возможность использовать ESP8266 как Arduino-совместимые платы?

  • Нет, Ардуино не для меня

    Голосов: 0 0.0%

  • Всего проголосовало
    54

Sermus

New member
По просьбе администраторов форума создаю отдельный топик пока в рамках раздела Sming. Если возникнет необходимость, для топиков будет создан отдельный раздел. Теперь к сути.

Arduino IDE ESP8266


Как вы знаете, ESP8266 это не только [гладкая шерстка, но и 2 кило отборного диетического мяса] не только WiFi модуль, но и довольно мощный процессор. В цифрах "довольно мощный" означает что в сравнении с типовым Arduino, построенным на AVR8 он имеет в 10 раз большую частоту (160MHz против 16), 32-х битную архитектуру против 8-и битной, в 40 раз больше оперативной памяти (80КB против 8) и в 16 или 32 раза больше flash (512КB или 1МБ против 32KB).

В настоящий момент в мире Arduino ESP используется как некое дополнение к классическому Arduino, наделяющему его WiFi-возможностями. Из преимуществ такого решения можно отметить следующие:
1) простота программирования, поскольку программируется это добро в классической ArduinoIDE c применением уже написанных библиотек, либо при помощи посылки AT-команд.

Недостатки:
1) В системе участвует три железки: Arduino, ESP8266 и конвертер уровней (логических и питания), поскольку большинство Ардуин имеют пятивольтовое питание и логические уровни, а ESP требует трех вольт. Этот факт означает соответствующую стоимость и сложность, особенно, если это все собирается на макетке. Из-за этого проект явно выбивается из парадигмы plug'n'play. Прежде чем играться, нужно помучиться с соединениями.
2) Какой-то странный перекос, в которой убогая железка управляет гораздо более мощной, хотя мощная, теоретически может решать те же задачи, которые решает убогая.

Если бы была решена задача "простого" программирования ESP наподобие как это сделано в экосистеме Arduino, это бы нивелировало единственный недостаток программирования "голого" ESP по сравнению со связкой Arduino + ESP.

Первый шаг к этому сделал уважаемый Anakod, написав обертку с Arduino API над ESP8266. Второй шаг попытался сделать я, перенеся build chain, ESP8266 SDK и код Anakod под Arduino IDE и сконфигурировав все это добро так, чтобы в Arduino IDE ESP8266 выглядел бы как еще одна Arduino-совместимая плата. Первые результаты уже есть. По крайней мере, простые примеры по морганию светодиодом и логированию в UART собираются, прошиваются и работают.

Если это удастся довести хоть до какого-то ума, то мы получим еще один клон Arduino, но стоимостью 3$, со встроенным WiFi и не в пример гораздо более мощными ресурсами (если сравнивать с большинством Ардуин за исключением Due).

Страница проекта тут: http://sermus.github.io/ESP8266_ArduinoIDE/
 
Последнее редактирование модератором:

Sermus

New member
Публикую здесь небольшую вводную статью по инсталляции присадки к Arduino IDE. Фактически, это просто русский дубль того, что написано на странице проекта. Итак.
Шаг первый.
Инсталлируете Arduino IDE 1.6.1 или более позднюю версию отсюда http://arduino.cc/en/Main/Software.

Шаг второй.
Находите директорию, где ArduinoIDE хранит скетчи. Для этого идете в настройки ArduinoIDE:


Шаг третий.
Скачиваете отсюда http://sermus.github.io/ESP8266_ArduinoIDE/ архив с addon'ом. И распаковываете его в (sketchbook location)\hardware . Если директории hardware там нет, создаете.
Кому хочется, можно просто сделать клон репозитория https://github.com/Sermus/ESP8266_ArduinoIDE в эту директорию hardware.
После этого у Вас в hardware должна очутиться как минимум папка Espressif:


Шаг четвертый. Запускаете ArduinoIDE (или перезапускаете, если была запущена), идете в меню Tools->Board и видите там ESP8266:

Если не видите, то, скорее всего что-то неправильно распаковали на шаге 3.
Выбираете ESP8266, дальше вся работа как с обычным Arduino.
Можно загрузить пример Blink из hardware\Espressif\Examples и прошить его.
 
Последнее редактирование модератором:

Sermus

New member
Как в Ардуину - жмите кнопку "загрузить". COM порт только не забудьте выбрать правильный перед этим.
 

Dr. Morg

New member
Каким образом работать с Wi-Fi, i2c, SPI?
Есть ли портированные под ESP8266 библиотеки для этого?
 

Sermus

New member
WiFi: смотрим пример HttpServer_Bootstrap, можно из моей сборки
I2C: смотрим библиотеку I2Cdev из состава Sming
SPI: грепаем примеры из состава Sming, хоть библиотеку для ILI9163, хоть для ssd1306, насколько я вижу семантика работы с SPI не отличается от таковой для ардуины.
 

Dr. Morg

New member
WiFi: смотрим пример HttpServer_Bootstrap, можно из моей сборки
I2C: смотрим библиотеку I2Cdev из состава Sming
SPI: грепаем примеры из состава Sming, хоть библиотеку для ILI9163, хоть для ssd1306, насколько я вижу семантика работы с SPI не отличается от таковой для ардуины.
До примера HTTP-сервера добрался, уже изучаю, спасибо!

Как-то кроме создания файла в коде, можно загружать в ФС (ftp, ssh)?
Или только downloadClient.downloadFile вытягивать файлы с других ресурсов?

Если ESPduino :) сможет нормально работать веб-сервером, при этом общаться с Ардуиной по i2c/SPI или UART, то это будет просто бомба! Да ещё за такие-то смешные деньги...:cool:
 

Sermus

New member
Вроде Anakod запилил поддержку ftp, но у меня пока версия Sming, которая это не поддерживает. Насколько я понимаю, можно залить файлы отдельно в область данных тем же esptool, но это тема уже не в рамках ArduinoIDE.

На тему "нормальности" поддержки web тут сломано немало копий. Нормально оно, конечно, никогда не будет поддерживать в силу ограниченности ресурсов. Но если нормальность понимать как "в той же мере, в какой оно поддерживается решениями на Arduino", то оно может поддерживаться нормально.

Не очень понимаю, зачем Вам в этой связке Arduino. Вы строите кластер из ардуин, которые общаются по I2C/SPI/UART?
 

Dr. Morg

New member
Вроде Anakod запилил поддержку ftp, но у меня пока версия Sming, которая это не поддерживает. Насколько я понимаю, можно залить файлы отдельно в область данных тем же esptool, но это тема уже не в рамках ArduinoIDE.
Тогда как на счёт поддержки SDIO? Тогда можно было бы файлы хранить на внешней флешке.

На тему "нормальности" поддержки web тут сломано немало копий. Нормально оно, конечно, никогда не будет поддерживать в силу ограниченности ресурсов. Но если нормальность понимать как "в той же мере, в какой оно поддерживается решениями на Arduino", то оно может поддерживаться нормально.
Для меня "нормальность" веб-сервера - стабильность работы хотя бы на уровне Ethernet Shield W5100, который не загибается от AJAX запросов раз в секунду, в отличие от ESP8266 на АТ прошивках...

Не очень понимаю, зачем Вам в этой связке Arduino. Вы строите кластер из ардуин, которые общаются по I2C/SPI/UART?
У меня проект собран на Ардуино, требуется Wi-Fi связь с ним и веб-сервер для управления. Полностью железо на ESP8266 не перенести, т.к. у меня ESP-01 и GPIO всего два + UART, а требуется несколько цифровых и несколько аналоговых.
 

Dr. Morg

New member
Что-то пошло не так :)
Качал отсюда: https://github.com/Sermus/ESP8266_ArduinoIDE/zipball/master
Arduino: 1.6.1 (Windows 7), Плата"ESP8266"

Изменена опция сборки, пересобираем все



C:\Users\agrogov\Documents\Arduino\hardware\Espressif/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-g++ -MMD -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -D__ets__ -DICACHE_FLASH -DICACHE_IRAM_ATTR='__attribute__((section(".text")))' -DIRAM_ATTR='__attribute__((section(".text")))' -ffunction-sections -fdata-sections -Wno-write-strings -fno-rtti -fno-exceptions -std=c++11 -DF_CPU=80000000L -DARDUINO=10601 -DARDUINO_ESP8266_ESP8266 -DARDUINO_ARCH_ESP8266 -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266 -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\include -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\SmingCore -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\Wiring -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\system -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\system\include -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\Services\ArduinoJson -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\Services\DateTime -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\Services\SpifFS -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\Services\WebHelpers -IC:\Users\agrogov\Documents\Arduino\hardware\Espressif/ESP8266/ESP8266_SDK\include -c C:\Users\agrogov\AppData\Local\Temp\build553927093535618437.tmp\HttpServer_Bootstrap.cpp -o C:\Users\agrogov\AppData\Local\Temp\build553927093535618437.tmp\HttpServer_Bootstrap.cpp.o

In file included from C:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\SmingCore/../Wiring/../include/user_config.h:27:0,

from C:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\SmingCore/../Wiring/WiringFrameworkDependencies.h:11,

from C:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\SmingCore/../Wiring/WiringFrameworkIncludes.h:11,

from C:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\SmingCore/SmingCore.h:11,

from HttpServer_Bootstrap.ino:1:

C:\Users\agrogov\Documents\Arduino\hardware\Espressif\ESP8266\cores\esp8266\Sming\Sming\system\include/esp_systemapi.h:21:0: error: "IRAM_ATTR" redefined [-Werror]

[HASHTAG]#define[/HASHTAG] IRAM_ATTR __attribute__((section(".iram.text")))

^

<command-line>:0:0: note: this is the location of the previous definition

cc1plus.exe: all warnings being treated as errors

Ошибка компиляции.
 

Sermus

New member
Тогда как на счёт поддержки SDIO? Тогда можно было бы файлы хранить на внешней флешке.
Ну тут непаханное поле. Теоретически можете подключить еще одну флешку на те же линии, на которых сидит та, которая есть. Другой вариант - заменить ту, что есть. Третий, попробовать использовать линии HSPI для общения с накопителем. В общем, варианты есть, но это уже, насколько я понимаю, вне рамок концепции ArduinoIDE.

Для меня "нормальность" веб-сервера - стабильность работы хотя бы на уровне Ethernet Shield W5100, который не загибается от AJAX запросов раз в секунду, в отличие от ESP8266 на АТ прошивках..
Тут многие жаловались на глючность espconn - API для организации сетевого обмена. В Sming он не входит, так что есть шанс, что можно организовать ответ раз в секунду. По крайней мере у pvvx, вроде, как-то получается.
 

Dr. Morg

New member
Ну тут непаханное поле. Теоретически можете подключить еще одну флешку на те же линии, на которых сидит та, которая есть. Другой вариант - заменить ту, что есть. Третий, попробовать использовать линии HSPI для общения с накопителем. В общем, варианты есть, но это уже, насколько я понимаю, вне рамок концепции ArduinoIDE.
Ну почему же вне рамок? Для Ардуины существует множество модулей под SD и MicroSD карты, в основном они все под SPI. Библиотека или поддержка в ядре под ESP8266 для работы с ними были бы очень кстати.

Тут многие жаловались на глючность espconn - API для организации сетевого обмена. В Sming он не входит, так что есть шанс, что можно организовать ответ раз в секунду. По крайней мере у pvvx, вроде, как-то получается.
espconn глючит даже в режиме tcp-client, крайне сложно было добиться стабильности при отправке GET запросов раз в 3 секунды. Чаще отправлять АТ прошивки не в состоянии, к сожалению...
 

Dr. Morg

New member
Попробуйте подменить файлик.
Спасибо, помогло!
Section| Description| Start (hex)| End (hex)|Used space
------------------------------------------------------------------------------
data| Initialized Data (RAM)| 3FFE8000| 3FFE89E8| 2536
rodata| ReadOnly Data (RAM)| 3FFE89F0| 3FFEB308| 10520
bss| Uninitialized Data (RAM)| 3FFEB308| 3FFF46A8| 37792
text| Cached Code (IRAM)| 40100000| 40107810| 30736
irom0_text| Uncached Code (SPI)| 40210000| 402482FC| 230140
Total Used RAM : 50848
Free RAM : 31072
Free IRam : 2050
 

Sermus

New member
Ну почему же вне рамок?
Ну потому что я сделал так, чтобы ArduinoIDE работал с ESP. У меня не было цели заставить все в мире библиотеки для Arduino работать на ESP. Они на разных ардуинах-то работают по разному. Я портирование всех возможных библиотек не осилю физически.

Если есть библиотека для ардуино, которая работает через SPI и не использует фичи AVR или SAM3 напрямую, то есть хороший шанс, что она заработает и здесь, ведь hardware abstraction layer в виде библиотеки SPI уже существует.

А вообще, кто, кроме вас, заинтересованных в работе того или иного конкретного железа, ответит на вопрос работает ли оно? Вы бы протестили и вынесли это знание в community.
 

Dr. Morg

New member
Мой косяк был, внес изменение в репозиторий. Файлик дал, чтобы Вам заново не пришлось весь целиком качать (если качали архивом)
Может с этим же связано,- залить не получается:
Entering bootloader...
Connecting...
Traceback (most recent call last):
File "esptool.py", line 610, in <module>
IOError: [Errno 2] No such file or directory: 'C:\\Users\\agrogov\\AppData\\Local\\Temp\\build169463865693909293.tmp/eagle.app.flash.bin'
Файлы в каталоге на скриншоте во вложении.
 

Вложения

Sermus

New member
А включите в настройках ArduinoIDE подробный лог при построении и прошивке и выложите полный лог при прошивке. Так непонятно - почему-то не сгенерировался eagle.app.flash.bin
 

Dr. Morg

New member
А включите в настройках ArduinoIDE подробный лог при построении и прошивке и выложите полный лог при прошивке. Так непонятно - почему-то не сгенерировался eagle.app.flash.bin
Лог сборки во вложенном файле, в спойлер не влазит по объёму.
 

Вложения

Sermus

New member
Аргх, в скрипте, который генерирует eagle.app.flash.bin, есть ссылка по абсолютному пути. Так что если у Вас не стоит UDK (или он стоит не по пути C:\Espressif) Вам крупно не повезло.
Поправил скрипт. Подмените gen_appbin на приаттаченный.
 

Вложения

Сверху Снизу