Модуль Wifi на базе чипа ESP8266. Обновление прошивки ESP8266 Использование Arduino Uno для загрузки кода в ESP8266

Wi-Fi модуль ESP-01 – самый популярный модуль серии ESP8266. Общение с компьютером или микроконтроллером осуществляется с через UART с помощью набора AT-команд. Кроме того, модуль можно использовать как самостоятельное устройство, для этого необходимо в него загрузить свою прошивку. Программировать и загружать прошивки можно через Arduino IDE версии выше 1.6.5. Для прошивки модуля понадобится переходник UART-USB. Модуль ESP-01 может получить широкое распространение для использования в устройствах IoT (Интернет вещей).

Технические характеристики модуля

  • Wi-Fi 802.11 b/g/n
  • Режимы WiFi: клиент, точка доступа
  • Выходная мощность - 19,5 дБ
  • Напряжение питания - 1.8 -3.6 В
  • Ток потребления - 220 мА
  • Портов GPIO: 4
  • Тактовая частота процессора - 80 МГц
  • Объём памяти для кода
  • Оперативная память - 96 КБ
  • Размеры - 13×21 мм

Подключение

Рассмотрим режим AT-команд. Для этого подключим модуль к компьютеру через переходник USB-UART. Назначение выводов модуля (см. рисунок 1):
  • VCC - +3.3 В
  • GND - земля
  • RX, TX - выводы UART
  • ВыводCH_PD - Chip enable
  • GPIO0, GPIO2 - цифровые контакты
Модулю требуется внешнее питание 3.3 В.

Рисунок 1. Назначение контактов модуля ESP-01

Схема подключения для общения с модулем в режиме AT-команд (рисунок 2):

Рисунок 2. Схема подключения модуля ESP-01 к компьютеру по последовательному порту

Рисунок 3. Схема в сборе

Для отправки команд AT-команд в ОС Mac OS X можно использовать программу CoolTerm, в операционной системе Windows программу Termite. Узнать скорость COM-порта для соединения с модулем можно только экспериментально, для разных прошивок она может быть разной. Для моего модуля скорость оказалась равной 9600 бод. Кроме того установить обмен удалось только после отключения и повторного подключения к питанию вывода CH_PD. После подключения набираем в терминале AT и должны получить в ответ от модуля OK. Команда AT+GMR выдает номер версии прошивки модуля, команда AT+RST - перезагружает модуль (см. рис. 4). Список основных AT-команд можно посмотреть в этом документе (ESP8266ATCommandsSet.pdf).

Рисунок 4. Отправка AT-команд в модуль из программы Termite

Если режим AT команд для вас не удобен, плату можно настроить с помощью программы AppStack ESP8266 Config, скачать которую можно по ссылке http://esp8266.ru/download/esp8266-utils/ESP8266_Config.zip . Внешний вид программы представлен на рисунке 5. Настройка модуля осуществляется с помощью графического интерфейса, при этом выполнение команд можно видеть в мониторе программы (см. рис. 6). В мониторе также можно послать AT-команды из командной строки.

Рисунок 5. Программа AppStack ESP8266 Config

Рисунок 6. Serial monitor программы AppStack ESP8266 Config

Есть два варианта использования данного модуля:

  • в связке с микроконтроллером (например Arduino), который будет управлять модулем по UART;
  • написание собственной прошивки для использования ESP8266 в качестве самостоятельного устройства.

Пример использования

Рассмотрим пример подключения к модулю ESP-01 датчика влажности и температуры DHT11 и отправки данных в облачный сервис ThingSpeak (https://thingspeak.com/). Нам понадобятся следующие детали:
  • модуль ESP-01
  • макетная плата
  • датчик влажности и температуры DHT11
  • резистор 10 кОм
  • соединительные провода
  • блок питания 3 - 3.6В
Сначала подключим датчик DS18B20 к модулю ESP-01. DS18B20 – цифровой датчик температуры, работающий по однопроводному интерфейсу 1-Wire. Схема подключения датчика DS18B20 к модулю показана на рис. 7.

Рисунок 7. Схема подключения датчика DHT11 к модулю ESP-01.

Затем необходимо завести профиль в сервисе ThingSpeak. В сервисе есть инструкции для отправки данных в сервис и получения данных из сервиса.

Рисунок 8. Схема в сборе.

Программу будем писать в среде Arduino IDE для ESP8266. Будем использовать библиотеки ESP8266WiFi.h (встроенную) и OneWire.h. Загрузим на плату Arduino скетч из листинга 1 – получение данных с датчика температуры и отправка данных в сервис ThingSpeak. Необходимо внести свои данные для WiFi точки доступа для модуля ESP-01:

  • const char *ssid;
  • const char *password;
а также параметр privateKey для вашего приложения в сервисе ThingSpeak. Листинг 1 // сайт // Подключаем библиотеку для работы с esp8266 #include // Подключаем библиотеку DHT для работы с DHT11 #include // пин подключения контакта DATA #define DHTPIN 4 // датчик DHT11 #define DHTTYPE DHT11 // создание экземпляра объекта DHT DHT dht(DHTPIN, DHTTYPE); // ssid WiFi сети подключения const char ssid = "********"; // Пароль WiFi сети подключения const char password = "******"; // Сервер ThingSpeak const char* host = "184.106.153.149"; // API KEY вашего приложения ThingSpeak const char* privateKey = "****************"; // переменные для хранения температуры и влажности float temp; float humidity; // переменная для интервала измерений unsigned long millis_int1=0; void setup() { // запуск последовательного порта Serial.begin(115200); delay(10); Serial.print("Connect to WiFi"); Serial.println(ssid); // Соединяемся по WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } Serial.println("WiFi connected"); // запуск dht dht.begin(); } void loop() { // ждем интервал 10 минут if(milis()-millis_int1>=10*60000) { Serial.print("connect to ThingSpeak"); Serial.println(host); // Используем WiFi клиент WiFiClient client; if (!client.connect(host, 80)) { Serial.println("connection failed"); return; } // получить данные температуры temp = get_data_temperature(); humidity = get_data_humidity(); // Создаем URL с запросом для сервера String url = "/update?key="; url += privateKey; url += "&temp="; url += temp; url += "&humidity="; url += humidity; // Отправляем запрос на сервер client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(10); // ответ сервера ThingSpeak while(client.available()){ String req = client.readStringUntil("\r"); Serial.print(req); } } } Теперь в сервисе ThingSpeak мы можем смотреть график показаний нашего датчика температуры DHT11 (рисунок 9).

Рисунок 9. График показаний датчика температуры DS18B20 в сервисе ThingSpeak.

Часто задаваемые вопросы FAQ

1. Модуль не отвечает на AT-команды
  • Проверьте правильность подключения модуля;
  • Проверьте правильность подключения контактов Rx,Tx к переходнику UART-USB ;
  • Проверьте подключение контакта CH_PD к 3.3 В;
  • Подберите экспериментально скорость обмена по последовательному порту.
2. Модуль ESP-01 не получает данные температуры от датчика DHT11
  • Проверьте правильность подключения датчика DHT11 к модулю.
3. Не передаются данные в сервис ThingSpeak
  • Проверьте подключение модуля к точке доступа WiFi;
  • Проверьте подключение точки доступа WiFi к сети интернет;
  • Проверьте правильность запроса к сервису ThingSpeak.

Как использовать модуль ESP-01 для управления светодиодом через Интернет, модуль, который позволяет вам управлять любым электрическим устройством.

В этом уроке по ESP8266 мы используем модуль ESP-01 для управления светодиодом через Интернет. ESP8266 - дешевая, но эффективная платформа для общения через Интернет.

Он также прост в использовании с Ардуино. Пройдя этот урок, вы получите основные знания по управлению любым электрическим устройством через Интернет из любой точки мира!

Здесь мы будем использовать USB-to-TTL конвертер для программирования ESP8266 ESP-01. И мы будем использовать для разработки веб-сервера для удаленного управления светодиодом.

Как это работает

ESP8266 можно контролировать из локальной сети Wi-Fi или из Интернета (после переадресации портов). Модуль ESP-01 имеет контакты GPIO, которые могут быть запрограммированы для включения или выключения светодиода или реле через Интернет. Модуль можно запрограммировать с помощью конвертера Arduino USB-to-TTL через последовательные контакты (RX, TX).

Подключение оборудования к вашему ESP8266

Мы можем использовать конвертер USB-to-TTL или использовать Arduino для программирования ESP8266. Вот три способа, которым вы можете следовать, чтобы загрузить код в ESP8266 - выберите тот, который вам подходит лучше всего. Обратитесь к диаграммам для каждого варианта и соответствующим образом настройте своё оборудование.

1. Конвертер USB-to-TTL с использованием разъема DTR

Если вы используете конвертер USB-to-TTL с выводом DTR, загрузка будет идти гладко. Пожалуйста, имейте в виду, что серийный монитор не будет работать при этом.

USB TTL → ESP8266 ESP-01
GND → GND
TX → RX
RX → TX
RTS → RST
DTR → GPIO0

2. Конвертер USB в TTL без вывода DTR

Чтобы подключить конвертер USB-TTL без вывода DTR, мы должны использовать ручную передачу. Для этого мы используем две кнопки - см. следующую диаграмму:

USB TTL → ESP8266 ESP-01
GND → GND
TX → RX
RX → TX
Reset Button → RST
Flash Button → GPIO0

При загрузке кода нажмите кнопку "Загрузки" (Flash). Держите кнопку нажатой, в тот момент когда вы нажимаете один раз кнопку "Перезагрузка/Сброс" (Reset). Теперь вы можете отпустить кнопку Flash. ESP8266 теперь находится в режиме в котором вы сможете загрузить эскиз.

3. Использование Arduino Uno для загрузки кода в ESP8266

Вы можете использовать для запуска кода ESP8266 ESP-01. При загрузке кода следуйте той же процедуре, что во втором пункте, - удерживайте кнопку "Загрузки" нажатой, когда вы нажимаете один раз на сброс, а после отпускаете кнопку Flash.

ARDUINO → ESP8266 ESP-01
GND → GND
TX → TX
RX → RX
Кнопка Reset → RST
Кнопка Flash → GPIO0

Загрузка кода ESP8266

Используйте любой из приведенных выше способов и откройте , затем выберите плату ESP8266 в меню:

Tools → Board → Generic ESP8266 Module
(Инструменты → Плата → Модуль ESP8266)

Примечание. Если вы не установили и не настроили плату ESP8266 для Arduino, сделайте это, выполнив шаги выше этого руководства. Затем можете идти дальше.

Теперь скопируйте приведенный ниже код в Arduino IDE и нажмите кнопку загрузки. Измените SSID на точку доступа Wi-Fi и измените пароль на свой пароль Wi-Fi и скомпилируйте.

#include const char* ssid = "YOUR_SSID";//type your ssid const char* password = "YOUR_PASSWORD";//type your password int ledPin = 2; // GPIO2 of ESP8266 WiFiServer server(80);//Service Port void setup() { Serial.begin(115200); delay(10); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.print("Use this URL to connect: "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request String request = client.readStringUntil("\r"); Serial.println(request); client.flush(); // Match the request int value = LOW; if (request.indexOf("/LED=ON") != -1) { digitalWrite(ledPin, HIGH); value = HIGH; } if (request.indexOf("/LED=OFF") != -1){ digitalWrite(ledPin, LOW); value = LOW; } //Set ledPin according to the request //digitalWrite(ledPin, value); // Return the response client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); // do not forget this one client.println(""); client.println(""); client.print("Led pin is now: "); if(value == HIGH) { client.print("On"); } else { client.print("Off"); } client.println("

"); client.println("Click here turn the LED on pin 2 ON
"); client.println("Click here turn the LED on pin 2 OFF
"); client.println(""); delay(1); Serial.println("Client disconnected"); Serial.println(""); }

Откройте последовательный монитор и откройте URL, показанный на вашем последовательном мониторе, через веб-браузер. Подключите GPIO 2 от ESP8266 к более длинному выводу светодиода. Теперь вы можете управлять светодиодом удаленно через Интернет!

Удалите все провода, которые были необходимы для загрузки кода. Модуль LM1117 используется для обеспечения регулируемого выхода 3,3 В. Это позволит вам сделать модуль ESP8266 или ESP-01 автономным.

Подключение ESP8266 к Интернету

В настоящее время модуль ESP8266 доступен только через локальную сеть Wi-Fi. Чтобы управлять устройствами из Интернета, вам необходимо выполнить переадресацию портов на маршрутизаторе.

Для этого найдите IP-адрес вашей системы либо с помощью команды «ifconfig» в вашем терминале, либо перейдите на страницу whatsmyip.org. Скопируйте свой IP-адрес. Теперь откройте настройку маршрутизатора и перейдите в настройки «Переадресация». Введите данные для «Сервисного порта» и «IP-адреса». Сервисный порт - это номер порта из вашего кода Arduino (служебный порт: 80):

WiFiServer server(80);//Service Port

IP-адрес тот, который вы указали ранее. Оставьте остальные настройки по умолчанию. Теперь перейдите в свой браузер и введите адрес: xxx.xxx.xx.xx: 80. Должна открыться страница для управления светодиодом.

Моуль esp-01
Схема правильного подключения модуля esp-01 для программирования и прошивки.

Прошивка модуля производится переводом в режим программирования, для этого зажимает кнопку FLASH затем не отпуская кратковременно нажимаем на кнопку RESET и отпускаем FLASH.
Модуль переведён в режим программирования.
В терминале в этот момент можно увидеть

ets Jan 8 2013,rst cause:2, boot mode:(1,6)
boot mode:(1,6) - перезагрузка по RESET в режим программирования
boot mode:(1,7) - перезагрузка по питанию в режим программирования - что не совсем правильно.

Для прошивки буду использовать программу NODEMCU FIRMWARE PROGRAMMER
(К топику будет приложен архив с программой)
Распаковываем архив и запускаем в моём случае 32 разрядную версию программы\Win32\Release\ESP8266Flasher.exe
Настраиваем под модуль, в моём случае это 1 Мегабайт флэш памяти или 8 Мегабит.




Первым делом требуется стереть память пустым файлом в 1 Мб.
Это необязательный пункт. Стирание можно пропустить и перейти к прошивке.
У кого память больше или меньше - требуется пустой файл соответствующего размера.
Далее определяемся какая нужна прошивка!
Можно использовать как готовые прошивки на NODEMCU так и с конструктора собрать с нужными себе модулями.
Например одна из старых проверенных NODEMCU

Конструктор wifi-iot.com/
Конструктор nodemcu-build.com/
или качаем последнюю

Проблемы при прошивке
Если модуль esp8266 не прошивается, проверьте подтяжки и корректность замыкания на GND GPIO0. А также не перепутаны ли RX TX.
В терминале можно проверить чтобы выдавалось boot mode:(1,6) или boot mode:(1,7).

Если после неудачной прошивке модуль не работает, пробуйте стереть память пустым файлом бланк размером с вашу память.

Если модуль после успешной прошивки не работает и в порт шлёт без конца мусор(может мигать светодиод передачи данных), случается это при прошивке последних сборок Nodemcu то дополнительно потребуется прошить файл в область памяти в зависимости от чипа памяти.
С сайта nodemcu взята информация по памяти.
0x7c000 для 512 kB, модули такие как ESP-01,03,07
0xfc000 for 1 MB, модули типа ESP8285, PSF-A85 но и некоторые разновидности esp-01,01s
0x1fc000 for 2 MB
0x3fc000 for 4 MB, тип модуля ESP-12E, NodeMCU devkit 1.0, WeMos D1 mini идр

Если ничего не помогает, то пишите…

Добавлю официальнаг группа производителя оборудования

Всё больше набирает популярности, и уже Arduino подхватывает инициативу - добавляя эти Wi-Fi модули в список поддерживаемых плат.
Но как же его подключить к ардуино? И возможно как-то обойтись вообще без ардуино? Сегодня именно об этом и пойдёт речь в этой статье.

Забегая наперёд, скажу, что будет вторая статья, уже более практическая, по теме прошивки и программирования модуля ESP8266 в среде разработки Arduino IDE . Но, обо всём по порядку.

Этот видеоролик, полностью дублирует материал, представленный в статье.



На данный момент, существует много разновидностей этого модуля, вот некоторые из них:

А вот распиновка ESP01, ESP03, ESP12:


* Данную картинку можно посмотреть в хорошем качестве на офф. сайте pighixxx.com .

Лично мне, больше всего нравится версия ESP07. Как минимум за то, что тут есть металлический экран (он защищает микросхемы от внешних наводок, тем самым обеспечивает более стабильную работу), своя керамическая антенна, разъём для внешней антенны. Получается, подключив к нему внешнюю антенну, например типа биквадрат , то можно добиться неплохой дальности. К тому же, тут есть немало портов ввода вывода, так называемых GPIO(General Purpose Input Output - порты ввода-вывода общего назначения), по аналогии с ардуино - пинов.

Давайте вернёмся к нашим баранам Wi-Fi модулям и Arduino. В этой статье, я буду рассматривать подключение ESP8266(модели ESP01) к Arduino Nano V3.

Но, данная информация будет актуальна для большинства модулей ESP8266 и так же разных Arduino плат, например самой популярной Arduino UNO.

Пару слов по ножкам ESP01:

Vcc и GND (на картинке выше это 8 и 1) - питание, на ножку Vcc можно подавать, судя по документации , от 3 до 3.6 В , а GND - земля (минус питания). Я видел, как один человек подключал этот модуль к двум AA аккумуляторам (напряжение питания в этом случае было примерно 2.7 В) и модуль был работоспособным. Но всё же разработчики указали диапазон напряжений, в котором модуль должен гарантированно работать, если вы используете другой - ваши проблемы.

Внимание! Этот модуль основан на 3.3 В логике, а Arduino в основном - 5 В логика. 5 В запросто могут вывести из строя ESP8266, потому на него нужно отдельно от ардуино подавать питание .

- На моей ардуинке есть ножка, где написано 3.3 В, почему бы не использовать её?

Наверное подумаете вы. Дело в том, что ESP8266 довольно таки прожорливый модуль, и в пиках может потреблять токи до 200 мА, и почти никакая ардуинка по умолчанию не способна выдать такой ток, разве что исключением является Arduino Due , у которой ток по линии 3.3 В может достигать 800 мА, чего с запасом хватит, в других же случаях советую использовать дополнительный стабилизатор на 3.3 В, например AMS1117 3.3 В . Таких валом как в Китае, так и у нас.

Ножка RST 6 - предназначена «железной» для перезагрузки модуля, кратковременно подав на неё низкий логический уровень, модуль перезагрузиться. Хоть и на видео я этим пренебрёг, но всё же вам советую «прижимать» данную ногу резистором на 10 кОм к плюсу питания , дабы добиться лучшей стабильности в работе модуля, а то у меня перезагружался от малейших наводок.

Ножка CP_PD 4(или по-другому EN ) - служит, опять же, для «железного» перевода модуля в энергосберегающий режим, в котором он потребляет очень маленький ток. Ну и снова - не будет лишним «прижать» эту ногу резистором на 10 кОм к плюсу питалова. На видео я тупо закоротил эту ногу на Vcc, потому как под рукой не оказалось такого резистора.

Ноги RXD0 7 TXD0 2 - аппаратный UART, который используется для перепрошивки, но ведь никто не запрещает использовать эти порты как GPIO(GPIO3 и GPIO1 соотвественно). GPIO3 на картинке почему-то не размечен, но в даташите он есть:

К стати, к ножке TXD0 2 подключен светодиод «Connect», и горит он при низком логическом уровне на GPIO1, ну или когда модуль отправляет что-то по UART.

GPIO0 5 - может быть не только портом ввода/вывода, но и переводить модуль в режим программирования. Делается это подключив этот порт к низкому логическому уровню(«прижав» к GND) и подав питание на модуль. На видео я делаю это обычной кнопкой. После перепрошивки - не забудьте вытащить перемычку/отжать кнопку(кнопку во время перепрошивки держать не обязательно, модуль при включении переходит в режим программирования, и остаётся в нём до перезагрузки).

GPIO2 3 - порт ввода/вывода.

И ещё один немаловажный момент, каждый GPIO Wi-Fi модуля может безопасно выдавать ток до 6 мА , чтобы его не спалить, обязательно ставьте резисторы последовательно портам ввода/вывода на… Вспоминаем закон Ома R = U/I = 3.3В / 0.006 А = 550 Ом, то есть, на 560 Ом . Или же пренебрегайте этим, и потом удивляйтесь почему оно не работает.

В ESP01 все GPIO поддерживают ШИМ, так что к нашим четырём GPIO, то есть GPIO0-3 можно подключить драйвер двигателя, аля L293 / L298 и рулить двумя двигателями, например катера, или же сделать RGB Wi-Fi приблуду. Да, да, данный модуль имеет на борту много чего, и для простеньких проектов скрипач Arduino не нужен, только для перепрошивки. А если использовать ESP07 то там вообще портов почти как у Uno, что даёт возможность уже уверенно обходиться без ардуино. Правда есть один неприятный момент, аналоговых портов у ESP01 вообще нет, а у ESP07 только один, ADC зовётся. Это конечно усугубляет работу с аналоговыми датчиками. В таком случае ардуино аналоговый мультиплексор в помощь.

Всё вроде как по распиновке пояснил, и вот схема подключения ESP8266 к Arduino Nano:

Видите на Arduino Nano перемычка на ножках RST и GND? Это нужно для того, чтобы ардуинка не мешала прошивке модуля, в случае подключения ESP8266 при помощи Arduino - обязательное условие.

Так же если подключаете к Arduino - RX модуля должен идти к RX ардуинки, TX - TX. Это потому, что микросхема преобразователь уже подключена к ножкам ардуино в перекрестном порядке.

Так же немаловажен резистивный делитель, состоящий из резисторов на 1 кОм и 2 кОм (можно сделать из двух резисторов на 1 кОм последовательно соединив их) по линии RX модуля. Потому как ардуино это 5 В логика а модуль 3.3. Получается примитивный преобразователь уровней. Он обязательно должен быть, потому что ноги RXD TXD модуля не толерантные к 5 В.

Ну и можно вообще обойтись без ардуино, подключив ESP8266 через обычный USB-UART преобразователь. В случае подключения к ардуино, мы, по сути, используем штатный конвертер интерфейсов usb и uart, минуя мозги. Так зачем тратиться лишний раз, если можно обойтись и без ардуино вообще? Только в этом случае, мы подключаем RXD модуля к TXD конвертора, TXD - RXD.

Если вам лениво заморачиваться с подключением, возится с резисторами и стабилизаторами - есть готовые решения NodeMcu:

Тут всё значительно проще, воткнул кабель в компьютер, установил драйвера и программируй, только не забывай задействовать перемычку/кнопку на GPIO0 для перевода модуля в режим прошивки.

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

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

Разбираться мы будем на основе самого дешевого и популярного WiFi модуля ESP8266-01 . Купить WiFi модуль ESP8266-01 можно у нас на сайте.

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

Модификаций WiFi модуля ESP8266 на самом деле достаточно много и перечислять их здесь мы не будем, научившись работать с одним, Вы без проблем сможете начать работать и с другими. Хочется сразу отметить, что работа с WiFi может показаться довольно не простым занятием, и если в Вашем багаже мало законченных проектов, лучше пока отказаться от WiFi связи и использовать в своих проектах радиосвязь, работа с которой гораздо проще для понимания. По работе с WiFi модулями создают целые сообщества и тематические форумы, что лишний раз доказывает насколько большинству людей трудно сразу разобраться с данным видом связи, а перечитывая всю информацию, у большинства людей просто опускаются руки. Скорей всего и мне не удастся всю важную информацию вместить в рамках только одной этой статьи, да и нет в этом смысла, иначе получится очередная путаница. Я попытаюсь пойти по пути строгой последовательности самых важных моментов, чтобы Вы смогли начать понимать принцип работы данного вида связи и далее уже просто развивать самостоятельно свои навыки в этом направлении.

И так, давайте приступим и для начала разберем выводы WiFi модуля ESP8266-01 .

VCC - питание модуля от 3V до 3.6V

GND - земля.

RST - вывод Reset отвечающий за перезагрузку модуля.

CH_PD - "chip power-down" при подаче питания на него активизируется работа модуля.

TX - передача данных (UART интерфейс)

RX - прием данных (UART интерфейс)

GPIO0

GPIO2 - порт ввода/вывода общего назначения

Выводы GPIO0 и GPIO2 - это точно такие же цифровые выводы, с которыми мы работаем на платах Arduino для взаимосвязи с различными датчиками, и применяются они в случае реализации самостоятельной работы на внутреннем микроконтроллере WiFi модуля ESP8266-01.

Для надежного питания модуля ESP8266-01 используйте внешний стабилизированный источник питания на 3.3V и лучше не пытайтесь брать питание от своей платы Arduino, так как модуль потребляет ток до 215mA и это может плохо закончится для вашей отладочной платы. Где взять стабилизированный источник питания на 3.3V надеюсь для вас не проблема, в противном случае вам явно еще рано заниматься данным модулем. Мне, например, нравится использовать для быстрого сбора схем на макетных платах вот такой модуль питания 3.3V и 5.0V YWRobot , который позволяет быстро получить стабилизированное напряжение на 3.3V или 5V на соответствующих дорожках питания макетной платы.

Подключаем плюс (+) от нашего источника питания 3.3V к выводу VCC модуля ESP8266-01, а минус (-) источника питания подводим к выводу GND . В таком состоянии на модуле включится красный светодиод, сигнализирующий нам о правильном подключении питания. Для того чтобы модуль активизировался, необходимо также соединить плюс (+) источника питания с выводом CH_PD модуля ESP8266-01 и желательно это сделать сразу через резистор 10кОм. Теперь, когда мы включим питание, на модуле должен загореться красный светодиод и пару раз быстро мигнуть синий светодиод. Если у вас так все и происходит, значит все отлично, вы правильно все подсоединили и ваш модуль рабочий. В противном случае еще раз проверьте подключение, либо замените модуль, так как он скорей всего не рабочий.

Идем дальше. Для работы с WiFi модулем ESP8266 нам необходим переходник USB-UART. Переходники бывают разные, например: FT232RL , CP2102 , PL2303 . Но мы предположим, что у вас нет таких переходников, и будем в качестве переходника USB-UART использовать плату Arduino. Я буду использовать для этого плату Arduino NANO, а вы можете использовать любую другую имеющуюся в вашем распоряжении. Подключение на любой плате один в один идентично. Производим подключение согласно следующей схеме.

Давайте рассмотрим, что мы здесь сделали. Сразу обратите внимание на то, что мы замкнули перемычкой на плате Arduino выводы RST и GND . Такая манипуляция отключает микроконтроллер и позволяет сделать из нашей платы Arduino самый настоящий переходник USB-UART.

Так как WiFi модуль ESP8266-01 мы питаем от отдельного внешнего источника питания, незабываем, что мы должны всегда соединять между собой землю всех источников питания в наших проектах. Поэтому мы соединяем вывод GND платы Arduino c землей (-) нашего внешнего источника питания 3.3V, предназначенного для питания модуля ESP8266-01.

Вывод TX вашей платы Arduino соединяем с выводом TX модуля ESP8266-01. По этой линии будут передаваться данные от WiFi модуля к плате Arduino. Кто знаком с UART интерфейсом, может задуматься: "Но как же так? Везде учили, что TX должен соединяться с RX. TX передает информацию, а RX принимает". И Вы будете правы. Всё верно всегда TX соединяется с RX, но именно в случае, когда мы делаем из Arduino переходник UART, необходимо подключать устройства напрямую. Считайте это исключением из правил.

Линию RX вашей платы Arduino подключаем так же напрямую к линии RX модуля ESP8266-01. По этой линии будет передаваться информация от платы Arduino на плату WiFi модуля. Но делаем это соединение через так называемый делитель напряжения, состоящий из двух резисторов номиналами 1кОм и 2кОм. Уменьшить напряжение на этой линии с помощью двух резисторов (делителя напряжения) нам необходимо, так как плата Arduino передает логический сигнал напряжением 5V, а WiFi модуль работает с напряжением 3.3V. Для преобразования логического сигнала мы могли бы использовать специальную платку преобразователя логических уровней, что было бы конечно правильней, но опять же предположим, что у вас ее нет, и нам пришлось пойти более простым путем и сделать это с помощью делителя напряжения.

Всё необходимое для дальнейшей работы мы пока подключили, но у нас остаются не задействованные ещё 3 вывода (GPIO0 , GPIO2 и RST ) на WiFi модуле ESP8266-01 . Для стабильной работы WiFi модуля нам необходимо эти оставшиеся не задействованные выводы подтянуть к плюсовой (+) линии питания модуля через резисторы в 10кОм.

Это избавит нас от различных помех (наводок) и сделает работу модуля стабильной. Лучше это делать сразу. В противном случае не удивляйтесь, что ваш модуль постоянно перегружается, выдает не понятную информацию, либо вообще не хочет работать. Использовать подтягивающие резисторы на незадействованных выводах микроконтроллера должно быть, как правило, если хотите стабильной работы в ваших проектах.

И снова проверяем работоспособность модуля WiFi ESP8266-01. Включаем питание и смотрим, чтобы зажегся красный светодиод и пару раз мигнул синий. Если всё так происходит, значит отлично, идем дальше. В противном случае проверяем правильность соединений, а так же качество всех контактов. Может быть просто банальная ситуация, когда десять раз все перепроверили и убедились, что все правильно подключили, но включая модуль, видите, что синий светодиод ведет себя не адекватно, постоянно горит, постоянно мигает или вообще не на что не реагирует. Это может происходить из-за плохого контакта на какой-то линии. Например, собирая схему на макетной плате, какой-нибудь из резисторов неплотно сидит на своем месте и это вызывает помехи. Проверяйте качество соединений. Модуль очень чувствителен. Не пренебрегайте этим. Это частая причина не стабильной работы.

В общем, с подключением мы закончили. Сейчас нам необходимо подготовить программу Arduino IDE для работы с WiFi модулем ESP8266-01. Для этого нам надо скачать и установить в Arduino IDE необходимый архив с библиотеками, примерами и платами ESP, который впоследствии позволит нам заливать скетчи прямо в микроконтроллер модуля ESP8266-01, менять прошивку и т.д. В рамках этой статьи нам скорей всего эти настройки и не понадобятся, но мне кажется, что после того, как мы разобрались с подключением модуля, порядок действий будет правильным, если мы сразу скачаем все необходимое для работы с Arduino IDE. Тут все в принципе просто.

Запускаем программу Arduino IDE и переходим в меню "Файл" - "Настройки"

В появившемся окне в верхнем поле пишем "esp8266". В итоге в окне у нас останется только нужная прошивка. При нажатии на прошивку появится кнопка "Установка" . Нажимаем на кнопку "Установка" и ждем, пока все установится. Архив достаточно большой, около 150 мегабайт, так что придется подождать.

После окончания установки. Перезагружаем Arduino IDE и видим, как появились новые платы ESP в меню "Инструменты" - "Платы". На этом всё. С настройкой Arduino IDE мы закончили. Пока нам эти настройки не нужны, но в дальнейшей работе нам без них не обойтись.

Всё мы подключили и подготовились, теперь можем начать разбираться с управлением. На самом деле, сейчас будет продолжение проверки и настройки модуля с помощью AT команд и без этого ни как не обойтись. WiFi модули реализованы так, что всё общение с ними происходит с помощью так называемых AT команд, которые зашиты в прошивке модуля. Мы не будем здесь перечислять все AT команды, их достаточно много и если захотите все тщательно изучить, можете без труда их найти в интернете. А мы будем использовать сейчас только самые необходимые для начала работы.

И так, подключаем нашу плату Arduino через USB кабель к компьютеру. А внешний источник питания, который питает WiFi модуль ESP8266-01 пока включать не надо. Запускаем программу Arduino IDE, выбираем в меню "Инструменты" нашу плату Arduino, в моем случае это Arduino NANO, а вы выбираете свою. Так же не забываем выбрать порт к которому подключена наша Ардуинка. Надеюсь все это вы понимаете и делать умеете.

Открываем мониторинг порта "Инструменты" - "Монитор порта" . Выбираем скорость порта 74880 (на такой скорости происходит запуск модуля) и слева в списке выбираем "NL & CR"

Вот теперь подключаем внешний источник питания который питает наш WiFi модуль. После чего вы должны увидеть в мониторе порта примерно такую информацию.

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

Чтобы подобрать правильную скорость порта, будем просто изменять скорость порта и посылать в порт (поле сверху и кнопка отправить) символы AT пока не получим ответ ОК . Если Вы попробуете прямо сейчас послать символы AT в порт на скорости 74880, то будете получать очередные один-два бессмысленных символа в ответ.

Попробуйте сразу выставить скорость 115200 бод и послать команду AT. Чаще всего модули прошиты на эту скорость.

Вот такую картину вы должны увидеть в вашем мониторе порта. Если все равно в ответ пришел непонятный набор символов, понижайте скорость и повторяйте отправку AT команды, пока в ответ не вернется ОК . Если вы перепробовали все скорости и не добились правильного ответа, значит вам не повезло и модуль прошит прошивкой с нестандартной скоростью. Тогда остается только перепрошить модуль нормальной прошивкой, но это тема отдельной статьи.

Надеюсь, что все хорошо и скорость правильную вы подобрали. Кстати если вы попробуете выключить и снова включить WiFi модуль, после того как подобрали правильную скорость, то уже вместо той самой первоначальной информации, которая корректно отображалась на скорости 74880 бод, вы наоборот, увидите беспорядочный набор символов, но в конце вы увидите слово "ready". Но у нас есть возможность посмотреть эту первоначальную информацию в нормальном виде на правильной скорости, для этого необходимо программно перезагрузить модуль с помощью AT-команды AT+RST .

Чтобы узнать версию прошивки вашего WiFi модуля ESP8266-01, необходимо в монитор порта отправить команду AT+GMR и в ответ вы получите примерно следующую информацию:

WiFi модуль ESP8266-01 может работать как в режиме точки доступа, так и в режиме клиента. Чтобы разрешить модулю работать сразу во всех режимах, отправьте в монитор порта команду AT+CWMODE=3 и в ответ вы должны получить ОК .

Команда AT+CWLAP позволит посмотреть все WiFi точки доступа, которые видит в данный момент ваш модуль. Мой модуль, например, видит на данный момент в зоне своего покрытия всего три WiFi точки доступа. Ответ должен быть примерно таким:

Например, мы знаем пароль к третьей точке доступа и чтобы подключиться к ней выполняем команду AT+CWJAP="имя","пароль" , в моем случае эта команда выглядит AT+CWJAP="dsl_unlim_512_home","11111111" , на что получаем успешный ответ:

Параметры команды записываются на флеш память WiFi модуля ESP8266-01, и если мы выключим модуль и опять его включим, он автоматически подключится к этой точке доступа. Смотрите случайно в команде не допустите пробел, иначе получите в ответ ERROR . Необходимо обратить внимание, что в последних версиях прошивки рекомендуют использовать команду AT+CWJAP_CUR , то есть команда будет выглядеть AT+CWJAP_CUR="имя","пароль". Если вдруг мы забыли, к какой точке доступа подключен наш модуль, необходимо послать команду AT+CWJAP? или AT+CWJAP_CUR? и в ответ получим ту точку доступа, к которой подключен WiFi модуль на данный момент.

С подключением и первоначальной настройкой WiFi модуля ESP8266-01 мы разобрались. Модуль работает и готов для реализации ваших дальнейших проектов. Разобрать все возможные примеры работы с данным модулем в рамках одной статьи просто не возможно и мы этим займемся в следующих статьях. А для тех, кто не очень дружит с программированием, но очень хочет побыстрей начать управлять своими проектами с помощью WiFi, рекомендую познакомить с конструктором WiFi проектов RemoteXY . Этот сайт поможет вам без особого труда создать интерфейс управления для вашего мобильника или планшета и с помощью него управлять своим устройством, к которому вы подключите WiFi модуль.