Приветствую вас на уроке "Удаленное управление по протоколу UDP с использованием ESP8266 и ESP32". В предыдущем уроке мы знакомились с основами протокола UDP (User Datagram Protocol), который предоставляет простой способ обмена данными между устройствами в сети. Если вы еще не ознакомились с протоколом UDP, рекомендуется посмотреть предыдущий урок, чтобы понять его основные понятия и функциональность.
В этом уроке мы продолжим использовать платы ESP8266 и ESP32 для демонстрации работы протокола UDP. Мы будем управлять светодиодами на удаленных устройствах с помощью команд, отправляемых через протокол UDP.
Наши цели:
Давайте начнем и рассмотрим детали реализации этого увлекательного проекта!
Наша система состоит из двух частей: отправителя и получателя. Отправитель будет принимать команды с последовательного порта компьютера и отправлять их на удаленный получатель по протоколу 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.
/* Сайт автора 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 - это лишь одна из множества возможностей, которые предоставляют платы ESP8266 и ESP32.
Удачи в вашем эксперименте с протокола UDP!
Понравился урок. Удаленное управление светодиодами по протоколу UDP с использованием ESP8266, ESP32? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
![]() |
Код отправителя (udp_sender).ino | 2 Kb | 34 | Скачать |
![]() |
Код получателя (udp_receiver):.ino | 2 Kb | 32 | Скачать |
![]() |
Коде отправителя с тактовой кнопкой (udp_sender).ino | 3 Kb | 32 | Скачать |
Уроки ESP32 и ESP8266
4 августа , 2023
Комментариев:0
Файлов для скачивания:3
Фото:6
Понравилась статья? Нажми
Cлучайные товары
MT3608 DC-DC Step Up
Модуль MP3-плеера DFPlayer Mini
Читайте также
Мы в соц сетях
Комментарии