Мои опыты с WEMOS D1 aka ESP8266EX. Работа в Arduino IDE

Объект моего исследования - WEMOS D1 MINI V3.0 - WiFi-плата на SoC-микроконтроллере ESP8266EX (фактически, это модуль ESP-12S с разъемом microUSB), приобретенная на AliExpress:
WeMos D1

Характеристики этого микроконтроллера:

  • 32-битное RISC-ядро Tensilica L106, разработанное компанией Cadence, с рабочей частотой до 160 МГц
  • производитель - Espressif Systems - выпускает как ESP8266EX (с 2014 года), так и ESP8285 (с 2016 года), а также ESP32 (с 2016 года) - с поддержкой не только Wi-Fi, но и Bluetooth.

На плате размещено 4 МБайта внешней флэш-памяти - чип с восемью выводами (существуют платы с объемом этой памяти от 512 КБайт до 16 МБайт).
В более новом чипе ESP8285 интегрирован 1 МБайт внутренней флэш-памяти.

Схема платы - ссылка

Распиновка платы:

Пин Функция Пин Функция
5V выход +5 В (подключен к контакту USB-разъема через защитный диод и предохранитель) 3V3 выход + 3,3 В
GND "земля" D8 GPIO15 / SS
D4 GPIO2 D7 GPIO12 / MOSI
D3 GPIO0 D6 GPIO13 / MISO
D2 GPIO4 / SDA D5 GPIO14 / SCK
D1 GPIO5 / SCL D0 GPIO16
RX RXD A0 аналоговый вход (до 3,3 В)
TX TXD RST сброс

Все цифровые пины (кроме D0) поддерживают прерывания/PWM/I2C/1-Wire.

Плата оснащена разъемом microUSB, используемым для питания и прошивки.

Работа в среде Arduino

Подготовка

В качестве среды разработки я использую Arduino 1.8.19 - последнюю из "классических" версий Arduino IDE 1.x.x . Предварительно должен быть установлен драйвер чипа CH340G.

В окне Файл ⇒ Настройки добавляем строку

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

в Дополнительные ссылки для Менеджера плат и нажимаем кнопку OK:

В Инструменты ⇒ Менеджер плат выбираем и устанавливаем esp8266:

WEMOS D1 Arduino

В пункте меню Инструменты выбираем из ESP8266 Boards плату LOLIN(WeMos) D1 R1.

Выбираем нужный последовательный порт для прошивки из Инструменты ⇒ Порт:
WEMOS D1 Arduino

Всё готово к работе!

Мигание светодиодом - микроконтроллерный "Hello, world!"

В качестве первого примера рассмотрим традиционный для микроконтроллеров "Hello, world!" - помигаем светодиодом.

На плате размещен синий светодиод, подключенный катодом к контакту GPIO2 (помечен на плате как D4), а анод через балластный резистор подключен к шине питания +3,3 В. При логической "1" на этом выходе светодиод погашен, при "0" - горит.

Помигаем светодиодом с периодом 4 секунды.

Исходный код скетча:

int LED = 2;      //GPIO2 D4 контакт светодиода
int PAUSE = 2000; //длительность паузы в мс

void setup()
    pinMode(LED, OUTPUT); // инициализация контакта GPIO2 с подключенным светодиодом как выход
}

void loop() {
    digitalWrite(LED, LOW);   //зажигание светодиода

    delay(PAUSE);             //пауза

    digitalWrite(LED, HIGH);   //гашение светодиода

    delay(PAUSE);             //пауза
}

Для компиляции выбираем команду Скетч ⇒ Проверить/Компилировать (или нажимаем сочетание клавиш CTRL + R).

После компиляции отображается распределение памяти (может отличаться в различных версиях библиотеки esp8266):
WEMOS D1 Arduino

Для прошивки выбираем команду Скетч Загрузка (или нажимаем сочетание клавиш CTRL + U). Прошивка проходит со скоростью 460800 бод.
После завершения прошивки микроконтроллер автоматически перезагружается и микроконтроллер начинает выполнять программу - светодиод мигает.

Управление нагрузкой с помощью реле

Теперь найдем для платы возможность более полезного применения.

С помощью платы WEMOS D1 можно управлять мощной нагрузкой, соединив плату с таким релейным модулем (реле этого модуля позволяет коммутировать нагрузку в бытовой электросети):
Arduino реле

Подаем питание на релейный модуль, соединяя его вход VCC с выходом 5V платы WEMOS D1 и соединяя "земли" GND модуля и платы (при подаче питания загорается красный светодиод модуля).

При соединениии входа IN релейного модуля с "землей" включается реле и загорается зеленый светодиод модуля. При подаче на этот вход напряжения +5 В реле отключается и зеленый светодиод гаснет.

Так как напряжение логической "1" на выходах составляет + 3,3 В, то для получения пятивольтового сигнала переводим желаемый выход (используем GPIO4 = D2) в режим общего стока и используем подтягивающий резистор к + 5 В.

Получилась вот такая конструкция:
WEMOS D1 управление реле

Цепь нагрузки подключается к клеммам NO (нормально открытый, т.е. разомкнутый при выключенном реле, контакт) и COM (общий контакт) как к контактам обычного выключателя.

Для иллюстрации сделаем циклическое включение/отключение реле с периодом 4 секунды.

Исходный код скетча:

int LED = 2;      //GPIO2  D4 контакт светодиода
int RELAY = 4;    //GPIO4  D2 контакт реле
int PAUSE = 2000; //длительность паузы в мс

void setup() {

pinMode(LED, OUTPUT); //настройка контакта с подключенным светодиодом как выход
pinMode(RELAY, OUTPUT_OPEN_DRAIN); //настройка контакта, управляющего реле, как выход с общим стоком

}

void loop() {

digitalWrite(LED, LOW);    //зажигание светодиода
digitalWrite(RELAY, LOW); //включение реле

delay(PAUSE);               //пауза

digitalWrite(LED, HIGH);   //гашение светодиода
digitalWrite(RELAY, HIGH);  //выключение реле

delay(PAUSE);               //пауза

}

Работа с WiFi

В качестве одного из применений можно упомянуть, например, дистанционное управление освещением в "умном доме" по протоколу MQTT, подключив плату к WiFi-сети.

Или создание Wi-Fi информера - вот мой проект "Magic Brick" с дисплеем от мобильного телефона Nokia 5110.

Продолжение следует...

Яндекс.Метрика