ESP8266 и Arduino IDE. Часть 1
Примечание
Оригинал статьи: martyncurrey.com
Это обновлённое руководство (версия 2.0) по работе с микроконтроллерами ESP8266. Оригинальное руководство устарело, и подход к использованию ESP8266 значительно изменился, особенно после использования модуля в проекте IoT Word Clock.
Структура серии
Руководство состоит из нескольких частей:
Часть 1: ESP8266 и настройка Arduino IDE
Часть 2: Управление светодиодом с веб-страницы в режиме точки доступа (AP)
Часть 3: Управление светодиодом с веб-страницы в режиме станции (ST)
Часть 4: mDNS
Часть 5: wifiManager
Часть 6: JavaScript и AJAX
Часть 7: Дополнительные элементы управления (3 светодиода)
Часть 8: Автоматическое обновление веб-страницы
Часть 9: Первые шаги с WebSocket
Часть 10a-10d: Проект IoT-монитора
Предыстория
Когда ESP8266 впервые появился, он вызвал значительный интерес как недорогой чип с возможностью подключения к Интернету. Однако первый опыт оказался разочаровывающим. Интерфейс AT-команд был описан как «очень неуклюжий», а проблемы с надёжностью привели к тому, что модули были отложены в сторону.
Ключевой поворот: выпуск ядра ESP8266 для Arduino IDE преобразил опыт работы. Это позволило программировать модули ESP8266 так, как будто это обычные Arduino, устраняя сложность AT-команд и зачастую исключая необходимость в отдельном Arduino.
Основные характеристики ESP8266
Процессор и память
32-битный RISC CPU: Tensilica Xtensa L106, работающий на частоте 80 МГц
64 КиБ оперативной памяти для инструкций
96 КиБ оперативной памяти для данных
Внешняя QSPI флеш-память: от 512 КиБ до 4 МиБ (поддержка до 16 МиБ)
Беспроводная связь
IEEE 802.11 b/g/n Wi-Fi
Встроенный TR-переключатель, балун, LNA, усилитель мощности и согласующая сеть
Поддержка аутентификации WEP или WPA/WPA2
Совместимость с открытыми сетями
Интерфейсы и выводы
16 выводов GPIO
Интерфейс SPI
Интерфейс I2C
Интерфейсы I2S с DMA (используют общие выводы с GPIO)
UART на выделенных выводах, плюс UART только для передачи на GPIO2
10-битный АЦП (АЦП последовательного приближения)
Применение
Два основных подхода к использованию:
Автономно: для небольших проектов, требующих веб-подключения, ESP8266 может полностью заменить Arduino
Совместно: перенос веб-компонента на ESP8266 при использовании Arduino (обычно Nano) в качестве основного микропроцессора с последовательной связью между ними
Добавление ядра ESP8266 в Arduino IDE
Шаг 1: Настройка
Откройте настройки Arduino IDE и введите следующий URL в поле «Дополнительные ссылки для Менеджера плат»:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Несколько URL можно разделять запятыми.
Шаг 2: Менеджер плат
После ввода URL ESP8266 откройте окно менеджера плат и прокрутите до записи ESP8266 (обычно внизу).
Шаг 3: Установка
Выберите запись ESP8266. Появится опция установки. Выберите последнюю версию и нажмите «Установить».
Шаг 4: Выбор платы
После завершения установки перейдите в раздел плат. Должно быть доступно множество вариантов модулей ESP8266.
Дополнительную информацию о ядре ESP8266 можно найти на странице проекта GitHub.
Платы разработки ESP8266
ESP8266-01 с платой программирования
Для модуля ESP8266-01 была собрана пользовательская плата программирования. Этот подход работает хорошо, но требует USB-to-serial адаптера.
Платы NodeMCU
Для обычной разработки используются платы NodeMCU 0.9 благодаря удобству встроенного USB-подключения. Платы программируются через Arduino IDE на C/C++, а не на Lua.
NodeMCU V1.0 — рекомендуется для новых проектов:
Немного тоньше, чем V0.9
Лучшая совместимость с макетной платой
Маленькая дочерняя плата ESP8266 обычно имеет чёрный (а не синий) цвет, что указывает на использование чипа ESP-12E
Lolin 3.0 — автор отмечает значительные проблемы с платами Lolin 3.0 и не рекомендует их приобретать.
Распиновка NodeMCU
Критическое различие между платами NodeMCU и стандартными Arduino — обращение к выводам. Существуют две различные системы обозначений:
Выводы GPIO: обращение по номерам (1, 2, 3 и т.д.)
Выводы D на плате: маркировка на физической плате (D0, D1, D2 и т.д.)
Они не эквивалентны. Для обращения к номерам, напечатанным на плате, используйте D-нотацию:
Неправильно:
int LED_Pin = 1; // Обращение к GPIO пину
Правильно:
int LED_Pin = D1; // Обращение к пину D1 на плате
Таблица распиновки NodeMCU v0.9
PIN |
GPIO |
PIN |
GPIO |
|---|---|---|---|
D0 |
16 |
D6 |
12 |
D1 |
5 |
D7 |
13 |
D2 |
4 |
D8 |
15 |
D3 |
0 |
D9 |
3 |
D4 |
2 |
D10 |
1 |
D5 |
14 |
Распиновка NodeMCU v1.0
Драйвер последовательного порта
Платы NodeMCU используют чип последовательного адаптера CH340. Для первого использования требуется установка драйвера.
Источники драйверов:
Сайт производителя: http://www.wch.cn/download/CH341SER_EXE.html
Выбор платы в Arduino IDE
Важно
Выберите правильную плату в Arduino IDE для вашего конкретного модуля. Например:
Платы NodeMCU v0.9/v1.0: выберите «NodeMCU» или «NodeMCU 1.0 (ESP-12E Module)»
ESP8266-01: выберите «Generic ESP8266 Module»
Скетч 1: Мигание светодиодом
Этот базовый проект мигает светодиодом, подтверждая правильную работу всех компонентов.
Схема
Компоненты:
1 светодиод (любого цвета)
1 токоограничивающий резистор
Плата NodeMCU
Подключение: светодиод и резистор последовательно подключены к пину D2.
Расчёт резистора
ESP8266 — это устройство на 3.3В, поэтому требуется правильный подбор резистора. Светодиоды обычно имеют прямое падение напряжения 2В-3В в зависимости от цвета.
Пример расчёта:
Прямое падение напряжения на светодиоде: 2В
Требуемый ток светодиода: 20мА (0.02А)
Напряжение питания: 3.3В
Формула:
R = (Vs - Vf) / I
R = (3.3 - 2) / 0.02
R = 65 Ом
В данном примере был использован резистор на 100 Ом (большие значения допустимы; меньшие — проблематичны). Более высокое сопротивление делает светодиод тусклее.
Код
/*
ESP8266 Blink
Blink an LED connected to pin D1
*/
// ModeMCU pin mapping is a little weird so use D0, D1,D3 rather than 1,2,3
// pin 1,2,3 refers to the GPIO pins
int LED_Pin = D1;
void setup()
{
pinMode(LED_Pin, OUTPUT);
}
void loop()
{
digitalWrite(LED_Pin, LOW);
delay(1000);
digitalWrite(LED_Pin, HIGH);
delay(1000);
}
Пояснение к коду
Скетч выполняет следующие операции:
Объявление пина: устанавливает D1 (GPIO5) как выходной пин
Setup: настраивает пин как выход
Loop: переключает пин между LOW и HIGH с интервалом в 1 секунду
Когда пин в состоянии LOW, ток протекает через светодиод (он загорается). Когда HIGH — светодиод гаснет. Цикл повторяется непрерывно.
Результат
Если конфигурация правильная, светодиод мигает с интервалом в одну секунду.
Устранение ошибок загрузки
Типичные ошибки загрузки указывают на то, что ESP8266 не сбрасывается или не переходит в режим загрузки:
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
Вероятная причина: выбрана неправильная плата в Arduino IDE.
Решение: проверьте, что в настройках IDE выбрана правильная плата перед загрузкой.