Приветствую вас на уроке "Удаленное управление по протоколу UDP с использованием ESP8266 и ESP32". В предыдущем уроке мы знакомились с основами протокола UDP
(User Datagram Protocol), который предоставляет простой способ обмена
данными между устройствами в сети. Если вы еще не ознакомились с
протоколом UDP, рекомендуется посмотреть предыдущий урок, чтобы понять его основные понятия и функциональность.
Пример работы UDP с ESP32 и ESP8266.
В этом уроке мы продолжим использовать платы ESP8266 и ESP32 для демонстрации работы протокола UDP. Мы будем управлять светодиодами на удаленных устройствах с помощью команд, отправляемых через протокол UDP.
Наши цели:
- Ознакомиться с отправкой и приемом данных по протоколу UDP.
- Реализовать удаленное управление светодиодами с использованием двух плат ESP8266/ESP32.
- Изучить простой и эффективный способ обмена данными между устройствами в локальной сети.
Давайте начнем и рассмотрим детали реализации этого увлекательного проекта!
Для урока "Удаленное управление по протоколу UDP" потребуется:
- Две платы ESP8266 и/или ESP32.
- Светодиоды.
- Тактовая кнопка.
- Резистор номиналом от 100 до 220 ом.
- Компьютер с Arduino IDE.
Наша система состоит из двух частей: отправителя и получателя. Отправитель будет принимать команды с последовательного порта компьютера и отправлять их на удаленный получатель по протоколу UDP. Получатель будет прослушивать UDP-пакеты и выполнять команды для управления светодиодом.
Код отправителя (udp_sender):
/*
Сайт автора https://arduino-tex.ru/
Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
Страница урока https://arduino-tex.ru/news/174/udalennoe-upravlenie-po-protokolu-udp-s-ispolzovaniem.html
*/
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#if defined(ESP32)
#include "WiFi.h"
#endif
#include <WiFiUdp.h>
const char* ssid = "Ваш_SSID"; // Ваш SSID
const char* password = "Ваш_пароль"; // Ваш пароль
const IPAddress receiverIP(192, 168, 1, 10); // IP-адрес #2 (Получателя)
const int receiverPort = 12345; // Порт #2 (Получателя)
WiFiUDP udp;
char command;
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW); // Изначально светодиод выключен
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Подключение к WiFi...");
}
Serial.println("Подключено к WiFi!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
udp.begin(receiverPort); // Инициализация UDP для приема данных
}
void loop() {
// Чтение данных с последовательного порта
if (Serial.available() > 0) {
char command = Serial.read();
if (command != -1) { // Проверяем, что команда считывается успешно
// Проверка наличия символа и его действительности
if (command != '\n' && command != '\r') {
// Отправка команды удаленному устройству по протоколу UDP
udp.beginPacket(receiverIP, receiverPort);
udp.write((uint8_t)command); // Преобразуем символ в uint8_t
udp.endPacket();
Serial.print("Команда: ");
Serial.println(command);
}
}
}
}
Код получателя (udp_receiver):
/*
Сайт автора https://arduino-tex.ru/
Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
Страница урока https://arduino-tex.ru/news/174/udalennoe-upravlenie-po-protokolu-udp-s-ispolzovaniem.html
*/
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#if defined(ESP32)
#include "WiFi.h"
#endif
#include <WiFiUdp.h>
const char* ssid = "Ваш_SSID"; // Ваш SSID
const char* password = "Ваш_пароль"; // Ваш пароль
const int receiverPort = 12345; // Порт
WiFiUDP udp;
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW); // Изначально светодиод выключен
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Подключение к WiFi...");
}
Serial.println("Подключено к WiFi!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
udp.begin(receiverPort); // Инициализация UDP для приема данных
}
void loop() {
int packetSize = udp.parsePacket();
if (packetSize) {
char command = udp.read();
// Обработка команды от удаленного устройства
if (command == '2') {
digitalWrite(LED_BUILTIN, LOW); // Выключить светодиод
Serial.println("Сосотоение светодиода: Выкл.");
} else if (command == '1') {
digitalWrite(LED_BUILTIN, HIGH); // Включить светодиод
Serial.println("Сосотоение светодиода: Вкл.");
}
}
}
Кроме возможности удаленного управления светодиодами посредством UDP, мы также можем наблюдать за происходящими событиями и взаимодействиями между устройствами, используя монитор порта (Serial Monitor) в Arduino IDE. Подключив платы ESP8266 и ESP32 к компьютеру и загрузив соответствующий код, мы можем отслеживать передаваемые и принимаемые команды, а также состояния светодиодов через монитор порта. Это позволяет более глубоко понять происходящие процессы, выявить возможные ошибки и улучшить взаимодействие между устройствами.
Монитор порта является незаменимым инструментом для отладки и анализа работы проектов на платах ESP8266 и ESP32, помогая следить за данными и событиями в реальном времени.
Удаленное управление светодиодами по протоколу UDP с использованием ESP8266/ESP32 и тактовой кнопки.
Для дополнительной функциональности мы добавим возможность отправки команды управления светодиодами с помощью тактовой кнопки. При нажатии кнопки, отправитель будет отправлять команду на включение светодиода на получателе через протокол UDP.
Схема подключения ESP8266.
Схема подключения ESP32.
Изменения в коде отправителя (udp_sender):
/*
Сайт автора https://arduino-tex.ru/
Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
Страница урока https://arduino-tex.ru/news/174/udalennoe-upravlenie-po-protokolu-udp-s-ispolzovaniem.html
*/
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#if defined(ESP32)
#include "WiFi.h"
#endif
#include <WiFiUdp.h>
const char* ssid = "Ваш_SSID"; // Ваш SSID
const char* password = "Ваш_пароль"; // Ваш пароль
const IPAddress receiverIP(192, 168, 1, 10); // IP-адрес #2 (Получателя)
const int receiverPort = 12345; // Порт #2 (Получателя)
#if defined(ESP8266)
const int buttonPin = D1; // Пин для кнопки ESP8266
#endif
#if defined(ESP32)
const int buttonPin = 5; // Пин для кнопки ESP32
#endif
WiFiUDP udp;
char command;
bool buttonStatePrev = HIGH; // Предыдущее состояние кнопки
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW); // Изначально светодиод выключен
pinMode(buttonPin, INPUT_PULLUP); // Настраиваем пин кнопки как вход с подтяжкой
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Подключение к WiFi...");
}
Serial.println("Подключено к WiFi!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
udp.begin(receiverPort); // Инициализация UDP для приема данных
}
void loop() {
// Чтение состояния кнопки
int buttonState = digitalRead(buttonPin);
// Если состояние кнопки изменилось
if (buttonState != buttonStatePrev) {
// Сохраняем новое состояние кнопки
buttonStatePrev = buttonState;
// Если кнопка нажата, отправляем команду на включение светодиода получателю
if (buttonState == LOW) {
udp.beginPacket(receiverIP, receiverPort);
udp.write((uint8_t)'1'); // Отправляем команду '1' по протоколу UDP
udp.endPacket();
Serial.println("Команда на включение светодиода отправлена!");
} else { // Иначе, если кнопка не нажата, отправляем команду на выключение светодиода получателю
udp.beginPacket(receiverIP, receiverPort);
udp.write((uint8_t)'2'); // Отправляем команду '2' по протоколу UDP
udp.endPacket();
Serial.println("Команда на выключение светодиода отправлена!");
}
// Добавим небольшую задержку, чтобы избежать повторной отправки команды при быстром нажатии кнопки
delay(100);
}
}
В результате этих изменений, мы добавили возможность отправки команды управления светодиодами на получателе с помощью тактовой кнопки на отправителе. Теперь вы можете включать светодиод на удаленном устройстве как с помощью кнопки, так и с помощью последовательного порта компьютера, демонстрируя гибкость и удобство управления удаленными устройствами через протокол UDP.
Вывод:
В данном уроке мы познакомились с удаленным управлением светодиодами на платах ESP8266 и ESP32 с использованием протокола UDP. Мы рассмотрели, как отправлять и принимать данные по UDP, а также как создать простой механизм удаленного управления с помощью тактовой кнопки на отправителе.
Основные этапы:
- Ознакомление с протоколом UDP и его основными понятиями.
- Разработка кода отправителя и получателя для удаленного управления светодиодами.
- Добавление функциональности отправки команды управления светодиодом с помощью тактовой кнопки.
Мы научились создавать взаимодействие между удаленными устройствами через локальную сеть, что может быть полезно для множества приложений, начиная от домашних автоматизаций до создания интерактивных прототипов.
Продолжайте экспериментировать с кодом, добавлять новую функциональность и адаптировать проект под свои потребности. Удаленное управление по протоколу UDP - это лишь одна из множества возможностей, которые предоставляют платы ESP8266 и ESP32.
Удачи в вашем эксперименте с протокола UDP!
Понравился урок. Удаленное управление светодиодами по протоколу UDP с использованием ESP8266, ESP32? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
|
Код отправителя (udp_sender).ino | 2 Kb | 371 |
Скачать
Вы можете скачать файл.
|
|
Код получателя (udp_receiver):.ino | 2 Kb | 386 |
Скачать
Вы можете скачать файл.
|
|
Коде отправителя с тактовой кнопкой (udp_sender).ino | 3 Kb | 385 |
Скачать
Вы можете скачать файл.
|
Комментарии