77 проектов Arduino
.pdf
Эксперимент 67 |
301 |
void setup(void){
//конфигурация пина светодиода pinMode(pinLed,OUTPUT);
//и выключить digitalWrite(pinLed,LOW); delay(5000);
Serial.begin(115200); WiFi.begin(ssid, password); Serial.println("");
//Подсоединение к точке доступа
while (WiFi.status() != WL_CONNECTED) { delay(500);
Serial.print(".");
}
Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); digitalWrite(pinLed,HIGH);
//запуск сервера server.begin();
Serial.println("HTTP server started");
//резервирование 50 bytes для inputString: //inputString.reserve(50);
}
void loop(void){
// проверка прихода строки из последовательного порта serialEvent1();
if (stringComplete) { inputString1=inputString; Serial.println(inputString1); // очистить строку inputString = ""; stringComplete = false;
}
// подключение клиента
WiFiClient client = server.available(); if (client) {
Serial.println("new client"); // конец запроса
boolean currentLineIsBlank = true; while (client.connected()) {
if (client.available()) {
302 Эксперимент 67
char c = client.read(); Serial.write(c);
if (c == '\n' && currentLineIsBlank) { // отправить заголовки и страницу client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html"); client.println("Connection: close"); client.println("Refresh: 5"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println(inputString1); client.println("</html>");
break;
}
if (c == '\n') { currentLineIsBlank = true;
}else if (c != '\r') { currentLineIsBlank = false;
}
}
}
delay(1);
// закрыть соединение client.stop();
Serial.println("client disconnected");
}
}
// получение строки по Serial void serialEvent1() {
boolean flag1=false;
while (Serial.available() && flag1==false) { // получить байт:
char inChar = (char)Serial.read(); Serial.write(inChar);
if (inChar == '$') { stringComplete = true; flag1=true;
}
else // добавление в строку inputString += inChar;
}
}
Скачать данный скетч можно на сайте Arduino-kit по ссылке https://arduino-kit.ru/scetches/exp_67_02.zip.
Эксперимент 67 |
303 |
После загрузки скетча на ESP8266, необходимо перевести плату в режим ATme-
ga328 |
ESP8266. Переключатели необходимо установить следующим образом: |
||||||||
|
|
|
|
|
|
|
|
|
|
|
1 |
|
2 |
3 |
4 |
5 |
6 |
7 |
|
|
|
|
|
|
|
|
|
|
|
|
ON |
|
ON |
OFF |
OFF |
OFF |
OFF |
OFF |
|
|
|
|
|
|
|
|
|
|
|
Теперь Arduino и ESP8266 соединены по последовательному порту.
Заходим из браузера по адресу сервера и видим страницу с показаниями датчиков (рис. 67.3).
Рис.67.3.Страница с показаниями датчиков,выдаваемая сервером
Данные обновляются каждые 5 секунд
Эксперимент 68.
Web-сервер на ESP8266 для управления светодиодами
В этом эксперименте создадим web-сервер и страницу, с которой будем управлять светодиодами,
подключенными к модулю ESP8266
Вэксперименте мы будем использовать следующие компоненты: Плата Arduino UNO – 1;
Кабель USB – 1;
Плата прототипирования – 1; Светодиод – 2; Резистор 220 Ом – 2;
Провода MF – 3.
Вэтом эксперименте мы через web-страницу сервера будем управлять (включать/ выключать) светодиодами, подключенными к контактам ESP8266.
Переключатели на плате Arduino+WiFi необходимо установить следующим образом:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
|
|
|
|
|
|
OFF |
OFF |
OFF |
OFF |
ON |
ON |
ON |
|
|
|
|
|
|
|
Схема соединений показана на рис. 68.1.
Рис.68.1.Схема соединений подключения светодиодов к модулю ESP8266
Эксперимент 68 |
305 |
Подключение проводим согласно карте контактов ESP8266, которая показана на рис. 68.2.
Рис.68.2.Карта контактов ESP8266 платы Arduino+WiFi
Приступаем к написанию скетча. Необходимо подключить ESP8266 к точке доступа и запустить на нем web-сервер. При обращении к серверу формируем страницу, на которой находится форма, два элемента checkbox для выбора состояния светодиодов и скрытая кнопка отправки формы. Код формы на языке html показан в листинге 68.1.
Листинг 68.1.
<!DOCTYPE HTML> <html>
<form name='form1' id='form1' action='' method='GET'> <br> Led 1 <input type='checkbox' name='led1'
onchange='document.getElementById("send1").click();'> <br> Led 2 <input type='checkbox' name='led2'
onchange='document.getElementById("send1").click();'> <br> <input type='submit' name='send1' id='send1'
value='send1' style="visibility : hidden" > </form>
</html>
При изменении состояния checkbox-ов по событию onchange вызываем нажатие кнопки и отправку данных формы на сервер методом GET. На сервере делаем анализ пришедших данных и изменение состояния светодиодов. Далее идет формирование страницы с измененными состояниями элементов checkbox.
Содержимое скетча для Arduino IDE показано в листинге 68.2.
306 Эксперимент 68
Листинг 68.2.
//подключение библиотек
#include <ESP8266WiFi.h>
//данные SSID и пароль точки доступа
const |
char* |
ssid |
= |
"******"; |
const |
char* |
password = |
"********"; |
|
//создание объекта сервера
WiFiServer server(80);
//данные, пришедшие из последовательного порта
String inputString = ""; String inputString1 = "";
//строка пришла
boolean stringComplete = false;
//состояние checkbox для led String checked1="";
String checked2="";
//пин подключения светодиодов
int |
pinLed1=4; |
// |
GPIO4 |
int |
pinLed2=2; |
// |
GPIO2 |
void setup(void){
//конфигурация пина светодиодов pinMode(pinLed1,OUTPUT); pinMode(pinLed2,OUTPUT);
//и выключить digitalWrite(pinLed1,LOW); digitalWrite(pinLed2,LOW); delay(5000);
Serial.begin(115200); WiFi.begin(ssid, password); Serial.println("");
//Подсоединение к точке доступа
while (WiFi.status() != WL_CONNECTED) { delay(500);
Serial.print(".");
}
Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP());
// запуск сервера server.begin();
Serial.println("HTTP server started");
Эксперимент 68 |
307 |
}
void loop(void){
// подключение клиента
WiFiClient client = server.available(); if (client) {
Serial.println("new client"); // конец запроса
boolean currentLineIsBlank = true; // собираем данные
String data="";
while (client.connected()) { if (client.available()) { char c = client.read();
data+=c;
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
//анализ данных запроса и установка светодиодов if(data.indexOf("led1=on")!=-1) {
digitalWrite(pinLed1,HIGH);checked1="checked";
}
else { digitalWrite(pinLed1,LOW);checked1="";
}
if(data.indexOf("led2=on")!=-1) { digitalWrite(pinLed2,HIGH);checked2="checked";
}
else { digitalWrite(pinLed2,LOW);checked2="";
}
//отправить заголовки
client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println();
// отправить страницу client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<form name='form1' id='form1'
action='' method='GET'>"); client.println("<br> Led 1 <input type='checkbox'
name='led1' "); client.println(checked1);
client.println("' onchange='document.getElementById (\"send1\").click();'>");
client.println("<br> Led 2 <input type='checkbox' name='led2' ");
308 Эксперимент 68
client.println(checked2);
client.println("' onchange='document.getElementById (\"send1\").click();'>");
client.println("<br> <input type='submit' name='send1' id='send1' value='send1' style=\"visibility : hidden\" >");
client.println("</form>");
client.println("</html>");
break;
}
if (c == '\n') { currentLineIsBlank = true;
}else if (c != '\r') { currentLineIsBlank = false;
}
}
}
delay(1);
// закрыть соединение client.stop();
Serial.println("client disconnected");
}
}
Скачать данный скетч можно на сайте Arduino-kit по ссылке https://arduino-kit.ru/scetches/exp_68_02.zip.
Загружаем скетч в модуль ESP8266, открываем монитор последовательного порта,ждем,покамодуль ESP8266 подключиться кточкедоступа(рис.68.3) ис браузера обращаемся к серверу. На странице управляем состоянием светодиодов (рис. 68.4).
Рис.68.3.Подключение ESP8266 к WiFi и запуск сервера
Эксперимент 68 |
309 |
Рис.68.4.Страница управления светодиодами
Рис.68.5.Код страницы управления светодиодами
Эксперимент 69.
Web-сервер для управления реле через Arduino
В этом эксперименте создадим на web-сервере страницу, с которой будем управлять реле
с помощью Arduino, подключенной к модулю ESP8266 по последовательному порту
Вэксперименте мы будем использовать следующие компоненты: Плата Arduino UNO – 1;
Кабель USB – 1;
Плата прототипирования – 1; Релейный модуль – 1;
Провода MF – 3.
Вэтом эксперименте мы с web-страницы сервера будем управлять (включать/ выключать) реле, подключенным к Arduino, которая обменивается данными с модулем ESP8266 по последовательному порту.
Вэксперименте 68 мы создали страницу на сервере для управления светодиодами.
Вскетч 68_02.ino мы внесем самые минимальные изменения. Необходимо формировать страницу, код которой показан в листинге 69.1.
Листинг 69.1.
<!DOCTYPE HTML> <html>
<form name='form1' id='form1' action='' method='GET'> <br> Relay 1 <input type='checkbox' name='relay1'
onchange='document.getElementById("send1").click();'> <br> Relay 2 <input type='checkbox' name='relay2'
onchange='document.getElementById("send1").click();'> <br> <input type='submit' name='send1' id='send1'
value='send1' style="visibility : hidden" > </form>
</html>
И добавляем код обработки данных, приходящих из браузера и формирования строки для отправки в Arduino:
// анализ данных запроса и отправка данных на Arduino String toArduino="*"; if(data.indexOf("relay1=on")!=-1) {
