Объект моего исследования - 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.
Продолжение следует...