- Uno + ESP8266 WiFi
- AT-команды
- Скетчи для связки Uno+ESP8266
- Как у меня заработал WIFI для Arduino ESP8266 ESP-12E
- Платы, которые использовались при написании статьи:
- Материалы со страницы «Инструкция 1».
- Почему бы не использовать совмещенную плату UNO+ESP8266?
- UPD
- Arduino Wi-Fi Shield – плата расширения на базе ESP8266 (ESP-12E)
- Arduino Wi-Fi Shield — плата расширения на базе ESP8266 (ESP-12E) для Arduino UNO / MEGA
- Основные достоинства
Uno + ESP8266 WiFi
Несколько лет назад я купил отдельный модуль ESP8266 WiFi, но так и не воспользовался им. За прошедшее время ситуация изменилась. Появились новые платы с встроенным WiFi и Bluetooth как из семейства Arduino, так и платформе ESP32. Но я решил спустя столько времени всё-таки завести этот модуль и посмотреть, как он работает.
Платы на ESP8266 – это не просто модули для связи по Wi-Fi. Чип является микроконтроллером со своими интерфейсами SPI, UART, а также портами GPIO, а это значит, что модуль можно использовать без Arduino. Существует около 11 официальных модификаций платы. Самая простая плата – ESP01, с которой и будем знакомиться.
Для начала его надо правильно соединить с Uno. Главная особенность — модуль работает на 3.3В, поэтому будьте аккуратны.
Начнём с платы Arduino Uno.
1. Соединяем вывод 3.3V с красной дорожкой на макетной плате (питание). Если вы будете подключать другие датчики, которые потребляют 5 Вольт, то соединяйте их с красной дорожкой питания на другой стороне макетной платы.
2. Соединяем GND с синей дорожкой макетной платы (заземление).
3. Соединяем вывод RESET с синей дорожкой макетной платы. В этом случае Arduino работает последовательно как USB и мы можем общаться с ESP8266.
4. Соединяем вывод RX с аналогичным выводом RX на ESP8266 (жёлтый провод на рисунке).
5. Соединяем вывод TX с аналогичным выводом TX на ESP8266 (зелёный провод на рисунке).
Обычно для общения двух устройств мы должны соединять вывод TX первого устройства с выводом RX второго устройства. Но в нашем случае общается компьютер.
Осталось соединить провода у ESP8266 WiFi.
6. Соединяем вывод GND с синей дорожкой и VCC с красной дорожкой.
7. Соединяем CH_PD с красной дорожкой.
При соединении на ESP8266 загорится светодиод. Скетч загружать не нужно. Достаточно открыть Serial Monitor, выбрать скорость 115200 и выбрать режим Both NL & CR. Далее вводим AT-команду.
Должен появиться ответ OK. При отправке команд загорается маленький синий светодиод. Если всё получилось, то самое сложное позади.
В примере мы использовали вывод CH_PD. Если нам нужно перепрошить ESP8266, то соедините вывод GPIO0 с синей дорожкой (заземление), тем самым мы включим режим FLASH.
Esp8266 | Arduino ----------------- RX | RX TX | TX GND | GND VCC | 5v CH_PD | 5v GPIO 0 | None GPIO 2 | None Reset | None Arduino | Arduino ----------------- Reset | GND
AT-команды
В интернете можно найти документацию по AT-командам, но в реальности вам понадобится только часть из них. Давайте попробуем некоторые команды.
AT+CWJAP=»WiFi»,»pass» — указываем доступ к своей WiFi-точке (укажите свой логин и пароль к точке). В успешном случае появится ответ: WIFI CONNECTED, WIFI GOT IP.
AT+CWLAP — список доступных WiFi-сетей.
AT+CIFSR — получает локальный IP-адрес.
AT+CWMODE=3 — включает режим, когда виден в сети. У меня появился под именем AI-THINKER-XXX, но могут быть и другие варианты.
При настройке параметры запоминаются. Например, не нужно заново вводить свой пароль к WiFi-сети. Естественно, вы можете сбросить свои настройки.
После того, как мне удалось поработать с AT-командами, я даже сумел отправить данные в интернет на сервер ThingSpeak. Вкратце это выглядит следующим образом: бесплатная регистрация, заводим новый канал (channel) с одним полем (field), получаем ключ API, запоминаем адрес Update a Channel Feed, посылаем команду на сервер таким образом.
AT+CIPMUX=0 AT+CIPSTART="TCP","api.thingspeak.com",80 AT+CIPSEND=47 GET /update?api_key=KL8PZR4EHMQWL5YL&field1=5
Последняя команда содержит 45 символов, нужно послать на два символа больше, т.е. 47.
Заходим в свой канал и видим на графике, что был получен код со значением 5. Таким образом мы можем посылать значения со своих датчиков на сервер и анализировать их.
Скетчи для связки Uno+ESP8266
До этого мы использовали плату Uno как посредника для передачи данных по последовательному порту между компьютером и ESP8266. Чтобы использовать плату и модуль как одно целое и общаться уже между ними без участия компьютера, нужно изменить соединение. Небольшая сложность заключается в том, что при работе с Arduino IDE мы не можем использовать на плате выводы RX и TX, так как через них загружается скетч. Но мы можем использовать виртуальные выводы через библиотеку SoftwareSerial. Переключаем два провода на плате с RX и TX на выводы 11 и 10. А также убираем провод с вывода RESET.
Esp8266 | Arduino — — — — — — — — - RX | 11 TX | 10 GND | GND (без изменений) VCC | 5v (без изменений) CH_PD | 5v (без изменений) GPIO 0 | None (без изменений) GPIO 2 | None (без изменений) Arduino | Arduino ----------------- Удалить провод между Reset и GND
Скетч для загрузки данных на сайт ThingSpeak. Установите свои ключи, пароли.
#include #define RX 10 #define TX 11 String AP = "WIFI_NAME"; // CHANGE ME String PASS = "WIFI_PASSWORD"; // CHANGE ME String API = "YOUR_API_KEY"; // CHANGE ME String HOST = "api.thingspeak.com"; String PORT = "80"; String field = "field1"; int countTrueCommand; int countTimeCommand; boolean found = false; int valSensor = 1; SoftwareSerial esp8266(RX, TX); void setup() < Serial.begin(9600); esp8266.begin(115200); sendCommand("AT", 5, "OK"); sendCommand("AT+CWMODE=1", 5, "OK"); sendCommand("AT+CWJAP=\"" + AP + "\",\"" + PASS + "\"", 20, "OK"); >void loop() < valSensor = getSensorData(); String getData = "GET /update?api_key=" + API + "&" + field + "=" + String(valSensor); sendCommand("AT+CIPMUX=1", 5, "OK"); sendCommand("AT+CIPSTART=0,\"TCP\",\"" + HOST + "\"," + PORT, 15, "OK"); sendCommand("AT+CIPSEND=0," + String(getData.length() + 4), 4, ">"); sendCommand(getData, 5, "OK"); //esp8266.println(getData); delay(1500); countTrueCommand++; sendCommand("AT+CIPCLOSE=0", 5, "OK"); > int getSensorData() < return random(1000); // Replace with >void sendCommand(String command, int maxTime, char readReplay[]) < Serial.print(countTrueCommand); Serial.print(". at command =>"); Serial.print(command); Serial.print(" "); while (countTimeCommand < (maxTime * 1)) < esp8266.println(command);//at+cipsend if (esp8266.find(readReplay)) //ok < found = true; break; >countTimeCommand++; > if (found == true) < Serial.println("OYI"); countTrueCommand++; countTimeCommand = 0; >if (found == false) < Serial.println("Fail"); countTrueCommand = 0; countTimeCommand = 0; >found = false; >
Как у меня заработал 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.
Также нужно следить за регистрами. Команда «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 Wi-Fi Shield – плата расширения на базе ESP8266 (ESP-12E)
С помощью этой платы расширения вы сможете использовать ESP8266 совместно с Arduino UNO/Mega. В ней применяется модуль ESP-12E.
Москва и МО: Самовывоз
Курьерская доставка
Россия и СНГ: СДЭК
Почта РФ / Достависта
Купить Arduino Wi-Fi Shield — плата расширения на базе ESP8266 (ESP-12E) в Москве или с доставкой по России и СНГ очень просто — до покупки осталось всего 3 клика!
- Добавьте товар в корзину
- Оформите заказ, выбрав наиболее удобный способ доставки и оплаты
- Дождитесь подтверждения от менеджеров или позвоните самостоятельно
- Оплатите заказ удобным способом и получите его в ближайшее время
Arduino Wi-Fi Shield — плата расширения на базе ESP8266 (ESP-12E) для Arduino UNO / MEGA
На Arduino Wi-Fi Shield дублированы все выводы Arduino и разведены все выводы ESP8266, так что вы сможете воспользоваться всеми возможностями обоих микроконтроллеров, соединённых через UART. На плату расширения установлен DIP-переключатель и вынесены выводы этого порта, с помощью переключателя устанавливается режим его работы: прошивка ESP8266, прошивка Arduino, соединение между ними.
ESP8266 в составе этой плате может работать и как самостоятельное устройство, обменивающееся данными с Arduino, так и как Wi-Fi модуль, управляемый AT-командами.
Так как микроконтроллеры ESP8266 работают при напряжении 3,3, а большинство Arduino при 5В, на плату установлен преобразователь логических уровней и стабилизатор напряжения на 3,3В. Питание подаётся с основной платы Arduino.
Плата расширения Arduino Wi-Fi Shield оснащена четырьмя светодиодами: индикаторы питания (PWR), обновления прошивки (DFU), работы Wi-Fi в режимах точки доступа (AP) и клиента (STA). Также на ней присутствует кнопка рестарта ESP8266.
Основные достоинства
- Использование всех выводов ESP8266
- Разные режимы работы UART
- Простота работы с ESP8266