Уроки ESP8266: как контролировать всё через Интернет
23 апреля в 13:58
Уроки / ESP8266
Как использовать модуль ESP-01 для управления светодиодом через Интернет, модуль, который позволяет вам управлять любым электрическим устройством.
В этом уроке по ESP8266 мы используем модуль ESP-01 для управления светодиодом через Интернет. ESP8266 – дешевая, но эффективная платформа для общения через Интернет.
Он также прост в использовании с Ардуино. Пройдя этот урок, вы получите основные знания по управлению любым электрическим устройством через Интернет из любой точки мира!
Здесь мы будем использовать USB-to-TTL конвертер для программирования ESP8266 ESP-01. И мы будем использовать Arduino IDE для разработки веб-сервера для удаленного управления светодиодом.
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
Вы можете использовать Arduino UNO для запуска кода ESP8266 ESP-01. При загрузке кода следуйте той же процедуре, что во втором пункте, – удерживайте кнопку “Загрузки” нажатой, когда вы нажимаете один раз на сброс, а после отпускаете кнопку Flash.
ARDUINO → ESP8266 ESP-01 GND → GND TX → TX RX → RX Кнопка Reset → RST
Кнопка Flash → GPIO0
Загрузка кода ESP8266
Используйте любой из приведенных выше способов и откройте Arduino IDE, затем выберите плату 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('
'); 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. Должна открыться страница для управления светодиодом.
Источник: https://ArduinoPlus.ru/esp8266-kontroliruem-vsyo-cherez-internet/
Esp8266 управление через интернет по протоколу MQTT
Всем привет! В этой статье будет подробно рассказано и показано как буквально за 20 минут свободного времени настроить дистанционное управление модулем esp8266 с помощью приложения на Android по протоколу MQTT.
Идея дистанционного управления и мониторинга всегда будоражила умы увлеченных в электронике и программировании людей. Ведь возможность в любой момент времени получить или отправить нужные данные, не зависимо от своего местоположения, дает широкие возможности.
В своих прошлых статьях ( Статья 1 и Статья 2) я пытался рассмотреть несколько доступных и относительно простых вариантах реализации дистанционного управления микроконтроллерами через интернет. Однако время и весь мир не стоит на месте – прогресс продолжает свое неумолимое движение вперед.
За это небольшое время приобрел широкую популярность модуль esp8266 который благодаря низкой цене и встроенному wi-fi стал одним из основных составляющих «Умного дома».
На данный момент MQTT является передовым и наиболее популярным протоколом передачи данных между отдельными устройствами в рамках систем «Умного дома». Он обладает рядом преимуществ по отношению к другим протоколам: — низкое потребление трафика; — соединение между клиентом и сервером всегда открыто; — не нагружает интернет канал; — отсутствие задержек в передаче данных; — удобная система подписок на топики; Всё это дает возможность мониторинга и управления в режиме реального времени. Однако MQTT требует наличие своего собственного сервера, который выполняет роль посредника между клиентами сети. Тут есть два выхода либо создавать свой сервер либо использовать сторонние сервисы. Описываемая система управления состоит из двух основных частей: сервера MQTT (он как правило один) и клиентов, которых может быть довольно много. В нашем случае в качестве клиентов будут выступать приложение на Android и сам модуль esp8266. Алгоритм работы системы следующий. Клиенты подключаются к серверу и сразу после подключения каждый из них осуществляет подписку на и интересующие его топики. Всё общение между клиентами проходит транзитом через сервер, который перенаправляет данные другим клиентам с учетом их подписок.
MQTT сервер.
В нашем случае мы будем использовать крайне удобный сервис www.cloudmqtt.com у которого есть бесплатный тарифный план (Cute Cat), который полностью покроет потребности для реализации небольшой собственной системы «умного дома».
Пройдём регистрацию на сайте и получаем необходимые данные для доступа к серверу. При настройке клиентов необходимо использовать обычный Порт ( без SSL и TLS).
Приложение на Android.
Наше приложение будет выступать в качестве пульта управления для микроконтроллера, а так же будет принимать и отображать всю получаемую информацию от esp8266.
Приложение называется IoT MQTT Dashboard и представляет собой готовый mqtt клиент с небольшим количеством очень удобных виджетов. Более подробно о работе с приложением можно посмотреть на видео.
Esp8266.
Модуль прошивается в среде программирования Arduino, однако хочу заметить что у модуля проблемы с прошивкой в последних версиях Arduino, поэтому рекомендую использовать версию 1.6.4. Для примера к esp8266 подключены светодиод (5 пин) и датчик температуры ds18b20 (2 пин).
Так как для управления светодиода необходимо получать данные, то esp после подключения должно оформить подписку на соответствующий топик «test/led» иначе все отправленные данные пройдут мимо нашего микроконтроллера. Для отправки данных температуры подписка не нужно, но при передаче значений температуры необходимо указывать топик в который эти данные пойдут.
Ниже приведен скетч с подробными комментариями.Скетч Esp8266_mqtt.
ino// Светодиод подлкючен к 5 пину // Датчик температуры ds18b20 к 2 пину #include #include #include #include #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); const char *ssid = “AIRPORT”; // Имя вайфай точки доступа const char *pass = “PASSWORD”; // Пароль от точки доступа const char *mqtt_server = “server”; // Имя сервера MQTT const int mqtt_port = 11140; // Порт для подключения к серверу MQTT const char *mqtt_user = “Login”; // Логи от сервер const char *mqtt_pass = “Pass”; // Пароль от сервера #define BUFFER_SIZE 100 bool LedState = false; int tm=300; float temp=0; // Функция получения данных от сервера void callback(const MQTT::Publish& pub) { Serial.print(pub.topic()); // выводим в сериал порт название топика Serial.print(” => “); Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных String payload = pub.payload_string(); if(String(pub.topic()) == “test/led”) // проверяем из нужного ли нам топика пришли данные { int stled = payload.toInt(); // преобразуем полученные данные в тип integer digitalWrite(5,stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных } } WiFiClient wclient; PubSubClient client(wclient, mqtt_server, mqtt_port); void setup() { sensors.begin(); Serial.begin(115200); delay(10); Serial.println(); Serial.println(); pinMode(5, OUTPUT); } void loop() { // подключаемся к wi-fi if (WiFi.status() != WL_CONNECTED) { Serial.print(“Connecting to “); Serial.print(ssid); Serial.println(“…”); WiFi.begin(ssid, pass); if (WiFi.waitForConnectResult() != WL_CONNECTED) return; Serial.println(“WiFi connected”); } // подключаемся к MQTT серверу if (WiFi.status() == WL_CONNECTED) { if (!client.connected()) { Serial.println(“Connecting to MQTT server”); if (client.connect(MQTT::Connect(“arduinoClient2”) .set_auth(mqtt_user, mqtt_pass))) { Serial.println(“Connected to MQTT server”); client.set_callback(callback); client.subscribe(“test/led”); // подписывааемся по топик с данными для светодиода } else { Serial.println(“Could not connect to MQTT server”); } } if (client.connected()){ client.loop(); TempSend(); } } } // конец основного цикла // Функция отправки показаний с термодатчика void TempSend(){ if (tm==0) { sensors.requestTemperatures(); // от датчика получаем значение температуры float temp = sensors.getTempCByIndex(0); client.publish(“test/temp”,String(temp)); // отправляем в топик для термодатчика значение температуры Serial.println(temp); tm = 300; // пауза меду отправками значений температуры коло 3 секунд } tm–; delay(10); }
В результате мы получаем удобный инструмент для дистанционного управления и мониторинга данных, который довольно прост в освоении и будет по силу даже начинающим.
Видео с демонстрацией работы системы управления
Подробная видеоинструкция по настройке системы
Один из вариантов применения управления esp8266 через MQTT протокол
Управление светодиодной лентой через интернет
Если у вас возникли вопросы по данному материалу, то рекомендую посмотреть вторую часть видео, где материал изложен более наглядно. В архиве находятся скетч и все необходимые библиотеки для прошивки микроконтроллера скетчем из примера. Обращаю ваше внимание, что библиотека ESP8266WiFi.h не входит в данный архив, она устанавливается через Boards manager в среде Arduino.
АРХИВ
MQTT сервер — www.cloudmqtt.com
Источник: https://habr.com/post/393277/
Универсальный IoT контроллер на базе ESP8266
На данный момент контроллер выполнен на односторонней печатной плате. Питание можно подавать от любого источника +5V (разъем USB).
Поддерживаемые датчики и дисплеи
- DHT11/DHT22 (влажность)
- 1-Wire DS18B20 (температура)
- I2C LM75 (температура)
- I2C DS1621 (температура)
- I2C BMP085/BMP180 (температура+давление)
- I2C BH1750 (освещённость)
- I2C INA219 (ток и напряжение для слаботочных цепей)
- I2C AM2313 (температура+влажность), в процессе
- I2C конвертор для дисплеев 1602, 1604, 2004
Поддерживаемые сервисы
Возможные варианты использования
- Домашняя метеостанция – атмосферное давление, влажность, температура в доме и на улице
- Управление насосом в отопительной системе (Heatpump monitor)
- Управление системой получения и накопления солнечной энергии (Solar Monitoring)
- Контроль расхода электроэнергии (Electricity monitor)
Стартовая страница модуля
Разработка нового дизайна страниц модуля (прототип)
Благодарности
- Автору уникальной прошивки для ESP8266
- Автору первоклассного сервиса Народный Мониторинг
- –
- eeyura – за помощь в разработке первых макетов и схем печатной платы для ESP8266
- sergg – за помощь в изготовлении печатных плат ESP8266 для проекта Homes-Smart
- neorender – за помощь в отрисовке наглядных и красивых схем для начинающих
Правила хорошего тона
При включении отправки данных на сервис ThingSpeak, пожалуйста установите теги “homes-smart” и “esp8266” в своем канале. Это очень поможет разработчикам ПО. После активации тегов, вы можете проверить наличие своего устройства в группе Homes-Smart
Виды прошивок
FlyMon DMS – система мониторинга
Отправка данных на Народный Мониторинг
Для активации режима отправки данных, достаточно установить соответствующую галочку во вкладке Servers.
С 07.01.2015 набор-конструктор “Homes-Smart 01” официально представлен в разделе hardware на сайте narodmon.ru
Отправка данных на ThingSpeak
К сожалению, на сервис ThingSpeak можно отправить всего 8 параметров, привязанных к датчикам.
- field1 => DHT1 / AM2321 temp
- field2 => DHT1 / AM2321 humidity
- field3 => BMP temp
- field4 => BMP pressure
- field5 => DHT2 temp
- field6 => DHT2 humidity
- field7 => DS18B20 / LM75 temp
- field8 => BH1750 light
Подключение датчиков к модулю ESP-01
Расширенный вариант, схема кликабельна.
Плата для базовых экспериментов – Homes-Smart-01
На первом варианте платы (размер 30×75 мм) размещены :
- Модуль ESP-01 (основной)
- Модуль BMP180 (датчик температуры и давления)
- Модуль BH17150 (датчик освещенности)
- Преобразователь DC/DC 5V/3,3V LD1117
- Датчик температуры LM75 или DS1621
- Клеммы для подключения внешнего датчика DS18B20
- Кнопка перевода модуля ESP в режим прошивки
- Гребёнка для подключения датчиков, дисплеев, устройств и ПК для прошивки
Добавлено описание и номиналы деталей, перемычки выделены синим цветом.
Рисунок печатной платы ver.0.1.1 в формате Sprint Layout доступен по данной ссылке .
Добавлен второй вариант печатной платы.
Рисунок печатной платы ver.0.1.2 в формате Sprint Layout доступен по данной ссылке .
Фото сборки первых тестовых плат Homes-Smart-01
Подключение модуля к ПК
Источники питания
Ссылки
Источник: https://zftlab.org/pages/2014110100.html
ESP8266 “Witty Cloud” – самый удачный на данный момент WiFi-модуль для самоделок и “умного дома”
Разные варианты реализации модуля ESP8266 обозревались тут не раз, и заслуженно. Этот мелкий, с монету, чип с WiF на борту может работать и точкой доступа, и клиентом и программируется как угодно — и продаётся за считанные доллары.
Не успели мы привыкнуть к мысли, что всякие интересные поделки можно сделать на грошовой Arduino, Attiny или STM — как и устройства с WiFi и мощными процессорами на 80 мегагерц стали им конкурентами по цене.
(Чёрт, у меня процессор в первом собственном компьютере был немногим быстрее, какой же я старый).
Одна беда — все устройства с ESP8266, что прошли через мои руки, были уж очень неудобными, их подключение было мукой. Но китайская промышленность нас услышала и сделала уже почти хорошо 🙂 За что мы «любим» разные варианты ESP8266:
- Они питаются от 3.3 вольт, а не от более привычных пяти
- Им в пике надо ток до 320mA, что не под силу обычным преобразователям USB-TTL
- Шаг между выходами платы обычно составляет не стандартные 2,54 мм, а 2 мм ровно — что делает пайку затейливым приключением
- Есть только одна версия платы с шагом между контактами 2,54 мм («ESP8266-01»), но у неё минимум полезных контактов
- В режим программирования чип переводится замыканием контактов, что требовало сноровки. Либо припаивания кнопки
- С Reset та же беда — либо отключать питание, либо кнопку паять
И тут китайпром выдал «ESP8266-12E» под названием «Witty Cloud»:Плата представляет собой «бутерброд» из двух. На верхнем слое (слева на обоих фото) сам чип ESP8266, под ним — разъём питания MicroUSB и регулятор напряжения AMS1117-3.3, задача которого — превратить 5 вольт в 3.3. По datasheet регулятору по зубам токи до 0.8А, так что для питания чипа этого хватает с лихвой. Там же — кнопка Reset для перезагрузки. Чтобы было чем занять пустующие углы платы, китаец впихнул туда RGB LED и фоторезистор, о них — позже. На нижнем слое «бутерброда» (на фото справа) расположился полноценный MicroUSB, чип CH340G и кнопки «Flash» (режим прошивки) и «Reset».«Бутербродность» даёт бóльшую свободу действий. Вы можете подключить «бутерброд» к компьютеру в нижний (полноценный) разъём USB, перепрограммировать его — и затем встроить в вашу поделку только верхнюю часть, сэкономив на размерах корпуса.
Более того, низ «бутерброда» можно использовать для программирования самодельных модулей. Я сам паял завалявшиеся модули ESP8266-12 и ESP8266-07 на не очень удачные платы-адаптеры за $0,22 и приделывал «на соплях» регуляторы AMS1117 — оба работали безо всяких проблем и оказались стопроцентно совместимы по разъёмам и кнопкам:
Ладно, хватит нахваливать модуль, давайте сделаем что-нибудь полезное. На странице продавца рекламируется какой-то SDK и даже какое-то китайское «облако» для устройств на базе ESP8266 и Android, правда информации о них на английском (почти) нет. Раз так, махнём на них, запустим Arduino IDE 1.6 и полезем в настройки.
В окно «Additional URLs» вставим строку
http://arduino.esp8266.com/package_esp8266com_index.jsonЗатем откроем «Boards manager» и введём в строку поиска «ESP8266». Нажмём Install и приготовимся ждать, пока скачается аж 130 мегабайт пакетов:
Подключим «бутерброд» к компьютеру в нижний (полноценный) разъём MicroUSB. Windows должна определить конвертер USB-TTL «CH340G» и присвоить ему виртуальный порт. Именно этот порт мы и укажем в настройках Arduino IDE. Остальные настройки такие:
Закинем в память элементарный код
#include const char* ssid = “??? имя вашей точки WiFi ???”; const char* password = “??? пароль ???”; WiFiServer server(80); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(“.”); } server.begin(); Serial.print(“IP-адрес нашего модуля: “); Serial.println(WiFi.localIP()); } void loop() { WiFiClient client = server.available(); if (!client) { return; } while(!client.available()){ delay(1); } client.flush(); String s = “HTTP/1.1 200 OK
Content-Type: text/plain
hello from esp8266!
“; client.print(s); delay(1); }Обратите внимание — в процессе прошивки кнопку Flash жать не нужно — плата обо всём позаботится сама. После того, как новая программа залита в ESP8266, его можно отключить от компьютера и запитать хоть от павербанка. Нижнюю часть «бутерброда» можно отсоединить, она уже не нужна. Либо с помощь Arduino serial monitor (скорость порта — 115200), либо в вебинтерфейсе роутера подсматриваем IP-адрес, который заполучил в домашней WiFi-сети наш ESP8266. Открываем этот адрес в браузере компьютера или телефона:Наше устройство подключилось к домашней сети, подняло веб-сервер и нам отвечает.
Убедились в работоспособности устройства? Едем дальше. Для того, чтобы оно сгодилось на что-то полезное в быту, интересно «подружить» его, например, с реле.
Правда, классические реле на 5 вольт по определению отпадают — слишком велик риск, что напряжения 3.3 вольта не хватит, чтобы электромагнит смог сдёрнуть якорь. Поэтому берём твердотельное реле Omron за $1.90.
По даташиту имеющегося у нас напряжения ему хватит для чёткого срабатывания:
Подключаем «плюс» и «минус» к контактам VCC и GND верхнего слоя «бутерброда», а третий, сигнальный, провод — к, например, контакту GPIO 2. В качестве программы можно взять скетч WiFiWebServer, который прилагается к библиотеке Ардуино, или же воспользоваться программой коллеги Sav13 с samopal.pro/wifi-power-esp8266/
Я для теста взял простую галогеновую лампочку на 20Вт и вдоволь ей «нащёлкался»:Срабатывание происходит за долю секунды после подачи команды. Чтобы проверить надёжность, я вставил в код простенький счётчик и набросал простой bat-файл, который с паузой в секунду включал и выключал лампочку.
До кучи открыл пару дополнительных окон, из которых начал бомбардировать IP-адрес модуля бесконечной командой ping. Через несколько часов счётчик включений-выключений превысил 19 тыс., но всё работало — что вселяет некоторую уверенность в надёжности устройства.
Если вы дочитали досюда, но в голове крутится мысль «что-то это всё сложно», у меня для вас заготовлено приятное
Помните, я упоминал, что китайский производитель «на сдачу» поставил на плату RGB-светодиод и фоторезистор? С ними можно поэкспериментировать, даже если у вас нет никаких иных датчиков и прочей периферии.
В этом варианте сделать над собой усилие и запустить Arduino IDE вам потребуется ровно один раз.
- Откройте www.blynk.cc/getting-started/
- Скачайте оттуда мобильное приложение (есть как под Андроид, так и под Айфон)
- Запустите приложение и получите свой уникальный ключ («token»). Его можно не переписывать, а одним нажатием кнопки отправить себе на почту.
- Установите в Arduino IDE библиотеку github.com/blynkkk/blynk-library/releases/download/v0.3.1/Blynk_v0.3.1.zip github.com/blynkkk
- Из меню File — Examples — Blynk — Boards and Shilelds откройте пример «ESP8266 standalone»
- В пример впишите (а) название вашей сети (б) пароль от неё и (в) ключик, который вы получили от приложения на Email
- Залейте код в ESP8266
- Всё, можете выключать компьютер, он вам больше не понадобится. Всё остальное мы будем делать в приложении.
Экран приложения — это пустое поле, на котором можно, как на приборной доске, разместить элементы. Для начала попробуйте «zeRGBa» и «gauge»:В настройках «зебры» укажите, что трёхцветный светодиод на плате подключён к пинам 12 (зелёный), 13 (синий) и 15 (красный):В настройках «gauge» укажите, что фоторезистор на плате подключён к аналоговому входу «adc0»:Активируйте то, что вы наваяли, нажав на кнопку в правом верхнем углу. Вы увидите, что жёлтый индикатор меняет показания в зависимости от освещённости, а RGB LED на «бутерброде» меняет цвет, когда вы тыкаете по «зебре»:Практика показала, что эта штуковина очень нравится детям. Одно дело — играть на планшете в чужие игры, другое — это сделать и раскрасить «пульт» самому и управлять чем-то осязаемым. Достаточно взять на себя подготовительную часть в Arduino, а затем показать, как этим пользоваться, выдать несколько светодиодов, кнопок или деталек типа аналогового датчика температуры LM35 — у вас немедленно отберут «игрушку» и чадо будет занято надолго. За уши не оторвёте, проверено. Для быстрого создания прототипов Blynk также оказался очень удобен — проще набросать кнопки и переключатели там, чем городить собственный вебинтерфейс. Сэкономленное время можно с большей пользой потратить на сборку очередной поделки.
Резюме
По цене немногим выше 200 рублей вы получаете очень мощное и вполне самостоятельное устройство, на котором можно программировать всякие полезности для дома — и управлять ими по WiFi.
«Бутерброд» оказался на диво удачным. Он менее чем на доллар дороже «голого» ESP8266-12, но экономит вам кучу времени и хлопот. Ворох проводов и макетка — не нужны.
Ход с предустановкой на плату LED и фотодатчика — очень удачный. Даже если у вас кроме модуля и кабеля MicroUSB ничего нет, вы всё равно можете хоть что-то для начала испробовать и получить удовольствие от покупки.
Если они не нужны на готовом изделии — просто отпаяйте или срежьте. По такой цене «бутерброд» — явный конкурент Arduino Nano, и делает очень ненужными модули Bluetooth (типа HC-05) и тем более — радиомодули NRF24L01+.
Спохватился – чуть традицию не нарушил:
Источник: https://mysku.ru/blog/aliexpress/38586.html
Как построить схему управления на Arduino и ESP8266 с настраиваемыми таймерами, контролируемую через Wi-Fi
В этой статье вы узнаете, как создать систему, которая может включать и выключать нагрузки постоянного тока с помощью мобильного приложения. Вы также узнаете, как выполнить эту задачу мгновенно или по таймерам, заранее установленным для включения и выключения нагрузок.
Обзор проекта
Вы можете реализовать эту систему там, где вам нужно включать нагрузку постоянного тока на определенное время. В этом вам поможет наше Android приложение, не требуя аппаратного интерфейса, клавиатуры и LCD дисплея.
Макет проекта
Комплектующие
Arduino UNO или любая совместимая плата | 1 |
Wi-Fi модуль ESP8266 | 1 |
USB TTL конвертер (необязательно) | 1 |
Реле SPDT 12V | 2 |
Биполярный NPN транзистор BC337 | 2 |
MOSFET транзистор с каналом N-типа BS170 | 1 |
Резистор 1 кОм | 2 |
Резистор 10 кОм | 2 |
Диод 1N4007 | 2 |
Зажимные клеммы | 2 |
Настраиваемый регулятор напряжения LM317 | 1 |
Конденсатор 0.1 мкФ | 2 |
Разъемы, мама и папа | – |
Пустая печатная плата | 2 |
Сборка макетной платы 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 преобразователь, и испытать его.
Сборка макетной платы реле
Принципиальная схема макетной платы реле
Для управления реле я использовал биполярный NPN транзистор BC337 с резистором 1 кОм на базе. Для защиты от обратного напряжения катушки я использовал диод 1n4007.
Нормально замкнутый (NC) контакт реле я решил подключить к земле.
Макетная плата реле (вид сверху)Макетная плата реле (вид снизу)
Код Arduino
Теперь мы сталкиваемся с проблемой. ESP8266 использует UART в качестве интерфейса для AT-команд, а Arduino Uno (которая использует Atmega328) имеет только один порт UART. Этот порт уже подключен к мосту USB-TTL, а также к выводам 0 и 1.
В качестве решения вы можете использовать эмулятор для UART порта на другом цифровом выводе Arduino с помощью библиотек AltSoftSerial или SoftwareSerial. Это позволит вам по-прежнему иметь аппаратный порт UART для отладки и печати сообщений в консоли, а программный порт – для связи с модулем.
Платы Arduino
Многие люди (включая меня) сообщают о проблемах с программным последовательным портом при высоких скоростях передачи – как на тех, что мы будем использовать с esp8266, 115200 бит/с.
Я могу сказать, что у вас 50% принятых от модуля данных будет повреждено, если вы используете программный UART, а из переданных от Arduino к модулю данных почти 100% будет корректно.
Я получил эти результаты после отслеживания сигналов на линиях RX и TX.
В качестве решения я добавил в код несколько директив define, чтобы облегчить вам выбор между аппаратным и программным UART портами. Имейте в виду, что вы не можете использовать один и тот же порт для отладки и общения с модулем, поэтому вам нужно выбирать между ними.
//раскомментируйте Serial.*** , если хотите для связи с ESP использовать аппаратный последовательный порт (выводы 0,1) //раскомментируйте esp8266.*** , если хотите для связи с ESP использовать программный последовательный порт (выводы 2,3) #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266_Read() Serial.read() //esp8266.read() #define esp8266_Write(ARG1,ARG2) Serial.write(ARG1,ARG2) //esp8266.write(ARG1,ARG2) #define esp8266_Print(ARG) Serial.print(ARG) //esp8266.print(ARG)
В исходнике вы найдете часть кода, которая устанавливает модуля с вашим роутером:
sendCommand(“AT+RST
“, 2000, DEBUG); // перезапустить модуль sendCommand(“AT+CWMODE=1
“, 1000, DEBUG); // настроить как точку доступа sendCommand(“AT+CWJAP=”tur”,”341983#tur”
“, 3000, DEBUG); //**** ИЗМЕНИТЬ SSID и ПАРОЛЬ В СООТВЕТСТВИИ С ВАШЕЙ СЕТЬЮ ******// delay(10000); sendCommand(“AT+CIFSR
“, 1000, DEBUG); // получить ip адрес sendCommand(“AT+CIPMUX=1
“, 1000, DEBUG); // настроить для нескольких соединений sendCommand(“AT+CIPSERVER=1,1337
“, 1000, DEBUG); // включить сервер на порту 1337
Цикл скетча ожидает команды, которые должны прийти через Wi-Fi соединение. В настоящее время поддерживаются следующие команды:
- ‘con’ для получения состояния выводов, высокий или низкий логический уровень;
- ‘on=’ включить соответствующий вывод;
- ‘of=’ выключить соответствующий вывод;
- ‘Tm=n/fS’ установить таймер включения (n) или выключения (f) соответствующего вывода.
Все команды имеют отклик подтверждения.
Примечания:
- некоторые части скетча основаны на этом руководстве;
- если вы используете модули со старым SDK, у вас могут быть такие же ошибки, как и у меня. Единственным решением в этом случае является обновление вашей прошивки до последней версии. Посмотрите эту статью, для получения помощи в обновлении прошивки модуля на ESP8266. Я обновил прошивку с версии 1.3 до 1.5.4.
Полный код программы:
#include #define DEBUG 0 // если вы для связи с ESP используете аппаратный последовательный порт, измените значение на 0 #define ESPBaudRate 115200 #define HWSBaudRate 115200 #define OUTPUT1 11 #define OUTPUT2 12 #define OUTPUT3 13 //раскомментируйте Serial.*** , если для связи с ESP хотите использовать аппаратный последовательный порт (выводы 0,1) //раскомментируйте esp8266.*** , если для связи с ESP хотите использовать программный последовательный порт (выводы 2,3) #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266_Read() Serial.read() //esp8266.read() #define esp8266_Write(ARG1,ARG2) Serial.write(ARG1,ARG2) //esp8266.write(ARG1,ARG2) #define esp8266_Print(ARG) Serial.print(ARG) //esp8266.print(ARG) // Делает RX линию Arduino выводом 2, а TX линию Arduino выводом 3. // Это означает, что вам необходимо подключить TX линию от ESP к выводу 2 Arduino, // а RX линию от ESP к выводу 3 Arduino. SoftwareSerial esp8266(2, 3); /*************/ byte OUTPUTstate[3]; byte OUTPUTTMRIsSet[3] ; byte OUTPUTTMRState[3] ; long OUTPUTTimer[3]; /*************/ /***Commands**/ String GETSTATE = “con”; // Строка запроса от мобильного приложения, чтобы узнать состояние каждого выхода String SETON = “on=”; // Строка запроса от мобильного приложения, чтобы включить выход String SETOFF = “of=”; // Строка запроса от мобильного приложения, чтобы выключить выход String TIMER = “tm=”; // Строка запроса от мобильного приложения, чтобы задать таймер для выхода /*************/ void setup() { Serial.begin(HWSBaudRate); // Последовательный порт для отправки сообщений от Arduino на компьютер esp8266.begin(ESPBaudRate); // Программный последовательный порт для отправки сообщений от Arduino на ESP8266 pinMode(OUTPUT1, OUTPUT); digitalWrite(OUTPUT1, LOW); pinMode(OUTPUT2, OUTPUT); digitalWrite(OUTPUT2, LOW); pinMode(OUTPUT3, OUTPUT); digitalWrite(OUTPUT3, LOW); // перезапустить модуль sendCommand(“AT+RST
“, 2000, DEBUG); // настроить как точку доступа sendCommand(“AT+CWMODE=1
“, 1000, DEBUG); //**** ИЗМЕНИТЬ SSID и ПАРОЛЬ В СООТВЕТСТВИИ С ВАШЕЙ СЕТЬЮ ******// sendCommand(“AT+CWJAP=”tur”,”341983#tur”
“, 3000, DEBUG); delay(10000); // получить ip адрес sendCommand(“AT+CIFSR
“, 1000, DEBUG); // настроить для нескольких соединений sendCommand(“AT+CIPMUX=1
“, 1000, DEBUG); // включить сервер на порту 1337 sendCommand(“AT+CIPSERVER=1,1337
“, 1000, DEBUG); if (DEBUG == true) Serial.println(“Server Ready”); } void loop() { if (esp8266_Available()) // проверить, послал ли esp сообщение { if (esp8266_Find(“+IPD,”)) { // ждать, когда последовательный буфер заполнится (прочитаются все последовательные данные) delay(1000); // получить id подключения, чтобы мы могли отключиться int connectionId = esp8266_Read() – 48; // вычитаем 48 потому, что функция read() возвращает // десятичное значение в ASCII, а 0 (первое десятичное число) начинается с 48 String closeCommand = “AT+CIPCLOSE=”; // создание команды закрытия подключения closeCommand += connectionId; // добавить id подключения closeCommand += ”
“; esp8266_Find('?'); // Этот символ определяет начало команды теле нашего сообщения String InStream; InStream = (char) esp8266_Read(); InStream += (char) esp8266_Read(); InStream += (char) esp8266_Read(); if (DEBUG == true) Serial.println(InStream); if (InStream.equals(GETSTATE)) { // отклик на команду Status= String response = “Status=”; response += OUTPUTstate[0]; response += OUTPUTstate[1]; response += OUTPUTstate[2]; sendHTTPResponse(connectionId, response); sendCommand(closeCommand, 1000, DEBUG); // закрыть подключение } else if (InStream.equals(SETON)) { int pinNumber = (esp8266_Read() – 48); // получить первую цифру, т.е., если вывод 13, то 1-ая цифра равна 1 int secondNumber = (esp8266_Read() – 48); if (secondNumber >= 0 && secondNumber = 0 && secondNumber = 0 && secondNumber millis()) { while (esp8266_Available()) { // У esp есть данные, поэтому вывести их в консоль char c = esp8266_Read(); // прочитать следующий символ. response += c; } } if (debug) { Serial.print(response); } return response; } /* Name: sendHTTPResponse Description: Функция, которая посылает HTTP 200, HTML UTF-8 отклик */ void sendHTTPResponse(int connectionId, String content) { // создать HTTP отклик String httpResponse; String httpHeader; // HTTP заголовок httpHeader = “HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
“; httpHeader += “Content-Length: “; httpHeader += content.length(); httpHeader += ”
“; httpHeader += “Connection: close
“; httpResponse = httpHeader + content + ” “; // Здесь в коде баг: последний символ в “content” не посылается, поэтому я добавил дополнительный пробел sendCIPData(connectionId, httpResponse); } /* Name: sendCIPDATA Description: посылает команду CIPSEND=, */ void sendCIPData(int connectionId, String data) { String cipSend = “AT+CIPSEND=”; cipSend += connectionId; cipSend += “,”; cipSend += data.length(); cipSend += ”
“; sendCommand(cipSend, 1000, DEBUG); sendData(data, 1000, DEBUG); } /* Name: sendCommand Description: Функция, используемая для отправки данных на ESP8266. Params: command – данные/команда для отправки; timeout – время ожидания отклика; debug – печатать в консоль?(true = да, false = нет) Returns: Отклик от esp8266 (если есть отклик) */ String sendCommand(String command, const int timeout, boolean debug) { String response = “”; esp8266_Print(command); // передача символов на esp8266 long int time = millis(); while ( (time + timeout) > millis()) { while (esp8266_Available()) { // У esp есть данные, поэтому вывести их в консоль char c = esp8266_Read(); // прочитать следующий символ. response += c; } } if (debug) { Serial.print(response); } return response; }
Android приложение
Чтобы управлять всеми выше перечисленными аппаратными компонентами, мы будем использовать простое приложение для Android. Это приложение позволит нам включать или выключать выход напрямую или через определенный период времени.
Примечание: Приложение требует Android 4.0 (IceCreamSandwich) или выше.
- Прежде всего, вы должны знать IP адрес своего модуля. Если вы использовали программный последовательный порт, IP адрес будет напечатан в консоли. Если вы использовали аппаратный последовательный порт, то вы должны использовать кабель для отслеживания данных на линиях RX и TX, чтобы увидеть IP адрес. Вам также нужно знать номер порта, который был указан в скетче для Arduino. После этого нажмите “connect”, чтобы получить состояние всех трех выходов. Вам нужно убедиться, что ваш Wi-Fi роутер включен, и вы подключены к локальной сети.
- Теперь нажмите на любой переключатель, который вы хотите включить/выключить. Всякий раз, когда захотите, вы можете нажать “refresh”, чтобы обновить состояние всех выходов.
- На вкладке “Timers” вы можете установить любой из этих трех выходов для включения/выключения через определенный промежуток времени (от 0 до 24 часов).
- После любого действия вы получите сообщение с подтверждением о том, выполнилась ли команда успешно, или возникла какая-то ошибка.
Скриншоты Android приложения для управления контроллером на Arduino и ESP8266
Демонстрационное видео
Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!
Оригинал статьи:
ESP-12E WiFi модуль (ESP8266)
WiFi модуль ESP-12E разработан компанией Ai-thinker и построен на базе процессора с ядром ESP8266, отличительной особенностью которого является наличие радиоинтерфейса WiFi. Ядро ESP8266 интегрировано в Tensilica L106 – 32-битный микроконтроллер с ультранизким энергопотреблением. Поддержка тактовых частот 80 и 160 МГц, поддержка RTOS, встроенные Wi-Fi MAC/BB/RF/PA/LNA, микрополосковая…
ESP-01 Wi-Fi модуль (ESP8266)
Wi-Fi модуль на базе однокристальной системы (SoC) ESP8266. По сравнению с другими модулями имеет небольшие размеры и ULP технологию. Модуль специально сконструирован для создания мобильных устройств и интернета вещей (IoT).
Источник: https://radioprog.ru/post/211
Подключение и настройка WiFi модуля ESP8266-01
В процессе изучения и проектирования всё более сложных проектов приходит время, когда возникает необходимость и желание научиться работать с таким распространенным видом связи как 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 для работы с WiFi модулем ESP8266-01.
Для этого нам надо скачать и установить в Arduino IDE необходимый архив с библиотеками, примерами и платами ESP, который впоследствии позволит нам заливать скетчи прямо в микроконтроллер модуля ESP8266-01, менять прошивку и т.д.
В рамках этой статьи нам скорей всего эти настройки и не понадобятся, но мне кажется, что после того, как мы разобрались с подключением модуля, порядок действий будет правильным, если мы сразу скачаем все необходимое для работы с Arduino IDE. Тут все в принципе просто.
Запускаем программу Arduino IDE и переходим в меню “Файл” – “Настройки”
В поле “Дополнительные ссылки для Менеджера плат” вставляем ссылку http://arduino.esp8266.com/stable/package_esp8266com_index.json и нажимаем кнопку “ОК”.
Далее идем в меню “Инструменты” – “Менеджер плат”.
В появившемся окне в верхнем поле пишем “esp8266”. В итоге в окне у нас останется только нужная прошивка. При нажатии на прошивку появится кнопка “Установка”. Нажимаем на кнопку “Установка” и ждем, пока все установится. Архив достаточно большой, около 150 мегабайт, так что придется подождать.
После окончания установки. Перезагружаем Arduino IDE и видим, как появились новые платы ESP в меню “Инструменты” – “Платы”. На этом всё. С настройкой Arduino IDE мы закончили. Пока нам эти настройки не нужны, но в дальнейшей работе нам без них не обойтись.
Управление WiFi модулем ESP8266-01 с помощью AT команд
Всё мы подключили и подготовились, теперь можем начать разбираться с управлением. На самом деле, сейчас будет продолжение проверки и настройки модуля с помощью 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 модуль.
Источник: http://voltom.ru/project/98-wifi-modul-esp8266-01-podklyuchenie-i-upravlenie-s-pomoshchyu-arduino-ide