ESP8266 и Arduino IDE. Часть 1

Примечание

Оригинал статьи: martyncurrey.com

Это обновлённое руководство (версия 2.0) по работе с микроконтроллерами ESP8266. Оригинальное руководство устарело, и подход к использованию ESP8266 значительно изменился, особенно после использования модуля в проекте IoT Word Clock.

Структура серии

Руководство состоит из нескольких частей:

  1. Часть 1: ESP8266 и настройка Arduino IDE

  2. Часть 2: Управление светодиодом с веб-страницы в режиме точки доступа (AP)

  3. Часть 3: Управление светодиодом с веб-страницы в режиме станции (ST)

  4. Часть 4: mDNS

  5. Часть 5: wifiManager

  6. Часть 6: JavaScript и AJAX

  7. Часть 7: Дополнительные элементы управления (3 светодиода)

  8. Часть 8: Автоматическое обновление веб-страницы

  9. Часть 9: Первые шаги с WebSocket

  10. Часть 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-битный АЦП (АЦП последовательного приближения)

Применение

Два основных подхода к использованию:

  1. Автономно: для небольших проектов, требующих веб-подключения, ESP8266 может полностью заменить Arduino

  2. Совместно: перенос веб-компонента на ESP8266 при использовании Arduino (обычно Nano) в качестве основного микропроцессора с последовательной связью между ними

Добавление ядра ESP8266 в Arduino IDE

Шаг 1: Настройка

Откройте настройки Arduino IDE и введите следующий URL в поле «Дополнительные ссылки для Менеджера плат»:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Несколько URL можно разделять запятыми.

Окно настроек с полем URL Детали поля URL Детали поля URL

Шаг 2: Менеджер плат

После ввода URL ESP8266 откройте окно менеджера плат и прокрутите до записи ESP8266 (обычно внизу).

Менеджер плат с записью ESP8266

Шаг 3: Установка

Выберите запись ESP8266. Появится опция установки. Выберите последнюю версию и нажмите «Установить».

Выбор ESP8266 Интерфейс установки

Шаг 4: Выбор платы

После завершения установки перейдите в раздел плат. Должно быть доступно множество вариантов модулей ESP8266.

Расширенный список плат Выбранная плата

Дополнительную информацию о ядре ESP8266 можно найти на странице проекта GitHub.

Платы разработки ESP8266

ESP8266-01 с платой программирования

Для модуля ESP8266-01 была собрана пользовательская плата программирования. Этот подход работает хорошо, но требует USB-to-serial адаптера.

ESP8266-01 с платой программирования

Платы NodeMCU

Для обычной разработки используются платы NodeMCU 0.9 благодаря удобству встроенного USB-подключения. Платы программируются через Arduino IDE на C/C++, а не на Lua.

Плата NodeMCU 0.9

NodeMCU V1.0 — рекомендуется для новых проектов:

  • Немного тоньше, чем V0.9

  • Лучшая совместимость с макетной платой

  • Маленькая дочерняя плата ESP8266 обычно имеет чёрный (а не синий) цвет, что указывает на использование чипа ESP-12E

Плата NodeMCU V1.0

Lolin 3.0 — автор отмечает значительные проблемы с платами Lolin 3.0 и не рекомендует их приобретать.

Плата Lolin 3.0

Распиновка NodeMCU

Критическое различие между платами NodeMCU и стандартными Arduino — обращение к выводам. Существуют две различные системы обозначений:

  1. Выводы GPIO: обращение по номерам (1, 2, 3 и т.д.)

  2. Выводы 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 v0.9

Распиновка NodeMCU v1.0

Распиновка NodeMCU v1.0

Драйвер последовательного порта

Платы NodeMCU используют чип последовательного адаптера CH340. Для первого использования требуется установка драйвера.

Чип CH340G

Источники драйверов:

  1. Сайт производителя: 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»

Выпадающее меню выбора плат ESP8266

Скетч 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 Ом (большие значения допустимы; меньшие — проблематичны). Более высокое сопротивление делает светодиод тусклее.

Схема подключения светодиода к NodeMCU Реализация на макетной плате

Код

/*
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);
}

Пояснение к коду

Скетч выполняет следующие операции:

  1. Объявление пина: устанавливает D1 (GPIO5) как выходной пин

  2. Setup: настраивает пин как выход

  3. Loop: переключает пин между LOW и HIGH с интервалом в 1 секунду

Когда пин в состоянии LOW, ток протекает через светодиод (он загорается). Когда HIGH — светодиод гаснет. Цикл повторяется непрерывно.

Результат

Если конфигурация правильная, светодиод мигает с интервалом в одну секунду.

Мигающий светодиод

Устранение ошибок загрузки

Типичные ошибки загрузки указывают на то, что ESP8266 не сбрасывается или не переходит в режим загрузки:

warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed

Вероятная причина: выбрана неправильная плата в Arduino IDE.

Решение: проверьте, что в настройках IDE выбрана правильная плата перед загрузкой.