Ядро ESP8266 для ArduinoIDE. Установка и обзор библиотек.
В данной статье вы узнаете как добавить поддержку ESP8266 в ArduinoIDE, Также мы рассмотрим стандартные библиотеки входящие в пакет ядра и особенности их использования. И дополнительно приведу список сторонних библиотек совместимых с микроконтроллером ESP8266.
Установка ядра ESP8266 в Arduino IDE
Запустите Arduino IDE и отройте окно настроек. Найдите пункт меню Дополнительные ссылки для менеджера плат и нажмите кнопку рядом с ним. Откроется новое окно.
Введите http://arduino.esp8266.com/stable/package_esp8266com_index.json в текстовое поле. Вы можете добавить несколько URL-адресов, вводя каждый с новой строки. Нажмите Ок.
Теперь перейдите в Инструменты>Плата>Менеджер плат и введите ESP8266
Выберите нужную версию из выпадающего списка и нажмите кнопку Установить
Не забудьте выбрать свою плату ESP8266 в меню Инструменты> Плата после установки.
При желании вы можете использовать ссылку на пакет тестовых сборок ядра: http://arduino.esp8266.com/staging/package_esp8266com_index.json. В нем могут появится некоторые новые функции, но также возможны ошибки в работе и всевозможные баги.
На этом установка ядра ESP8266 для Arduino IDE завершена.
Стандартные библиотеки ядра
В пакете с ядром также устанавливаются и некоторые библиотеки для полноценной работы со всеми функиями ESP8266. Рассмотрим некоторые из них более подробно.
WiFi (библиотека ESP8266WiFi)
По функциям в основном похожа на библиотеку WiFi shield. Но есть некоторые отличия:
WiFi.mode(m)
: установка режимаWIFI_AP
,WIFI_STA
,WIFI_AP_STA
илиWIFI_OFF
.- вызов
WiFi.softAP(ssid)
для настройки открытой сети - вызов
WiFi.softAP(ssid, password)
для настройки сети WPA2-PSK (пароль должен быть не менее 8 символов) WiFi.macAddress(mac)
для STA,WiFi.softAPmacAddress(mac)
для AP.WiFi.localIP()
для STA,WiFi.softAPIP()
для AP.WiFi.printDiag(Serial)
вывод в серийный порт диагностической информацииWiFiUDP
класс поддерживает отправку и прием многоадресных пакетов по интерфейсу STA. При отправке многоадресного пакета заменитеudp.beginPacket(addr, port)
наudp.beginPacketMulticast(addr, port, WiFi.localIP())
. При прослушивании многоадресных пакетов заменитеudp.begin(port)
наudp.beginMulticast(WiFi.localIP(), multicast_ip_addr, port)
. Вы можете использоватьudp.destinationIP()
, чтобы указать, был ли полученный пакет отправлен на многоадресный или одноадресный адрес.
WiFiServer
, WiFiClient
, и WiFiUDP
ведут себя в основном так же, как с библиотекой WiFi shield. Для этой библиотеки предоставлены четыре образца. Вы можете увидеть больше команд здесь: http://www.arduino.cc/en/Reference/WiFi
Ticker
Библиотека для повторного вызова функций с определенным периодом. Включены два примера.
В настоящее время не рекомендуется выполнять блокирующие операции ввода-вывода (сетевые, последовательные, файловые) из функций обратного вызова тикера. Вместо этого установите флаг внутри обратного вызова ticker и проверьте наличие этого флага внутри функции цикла.
Вот библиотека для упрощения использования Ticker
и предотвращения сброса WDT: TickerScheduler
EEPROM
Это немного отличается от стандартного класса EEPROM.
EEPROM.begin(size)
Перед началом чтения или записи необходимо выполнить вызов, размер которого соответствует количеству байтов, которые вы хотите использовать. Размер может составлять от 4 до 4096 байт.
EEPROM.write
не записывает flash сразу, вместо этого вы должны вызывать EEPROM.commit()
всякий раз, когда хотите сохранить изменения во flash.
EEPROM.end()
также сохраняет изменения, но при этом очищает копию EEPROM в ОЗУ.
Библиотека EEPROM использует один сектор флэш-памяти, расположенный сразу после SPIFFS.
Включены три примера.
I2C (Библиотека Wire)
В настоящее время библиотека Wire поддерживает режим Master примерно до 450 кГц. Перед использованием I2C необходимо установить контакты для SDA и SCL путем вызова Wire.begin(int sda, int scl)
, т. е. Wire.begin(0, 2)
На ESP-01 контакты имеют другую нумерацию. Это 4 (SDA) и 5 (SCL).
SPI
Библиотека SPI поддерживает весь API Arduino SPI, включая транзакции, включая фазу настройки (CPHA). Настройка полярности синхронизации (CPOL) пока не поддерживается (SPI_MODE2 и SPI_MODE3 не работают).
SoftwareSerial
Порт ESP8266 библиотеки SoftwareSerial, созданный Питером Лерупом (@plerup), поддерживает скорость передачи данных до 115200 бод и многократно увеличивает экземпляры SoftwareSerial.
API, специфичные для ESP
API, связанные с глубоким сном и сторожевым таймером, доступны в ESP
объекте.
ESP.deepSleep(microseconds, mode)
переведет чип в глубокий спящий режим.
mode может принимать одно из следующих значений
WAKE_RF_DEFAULT
, WAKE_RFCAL
, WAKE_NO_RFCAL
, WAKE_RF_DISABLED
. (GPIO16 должен быть привязан к RST, чтобы выйти из глубокого сна.)
ESP.rtcUserMemoryWrite(offset, &data, sizeof(data))
и ESP.rtcUserMemoryRead(offset, &data, sizeof(data))
позволяют сохранять данные в пользовательской памяти RTC микросхемы и извлекать их из нее соответственно. Общий размер пользовательской памяти RTC составляет 512 байт, поэтому offset + sizeof (данные) не должны превышать 512. Данные должны быть выровнены по 4 байта. Сохраненные данные могут сохраняться между циклами глубокого сна. Однако данные могут быть потеряны после включения питания чипа.
ESP.restart()
перезапускает процессор.
ESP.getResetReason()
возвращает строку, содержащую последний reset resaon в удобочитаемом формате.
ESP.getFreeHeap()
возвращает размер свободной кучи(heap).
ESP.getChipId()
возвращает идентификатор чипа ESP8266 в виде 32-разрядного целого числа.
Для получения информации о флэш-чипе можно использовать несколько API-интерфейсов:
ESP.getFlashChipId()
возвращает идентификатор флэш-чипа в виде 32-разрядного целого числа.
ESP.getFlashChipSize()
возвращает размер флэш-чипа в байтах, как видно из SDK (может быть меньше фактического размера).
ESP.getFlashChipSpeed(void)
возвращает частоту микросхемы флэш-памяти в Гц.
ESP.getCycleCount()
возвращает количество циклов команд процессора с момента запуска как 32-разрядный беззнаковый. Это полезно для точного определения времени очень коротких действий, таких как битовый удар.
ESP.getVcc()
может использоваться для измерения напряжения питания. ESP необходимо перенастроить АЦП при запуске, чтобы эта функция была доступна. Добавьте следующую строку в начало скетча, чтобы использовать getVcc
:
ADC_MODE(ADC_VCC);
В этом режиме вывод TOUT должен быть отключен.
Обратите внимание, что по умолчанию АЦП настроен на чтение с помощью TOUT pin analogRead(A0)
и ESP.getVCC()
недоступен.
MDNS и DNS-SD-ответчик (библиотека ESP8266mDNS)
Позволяет отвечать на многоадресные DNS-запросы для доменных имен, таких как "foo.local", и DNS-SD (service dicovery) запросы. Подробности см. в прилагаемом примере.
Ответчик SSDP (ESP8266SSDP)
SSDP - это еще один протокол обнаружения служб, который поддерживается в Windows из коробки. Смотрите прилагаемый пример для справки.
DNS-сервер (библиотека DNSServer)
Реализует простой DNS-сервер, который можно использовать как в режимах STA, так и AP. DNS-сервер в настоящее время поддерживает только один домен (для всех остальных доменов он будет отвечать с помощью NXDOMAIN или пользовательского кода состояния). С его помощью клиенты могут открывать веб-сервер, работающий на ESP8266, используя доменное имя, а не IP-адрес. Подробности см. в прилагаемом примере.
Servo
Эта библиотека предоставляет возможность управления серводвигателями. Она поддерживает до 24 сервоприводов на любом доступном выходном пине. По умолчанию первые 12 сервоприводов будут использовать Timer0, и это не накладывает никаких ограничений. Если сервоприводов больше, то 12 используется Timer1, и будут задействованы функции, которые его используют. Так как напряжение на пинах ESP8266 3,3 В, большинство сервоприводов не смогут работать и потребуют другого источника питания, соответствующего их спецификациям. Обязательно подключите заземление между ESP8266 и источником питания серводвигателя.
Другие библиотеки (не входят в состав IDE)
Библиотеки, которые не полагаются на низкоуровневый доступ к регистрам AVR, должны работать хорошо. Вот несколько библиотек, которые были проверены на работоспособность:
- Adafruit_ILI9341 - Порт Adafruit ILI9341 для ESP8266
- arduinoVNC - VNC-клиент для Arduino
- arduinoWebSockets - сервер и клиент WebSocket, совместимые с ESP8266 (RFC6455)
- aREST - библиотека обработчиков API REST.
- Blynk - простая платформа Интернета вещей для производителей (ознакомьтесь со страницей Kickstarter).
- Низкая температура
- DHT-sensor-library - Библиотека Arduino для датчиков температуры и влажности DHT11 / DHT22. Загрузите последнюю версию библиотеки v1.1.1, и никаких изменений не требуется. Более старые версии должны инициализировать DHT следующим образом:
DHT dht(DHTPIN, DHTTYPE, 15)
- DimSwitch - дистанционное управление электронными регулируемыми балластами для ламп дневного света, как при использовании настенного выключателя.
- Encoder - библиотека Arduino для поворотных энкодеров. Версия 1.4 поддерживает ESP8266.
- esp8266_mdns - запросы и ответы mDNS на esp8266. Или, чтобы описать это по-другому: клиент mDNS или клиентская библиотека Bonjour для esp8266.
- ESPAsyncTCP - асинхронная TCP-библиотека для ESP8266 и ESP32 / 31B
- ESPAsyncWebServer - библиотека асинхронного веб-сервера для ESP8266 и ESP32 / 31B
- Homie для ESP8266 - Arduino framework для ESP8266, реализующий Homie, соглашение MQTT для Интернета вещей.
- NeoPixel - библиотека NeoPixel от Adafruit, теперь с поддержкой ESP8266 (используйте версию 1.0.2 или выше из менеджера библиотек Arduino).
- NeoPixelBus - библиотека Arduino NeoPixel, совместимая с ESP8266. Используйте ветки "DmaDriven" или "UartDriven" для ESP8266. Включает поддержку цвета HSL и многое другое.
- PubSubClient - библиотека MQTT от @Imroy.
- RTC - библиотека Arduino для Ds1307 и Ds3231, совместимая с ESP8266.
- Souliss, умный дом - фреймворк для умного дома на базе Arduino, Android и OpenHAB.
- ST7735 - Библиотека Adafruit ST7735 модифицирована для совместимости с ESP8266. Просто не забудьте изменить контакты в примерах, поскольку они по-прежнему зависят от AVR.
- Задача - библиотека Arduino для многозадачной работы. Хотя по функциональности эта библиотека похожа на включенную библиотеку Ticker, она предназначалась для совместимости с Arduino.
- TickerScheduler - библиотека предоставляет простой планировщик для
Ticker
предотвращения сброса WDT - Teleinfo - универсальная французская библиотека измерителей мощности для чтения данных мониторинга энергии Teleinfo, таких как потребление, контракт, мощность, период, ... Эта библиотека является кроссплатформенной, ESP8266, Arduino, Particle и simple C ++. Также доступен специальный пост на французском языке в блоге автора и вся связанная с ним информация о Teleinfo.
- UTFT-ESP8266 - библиотека отображения UTFT с поддержкой ESP8266. На данный момент поддерживаются только дисплеи с последовательным интерфейсом (SPI) (нет 8-разрядного параллельного режима и т. Д.). Также включает поддержку аппаратного SPI-контроллера ESP8266.
- WifiManager - менеджер соединений Wi-Fi с веб-порталом. Если он не может подключиться, он запускает режим точки доступа и портал конфигурации, чтобы вы могли выбрать и ввести учетные данные WiFi.
- OneWire - библиотека для 1-проводных микросхем Dallas / Maxim.
- Adafruit-PCD8544-Nokia-5110-LCD-Библиотека - Порт Adafruit PCD8544 - библиотека для ESP8266.
- PCF8574_ESP - очень упрощенная библиотека для использования 8-контактного GPIO-расширителя PCF8574/PCF8574A I2C.
- Библиотека точечных матричных дисплеев 2 - Freetronics DMD и универсальная библиотека точечных матричных дисплеев в стиле 16 x 32 P10
- SdFat-бета-версия - библиотека SD-карт с поддержкой длинных имен файлов, программного и аппаратного SPI и многое другое.
- FastLED - библиотека для простого и эффективного управления широким спектром светодиодных чипсетов, таких как Neopixel (WS2812B), DotStar, LPD8806 и многими другими. Включает в себя функции затухания, градиента, преобразования цвета.
- OLED - библиотека для управления OLED-дисплеями, подключенными к I2C. Протестировано с 0,96-дюймовым OLED-графическим дисплеем.
- MFRC522 - библиотека для использования считывателя/записи RFID-меток Mifare RC522.
- Ping - позволяет ESP8266 выполнять пинг на удаленном компьютере.