Wemos d1 r2 и mini на основе esp8266

ESP-03

Pin Name Alternate Functions Notes
1 GND (Pin 1 is in the corner close to the crystal and away from antenna)
2 NC
3 UTXD SPICS1, GPIO1, CLK_RTC Typically used as serial uart0 TX
4 URXD I2SO_DATA, GPIO3, CLK_XTAL Typically used as serial uart0 RX
5 GPIO16 XPD_DCDC, RTC_GPIO0, EXT_WAKEUP, DEEPSLEEP Connected to XPD_DCDC ESP pin, can also be connected to ESP EXT_RSTB (reset) pin by closing jumper near pin 8; Reset pin is active low and has an internal weak pull-up; Connecting jumper is required to wake-up ESP from deep-sleep: RTC produces pulse on XPD_DCDC pin that needs to be fed into EXT_RSTB pin
6 CH_PD Power-down: low input powers down chip, high powers up; tie high for normal operation or module will not function
7 ANT Wifi Antenna, do not connect
8 VCC 3.3V input (pin 8 is between antenna and ESP chip)
9 GPIO14 MTMS, I2SI_WS, SP_CLK
10 GPIO12 MTDI, I2SI_DATA, MISO
11 GPIO13 MTCK, I2SI_BCK, MOSI
12 GPIO15 MTDO, I2SO_BCK, SP_CS At boot: must be low to enter flash or normal boot (high enters special boot modes)
13 GPIO2 I2SO_WS, U1TXD, U0TXD At boot: must be high to enter flash or normal boot (low enters special boot modes); Typically is used as uart1 TX for debug logging
14 GPIO0 SPICS2, CLK_OUT At boot: low causes bootloader to enter flash upload mode; high causes normal boot

В чём разница?

ESP32-C3 пытается занять нишу между ESP32/ESP32-S и нашим старым другом ESP8266. Даже больше хочет вытеснить ESP8266, чем быть дополнением к линейке ESP32.

Не знаю что там будет с ценами, но переход на RISC-V, упрощение периферии и прочее может сделать ESP32-C3 достаточно привлекательным, что бы он смог заменить ESP8266 полностью. В итоге мы получим достойную замену старичку, с которым мы вместе с 2014 года.

В таблице ниже я привёл основные отличия ESP32-C3 от предыдущих ESP32 и ESP32-S2. Так же у Espressif недавно был анонсирован ESP32-S3 с двумя ядрами, но я пока не буду его приводить ниже в силу отсутствия его в широкой продаже.

CPU

Xtensa LX6

Xtensa LX7

RISC-V (RV32IMC)

Частота CPU

160 / 240 MHz

160 / 240 MHz

160 MHz

Количество ядер CPU

2 / 1

1

1

ULP CPU

ULP-FSM

ULP-RISC-V

ULP-FSM

SRAM

520 KB

320 KB

400 KB

RTC SRAM

16 KB

8 KB

8 KB

WiFi

802.11bgn

150 Mbit

802.11bgn, 802.11mc

150 Mbit

802.11 bgn, 802.11mc

150 Mbit

Bluetooth

4.2 BR/EDR BLE

Bluetooth 5

GPIO

34

43

22

12-bit ADC

1

18 каналов

2

20 каналов

2

6 каналов

8-bit DAC

2

2

Touch sensor

10

14

SPI

4

4

3

I2S

2

1

1

I2C

2

2

1

UART

3

2

2

SDIO

1

Ethernet MAC

1

PWM

16

8

6

USB OTG

1

Потребление

До 240 мА

До 310 мА

До 325 мА

Modem sleep

27 — 68 мА

12 — 19 мА

15 — 20 мА

Light sleep

0,8 мА

0,45 мА

0,13 мА

Deep sleep

0,01 — 0,15 мА

0,02 — 0,19 мА

0,005 мА

Корпус

48 выводов

56 выводов

32 вывода

Как ESP8266, но не все выводы такие же

Настройка ESP8266

Итак, ESP8266 модуль к USB порту мы подключили (через USB-TTL или Arduino) теперь нужно убедится, что драйвера к вашим USB-TTL или Arduino встали корректно и в системе появился новый виртуальный последовательный порт. Вам понадобится программа — терминал последовательного порта. Можете использовать любую на ваш вкус, но она должна удовлетворять следующему требованию: каждая команда, которую вы отправляете с компьютера в последовательный порт должна завершаться символами CR+LF.

Ваш покорный слуга является автором open-source программы ESPlorer, получившей международное признание. ESPlorer позволит вам не вводить AT команды вручную и легко работать с lua скриптами под NodeMCU (об этом в другой раз) и вы вполне можете использовать ее и как обычный терминал. Обсуждение ESPlorer на нашем форуме и на esp826.com

С подключением к последовательному порту придется немного поколдовать: в связи с разнообразием прошивок для ESP8266, подключение может осуществляться на разных скоростях. Нужную скорость можно определить путем простого перебора трех вариантов: 9600, 57600 и 115200. Как осуществить перебор? Подключаетесь в терминальной программе к вашему виртуальному последовательному порту выставив следующие параметры: 9600 8N1, затем перезагружаете модуль, отключив CH_PD (chip enable) от питания (USB-TTL при этом остается подключенным к USB) и снова включаете (т.е. просто передергиваете CH_PD, почему не передергиваем питание — читаем , также можно кратковременно замкнуть RESET на землю для перезагрузки модуля) и наблюдаете данные в терминале. Во-первых, светодиоды на ESP8266 должны гореть как описано в начале статьи в разделе . Во-вторых, в терминале вы должны увидеть «мусор» из разных символов, оканчивающийся строкой «ready». Если «ready» мы не видим, то переподключаемся терминалом на другой скорости и снова перезагружаем модуль.

На одном из вариантов скорости «ready» вы все-таки увидите — поздравляем, ваш модуль готов к работе.  Если нет, то добро пожаловать к нам на форум — мы постараемся помочь, но предварительно почитайте эту тему.

Немного подробнее о «мусоре». Дело в том, что при старте прошивки, UART модуля ESP8266 переключается на скорость передачи 74 880 (вот такие забавные эти китайцы) выдает в UART отладочную информацию, затем переключает скорость порта на 115200 (ну или на 9600 или 57600 в зависимости от версии прошивки), так вот эта отладочная информация и видится нам как мусор, т.к. мы подключаемся к модулю на другой скорости. Можете подключится к ESP8266 на скорости 74 880 (ESPlorer поддерживает эту скорость) и вы эту отладочную информацию увидите, будет что-то вроде этого:

wdt reset
load 0x40100000, len 25052, room 16
tail 12
chksum 0x0b
ho 0 tail 12 room 4
load 0x3ffe8000, len 3312, room 12
tail 4
chksum 0x53
load 0x3ffe8cf0, len 6576, room 4
tail 12
chksum 0x0d
csum 0x0d

1
2
3
4
5
6
7
8
9
10
11
12

wdt reset

load0x40100000,len25052,room16

tail12

chksum0x0b

hotail12room4

load0x3ffe8000,len3312,room12

tail4

chksum0x53

load0x3ffe8cf0,len6576,room4

tail12

chksum0x0d

csum0x0d

НО! не увидите «ready» и не сможете управлять модулем, пока не переподключитесь на ту скорость, на которой работает прошивка.

Pinout of different types of ESP8266 Modules

In this section of article, we will talk about pinout of different versions of ESP8266 module starting from ESP-01 to ESP-12.

Espressif Systems released their first official software development kit to program the chip directly without interfacing with an external microcontroller. Since then there are many official SDKs but Espressif maintain only two SDKs stable one is based on FreeRTOS and other based on callbacks. There is also a variety of open source SDK’s for ESP8266.

Arduino: is the most commonly used SDK due to its popularity. It is a C++ based SDK. ESP6266 is easy programmed as Arduino boards. The core files are available on GitHub.

NodeMCU: is a Lua Based software development kit.

MicroPython: is the use of python language for embedded devices.

Espruino, Mongoose OS, uLisp, Sming, Platform IO, ESP Easy, Smick, ESP Open RTOS are some other open source SDK’s.The need for these development boards is required due to ESP-xx modules series lacks on-board a voltage regulator, USB to UART Bridge like CH340G and Silicon Lab’s CP2102 and micro USB connector. Before we had to buy voltage regulator and USB to UART bridge separately and then wired them up with ESP-xx modules to flash it.

Here we will discuss mostly development board based around ESP-12E module.

ESP8266 12E Module Pinout

Esp8266 12E module has a total 22 pins which include

No. of Pins Pin Label Description
17 GPIO GPIO pins range from GPIO0 to GPIO16 includes SPI, I2C, SDIO, UART interface pins.
1 ADC 10 bit Analog to Digital Converter.
1 VCC Supply Voltage 3.3V
1 GND Ground pin
1 RST Rest Pin
1 Enable Chip Enable Pin

 ESP8266 12E Wemos D1 Mini pinout

Wemos D1 Mini development board has a total 16 pins in which 12 pins are active, uses ESP-12 module, onboard reset button, 3.3 voltage regulator, Micro USB, USB to UART bridge and some other components.

No. of

Pin

Label Description
1 3.3V 3.3 volts pin
1 5.0 Input 5V voltage pin
1 GND Ground pin
1 ADC 10 bit Analog to Digital Converter
1 RST Reset Pin
9 D0 to D8, Input/output pins also used for SPI and I2C, Flash.
2 RX,TX UART interface.

ESP8266 01 Module pinout

ESP8266 01 Module is different but commonly as used as the above development boards. This board is not breadboard friendly often separate programming module is used for programming. It has a total 8 pins in which 6 pins are active.

No. of

Pin

Label Description
1 3.3V Supply 3.3 volts pin
1 GND Ground pin
1 RST Reset Pin
1 CH_PD/EN Chip Power and Enable pin
4 GPIO 0 to 3 UART interface and input/output pins

ESP8266 12E NodeMCU Development Board pinout

NodeMCU development board has a total 30 pins in which 14 pins are active, uses ESP-12 module, onboard reset and flash button, 3.3 voltage regulator, Micro USB, USB to UART Bridge and some other components.

No. of

Pin

Label Description
3 3.3V 3.3 volts pins
1 Vin Input 5V voltage pin
4 GND Ground pins
1 ADC 10 bit Analog to Digital Converter
1 RST Reset Pin
1 EN Chip Enable pin
1 CLK CLK pin for SPI and SDIO interface
1 SD0 Data pin 0 for SDIO and MISO pin for SPI Interface.
1 CMD Command pin for SDIO interface and Chip select pin for SPI interface.
1 SD1 Data pin 1 for SDIO interface and MOSI pin for SPI Interface.
1 SD2 Data pin 0 for SDIO interface and also used as GPIO9.
1 SD3 Data pin3 for SDIO interface and also used as GPIO10.
2 RSV Reserved pins.
11 D0 to D8, RX, TX Input/output pins also used for UART, SPI, I2C, Flash and wake pin.

Networking¶

The module:

import network

wlan = network.WLAN(network.STA_IF) # create station interface
wlan.active(True)       # activate the interface
wlan.scan()             # scan for access points
wlan.isconnected()      # check if the station is connected to an AP
wlan.connect('essid', 'password') # connect to an AP
wlan.config('mac')      # get the interface's MAC address
wlan.ifconfig()         # get the interface's IP/netmask/gw/DNS addresses

ap = network.WLAN(network.AP_IF) # create access-point interface
ap.active(True)         # activate the interface
ap.config(essid='ESP-AP') # set the ESSID of the access point

A useful function for connecting to your local WiFi network is:

def do_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('essid', 'password')
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())

ESP RainMaker

Вместе с этой новой платой Espressif продвигает платформу ESP RainMaker. Это некая среда, которая позволяет быстро создавать концепты и прототипы для IoT устройств.

На ESP32-C3-DevKitM-1 плате уже была прошивка ESP RainMaker, с которой можно получить общее представление об этом платформе.

Идея примерно такова:

На плате настроен обычный бинарный переключатель. При подключении платы через USB консоль мы получаем QR код, который надо отсканировать в приложении ESP RainMaker (доступно для Android и iOS) для первоначальной конфигурации настроек WiFi и добавлении этого устройства в приложение.

После этого можно управлять встроенным RGB светодиодом на плате через Espressif облако, которое находится на Amazon AWS.

ESP RainMaker SDK позволяет создавать разнообразные устройства, не только бинарный переключатель как в примере. Это может быть датчик измерения температуры или влажности, LCD экран, несколько выключателей сразу или много разных устройств вместе сразу. В последнем случае одна плата будет показана как несколько устройств в приложении.

Для того, что бы поиграться с ESP RainMaker не обязательно ждать когда можно купить ESP32-C3. Сама платформа замечательно работает на ESP32 и ESP32-S2. Для сборки прошивки достаточно иметь настроенный ESP-IDF:

В консоле появится QR код и дальше уже всё в приложении.

Компоненты умного дома

Теперь я хотел бы подробнее остановится на компонентной схеме умного дома. Все компоненты уместились в следующей схеме:

Компоненты умного дома

Слева-направо: сначала идет ваше устройство на ESP8266, далее это прошивка ESP Easy (ее ставим на ESP8266), прошивку подключаем к MQTT-брокеру (например WQTT.ru или свой брокер на своем сервере), веб-сервис WQTT.ru уже имеет подключение к Алисе (на своем брокере это подключение придется сделать самостоятельно, что в общем несложно, потому что это наша привычная работа программиста), далее сервер логики Node RED, который подключен к MQTT-брокеру и управляет всем умным домом. И в конце можно поставить Homebridge для связи умного дома с Homekit.

Как вы наверное догадались, homebridge с голосовыми помощниками не обязательные компоненты. Главное это MQTT-брокер и Node RED. Эти два сервера вам обеспечат практический полный функционал и доступ к настройке любой логики.

Думаю общая картинка умного дома уже появилась и можно переходить к самим компонентам в отдельности. В этой статье рассмотрим MQTT-брокер и само устройство. В следующих статьях будем рассматривать настройку прошивки ESP Easy и Node RED. Этого будет достаточно, чтобы запустить простейший вариант умного дома.

В качестве устройства у нас будет светодиод, который встроен в ESP8266 и сидит на пине GPIO2. Этот светодиод будет имитировать освещение в гостиной например. Также подключим кнопку, которая будет включать этот светодиод. И еще в нашем устройстве будут два датчика: DHT11 и BMP085 (влажности и барометр с термометром). 

В логику (которая будет хранится в Node RED) заложим управление кнопкой и светодиодом, оповещение по телеграму о резком похолодании в комнате и вывод значений датчиков в Homekit и Алису.

Шаг 6. Загрузите скетч в Arduino.

Скетч загружается в Arduino обычным способом. Однако из за того что модуль ESP8266 подключен к контактам 0 и 1, программирование становится невозможным. Компилятор будет показывать ошибку.

Перед программированием отсоедините провода идущие к ESP8266 от контактов 0 и 1. Произведите программирование. Затем верните контакты на место. Нажмите кнопку сброса Arduino.

Примечание: Первый признак того, что программирование прошло успешно, это мерцание синего светодиода на модуле ESP8266 в течении полсекунды сразу после сброса. Мерцание синего светодиода означает обмен данными между Arduino и ESP8266. В эти полсекунды Arduino производит настройку ESP8266 для работы в качестве точки доступа.

#1 ESP8266 Deep Sleep with Timer Wake Up

To use timer wake up with ESP8266, you need to connect the RST pin to GPIO 16 which is labeled as D0, in a NodeMCU board. Simply follow the next schematic diagram:

Connect the RST pin to GPIO 16 only after uploading the code.

If you take a look at the NodeMCU pinout, you can see that GPIO 16 is a special pin and it has a WAKE feature.

Recommended reading: ESP8266 Pinout Reference Guide

The RST pin of the ESP8266 is always HIGH while the ESP8266 is running. However, when the RST pin receives a LOW signal, it restarts the microcontroller.

If you set a deep sleep timer with the ESP8266, once the timer ends, GPIO 16 sends a LOW signal. That means that GPIO 16, when connected to the RST pin, can wake up the ESP8266 after a set period of time.

ESP8266 NodeMCU Timer Wake Up Sketch

Having the ESP8266 add-on for Arduino IDE installed (how to Install the ESP8266 Board in Arduino IDE), go to Tools and select “NodeMCU (ESP-12E Module)”. Here’s the code that you need to upload to your ESP:

In this example, we print a message in the Serial Monitor:

After that, the ESP8266 goes to sleep for 30 seconds.

To put the ESP8266 in deep sleep, you use ESP.deepsleep(uS) and pass as argument the sleep time in microseconds.

In this case, 30e6 corresponds to 30000000 microseconds which is equal to 30 seconds.

After uploading the code, press the RST button to start running the code, and then connect RST to GPIO 16. The ESP8266 should wake up every 30 seconds and print a message in the Serial Monitor as shown below.

This example simply prints a message in the Serial Monitor, but in a real world application, you’ll perform a useful task like making a request, publish sensor readings, etc.

ESP-01 Timer Wake Up Circuit

If you want to make a similar setup with an ESP-01 board, you need to solder a wire as shown below. That tiny pin is GPIO 16 and it needs to be connected to RST pin.

However, the pins are so tiny that it is really hard to solder a wire like that to GPIO 16 on the ESP-01… So, for this wake up mode you should use the NodeMCU board or a bare ESP12-E chip.

Recommended reading: ESP8266 Pinout Reference

Libraries — others

  • Resolve «PWM-locked» / «phase-locked» waveform merge leftover in Servo lib ()
  • Add I2S class support ()
  • At MDNS.end() also release services ()
  • AVRISP: Prevent nullptr dereference on OOM ()
  • HTTPClient: fix error handling ()
  • LEAmDNS: one instance for all interfaces ( — )
  • Add the missing ‘rename’ method wrapper in SD library. ()
  • Update to ESP8266HTTPClient.cpp for no Content-Length ()
  • BREAKING: Change servo defaults to safer defaults ()
  • Hook up custom timestamp proc for SD/SDFS ()
  • BREAKING: Change return EEPROM.end() to bool ()
  • httpclient: remove deprecated API ()
  • Avoid float-double-conversion ()
  • Use direct member initialization instead of ctr initialisation ()
  • Basic authentication with ESP8266httpUpdate ()

Тестирование SIM800

  • Запускаем Arduino IDE.
  • В настройках порта (Tools -> Port) выбираем порт на котором работает USB-to-TTL конвертер.
  • Переходим в Tools -> Serial Monitor (Ctrl-Shift-M).
  • Выбираем скорость 115200. Где-то проскакивает, что у чипа работает автоопределение скорости. По моим тестам — не работает.
  • Набираем AT и ввод. Документация по AT коммандам SIM800 здесь.
  • Если модуль рабочий и корректно подключен, то появится хотя-бы ответ «OK». Если модуль определил SIM-ку и зарегистрировался в сети оператора, то будет развернутая информация.
AT
OK

+CPIN: READY

Call Ready

SMS Ready
  • Отправляем команду: AT+COPS=?После нескольких секунд ожидания появится ответ, вроде: +COPS: (2,»Bee Line GSM»,»BeeLine»,»25099″),(1,»MTS»,»MTS»,»25001″),(1,»MOTIV»,»MOTIV»,»25020″),(1,»MegaFon»,»MegaFon»,»25002″),,(0-4),(0-2). Модуль «видит» ближайшие соты. Уже хорошо.
  • Проверим статус PIN кода на SIM карте командой: AT+CPIN? Если появился ERROR — что-то не так.
  • Запускаем команду: AT+CMEE=2. Эта команда при выводе сообщения об ошибке предоставляет максимально детальную информацию. Сохраняем командой: AT&W.
  • Поворяем комунду AT+CPIN? Появляется детальный код ошибки. Например, в моем случае: +CME ERROR: SIM not inserted.
  • Проверяем установку SIM карты. SIM слот распаянный на модуле «без защиты от дурака», т.е. позволяет вставить SIM-ку любым способом, без привычных ограничений как на сотовом телефоне или в других типах слотов. На SIM слоте мелко есть пиктограмма правильной установки карты.
  • Повторяем команду AT+COPS=? Ответ изменился. Появились строчки «Call Ready» и «SMS Ready», значит карта определилась нормально и зарегистрировалась в сети оператора:
AT+COPS=?
Call Ready

SMS Ready

+COPS: (1,"Bee Line GSM","BeeLine","25099"),(1,"MOTIV","MOTIV","25020"),(3,"MTS","MTS","25001"),(3,"MegaFon","MegaFon","25002"),,(0-4),(0-2)

OK
  • Отправляем команду AT+CSQ для получения уровня сигнала. Первая цифра в ответе должна быть отлична от нуля. Например, +CSQ: 23,0.
  • Проверяем регистрацию в сети оператора командой AT+CREG? Правильный ответ: +CREG: 0,1

WebREPL (web browser interactive prompt)¶

WebREPL (REPL over WebSockets, accessible via a web browser) is an
experimental feature available in ESP8266 port. Download web client
from https://github.com/micropython/webrepl (hosted version available
at http://micropython.org/webrepl), and configure it by executing:

import webrepl_setup

and following on-screen instructions. After reboot, it will be available
for connection. If you disabled automatic start-up on boot, you may
run configured daemon on demand using:

import webrepl
webrepl.start()

The supported way to use WebREPL is by connecting to ESP8266 access point,
but the daemon is also started on STA interface if it is active, so if your
router is set up and works correctly, you may also use WebREPL while connected
to your normal Internet access point (use the ESP8266 AP connection method
if you face any issues).

Besides terminal/command prompt access, WebREPL also has provision for file
transfer (both upload and download). Web client has buttons for the
corresponding functions, or you can use command-line client
from the repository above.

See the MicroPython forum for other community-supported alternatives
to transfer files to ESP8266.

О вольтовом диапазоне на контакте ADC

Согласно даташиту ESP8266, контакт ADC имеет 10-битное разрешение. Это значит, что считанное аналоговое значение будет в диапазоне от «0» до «1024».

Контакт ADC конвертирует напряжение, находящееся только в диапазоне от 0 до 3,3 вольт. Поэтому перед тем, как подавать на контакт ADC (он же A0) какое-либо напряжение, убедитесь, что используете устройство, которое выдает не более 3,3 вольт. В противном случае вам понадобится делитель напряжения:

Примечание: У ранних версий ESP контакт A0 может работать с напряжением не выше 1 вольта. Поэтому перед сборкой цепи, описанной в следующем разделе, убедитесь, что A0 на вашем модуле может работать с 3,3 вольтами.

Step 5: Uploading a Sketch

Plug a usb cable to the Arduino Nano and connect it to a computer. Also, hookup a 5v power supply to the power jack on the board.

If you have decided to add a toggle switch, make sure that it is pressed.

To put the esp module into programming mode:

Press and hold the RESET and PROGRAM buttons, and then relese «RESET» while still pressing «PROGRAM»

Hold for a moment and then relese the «PROGRAM» button.

On the computer, open the IDE and go to Tools>>port and select the COM port where you have connected your usb cable into the computer.

Write your code, and use the upload button on the top left of your IDE to start programming the ESP module.

Модули на базе ESP8266

Согласитесь, что сам по себе голый чип нам мало интересен, а раз мы любим ардуино, а не сам микроконтроллер atmуga, то нам интересны готовые модули на базе чипа ESP8266. Итак приступим.

На базе данного микроконтроллера разработан ряд модулей с маркировками от ESP-01 до ESP-13. В большинстве модули похожи друг на друга. Я же коснусь в своем рассказе только тех модулей, с которыми имел дело 🙂

Итак, самый младший представитель линейки – ESP-01.

Этот модуль знаком тем, кто пытался прикрутить к своему проекту на Arduino Wifi. Забавно, что зачастую проект мог бы и без ардуино обойтись 🙂

Итак, в данном модуле пользователю/разработчику доступно только 4 GPIO вывода. Не много, но для метеостанции или какого-нибудь датчика вполне сгодится.

Приобрести такой модуль можно по ссылкам ниже:

И там и там модули хорошего качества.

Ну а мы пойдем дальше. На очереди довольно интересный и необычный модуль ESP-07

Модуль представляет собой миниатюрную плату с возможностью установки на большую плату под пайку.Обратите внимание, шаг контактов 2 мм, не 2,54, а именно 2. В обычную макетку этот модуль впихнуть проблематично

На первый взгляд отличительной особенностью данного модуля является наличие керамической антенны, а также разъема для подключения внешней антенны. На плате доступны все GPIO выводы за исключением выводов, отвечающих на SPI шину.

Модуль считается не первой свежести, но в большинстве проектов не теряет своей актуальности.

Стоит признать, что некоторые считают, модуль ESP-07 несколько устаревшим, так как ему на смену пришли модули ESP-12

Плата модуля рассчитана под пайку, либо установку на гребенку с шагом контактов 2 мм, однако из существенных отличий – наличие выводов шины SPI.

Широкое распространение получили модули ESP-12E и ESP-12F, отличающиеся друг от друга объемом FLASH памяти.

В отличие от модуля ESP-07, Модули на базе ESP-12 не имеют возможности подключения внешней антенны и используют посредственную встроенную антенну, которая представляет собой дорожку на плате.

Распиновка у модулей ESP-12 одинакова.

Подробную информацию по подключению и прошивке данных модулей вы можете получить на ресурсе посвященном микроконтроллерам ESP8266.ru

Учтите, что для прошивки и заливки скетчей в модули ESP-01 … ESP-12 необходим программатор. Подробнее о программаторах вы можете почитать в статье “Программаторы для Arduino, 3Д принтеров и не только”

Все эти модули хороши, однако кроме ESP-01 в готовом виде их применять не получится, т.к. нужна обвязка. Поэтому мы плавно переходим к готовым модулям, родоначальником которых стала плата ESP-12

Поддержка ESP-IDF

ESP-IDF является официальным фреймворком для разработки под ESP32. Сама среда поддерживает всю линейку ESP32. Большинство примеров можно собрать под Xtensa LX6/LX7, так и под RISC-V. Переключение сводится к одной команде «idf.py set-target esp32c3», которая выставляет riscv32-esp-elf- и прочие параметры в sdkconfig. Теперь после компиляции у нас готова прошивка для нового ESP32-C3.

Предварительно надо подготовить окружение в зависимости от ОС: Windows, Linux или macOS.

Установочный скрипт скачает компиляторы и дополнительные пакеты для ESP-IDF. После этого надо импортировать окружение для начала работы:

Рекомендую для проверки собрать «hello world»:

Не все примеры собираются под ESP32-C3, но Espressif активно работает над ESP-IDF для поддержки этого чипа.

Сборка макетной платы ESP8266

ESP8266 – недорогой SoC-чип со встроенным микроконтроллером и полным стеком протоколов TCP/IP, что означает, что он может напрямую обращаться к вашей Wi-Fi сети.

Поскольку у этого чипа есть свой микроконтроллер, вы можете поместить в него код своего приложения или можете использовать модуль просто как Wi-Fi приемопередатчик, что мы и собираемся сделать в данном проекте. Более эффективно было бы использовать этот модуль и как приемопередатчик, и как контроллер, но в целях обучения мы будем взаимодействовать с модулем, используя Arduino.

Чип ESP8266 поставляется в разных модулях. Мы будем использовать модуль ESP-01. Конечно, вы можете использовать любой другой модуль.

Во-первых, вы должны знать, что модуль работает с напряжением 3,3 В, и напряжение высокого логического уровня от Arduino должно быть таким же, чтобы не повредить наш модуль. Для этого требуется преобразователь уровня напряжения между платой Arduino (которая работает на 5 В) и модулем. Хорошей новостью является то, что в преобразователе будет нуждаться только вывод для передачи на Arduino, поскольку приемный вывод обычно распознает логические сигналы с напряжением 3,3 В от ESP8266.

Одним из простейших способов выполнения этого преобразования является схема от Sparkfun. Вы можете заказать готовый модуль.

Преобразователь уровня 5В → 3,3В

На рисунке ниже показана распиновка нашего модуля на ESP8266:

Распиновка Wi-Fi модуля ESP8266 (вид сверху, не в масштабе)

Вывод Назначение
UTXD Передача данных через UART
URXD Прием данных через UART. Выход, к которому он подключается, должен быть 3,3 В.
CH_PD Выключение: низкий уровень на входе выключает чип, высокий уровень на входе включает его; для нормальной работы модуля необходимо подтянуть его к линии питания.
GPIO0 При загрузке: должен быть высокий уровень, чтобы входить в нормальный режим загрузки; низкий уровень вводит в специальные режимы загрузки.
GPIO2 При загрузке: низкий уровень заставляет загрузчик войти в режим загрузки флеш-памяти; высокий уровень вызывает нормальный режим загрузки.
RST Сброс; активный уровень – низкий.
GND Земля.
VCC Питание/3,3В.

Я использовал LM317, настраиваемый линейный регулятор напряжения с выходным током до 1,5 А, для обеспечения модуля подходящим источником питания 3,3 В.

Примечание: Не используйте вывод 3,3 В от Arduino, так как стабилизатор напряжения 3,3 В на плате Arduino не может обеспечить необходимую для модуля величину тока, особенно при пиковом потреблении энергии во время передачи.

Принципиальная схема макетной платы ESP8266

Я использовал BS170 (вместо BSS138) для преобразователя логических уровней; оба работают хорошо.

Макетная плата ESP8266

Теперь вы можете подключить свой модуль к компьютеру, используя USB-TTL преобразователь, и испытать его.

Video demonstration

In this LED blinking tutorial, First we will see how to connect an external LED with NodeMCU and how to blink it using GPIO pins of ESP8266 NodeMCU. After that we will see how to blink an on board LED of NodeMCU and at the end of this guide, we will see how to use GPIO pin of ESP01 to control light emitting diode and how to program ESP01 with FTDI device.

First of all, we learn how to write sketches for ESP8266 in Arduino IDE. To write any sketch we have to learn the basic built-in functions and their syntax for this purpose visit our last tutorial on reference for ESP8266 using Arduino IDE here.

You can find more details on ESP8266 and NodeMCU GPIO pins here.

ESP8266 WiFi Module

  • ESP8266 (also called ESP8266 Wireless Transceiver) is a cost-effective, easy-to-operate, compact-sized & low-powered WiFi module, designed by Espressif Systems, supports both TCP/IP and Serial Protocol.
  • It’s normally used in IOT cloud based embedded projects and is considered the most widely used WiFi module beacuse of its low cost and small size.
  • It runs at operating voltage of 3V and can handle maximum voltage of around 3.6 V, so an external logic level converter is required if you are using 5V supply.
  • ESP8266 WiFi module can easily be interfaced with microcontrollers board (i.e. Arduino UNO) via Serial Port.
  • There are numerous breakout boards available based on ESP8266 WiFi Module (i.e. ESP8266 NodeMCU V3).
  • Beause of its compact size, its mostly used in autonomous projects (i.e. Robotics).

Other than ESP8266, “Espressif Systems” has designed many other ESP WiFi modules, few of them are shown in below figure:

Now let’s have a look at the ESP8266 Pinout, necessary for interfacing with microcontrollers.

ESP-07

Особенности этого модуля — керамическая антенна и разъем для внешней антенны, металлический экран.

Подключение к IoT

Аппаратная часть

Работа с этим модулем, к сожалению, прошла не слишком гладко. Ни один из возможных вариантов подключения не сработал, и я, уже отчаявшись, решила удалять его описание из статьи. Но тут мне дали новый модуль и сказали попробовать еще раз — о чудо, он заработал с первого раза! В чем было дело и как сломался первый модуль, который я мучила, — неизвестно, но скорее всего он был убит нещадной статикой. Мораль этого лирического отступления такова — если у вас что-то не заработало по инструкции, написанной ниже, не вините инструкцию — сначала прозвоните и проверьте все контакты, а потом попробуйте на другом модуле.

1) Собираем схему

ESP-07

USB-Serial

VCC

VCC

CH_PD (рекомендуется через резистор)

VCC

TX

RX

RX

TX

GND

GND

GPIO 15 (рекомендуется через резистор)

GND

GPIO 0 — сначала не подключен, но будет использоваться для перевода в режим программирования далее, поэтому к нему уже подведен провод

все остальные контакты не подключены

RTS, CTS — не подключены

На фото этого и следующего модуля уже можно заметить резисторы. После неведомой поломки уже решила перестраховаться и поставила килоомники, хотя и без них все должно работать.

2) Переводим в режим программирования (необходимо каждый раз выполнять перед прошивкой модуля)

2.1) Отключаем питание от модуля2.2. Подключаем пин GPIO 0  к GND

2.2) Подключаем пин GPIO 0  к GND

ESP-07

USB-Serial

VCC

VCC

CH_PD

VCC

TX

RX

RX

TX

GND

GND

GPIO 15 

GND

GPIO 0

GND

все остальные контакты не подключены

RTS, CTS — не подключены

2.3) Подключаем модуль к питанию

2.4) Железо готово, приступаем к программной части.

Программная часть

1) Выбираем плату: Tools (Инструменты) -> Board(Плата) Generic ESP8266 Module.

2) Вставляем подготовленный код.

3) Задаем данные для подключения Wi-Fi и идентификатор своего объекта на платформе.

4) Компилируем и загружаем скетч на плату.

5) Для обычной работы модуля (не для режима прошивки) пин GPIO 0 должен быть свободен, поэтому отключаем его от GND.

6) Переподключаем питание ESP-07 (например, вытаскиваем и вставляем обратно адаптер).

7) Видим появление данных на платформе.

В Китае

RTC

Подключение внешнего кварцевого резонатора к ESP32

По одним статьям RTC в ESP32 — это не Real Time Clock, а ядро низкого энергопотребления. Однако, по другим все-же Real Time Clock, но плохого качества (+-5%), который не стоит использовать в бизнес-приложениях.

Возможно, проблема неточности встроенного RTC может быть решена добавлением внешнего кварцевого резонатора. Я нашел упоминание о схеме подключения карцевого резонатора к контактам RTC_GPIO8/RTC_GPIO9. Но непонятно как запитывать встроенный RTC от батарейки. Отдельного входа RTC VBAT нет.

В общем, не факт, что удастся сэкономить на входе. Особенно, если нужен data logger, а не только RTC. В data logger RTC уже встроен и SPI выводы на чтение/запись придется отдать :-(. Хотя в data logger RTC нередко подключается на шину I2C.