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

77 проектов Arduino

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

Эксперимент 65

291

Рис.65.4-6.Подключение к серверу

Эксперимент 66.

Обмен данными по последовательному порту между ESP8266 и Arduino UNO платы Arduino+WiFi

В этом эксперименте создадим связь двух модулей платы Arduino+WiFi (модуля ESP8266 и

Arduino UNO) по последовательному порту

В эксперименте мы будем использовать следующие компоненты:

Плата Arduino UNO – 1;

Кабель USB – 1;

Плата прототипирования;

USB-TTL адаптер – 1;

Светодиод – 1;

Резистор 220 Ом – 1;

Провода MM – 5.

На плате Arduino+WiFi интегрированы Arduino UNO R3 и WiFi-модуль ESP8266. Рассмотрим режим соединения по последовательному порту. Чтобы иметь связь с компьютером для отладки подключения Arduino UNO и ESP8266 по последовательному порту, подключим к контактам 3 и 2 платы Arduino USB-TTL адаптер и создадим software-последовательный порт. Схема соединений показана на рис. 66.1.

Рис.66.1.Схема соединений для подключения USB-TTL-адаптера к плате Arduino

Эксперимент 66

293

Загрузим на плату Arduino скетч из листинга 66.1.

Переключатели на плате Arduino+WiFi необходимо установить следующим образом:

1

2

3

4

5

6

7

 

 

 

 

 

 

 

OFF

OFF

ON

ON

OFF

OFF

OFF

 

 

 

 

 

 

 

Листинг 66.1

//подключение библиотеки

#include <SoftwareSerial.h>

//создание экземпляра для USB-TTL SoftwareSerial PCSerial(3, 2); // RX, TX

void setup()

{

//запуск последовательного порта

Serial.begin(115200);

//запуск порта для USB-TTL PCSerial.begin(115200);

}

void loop()

{

//получение USB-TTL -- Arduino if (PCSerial.available()) {

Serial.write(PCSerial.read());

}

//получение ESP8266 -- Arduino if (Serial.available()) {

PCSerial.write(Serial.read());

}

}

Скачать данный скетч можно на сайте Arduino-kit по ссылке https://arduino-kit.ru/scetches/exp_66_01.zip.

Данный скетч необходим для обмена данными по последовательному порту между компьютером и Arduino UNO. Для проверки открываем терминальную программу, например Termite, которую можно скачать бесплатно из интернета. Отправляем данные из монитора последовательного порта Arduino IDE и получаем в программе Termite, и видим запрос-ответ (рис. 66.2).

Светодиод подключаем к контакту GPIO4 через резистор 220 Ом. Загружаем в модуль ESP8266 скетч из листинга 66.2.

Переключатели на плате Arduino+WiFi необходимо установить следующим образом

294 Эксперимент 66

Рис.66.2.Обмен данными между Serial (pin0 и pin1) и softwareSerial (pin2 и pin3)

Рис.66.3.Карта контактов ESP8266 платы Arduino+WiFi

Светодиод подключаем к контакту GPIO4 через резистор 220 Ом. Загружаем в модуль ESP8266 скетч из листинга 66.2.

Переключатели на плате Arduino+WiFi необходимо установить следующим образом

1

2

3

4

5

6

7

 

 

 

 

 

 

 

OFF

OFF

OFF

OFF

ON

ON

ON

 

 

 

 

 

 

 

Эксперимент 66

295

Листинг 66.2

// пин подключения светодиода

int pinLed=4;

// GPIO4

void setup()

{

//запуск последовательного порта: Serial.begin(115200);

//конфигурация пина светодиода pinMode(pinLed,OUTPUT);

//и выключить digitalWrite(pinLed,LOW);

}

void loop()

{

// ожидание данных из Arduino if (Serial.available()) {

char c=Serial.read(); if(c=='0') {

digitalWrite(pinLed,LOW); // ответ

Serial.println("GPIO4=0");

}

else if(c=='1') { digitalWrite(pinLed,HIGH); // ответ

Serial.println("GPIO4=1");

}

}

}

Скачать данный скетч можно на сайте Arduino-kit по ссылке https://arduino-kit.ru/scetches/exp_66_02.zip.

После загрузки скетча на ESP8266, необходимо перевести плату в режим ATmega328  ESP8266. Переключатели необходимо установить следующим образом

1

2

3

4

5

6

7

 

 

 

 

 

 

 

ON

ON

OFF

OFF

OFF

OFF

OFF

 

 

 

 

 

 

 

Теперь Arduino и ESP8266 соединены по последовательному порту. Отправляя с компьютера (из программы Termite) '0' или '1' мы изменяем состояние светодиода на контакте GPIO4 и получаем сообщение из ESP8266. Процесс обмена показан на рис. 66.4.

296 Эксперимент 66

Рис.66.4.Процесс обмена по последовательному порту между ATmega328 и ESP8266 платы Arduino+WiFi

Режим связи между ATmega328 и ESP8266 позволяет их использовать совместно, например, в проектах Интернет вещей.

Эксперимент 67.

Web-сервер с отображением данных метеостанции

В этом эксперименте создадим web-сервер, для отображения данных метеостанции на датчиках BMP280 и DHT11

Вэксперименте мы будем использовать следующие компоненты: Плата Arduino UNO – 1;

Кабель USB – 1;

Плата прототипирования – 1; Датчик BMP280 – 1;

Датчик DHT11 – 1; USB-TTL адаптер – 1; Провода MM – 15.

Вэксперименте 41 мы создавали домашнюю метеостанцию на датчиках BMP280 и DHT11 с выводом данных на ЖК-дисплей. В этом эксперименте данные

сдатчиков будут отображаться на web-странице сервера, который мы создадим на модуле ESP8266 нашей платы Arduino WiFi. Сами датчики будут подсоединены к плате Arduino, и данные с них будут отправляться по последовательному порту на модуль ESP8266 для отображения на web-странице. Для отладки (вывода данных в последовательный порт компьютера) будем использовать USB-TTL адаптер, подключенный к плате Arduino. Схема соединений показана на рис. 67.1.

Приступим к написанию скетча для платы Arduino. Данные будем отправлять по последовательному порту Serial на модуль ESP8266 в формате:

P=xxx Pa<br>T=xxxx *C<br>H=xxxx %$

Для отладки выводим данные в последовательный порт компьютера (со стороны Arduino softwareSerial на контактах 2 и 3).

Загрузим на плату Arduino скетч из листинга 67.1.

Переключатели на плате Arduino+WiFi необходимо установить следующим образом:

1

2

3

4

5

6

7

 

 

 

 

 

 

 

OFF

OFF

ON

ON

OFF

OFF

OFF

 

 

 

 

 

 

 

298 Эксперимент 67

Рис.67.1.Схема соединений подключения датчиков метеостанции

Листинг 67.1.

//подключение библиотек

#include "DHT.h" #include <Wire.h> #include <SPI.h>

#include <Adafruit_Sensor.h> #include <Adafruit_BMP280.h> #include <SoftwareSerial.h>

//пин для подключения датчика DHT #define DHTPIN 12

//тип датчика DHT

#define DHTTYPE DHT11

// DHT 11

//создание экземпляров

Adafruit_BMP280 bmp;

SoftwareSerial PCSerial(3, 2); // RX, TX DHT dht(DHTPIN, DHTTYPE);

//для опроса

unsigned long millist=0;

//

Эксперимент 67

299

String str="";

void setup()

{

//запуск последовательного порта

Serial.begin(115200);

//запуск порта для USB-TTL PCSerial.begin(115200);

//запуск датчиков DHT,BMP20 dht.begin();

bmp.begin();

}

void loop() { if(millis()-millist>=30000)

{

// получение данных

int h = dht.readHumidity(); int t = bmp.readTemperature(); int p = bmp.readPressure();

//отправка в serial

//отправка в serial str="P="+String(p)+" Pa<br>"; str+="T="+String(t)+" *C<br>"; str+="H="+String(h)+" %$";

Serial.print(str); Serial.print(str);

//отправка в sowtwareserial PCSerial.println(str);

//новый отсчет 30 сек millist=millis();

}

//получение ESP8266 -- Arduino if (Serial.available()) {

PCSerial.write(Serial.read());

}

}

Скачать данный скетч можно на сайте Arduino-kit по ссылке https://arduino-kit.ru/scetches exp_67_01.zip.

Загружаем скетч на плату Arduino, открываем последовательные порты Serial (монитор последовательного порта Arduino IDE) и softwareSerial (Termite). Видим вывод показаний атмосферного давления, температуры и влажности (рис. 67.2).

После проверки можно закомментировать строку

//PCSerial.println(str);

Теперь создаем скетч для ESP8266. Данные, поступающие из Arduino, будем сохранять в переменных p, t, h. При обращении клиента к серверу будем выводить страницу с показаниями переменных p, t, h.

300 Эксперимент 67

Рис.67.2.Вывод показание в serial и softwareSerial

Содержимое скетча показано в листинге 67.2.

Для загрузки скетча в ESP 8266 переключатели на плате Arduino+WiFi устанавливаем следующим образом:

1

2

3

4

5

6

7

 

 

 

 

 

 

 

OFF

OFF

OFF

OFF

ON

ON

ON

 

 

 

 

 

 

 

Листинг 67.2.

//подключение библиотек

#include <ESP8266WiFi.h>

//данные SSID и пароль точки доступа

const

char*

ssid

=

"Kassa1";

const

char*

password =

"12345678";

//создание объекта сервера

WiFiServer server(80);

//данные, пришедшие из последовательного порта

String inputString = ""; String inputString1 = "";

//строка пришла

boolean stringComplete = false; // пин подключения светодиода int pinLed=4; // GPIO4