Общие вопросы по Arduino IDE для ESP8266

Victor

Administrator
Команда форума
Arduino IDE для ESP8266
ArduinoIDE.png

Новый метод установки на стандартную версию Arduino IDE 1.6.4, через Board Manager
1. Установить Arduino IDE 1.6.4 с официального сайта Arduino
2. Запустить IDE, далее Файл - Настройки - в поле "Additional Boards Manager URLs" вставить ссылку на стабильную версию [inline]http://arduino.esp8266.com/package_esp8266com_index.json[/inline], или для nightly build [inline]http://arduino.esp8266.com/staging/package_esp8266com_index.json[/inline], нажать OK
3. Инструменты - Плата - Boards Manager
4. В Boards Manager в поле фильтра введите esp8266 или вручную пролистайте список и кликните на ESP8266 by ESP8266 Community Forum
5. Кликните Install
6. Дождитесь окончания загрузки (около 130 Мегабайт)
7. Закройте Boards Manager и в меню Инструменты - Плата - Generic ESP8266
8. Установите частоту вашего модуля 80/160Mhz, размер флеш памяти и выберите порт
9. Profit!
ArduinoBoardsManager2.png
Скачать с github (Windows, Linux, Mac OS X)
Скачать исходный код
Скачать x64 Alpha с appveyor build-сервера

Инструкция по сборке Arduino IDE из исходников на разных платформах

Альтернативный метод установки на 1.6.4, предложенный Adafruit
1. Установить Arduino IDE 1.6.4 с официального сайта Arduino
2. Запустить IDE, далее Файл - Настройки - в поле "Additional Boards Manager URLs" вставить [inline]https://adafruit.github.io/arduino-board-index/package_adafruit_index.json[/inline], нажать OK
3. Инструменты - Плата - Boards Manager
4. В Boards Manager в поле фильтра введите esp8266 или вручную пролистайте список и кликните на ESP8266 by ESP8266 Community Forum
5. В появившемся поле выберите версию 1.6.2 и кликните Install
6. Дождитесь окончания загрузки (около 130 Мегабайт)
7. Закройте Boards Manager и в меню Инструменты - Плата - Generic ESP8266
8. Установите частоту вашего модуля 80/160Mhz и выберите порт
9. Profit!
ArduinoBoardsManager.png

Внимание!!!! Актуальная ссылка для Менеджера плат на github!!
[inline]http://arduino.esp8266.com/stable/package_esp8266com_index.json[/inline]
 
Последнее редактирование модератором:

shaman1010

New member
День добрый, в скачанном c Вашего гитхаба Arduino 1.6.1 пытаюсь скомпилировать что-либо (WebServer) - ошибка (в Win8.1/64 не указана, какая). Пытаюсь залить бутлоадер - ошибка.
В первом случае - посмотрел, какой экзешник крешится, это xtensa-lx106-elf-g++.exe
Пытаюсь запустить его отдельно - наконец-то выяснилось, чего ему нужно: libiconv-2.dll Он есть по пути arduino-1.6.1\hardware\tools\avr\libexec\gcc\avr\4.8.1, но не подтягивается.
При попытке залить бутлоадер вываливается такая ошибка: "Ошибка при загрузке бутлоадера: пропущен 'bootloader.tool' параметр конфигурации"
И еще, в гитхабе не работает кнопка "Clone in Desktop" - это что-то не включено, либо пока github борется с DDOS-ом, они что-то там отключили?
 

igrr

Moderator
Команда форума

shaman1010

New member
Да, проблема с dll-кой, на билд сервере она почему-то перестала перекладываться в каталог с arduino.exe.
К вечеру выложу исправленный билд, пока можете скопировать вручную.
Да, скомпилировалось, сервер запустился. С бутлоадером ошибка осталась.

Подскажите, в этом проекте можно будет использовать область флеши, выше 512кБ? (сейчас 16МБ впаяна).
 

igrr

Moderator
Команда форума
Да, скомпилировалось, сервер запустился. С бутлоадером ошибка осталась.

Подскажите, в этом проекте можно будет использовать область флеши, выше 512кБ? (сейчас 16МБ впаяна).
А что за бутлоадер вы хотите прошить? в esp бутлоадер находится в ROM, поэтому на функцию прошивки бутлоадера я не вообще не смотрел.

в принципе можно использовать и 16mb flash. добавлю поддержку в список тасков.
 

shaman1010

New member
А что за бутлоадер вы хотите прошить? в esp бутлоадер находится в ROM, поэтому на функцию прошивки бутлоадера я не вообще не смотрел.
В программаторах засветился esptool, предположил по аналогии с соседним Arduino IDE ESP8266, что он может отдельно загрузчик записать. (1.2, 1.3b). По большому счету не критично, гораздо нужней там была бы функция "стереть fullflash" (забить весь объем FF-ками) очень практично, особенно в периоды испытаний.


в принципе можно использовать и 16mb flash. добавлю поддержку в список тасков.
Отлично! Думаю вполне логичным смотрится вариант, предложенный pvvx (все програмное пространство ограничить стандартными 512кБ, а остаток - отдать под файловую систему, ту же обсуждаемую spifFS, или еще какую-либо). Хотя Вам видней, как правильней организовать работу с повышенным объемом, но поддержка нужна. На 15MB можно вполне себе рюшечный интерфейс соорудить, либо данные с датчиков месяц хранить...


upd. Скетч тестового Web-сервера. В консоль до начала отработки текущей программы сыпется мусор (наверное бутлоадер согласовывается). Получается не совсем корректная отработка. Как этот мусор можно отключить?

upd2. Если в хроме зажать F5, то сервер валится, оставляя за собой в консоли:
Код:
ets Jan  8 2013,rst cause:4, boot mode:(3,7)

wdt reset
load 0x40100000, len 30000, room 16
tail 0
chksum 0x99
load 0x3ffe8000, len 2556, room 8
tail 4
chksum 0x5e
load 0x3ffe8a00, len 2340, room 4
tail 0
chksum 0x70
csum 0x70
r”0
 
Последнее редактирование:

igrr

Moderator
Команда форума
он может отдельно загрузчик записать. (1.2, 1.3b)
Сейчас приложение собирается без загрузчика второй стадии, то есть по адресу 0x00000 идет само приложение. Вероятно, в будущем это изменится для поддержки функции заливки прошивки по воздуху, тогда понадобится запись загрузчика.

Отлично! Думаю вполне логичным смотрится вариант, предложенный pvvx (все програмное пространство ограничить стандартными 512кБ, а остаток - отдать под файловую систему, ту же обсуждаемую spifFS, или еще какую-либо). Хотя Вам видней, как правильней организовать работу с повышенным объемом, но поддержка нужна. На 15MB можно вполне себе рюшечный интерфейс соорудить, либо данные с датчиков месяц хранить...
Да, для начала нужно сделать поддержку spiffs и прицепить C-шный stdio к этой файловой системе (как это сделано в mbed, например).

upd. Скетч тестового Web-сервера. В консоль до начала отработки текущей программы сыпется мусор (наверное бутлоадер согласовывается). Получается не совсем корректная отработка. Как этот мусор можно отключить?
Вроде бы после перезагрузки бутлоадер всегда выдает лог загрузки на скорости 74800. А что именно некорректно отрабатывает из-за этого.


upd2. Если в хроме зажать F5, то сервер валится, оставляя за собой в консоли:
Принято, посмотрю.
 

shaman1010

New member
А что именно некорректно отрабатывает из-за этого.
Если пропадает питание и модуль висит на uart-е роутера:
В начальный момент загрузки большинство коммутаторов/роутеров с консольным входом делают таймаут в 1-2 сек, для возможности перехвата управления.
Если в консоль в этот момент пульнуть хоть что-нибудь - он остановится в ожидании дальнейших указаний.
Аналогично себя ведут многие устройства (спутниковые тюнера, планшеты, ...), правда в некоторых сделано чуть лучше - они ожидают определенную последовательность.
 

anakod

Moderator
Команда форума
Немного запутался с переносом веток, поэтому отпишусь здесь.

Очень инетерсный проект. то что касается переключения контекста - это просто восхитительно. Я хотел добиться решения задачи выполнения фоновых задач в Sming, и именно поэтому изначально долго присматривался к FreeRTOS. Но с нм не задалось (хотя, вполне вероятно зря, потихоньку продолжаю смотреть в ту сторону). У Вас же простое красивое и элегантное решение для главной проблемы - как заставить фоновые задачи работать корректно (и без привлечения многопоточной ОС). Я изучил код, но пока все равно, как мне кажется, еще не полностью понимаю эту ассемблерно-стековую магию, igrr, могли бы Вы рассказать поподробнее?

По возможностям здесь есть несколько плюсов и несколько минусов в сравнении с моими текущими наработками:
Плюсы
  • Просто шикарное решение по переключению котекста и выполнению фоновых задач
  • mDNS - раньше не задумывался о подобной возможности, маленький но очень приятный штрих к теме виртуальных веб серверов
Минусы/чего не хватает
  • Файловая система
  • Полноценный веб-сервер с Views и Templates (а вообще, если честно, мне кажется не совсем правильно делать всю обработку в веб сервере на String'ах, хотя бы просто по памяти)
  • HTTP клиент
  • FTP
  • SPI
  • Протестированная работа с различной периферией и готовые примеры
  • AnalogWrite (но, в Sming сейчас тоже только софтверный)
  • Обертки под системные API
Так что тут правда хорошо бы как-нибудь кооперировать наши усилия, но как? Мы зашли к решению схожих проблем с немного разных сторон, более того, изначально Sming рождался именно как идея перенести Arduino под ESP (и даже назывался NetWiring) но позже я пересмотрел концепцию, т.к. с одной стороны, понял что совместимость никогда не будет полной, а с другой, что ESP8266 намного мощнее любых Ардуино поэтому не надо пытаться загнать разработку в эти старые рамки. Поэтому например появилась полноценная файловая система а не эмулятор EEPROM (который планировался изначально), весьма мощные классы для веб сервера и т.п.

igrr, буду рад пообщаться по любым вопросам!
 

igrr

Moderator
Команда форума
Я хотел добиться решения задачи выполнения фоновых задач в Sming, и именно поэтому изначально долго присматривался к FreeRTOS. Но с нм не задалось (хотя, вполне вероятно зря, потихоньку продолжаю смотреть в ту сторону).
Я начал писать этот код до выхода версии sdk с FreeRTOS, поэтому это был единственный способ, который просматривался.
Общая идея такая. Есть функция loop_wrapper в core_esp8266_main.cpp, весь пользовательский код (т.е. setup и loop) запускается оттуда. Функция loop_task (в том же файле) — это обработчик таска, которому назначен приоритет 0. Функция loop_wrapper, а вместе с ней и пользовательский код, запускаются из этого обработчика таска. При запуске функции loop_wrapper мы смотрем, есть ли у нас сохраненный стек (т.е. было ли прервано выполнение функции loop_wrapper на предыдущем вызове таска). Если нет — сохраняем регистры, указатель на верхушку стека (SP) и указатель на инструкцию (PC) — это даст нам возможность "выпрыгнуть" из функции loop_wrapper, когда потребуется, после этого начинаем выполнять loop_wrapper. Если сохраненное состояние есть — восстанавливаем записанные SP, PC, и другие регистры, и продолжаем выполнение loop_wrapper из того места, где оно было приостановлено. Для переключения контекста есть две функции: esp_yield и esp_schedule. Первая сохраняет PC, SP, и другие регистры и "выпрыгивает" из loop_wrapper, тем самым возвращая управление системе, вторая — просто вызывает system_os_post для запуска таска при следующей возможности.
Ограничение такого подхода — можно сделать только один дополнительный контекст.

По возможностям здесь есть несколько плюсов и несколько минусов в сравнении с моими текущими наработками:
В целом согласен, я бы отнес к фичам своего проекта еще и библиотеку ESP8266WiFi, которая реализует знакомый многим API библиотеки WiFi Shield.

  • Файловая система
  • Полноценный веб-сервер с Views и Templates (а вообще, если честно, мне кажется не совсем правильно делать всю обработку в веб сервере на String'ах, хотя бы просто по памяти)
  • HTTP клиент
  • FTP
  • SPI
  • Протестированная работа с различной периферией и готовые примеры
  • AnalogWrite (но, в Sming сейчас тоже только софтверный)
  • Обертки под системные API
Да, это очень мощный функционал. Насколько я понимаю, всё это можно обернуть в библиотеки. При этом останется базовая совместимость с Arduino и совместимые API для работы с WiFi и TCP/IP, но также появится куча мощных функций. Внутри библиотек при этом можно делать все что угодно — использовать lwip напрямую, не использовать String и т.п.
Если мы сможем адаптировать ваши библиотеки (веб-сервер, http, ftp, spi, sleep modes и т.д.) для компиляции в составе Arduino, мне кажется, будет очень крутое решение.
 

Victor

Administrator
Команда форума
Мысли по поводу обновления прошивки по воздуху.
Рассматриваемый Иваном вариант
Wifi upload works as follows:
- esp modules send multicast UDP packets over wifi network.
- some tool running on the users PC receives these packets and builds a list of esp modules that are ready to receive the sketch
- the list of modules is added to the list of ports, allowing the user to select which esp module he would like to upload to
- when the user presses upload, some tool sends the sketch over TCP to the selected module
Отлично подходит для прошивки по WiFi, но не очень подходит для передачи файлов по WiFi (а когда будет реализована файловая система - этот вопрос точно возникнет). Может быть решать задачу в комплексе?

Если использовать программатор не esptool, а другую универсальную консольную утилиту, то вопрос может быть частично снят. (Выбираем в меню esptool - прошиваем через serial, выбираем другую - шьем по WiFi)

Однако я вижу еще и необходимость в утилите с интерфейсом, похожим на файловый менеджер для легкого выполнения операций на файловой системе. Это позволит быстро разрабатывать и отлаживать HTML,CSS и Javascript файлы.

Именно по этому пути я развиваю ESPlorer для NodeMCU (если помните, сначала была консольная luatool. И да, в ESPlorer по WiFi тоже планируется передача файлов). Сейчас люди используют и luatool и ESPlorer только для решения разных задач.
 

igrr

Moderator
Команда форума
Как насчёт использования FTP для заливки файлов? И не придётся писать собственные GUI тулы...
 

Victor

Administrator
Команда форума
Как насчёт использования FTP для заливки файлов? И не придётся писать собственные GUI тулы...
Вполне рабочий вариант. Желательно еще на всех модулях mDNS поднимать. Хотя с mDNS вроде в любом случае удобнее.
 

Victor

Administrator
Команда форума
igrr, получается что не нужно
the list of modules is added to the list of ports
а просто выбираем другой прошивальщик вместо esplool, который ищет доступные esp8266, выводит их где-то списком, юзер выбирает нужную и прошивка полетела по воздуху.
Как такая идея?

Если третий — это тот, который с http://arduinesp.com, то он сегодня оставил следующий комментарий (правда почему-то в багтрекере другого моего проекта, ну да ладно).
на его странице загрузки http://www.arduinesp.com/download/
Код:
Change list
0.20 – 29 March 2015 – Core replaced with esp8266.com/arduino created by Ivan Grokhotkov
 

igrr

Moderator
Команда форума
выводит их где-то списком, юзер выбирает нужную
Вообще не хотелось бы городить какие-то внешние окна выбора, когда есть уже встроенное в среду меню, для этого предназначенное.
Но возможно это разумный компромисс, пока device discovery в самой среде не будет отрефакторен для поддержки чего-то кроме Yun.
Только тогда писать этот gui нужно на чем-то кросс-платформенном, не требующем еще одного рантайма (Java, или С++wxWidgets).
 

Victor

Administrator
Команда форума
igrr, народ тут спрашивает когда можно будет GPIO0 руками не дергать - хотят точь в точь как на ардуине или UDK.
Я, честно говоря, вообще не понимаю, почему это сразу не реализовано. С этим какие-то подводные камни есть?
 
Сверху Снизу