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, наоборот, растет. Если вы не можете решить свою проблему сами, есть хорошие шансы, что в ее решении может помочь кто-то другой.

См.также

Внешние ссылки