Передача данных от Arduino Uno на веб-страницу с помощью WiFi
Беспроводная связь между современными электронными устройствами с каждым годом становится все более актуальной с учетом все большего доминирования концепции интернета вещей (Internet of Things). Протокол HTTP и язык HTML делают возможным передачу данных в любое место на Земле где есть сеть интернет. Ранее на нашем сайте мы уже рассматривали похожие проекты:
В этой же статье мы рассмотрим передачу данных от платы Arduino Uno на веб-страницу (Webpage) с помощью технологии WiFi. Для демонстрации возможностей этого проекта нам будет необходим IP адрес и сервер (локальный или глобальный). В целях упрощения демонстрации мы будем использовать локальный сервер.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Wi-Fi модуль ESP8266 (купить на AliExpress).
- USB кабель.
- Соединительные провода.
- Ноутбук (или персональный компьютер).
- Источник питания.
Внешний вид Wi-Fi модуля ESP8266 показан на следующем рисунке.
Работа схемы
Схема устройства представлена на следующем рисунке.
Основными элементами схемы являются плата Arduino и Wi-Fi модуль ESP8266. Контакты Vcc и GND Wi-Fi модуля ESP8266 непосредственно подключены к контактам 3.3V и GND платы Arduino, а контакт CH_PD Wi-Fi модуля также подключен к 3.3V. Контакты Tx и Rx модуля ESP8266 подключены к контактам 2 и 3 платы Arduino. Software Serial Library (библиотека последовательной связи) используется для осуществления последовательной связи на контактах 2 и 3 платы Arduino (вместо контактов 0 и 1, которые используются для последовательной связи в плате Arduino по умолчанию). В статье про передачу Email с использованием Arduino мы достаточно подробно останавливались на подключении WiFi модуля ESP8266 к плате Arduino, поэтому здесь эти вопросы рассматривать не будем.
Примечание: чтобы видеть ответы модуля ESP8266 на поступающие команды откройте монитор последовательного порта (Serial Monitor) в программной среде Arduino IDE.
В программе первым делом нам необходимо будет соединить наш Wi-Fi модуль с Wi-Fi роутером чтобы подключить Wi-Fi модуль к сети интернет. Затем мы должны сконфигурировать локальный сервер, передать данные на веб-страницу и закрыть соединение. Для этого нам необходимо выполнить следующую последовательность действий:
1. Сначала нам необходимо произвести тест Wi-Fi модуля при помощи передачи ему AT команды, он должен ответить OK.
2. После этого мы должны выбрать необходимый режим работы с помощью команды AT+CWMODE=mode_id , мы будем использовать Mode Полный же список доступных режимов выглядит следующим образом:
1 = Station mode (client) (режим станции, клиента)
2 = AP mode (host) (режим базовой станции, хоста)
3 = AP + Station mode (Yes, ESP8266 has a dual mode!) (режим станции + хоста – модуль ESP8266 поддерживает этот двойной режим).
3. Затем мы должны отсоединить наш Wi-Fi модуль от прежней Wi-Fi сети с помощью команды AT+CWQAP поскольку модуль ESP8266 по умолчанию автоматически соединяется с предыдущей использованной сетью Wi-Fi.
4. После этого можно сбросить модуль командой AT+RST – это необязательный шаг.
5. После этого мы должны соединить модуль ESP8266 с Wi-Fi роутером с помощью команды:
AT+CWJAP=”wifi_username”,”wifi_password” .
6. После этого мы должны получить IP адрес с помощью команды AT+CIFSR , которая вернет нам IP адрес.
7. После этого нам необходимо задействовать режим мультиплексирования с помощью команды AT+CIPMUX=1 (1 для соединения с мультиплексированием и 0 для одиночного соединения).
8. Теперь сконфигурируем ESP8266 как сервер с помощью команды AT+CIPSERVER=1,port_no (port может быть 80). Теперь наш Wi-Fi готов. В представленной команде ‘1’ используется для создания сервера и ‘0’ для удаления сервера.
9. Теперь с помощью соответствующих команд можно передавать данные на созданный локальный сервер:
AT+CIPSEND =id, length of data
Id = ID no. of transmit connection (номер соединения)
Length = Max length of data is 2 kb (максимальная длина данный 2 Кбайта).
10. После передачи ID (номера, идентификатора) и Length (длины данных) на сервер мы можем передавать данные, к примеру: Serial.println(“circuitdigest@gmail.com”);
11. После передачи данных нам необходимо закрыть соединение с помощью команды:
AT+CIPCLOSE=0
После этого данные будет переданы на локальный сервер.
12. Теперь вы можете набрать IP адрес в строке адреса вашего браузера и нажать Enter. После этого вы увидите переданные данные на веб-странице.
Все описанные шаги можно более наглядно посмотреть в видео в конце статьи.
Исходный код программы
1. В программе нам сначала необходимо подключить SoftwareSerial Library чтобы задействовать последовательную связь на контактах PIN 2 и 3 и объявить некоторые переменные и строки.
#include
SoftwareSerial client(2,3); //RX, TX
String webpage=»»;
int i=0,k=0;
String readString;
int x=0;
boolean No_IP=false;
String IP=»»;
char temp1=’0′;
2. После этого мы должны определить ряд функций, необходимых для решения наших задач.
В функции Setup() мы инициализируем встроенный последовательный приемопередатчик для подключения модуля ESP8266 с помощью команды client.begin(9600) – для бодовой скорости 9600 бод/с.
void setup()
<
Serial.begin(9600);
client.begin(9600);
wifi_init();
Serial.println(«System Ready..»);
>
3. В функции wifi_init() мы инициализируем wifi модуль при помощи передачи ему ряда команд, например, reset, set mode, connect to router, configure connection и т.д. Эти команды были объяснены в предыдущей части статьи.
void wifi_init()
<
connect_wifi(«AT»,100);
connect_wifi(«AT+CWMODE=3»,100);
connect_wifi(«AT+CWQAP»,100);
connect_wifi(«AT+RST»,5000);
. .
. .
- В функции connect_wifi() мы передаем команды и данные модулю ESP8266 и получаем (считываем) на них ответы.
void connect_wifi(String cmd, int t)
<
int temp=0,i=0;
while(1)
<
Serial.println(cmd);
. .
. .
5. Функция sendwebdata( ) используется для передачи данных на локальный сервер или веб-страницу.
void sendwebdata(String webPage)
<
int ii=0;
while(1)
<
unsigned int l=webPage.length();
Serial.print(«AT+CIPSEND=0,»);
client.print(«AT+CIPSEND=0,»);
. .
. .
6. Функция void send() используется для передачи строк в функцию sendwebdata(), которые затем передаются на веб-страницу.
void Send()
<
webpage = «
Welcome to Circuit Digest
«;
sendwebdata(webpage);
webpage=name;
webpage+=dat;
. .
. .
7. Функция get_ip() используется для получения IP адреса от созданного локального сервера.
8. В функции void loop() мы передаем инструкции пользователю обновить страницу и проверить соединен ли сервер или нет. Когда пользователь обновляет или запрашивает веб-страницу, данные автоматически передаются на тот же самый IP адрес.
void loop()
<
k=0;
Serial.println(«Please Refresh your Page»);
while(k <1000)
. .
. .
Аналогичным образом мы можем передавать на веб-страницу, получаемые платой Arduino от различных датчиков: влажность и температура в комнате, GPS время, GPS координаты, частоту сердечных сокращений и т.д.
Далее представлен полный текст программы.
Передача Email с использованием Arduino и WiFi модуля ESP8266
Сегодняшний мир активно движется к широкому внедрению технологии интернета вещей (IoT — Internet of Things). Эта технология уже сейчас играет значительную роль в электронике и встраиваемых системах (Embedded system). Передача Email от микроконтроллера или встраиваемой системы является одной из базовых функций, которая необходима в технологии интернета вещей, поэтому в данной статье мы рассмотрим подключение к плате Arduino WiFi модуля ESP8266 и передачу с его помощью Email. Также можете прочитать статью о передаче Email с использованием WiFi модуля ESP8266 и микроконтроллера AVR.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Wi-Fi модуль ESP8266 (купить на AliExpress).
- ЖК дисплей 16х2 (опционально) (купить на AliExpress).
- USB кабель.
- Источник питания.
- Лэптоп (персональный компьютер).
- Потенциометр 10 кОм (опционально).
- Соединительные провода.
Внешний вид Wi-Fi модуля ESP8266 показан на следующем рисунке.
Подготовка к работе
Для того, чтобы иметь возможность передавать Email с помощью платы Arduino и Wi-Fi модуля, нам необходимо получить Email. Это можно сделать на сайте на сайте smtp2go.com – после регистрации не забудьте запомнить (записать) свой email адрес и пароль. Внешний вид окна регистрации на сайте smtp2go.com представлен на следующем рисунке.
Далее нам будут необходимы для нашего аккаунта Email имя пользователя и пароль в закодированном формате base64. Для преобразования данных из формата utf-8 в формат base64 можно использовать сервис https://www.base64encode.org/. Внешний вид окна данного сервиса показан на следующем рисунке.
Подавать питание на Wi-Fi модуль ESP8266 мы будем с контакта 3.3v платы Arduino.
Работа схемы
Схема устройства представлена на следующем рисунке.
Как видите, схема достаточно проста – фактически для нее нам нужны только плата Arduino и Wi-Fi модуль ESP8266. Но мы добавили в схему еще ЖК дисплей 16×2 для отображения статусных сообщений (но можно обойтись и без нее). Контакты Vcc и GND модуля ESP8266 подключены к контактам 3.3V и GND платы Arduino, контакт CH_PD также подсоединен к 3.3V.
Контакты Tx и Rx модуля ESP8266 непосредственно подсоединены к контактам 2 и 3 платы Arduino. Контакт 2 платы Arduino также замкнут с контактом 1 платы Arduino. Это сделано с той целью чтобы отображать ответ с модуля ESP8266 на последовательном порту Arduino. Библиотека последовательного порта (Software Serial Library) используется чтобы осуществлять последовательную связь на контактах 2 и 3 Arduino
Примечание: чтобы видеть ответ с ESP8266 на последовательном порту не используйте функцию Serial.begin(9600).
Исходный код программы
В программе мы первым делом должны подключить библиотеку последовательной связи и библиотеку для работы с ЖК дсиплеем. По умолчанию, для последовательной связи используются контакты 0 и 1 платы Arduino, но с использованием библиотеки последовательной связи мы можем задействовать последовательную связь на любых других цифровых контактах платы Arduino.
После этого мы должны запрограммировать функцию void connect_wifi(String cmd, int t) чтобы соединить Wi-Fi модуль с сетью Internet.
void connect_wifi(String cmd, int t)
<
int temp=0,i=0;
while(1)
<
Serial1.println(cmd);
while(Serial1.available())
<
if(Serial1.find(«OK»))
. . .
. .
После этого необходимо соединить Wi-Fi модуль с SMTP сервером при помощи соответствующих команд.
lcd.print(«Configuring Email..»);
Serial1.println(«AT+CIPSTART=4,\»TCP\»,\»mail.smtp2go.com\»,2525″);
delay(2000);
Serial1.println(«AT+CIPSEND=4,20»);
delay(2000);
Serial1.println(«EHLO 192.168.1.123»);
delay(2000);
Serial1.println(«AT+CIPSEND=4,12»);
Примечание: некоторые email серверы не принимают email с некоммерческих, выпущенных с помощью dhcp ip адресов.
После этого мы будем пытаться залогиниться на smtp2go.co, используя имя пользователя и пароль в закодированном base64 формате, которые мы получили с помощью сервиса https://www.base64encode.org/.
lcd.print(«Try To Login. «);
Serial1.println(«AUTH LOGIN»);
delay(2000);
Serial1.println(«AT+CIPSEND=4,30»);
delay(2000);
Serial1.println(«c2FkZGFtNDIwMUBnbWFpbC5jb20 color: #800080;»> delay(2000);
Serial1.println(«AT+CIPSEND=4,18»);
delay(2000);
Serial1.println(«Y2lyY3VpdDQyMDE color: #800080;»>Serial1.println(«Testing Success»);
delay(2000);
Serial1.println(«AT+CIPSEND=4,3»);
delay(2000);
Serial1.println(‘.’);
delay(10000);
Serial1.println(«AT+CIPSEND=4,6»);
delay(2000);
Serial1.println(«QUIT»);
. .
.
Далее представлен полный текст программы.