Arduino wifi esp8266 esp 12e

Как у меня заработал WIFI для Arduino ESP8266 ESP-12E

Плата ESP8266 ESP-12 ESP-12E UART Wi-Fi устанавливается сверху на плату Arduino UNO R3 и позволяет получать доступ к управлению и состоянием Arduino из интернет. И я заставил этот слоеный пирог заработать.

Компоненты Arduino для работы покупал в магазине All Electronics Trading Company.

Все быстро пришло. Почти все из того что заказал в этом магазине было отличного качества.

Исключение составляла комбинированная плата с разными датчиками, светодиодами и кнопками s.click.aliexpress.com/e/ct9JuGza. Эта плата была какой-то ручной пайки, но полностью работала.

Платы, которые использовались при написании статьи:

Закачал пустой скетч в Arduino U3.

void setup () <
// поместите здесь свой установочный код, чтобы запустить его один раз:
>
void loop () // поместите ваш основной код здесь для повторного запуска:
>

Действуя по инструкции 1 я ничего не достиг. Все комбинации перепробовал.

Раньше где-то слышал, что процедура прошивки требует намного большей мощности, чем штатная работа, и мощности питания от Arduino не всегда хватает.

На момент прошивки нужен отдельный источник питания. Заподозрил что у меня именно эта ситуация.

Esp8266 питается от 3.3V, а Uno использует 5V. В инструкции 1 написано, что 5V не трогаем. Автор инструкции 2 подключает на свой страх и риск (о чем говорит) плату Esp8266 к 5V выходу UNO R3. Я тоже так решил сделать, подключив все вот так.

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

Плата синхронизировалась, но как-то не до конца.

Содержимое окна FLASH_DOWNLOAD_TOOLS_v2.4_150924 было почти такое же, как в инструкции 1:

но у меня поле MAC adress заполнилось, а вот DETECTED IINFO оставалось пустым.

В логе содержалась фраза «error read crystal«. Подумал было что все-таки сжег плату, подав напряжение 5V на свой страх и риск.

Но нашел подобную проблему в ветке форума ERROR FLASHING FIRMWARE. Проблему решили, записав в Arduino U3 пустой скетч.

Да я же делал это в самом начале!

Снова записал пустой скетч и на этом этапе все заработало. А именно — содержимое окна FLASH_DOWNLOAD_TOOLS_v2.4_150924 стало таким же, как в инструкции 1.

И прошивка залилась в плату ESP8266 ESP-12 ESP-12E UART Wi-Fi.

Может, когда на первом этапе ничего не получалось, что-то залил в Arduino R3?

Начал дальше следовать инструкции 1, поместив плату ESP8266 на Arduino UNO R3 — и опять ничего не ладилось. Что бы не делал с переключателями Р1, Р2 — не проходили команды.

Снова обратился к инструкции 2.

Вернул подключение ESP8266 к UNO через Debug Port, но уже с использованием 3.3V — flash загрузчик уже не надо было использовать и решил не испытывать плату на прочность.

И отправил при таком подключении команду «AT+UART_DEF=9600,8,1,0,0». Вернуло ERROR.

Тут оказалось, что внимательно надо следить за регистрами и за отсутствием пробелов. Команды копировал с сайтов, а там были пробелы и поэтому возвращало ERROR.

Читайте также:  Using phone data as wifi

Также нужно следить за регистрами. Команда «AT» принимается как в верхнем, так и в нижнем регистре. Остальные команды только в верхнем.

Дальше действовал по инструкции 1.

Небольшой трудностью на этом этапе было привязать статичный IP адрес — пришлось выяснять пароль от модема ZyXel Keenetic 4G II.

Теперь можно было с Web-страницы при помощи кнопки управлять светодиодом, подключенным к Arduino UNO R3, и видеть его состояние.

Материалы со страницы «Инструкция 1».

На данный момент на странице инструкции 1 www.instructables.com/id/ESP8266-ESP-12E-UART-Wireless-WIFI-Shield-TTL-Conv/ такие версии используемых файлов:

Почему бы не использовать совмещенную плату UNO+ESP8266?

Есть в природе плата, аналогичная вроде-бы двум описываемым выше.

UNO + WiFi R3 ATmega328P + ESP8266 (32 Мб памяти), USB-TTL CH340G. Совместимость Uno, NodeMCU, WeMos ESP8266.

Получается дешевле на 100р, чем описываемые выше в паре.

UPD

С ней оказалось все немного по другому.

Источник

Arduino Due + ESP8266 ESP-12E c адаптером — быстрый старт

Код взят отсюда. Но меня сразу смутило наличие внешнего источника питания и мне пришлось поменять скорость серийного порта с 9600 на 115200 не считая небольших правок.
Код показывает работу с Wi-Fi модулем на низком уровне, но для того, чтобы не усложнять пример, используются задержки. Так что для реальных проектов я рекомендую использовать библиотеку, которая скрывает взаимодействие с модулем.

Due Serial (Tx/Rx) — используется для коммуникации с компьютером по USB
Due Serial3 (Tx3/Rx3) — подключен к ESP8266 в обратном порядке (Rx/Tx):
Due Tx3 — ESP8266 Rx
Due Rx3 — ESP8266 Tx

Due VCC 3.3V — ESP8266 VCC
Due GND — ESP8266 GND

#define ESP8266 Serial3 String SSID = "WIFI"; String PASSWORD = "PassWord"; int LED = 13; boolean FAIL_8266 = false; //Очистка буфера и его вывод void clearESP8266SerialBuffer(String title = "") < Serial.println("= clearESP8266SerialBuffer(" + title + ") =============================="); >void setup() < pinMode(LED, OUTPUT); digitalWrite(LED, LOW); Serial.begin(115200); ESP8266.begin(115200); //Ждем открытия окна консоли для вывода лога while(!Serial); Serial.println("--- Start ---"); do< Serial.println("--- Reset ---"); ESP8266.println("AT+RST"); delay(4000); if(ESP8266.find("ready")) < Serial.println("Module is ready"); ESP8266.println("AT+CWMODE=1"); delay(2000); if(cwJoinAP()) < Serial.println("CWJAP Success"); FAIL_8266 = false; // Тут должно быть достаточно времени что бы подключиться к роутеру delay(5000); //Получение и вывод IP адреса sendESP8266Cmdln("AT+CIFSR", 1000); //Выбрать режима множественного подключения sendESP8266Cmdln("AT+CIPMUX=1", 1000); //Установка сервера на порт 80 sendESP8266Cmdln("AT+CIPSERVER=1,80",1000); Serial.println("Server setup finish"); >else < Serial.println("CWJAP Fail"); delay(500); FAIL_8266 = true; >>else < Serial.println("Module have no response."); delay(500); FAIL_8266 = true; >>while(FAIL_8266); digitalWrite(LED, HIGH); > void loop()< if(ESP8266.available()) < Serial.println("Something received"); delay(1000); if(ESP8266.find("+IPD,")) < String action; Serial.println("+IPD, found"); int connectionId = ESP8266.read()-48; Serial.println("connectionId: " + String(connectionId)); ESP8266.find("led="); char s = ESP8266.read(); if(s=='0')< action = "led=0"; digitalWrite(LED, LOW); >else if(s=='1')< action = "led=1"; digitalWrite(LED, HIGH); >else < action = "led=?"; >Serial.println(action); sendHTTPResponse(connectionId, action); //Закрытие TCP/UDP String cmdCIPCLOSE = "AT+CIPCLOSE="; cmdCIPCLOSE += connectionId; sendESP8266Cmdln(cmdCIPCLOSE, 1000); > > > void sendHTTPResponse(int id, String content) < String response; response = "HTTP/1.1 200 OK\r\n"; response += "Content-Type: text/html; charset=UTF-8\r\n"; response += "Content-Length: "; response += content.length(); response += "\r\n"; response +="Connection: close\r\n\r\n"; response += content; String cmd = "AT+CIPSEND="; cmd += id; cmd += ","; cmd += response.length(); Serial.println("--- AT+CIPSEND ---"); sendESP8266Cmdln(cmd, 1000); Serial.println("--- data ---"); sendESP8266Data(response, 1000); >boolean waitOKfromESP8266(int timeout) < do< Serial.println("wait OK. "); delay(1000); if(ESP8266.find("OK")) < return true; >>while((timeout--)>0); return false; > boolean cwJoinAP() < String cmd="AT+CWJAP=\"" + SSID + "\",\"" + PASSWORD + "\""; ESP8266.println(cmd); return waitOKfromESP8266(10); >//Отправка команд на ESP8266, предположительный ответ OK, без проверок ошибок //wait some time and display respond void sendESP8266Cmdln(String cmd, int waitTime) < ESP8266.println(cmd); delay(waitTime); clearESP8266SerialBuffer("sendESP8266Cmdln"); >//То же что и sendESP8266Cmdln() //Но используется ESP8266.print() вместо ESP8266.println() void sendESP8266Data(String data, int waitTime)

— Start — — Reset — Module is ready
wait OK…
CWJAP Success
= clearESP8266SerialBuffer(sendESP8266Cmdln) =

WIFI CONNECTED
WIFI GOT IP
AT+CWJAP=«WIFI»,«PassWord»

Читайте также:  Пароль от wifi сети подобрать

WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP

OK
==============================
= clearESP8266SerialBuffer(sendESP8266Cmdln) =
AT+CIPMUX=1

OK
==============================
= clearESP8266SerialBuffer(sendESP8266Cmdln) =
AT+CIPSERVER=1,80

OK
==============================
Server setup finish
Something received
+IPD, found
connectionId: 0
led=0
— AT+CIPSEND — = clearESP8266SerialBuffer(sendESP8266Cmdln) =
HTTP/1.1
Host: 192.168.1.12
Connection: keep-alive
Cache-Control: max-age=0
Accept: teAT+CIPSEND=0,102

OK
> ==============================
— data — = clearESP8266SerialBuffer(sendESP8266Data) =

+IPD,0,349:GET /favicon.ico HTTP/1.1
Host: 192.168.1.12
Connection: keep==============================
= clearESP8266SerialBuffer(sendESP8266Cmdln) =
AT+CIPCLOSE=0

OK
==============================
Something received
+IPD, found
connectionId: 0
led=1
— AT+CIPSEND — = clearESP8266SerialBuffer(sendESP8266Cmdln) =
HTTP/1.1
Host: 192.168.1.12
Connection: keep-alive
Accept: text/html,application/xhtml+AT+CIPSEND=0,102

OK
> ==============================
— data — = clearESP8266SerialBuffer(sendESP8266Data) =

+IPD,0,349:GET /favicon.ico HTTP/1.1
Host: 192.168.1.12
Connection: keep==============================
= clearESP8266SerialBuffer(sendESP8266Cmdln) =
AT+CIPCLOSE=0

Дальше открываем браузер и вводим 192.168.1.12/?led=0 или 192.168.1.12/?led=1. IP будет варьироваться в зависимости от настроек DHCP.

В случае не правильных имя сети или пароля:

— Start — — Reset — Module is ready
wait OK…
CWJAP Success
= clearESP8266SerialBuffer(sendESP8266Cmdln) =

WIFI CONNECTED
WIFI GOT IP
AT+CWJAP=«WIFI»,«WrongPassWord»

busy p…
==============================
= clearESP8266SerialBuffer(sendESP8266Cmdln) =
AT+CIPMUX=1

busy p…
==============================
= clearESP8266SerialBuffer(sendESP8266Cmdln) =
AT+CIPSERVER=1,80

busy p…
==============================
Server setup finish
Something received

Источник

Дружимся с ESP

Последние пару лет практически все прототипирование несложных IoT-устройств я делаю на NodeMCU, хотя зачастую она и великовата по размеру, и дороговата, и избыточна по функционалу. А все потому, что имела неудачный опыт с ESP-01, которая совершенно не поддавалась прошивке. Сейчас пришло время преодолеть этот барьер и освоить другие железки, от которых мне нужно следующее — Wi-Fi и пины для подключения периферии.

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

Несколько представленных в статье модулей (ESP-01, ESP-07, ESP-12E, ESP-12F) и плат (Goouuu Mini-S1, WeMos D1 mini и NodeMCU V2) базируются на контроллере ESP8266, использование которого позволяет простым и дешевым способом добавить в своё устройство беспроводную связь через Wi-Fi.

Так выглядит модельный ряд модулей на базе чипа ESP8266.

Последняя плата из тех, о которых я расскажу (ESP32 WROOM DevKit v1), построена на контроллере семейства ESP32 — более продвинутой по своим возможностям версии ESP8266.

Все представленные модели можно программировать и загружать прошивки через Arduino IDE точно так же, как при работе с Arduino.

Настройка среды программирования Arduino IDE

По умолчанию среда IDE настроена только на AVR-платы. Для платформ, представленных ниже, необходимо добавить в менеджере плат дополнительную поддержку.

1) Открываем среду программирования Arduino IDE.

http://arduino.esp8266.com/stable/package_esp8266com_index.json, https://dl.espressif.com/dl/package_esp32_index.json

4) В пункте меню Tools (Инструменты) -> Board (Плата) выбираем Boards manager (Менеджер плат).

Находим в списке платформы на ESP8266 и нажимаем на кнопку Install (Установить).

6) Надпись INSTALLED сообщает, что дополнения успешно установлены.

Читайте также:  Local area connection wifi

7) Аналогичным образом устанавливаем дополнение для ESP32.

8) Теперь нам доступны к программированию платформы с модулем ESP8266 и ESP32.

9) Для подключения плат к платформе Интернета вещей используем библиотеку EspMQTTClient. Чтобы ее установить, в пункте меню Tools (Инструменты) выбираем Manage Libraries (Управлять библиотеками). Находим и устанавливаем библиотеку EspMQTTClient. Может появиться сообщение об установке дополнительных библиотек. Выбираем “Install all”.

Примечание — Также для работы с платами понадобится установить драйверы CH340 (WeMos и Goouuu) и CP2102 (для остальных). Их отсутствие повлияет на то, найдет ли Arduino IDE COM-порт, к которому подключена плата.

Код прошивки

Для прошивки всех используемых ниже модулей используем один и тот же код.

  1. Установка Wi-Fi соединения
  2. Подключение к объекту на платформе Rightech IoT Cloud по протоколу MQTT
  3. Отправка рандомных значений по температуре («base/state/temperature») и влажности («base/state/humidity») каждые 5 секунд (PUB_DELAY)
  4. Получение сообщений о переключении света («base/relay/led1»)
#include "Arduino.h" #include "EspMQTTClient.h" /* https://github.com/plapointe6/EspMQTTClient */ /* https://github.com/knolleary/pubsubclient */ #define PUB_DELAY (5 * 1000) /* 5 seconds */ EspMQTTClient client( "", "", "dev.rightech.io", "" ); void setup() < Serial.begin(9600); >void onConnectionEstablished() < client.subscribe("base/relay/led1", [] (const String &payload) < Serial.println(payload); >); > long last = 0; void publishTemperature() < long now = millis(); if (client.isConnected() && (now - last >PUB_DELAY)) < client.publish("base/state/temperature", String(random(20, 30))); client.publish("base/state/humidity", String(random(40, 90))); last = now; >> void loop()

Работоспособность кода будем проверять на платформе Rightech IoT Cloud, именно поэтому в качестве адреса MQTT-брокера указан dev.rightech.io. Идентификаторами клиентов служат идентификаторы объектов, созданных на платформе. Под каждую проверку я завела на платформе отдельный объект, именно поэтому во всех скринах кодов, которые будут далее представлены, отличается только строка .

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

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

Для работы с модулями на базе ESP8266 есть два варианта:

  1. Работа с AT командами (в стандартной прошивке Wi-Fi модуль общается с управляющей платой через «AT-команды» по протоколу UART);
  2. Wi-Fi модуль как самостоятельный контроллер (все представленные модули очень умные: внутри чипа прячется целый микроконтроллер, который можно программировать на языке C++ через Arduino IDE).

В статье будем рассматривать второй вариант — прошивка модулей в виде самостоятельного полноценного устройства. Здесь также есть два варианта прошивки с точки зрения железа:

Рассмотрим второй вариант — использовать адаптер на базе чипа CP2102 (например, такой https://www.chipdip.ru/product/cp2102-usb-uart-board-type-a?frommarket=https%3A%2F%2Fmarket.yandex.ru%2Fsearch%3Frs%3DeJwzSvKS4xKzLI&ymclid=16146772489486451735000001). Обязательно обратите внимание на то, чтобы адаптер позволял выдавать выходное напряжение 3.3 В, не больше!

1. ESP-01

ESP-01 — самый популярный модуль на ESP8266. PCB антенна обеспечивает дальность до 400 м на открытом пространстве.

Внешний вид

Питание

Родное напряжение модуля — 3,3 В. Его пины не толерантны к 5 В. Если вы подадите напряжение выше, чем 3,3 В на пин питания, коммуникации или ввода-вывода, модуль выйдет из строя.

Подключение периферии

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

Распиновка

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

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

Источник

Оцените статью
Adblock
detector