Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

77 проектов Arduino

.pdf
Скачиваний:
0
Добавлен:
13.05.2026
Размер:
49.45 Mб
Скачать

Эксперимент 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) {