ESP8266:Прошивки/Arduino/FAQ/На ESP8266 не работает библиотека для Arduino.Как заставить ее работать?
На ESP8266 не работает библиотека для Arduino. Как заставить ее работать?[1]
Итак, вы решили попробовать на ESP8266 какую-то Arduino-библиотеку, но она не работает. Ее также нет в списке библиотек, проверенных на совместимость с аддоном ESP8266 для IDE Arduino. Кроме того, вы не можете найти в интернете ни единого упоминания о том, что эта библиотека совместима с ESP8266.
Каковы шансы на то, что она все-таки заработает?
Определите проблему
Начните с поиска всех симптомов, делающих эту библиотеку несовместимой с ESP8266. В идеале – воспользуйтесь скетчами-примерами, идущими в комплекте с этой библиотекой. Затем составьте список найденных проблем.
Скорее всего, вам встретится следующее:
- Ошибки компиляции
- Ошибок компиляции нет, но скетч перезапускается из-за исключения или сторожевого таймера (wdt)
- Скетч вроде бы работает, но не так, как ожидалось (например, расчеты дают некорректные результаты)
Вооружившись списком проблем, попросите комментария у автора библиотеки. Если проблемы действительно есть, попросите его/ее помощи в том, чтобы исправить эту проблему на ESP8266. У вас будет больше шансов убедить автора помочь вам советами или даже обновлением библиотеки, если ваш баг-репорт будет максимально точным.
Почините сами
Если автор библиотеки не может оказать помощь, вы можете починить библиотеку сами.
Ошибки компиляции
Проблема 1: Компилятор жалуется на использование регистров AVR (PORTx, PINx, TCR1A и т.д.).
Решение: Проверьте, хорошо ли использование регистров локализовано в функциях проблемной библиотеки. Попробуйте заменить использование GPIO-регистров на функции digitalRead() и digitalWrite(), а использование регистров таймеров – на функции класса TimerX. Если AVR-регистры используются по всему коду, то эта библиотека вряд ли будет стоить потраченных на нее усилий. Также имеет смысл проверить, удавалось ли кому-нибудь заставить эту библиотеку работать на процессорах ARM (Due/STM), PIC и т.д. Если да, то возможно где-то уже есть библиотека, которая уже использует функции Arduino, а не эти регистры.
Проблема 2: Компилятор жалуется на <avr/pgmspace.h>.
Решение: Модифицируйте библиотеку, добавив обусловленное подключение файла «pgmspace.h» для ESP8266.
#ifdef ESP8266
#include <pgmspace.h>
#else
#include <avr/pgmspace.h>
#endif
Перезапуски из-за исключений и сторожевого таймера
Решение этой проблемы описано в отдельной статье.
Проблемы c функциональностью
Проблема 1: Скетч работает, но возвращает странные цифровые значения.
Решение: Проверьте использование типа данных int в библиотеке. На AVR целые числа являются 16-битными, а на ESP – 32-битными (как на ARM).
Проблема 2: Некоторые девайсы, для корректной работы которых нужна очень быстрая обработка данных (вроде сервомеханизмов или светодиодных полос) случайно меняют позицию и показывают странные паттерны.
Решение: Проверьте использование прерываний – они могут конфликтовать с WiFi-активностью ESP8266. Проверить это можно, на время отключив WiFi-коммуникацию при помощи функции WiFi.mode(WIFI_OFF).
Итого
Определите проблемы с совместимостью и попросите автора библиотеки о помощи. Если помощи нет, проверьте использование низкоуровневого доступа. Если столкнулись с перезапусками, которые активируются исключениями или сторожевым таймером, воспользуйтесь расшифровщиком Esp Exception Decoder.
К счастью, количество библиотек, которые не поддерживают ESP8266, постоянно уменьшается. Сообщество ESP8266, наоборот, растет. Если вы не можете решить свою проблему сами, есть хорошие шансы, что в ее решении может помочь кто-то другой.