Как установить микропрограмму на ESP8266 (используя ESP Bare Metal SDK и язык C)

ESP8266 Espressif получили обновление. Некоторые из них могут даже назвать его спорным. Все началось с ESP8266, Wi-Fi модуля с базовым интерфейсом UART. Но позже выяснилось, что он достаточно мощный для встраиваемых систем. Это модуль, который может быть использован для запуска полноценных приложений.

Espressif понял это и выпустил SDK. В первых версиях было много ошибок, но с тех пор стало значительно лучше. Другой SDK был выпущен и его предложили Freertos для портирования на ESP. Здесь я хочу поговорить о версии без ОС. Конечно, есть сторонние прошивки, которые предлагают поддержку языка сценариев для упрощения разработки (только Google), но по-прежнему ESP8266 является микрочипом (акцент на MICRO) и язык сценариев может быть излишним. Так что мы собираемся вернуться к ESP SDK и C. Вы будете удивлены тем, что это проще, чем кажется!

Первые шаги


Для разработки встроенного программного обеспечения вам нужно:

  1. подключить ESP8266  к компьютеру через порт USB .

Есть много статей , как подключить ESP к компьютеру. Вам понадобится несколько кабелей Дюпона и адаптер UART-к-USB. Если у вас есть плата Arduino вы можете использовать ее в качестве UART-к-USB. В Google по запросу “подключить esp8266 к компьютеру” – есть много статей.

  1. SDK . Я предлагаю использовать этот: https://github.com/pfalcon/esp-open-sdk

Загрузите его и установите по инструкции. Нет ничего необычного в этом процессе, все, что вам нужно, это установить и нажать “сделать”.

В общем, этот SDK предназначен для систем * Nix, но есть порт для Windows.

Короче говоря, чтобы начать разработку вы должны иметь устройство ESP,  / DEV / ttyUSB0 (/ DEV / ttyACM0, если вы используете Arduino или COMn в операционной системе Windows) и SDK, установленный в определенной папке.

Main()


В C int main()является точкой входа в программу. Но, в случае ESP точка входа void user_init(). Эта функция должна использоваться только для инициализации, а не для длительной логики.

Обратите внимание, что все , что мы делаем в user_init называет system_init_done_cb функции API. Эта функция принимает один параметр, который является указателем на функцию , которая будет вызываться , как только все системные модули будут правильно инициализированы. Вы можете поместить свой код инициализации в user_init, но вы можете столкнуться с проблемами с некоторыми функциями системы (например , Wi – Fi), только потому ,что соответствующие модули еще не инициализированы. Таким образом, лучше использовать system_init_done_cb и выполнить инициализацию в функции обратного вызова.

Осторожно, злая собака


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

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

В общем, таймер это не плохо, он помогает, если программа зависает. И, 1 секунда не так мало. Просто имейте это в виду.

Что он делает


Принимая то, что мы узнали мы сталкиваемся с очевидный вопросом: где я могу запустить свои задачи?

Самый простой ответ таймеры. API таймер очень прост в ESP.

Если последний параметр os_time_arm функции равен 0, то обратный вызов таймера будет вызван только один раз. Если он равен 1, то будет вызываться несколько раз , пока os_timer_disarm не выключится.

И, наконец, у нас есть место , чтобы поместить наш код: The start_timer_cb.

Наша задача, чтобы светодиоды мигали. Некоторые платы ESP имеют светодиодный индикатор, прикрепленный к GPIO16, если ваша плата не имеет его, вы можете подключить светодиод к любому свободному GPIO.

Как вы помните start_timer_cb является функцией таймера обратного вызова, и он вызывается каждые 5 секунд. При первом вызове переменная равна 0 , и мы устанавливаем GPIO16 до высокого – в результате светодиод будет включен. На втором вызове мы устанавливаем GPIO16 к низкому уровню – и светодиод выключен. И так далее, и так далее.

Построение проекта


Теперь настало время собрать наш проект. Скажем, у нас есть только один исходный файл – main.c. Я не могу рекомендовать мейкфайлы, которые используются для построения примеров. Они слишком сложны и немного странны. Итак, я предлагаю, написать свой собственный (просто!) Makefile.

Вот шаги:

  1. Компиляция main.c к main.o.

Используйте Xtensa-lx106-эльф-GCC компилятор , который является частью SDK.

  1. . Проект Link

Linker использует – одну и ту же Xtensa-lx106-ELF-GCC. Библиотеку для установления связей с НКУ гал м С. PHY net80211 ВПА главная

Кроме того, вам нужно поставить скрипт компоновщика (.LD файл). Выберите один из SDK, который соответствует размеру флэш-устройства. После этого шага вы будете иметь .elf файл.

  1. Преобразование .elf файл в .bin

Для этого используйте esptool.py скрипт из  SDK. Выполните его следующим образом :

Если все в порядке, вы должны иметь 3 файла в <выходной каталог> с такими именами, как 0x00000.bin, 0x11000.bin 0x66000.bin.

Мигание


Заключительный шаг- установка прошивки на устройство. Для этого мы будем использовать esptool снова, но теперь мы должны использовать опцию write_flash. Как это:

Вы должны использовать реальные имена файлов из предыдущего шага. И, если все в порядке, светодиод прилагаемый к устройству начнет мигать каждые 5 секунд.

Следующие шаги


Запись микропрограммы возможна для любого устройства. Работа с ESP8266 не является исключением. Таким образом, цель данной статьи состоит в том, чтобы указать только направление. Есть много различных интерфейсов в ESP8266 SDK: WiFi, GPIO, TCP / UDP и многое другое. Убедитесь в том , чтобы проверить документацию. Можно проверить примеры поставщиков программно – аппаратного и открытого SDK. Если вы хотите начать с примера, то проверьте , который проходит через запущенный Мангуст встроенного Web -сервера на ESP8266.

Благодарим сайт cnx-software.com за предоставленную информацию

Оригинал статьи тут

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

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

0 Комментарий
Inline Feedbacks
View all comments