Введение в ESP8266

Уже все заинтересованные слышали и видели чип ESP8266 от китайской компании Espressif. Стоит он на ebay даже дешевле, чем плата Bluetooth адаптера,- около $3. Да и по размерам он поменьше и возможностями побогаче.

Внешний вид ESP8266 ESP-01

Внешний вид ESP8266 ESP-01

Теперь у домашних любителей (hobbyist) появилась ранее почти недоступная (из-за цены) возможность работы в сетях Wi-Fi даже в двух режимах: подключаться к точкам доступа, и самому быть точкой доступа.

С другой стороны платы ESP8266 сами по себе — это не просто шилды тупо для связи по WiFi. ESP8266 сам является микроконтроллером со своими SPI, UART, GPIO интерфейсами, т.е. может использоваться совершенно автономно.

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

Существует около 11 официальных модификаций платы.

 ESP8266 ESP-01 ESP-02 ESP-03 ESP-04 ESP-05 ESP-06 ESP-07 ESP-08 ESP-09 ESP-10 ESP-11 ESP-12

ESP8266 ESP-01 ESP-02 ESP-03 ESP-04 ESP-05 ESP-06 ESP-07 ESP-08 ESP-09 ESP-10 ESP-11 ESP-12

Их фото и распиновку можно изучить здесь.

Ко мне прилетела ESP8266 ESP-01.

 

 

Распиновка ESP8266 ESP-01

Итак, правильная распиновка модуля ESP8266 ESP-01.

Распиновка ESP8266 ESP-01

Распиновка ESP8266 ESP-01

Вывод CH_PD означает «chip power-down», а не что либо иное. В нормальном положении он должен быть подтянут к 3.3V через резистор 10К.

Прежде, чем что-то делать. Внимание! Модуль ESP8266 рассчитан только на 3.3 В. Никаких 5 В!

 

Правильное электрическое подключение

Итак, мы имеем модуль ESP8266 ESP-01. В роли Arduino выступает китайская реплика Arduino UNO.

На этапе подключения ESP8266 нас ждет одна проблема, редко кем описанная.

Как следует из описания Arduino UNO, его логика будет «разговаривать» с ESP8266 (и с любым другим устройством) с помощью 5 В. Если Arduino питается от USB компьютера, то это напряжение зависит от напряжения на выходе USB ПК и может быть немного меньше, например, 4.45 В. А как мы знаем ESP8266 рассчитан строго на 3.3 В. В большинстве инструкций в интернете, русскоязычных в особенности, этот факт просто игнорируется. Отсюда возможны и «глюки», и «странное» поведение. Я тоже сперва несколько раз подключал как все и ESP8266 не сгорел. Но каков предел его прочности?

Итак для подключения TX, RX ESP8266 к Arduino есть ровно три варианта:

  1. Рекомендуется. Использовать дополнительную плату, именуемую «logic level shifter» или «logic converter». Это стоит еще ~$1.5 и надо ждать пакет из Китая.
  2. По быстрому. Использовать делитель напряжения на резисторах. Для прототипа пойдет.
  3. Как всегда. Подключаем как есть, авось не сгорит.

Если воспользоваться вот этой схемой делителя напряжения на резисторах и онлайн-калькулятором, то получится, например, R1 = 220 Ом, R2 = 430 Ом. Где Vout -это TX или RX вывод платы ESP8266. Vin — это пин Arduino.

voltage-divider

Но это всё в теории.

На практике для моего ESP8266 описанный делитель напряжения сработал только для TX пина.

Вывод RX никак не хотел понимать 3.3 В от Arduino, и 4 В тоже не захотел. Пришлось его напрямую подключить. Видать сэкономили китайцы на каком-нибудь элементе, недопаяли. С «logic converter» не пробовал.

Примечание. Висячее положение пинов GPIO0, GPIO2 с точки зрения электроники является неправильным. Хотя они и не используются при обычных режимах работы платы. Оба пина GPIO должны быть подтянуты (pull up) к +3,3 В через резистор ~10 кОм. Подробнее здесь.

Помните. Правильное электрическое подключение (любых) микроконтроллеров позволит вам избежать множества чудес и проблем при дальнейшей работе. Лучше сразу сделать всё правильно, чем копаться в куче проводов потом.

 

Правильное подключение ESP8266 к Arduino

 

Таблица. Правильное подключение ESP8266 к Arduino.
 ESP8266 ESP-01 Способ подключения Arduino UNO
 RX  через делитель напряжения  D11
SoftwareSerial используется как TX
 TX  через делитель напряжения  D10
SoftwareSerial используется как RX
 CH_PD  подтянут через резистор 10K  +3.3V
 VCC  напрямую  +3.3V
 GND напрямую  GND
 GPIO0   подтянут через резистор 10K  +3.3V
 GPIO2   подтянут через резистор 10K  +3.3V

Для выводов RX, TX Arduino мы использовали цифровые пины, а не готовые RX, TX, чтобы не занимать штатный UART. В связи с этим в скетче будет использована библиотека SoftwareSerial.

 

Быстрая проверка

При обычном включении на модуле ESP8266 должен загореться красный светодиод — это индикатор питания и быстро мигнуть синий светодиод — индикатор обмена данными по пинам TX—RX.

Если синий светодиод горит постоянно, то проверьте правильность подключения. Например, у меня было недостаточно высокое напряжение на делителе (подробнее я написал выше).

Если всё сделано правильно, в WiFi сети должна появиться новая точка доступа с именем вида «ESP чего-то там», которую можно обнаружить с любого WiFi устройства, например, мобильного смартфона. Можете попробовать подключиться.

 

Talk to Me, Baby

Поскольку у нас уже есть Arduino, то всякие программы, работающие с последовательным портом, нам не нужны. Мы будем использовать монитор последовательного порта от Arduino IDE.
Подготовим только библиотеку SoftwareSerial.

В файле arduino/hardware/arduino/avr/libraries/SoftwareSerial/SoftwareSerial.h исправим строку содержащую определение _SS_MAX_RX_BUFF на такую

#define _SS_MAX_RX_BUFF 256

Хорошим тоном будет сделать копию оригинального SoftwareSerial.h

Подключаем USB кабель от ПК к Arduino. Заливаем скетч.

 

Далее нужно разобраться со скоростью передачи данных. Это методом тыка. В первую очередь пробуйте 9600 и 115200, затем 57600 (в скетче тоже не забудьте изменить!). У меня получилось сразу на 9600. Установите также «Both NL and CR».

Самая первая команда
AT
ответ должен быть
OK

Если это не так, дальше двигаться не имеет смысла. Перепроверьте все подключения и скорость порта.

Примечание. При наборе AT-команд можно набирать буквы в нижнем или ВЕРХНЕМ регистре, нельзя только смешивать регистры. На команду «At» или «aT» будет выдана ошибка «error».

Перезагрузим модуль ESP8266, чтобы увидеть информацию о производителе
AT+RST

ответ

[Vendor:www.ai-thinker.com Version:0.9.2.4]
ready

Узнаем версию прошивки
AT+GMR

ответ (пример)
0018000902-AI03

что означает
0018 — version level of the AT command support
000902 — версия firmware 0.9.2

Разрешим работу в обоих режимах Soft AP Mode и Station Mode:
AT+CWMODE=3

Soft AP Mode — Программная точка доступа. Типа сервер WiFi.
Station Mode — Как обычный сетевой адаптер для подключения к WiFi. Типа клиент WiFi.

Выведем список точек доступа
AT+CWLAP

ответ будет типа
+CWLAP:(4,»James007″,-64,»00:2e:45:1c:a1:1c»,1)

где в скобках указывается: <ecn>, <ssid>, <rssi — сила сигнала>, <mac>, [mode].

<ecn> может принимать значения:
0 — OPEN, 1 — WEP, 2 — WPA_PSK, 3 — WPA2_PSK, 4 —WPA_WPA2_PSK

<mode> может принимать значения: 0, 1

Для подключения к точке доступа:
AT+CWJAP=»SSID»,»password»

Список остальных AT команд легко гуглится. Имейте в виду, что для разных прошивок и набор AT-команд будет немного разный.

 

Arduino в качестве простого USB-to-Serial TTL конвертора

Обычно такое подключение используют для прошивки ESP8266.

При этом Arduino играет роль простого USB-to-Serial TTL конвертора.

Залейте в Arduino стандартный пустой BareMinimum-скетч, на всякий случай.
void setup() { }
void loop() { }

Далее Arduino нужно замкнуть RESET на GND.  Это изолирует процессор от I/O пинов. Альтернатива этому удаление микросхемы из «кроватки».

Теперь Uno будет работать как простой/тупой  TTL-serial-to-USB converter.

Подключите ESP8266. При этом выводы TX, RX устройства нужно подключить без перекрещивания. Т.е. :

esp TX → ard TX
esp RX → ard RX

Теперь мы можем общаться с подключенным модулем (например ESP8266 или Bluetooth) напрямую и без дополнительных USB-Serial конверторов.

Модуль ESP8266 слишком крут и наворочен, чтобы закончить с ним в рамках одного поста. Поэтому, «продолжение следует».