Объект моего исследования - WEMOS D1 MINI V3.0 - WiFi-плата на SoC-микроконтроллере ESP8266EX (фактически, это модуль ESP-12S с разъемом microUSB), приобретенная на AliExpress:
Характеристики этого микроконтроллера:
- 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:
В пункте меню Инструменты выбираем из ESP8266 Boards плату LOLIN(WeMos) D1 R1.
Выбираем нужный последовательный порт для прошивки из Инструменты ⇒ Порт:
Всё готово к работе!
Мигание светодиодом - микроконтроллерный "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):
Для прошивки выбираем команду Скетч ⇒ Загрузка (или нажимаем сочетание клавиш CTRL + U). Прошивка проходит со скоростью 460800 бод.
После завершения прошивки микроконтроллер автоматически перезагружается и микроконтроллер начинает выполнять программу - светодиод мигает.
Управление нагрузкой с помощью реле
Теперь найдем для платы возможность более полезного применения.
С помощью платы WEMOS D1 можно управлять мощной нагрузкой, соединив плату с таким релейным модулем (реле этого модуля позволяет коммутировать нагрузку в бытовой электросети):
Подаем питание на релейный модуль, соединяя его вход VCC с выходом 5V платы WEMOS D1 и соединяя "земли" GND модуля и платы (при подаче питания загорается красный светодиод модуля).
При соединениии входа IN релейного модуля с "землей" включается реле и загорается зеленый светодиод модуля. При подаче на этот вход напряжения +5 В реле отключается и зеленый светодиод гаснет.
Так как напряжение логической "1" на выходах составляет + 3,3 В, то для получения пятивольтового сигнала переводим желаемый выход (используем GPIO4 = D2) в режим общего стока и используем подтягивающий резистор к + 5 В.
Получилась вот такая конструкция:
Цепь нагрузки подключается к клеммам 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.
Продолжение следует...