Удаленное управление по протоколу UDP с использованием ESP8266, ESP32.

Приветствую вас на уроке "Удаленное управление по протоколу UDP с использованием ESP8266 и ESP32". В предыдущем уроке мы знакомились с основами протокола UDP (User Datagram Protocol), который предоставляет простой способ обмена данными между устройствами в сети. Если вы еще не ознакомились с протоколом UDP, рекомендуется посмотреть предыдущий урок, чтобы понять его основные понятия и функциональность.

В этом уроке мы продолжим использовать платы ESP8266 и ESP32 для демонстрации работы протокола UDP.

Пример работы UDP с ESP32 и ESP8266.

В этом уроке мы продолжим использовать платы ESP8266 и ESP32 для демонстрации работы протокола UDP. Мы будем управлять светодиодами на удаленных устройствах с помощью команд, отправляемых через протокол UDP.

Наши цели:

  • Ознакомиться с отправкой и приемом данных по протоколу UDP.
  • Реализовать удаленное управление светодиодами с использованием двух плат ESP8266/ESP32.
  • Изучить простой и эффективный способ обмена данными между устройствами в локальной сети.

Давайте начнем и рассмотрим детали реализации этого увлекательного проекта!

Пример работы UDP с ESP32 и ESP8266

Для урока "Удаленное управление по протоколу UDP" потребуется:

  1. Две платы ESP8266 и/или ESP32.
  2. Светодиоды.
  3. Тактовая кнопка.
  4. Резистор номиналом от 100 до 220 ом.
  5. Компьютер с 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 к компьютеру и загрузив соответствующий код, мы можем отслеживать передаваемые и принимаемые команды, а также состояния светодиодов через монитор порта. Это позволяет более глубоко понять происходящие процессы, выявить возможные ошибки и улучшить взаимодействие между устройствами.

Кроме возможности удаленного управления светодиодами посредством UDP

Монитор порта является незаменимым инструментом для отладки и анализа работы проектов на платах ESP8266 и ESP32, помогая следить за данными и событиями в реальном времени.

Удаленное управление светодиодами по протоколу UDP с использованием ESP8266/ESP32 и тактовой кнопки.

Для дополнительной функциональности мы добавим возможность отправки команды управления светодиодами с помощью тактовой кнопки. При нажатии кнопки, отправитель будет отправлять команду на включение светодиода на получателе через протокол UDP.

Удаленное управление светодиодами по протоколу UDP с использованием ESP8266/ESP32 и тактовой кнопки.

Схема подключения ESP8266.

Схема подключения ESP8266.


Схема подключения ESP32.

Схема подключения 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, а также как создать простой механизм удаленного управления с помощью тактовой кнопки на отправителе.

Основные этапы:

  1. Ознакомление с протоколом UDP и его основными понятиями.
  2. Разработка кода отправителя и получателя для удаленного управления светодиодами.
  3. Добавление функциональности отправки команды управления светодиодом с помощью тактовой кнопки.

Мы научились создавать взаимодействие между удаленными устройствами через локальную сеть, что может быть полезно для множества приложений, начиная от домашних автоматизаций до создания интерактивных прототипов.

ESP8266 и ESP32 с использованием протокола UDP

Продолжайте экспериментировать с кодом, добавлять новую функциональность и адаптировать проект под свои потребности. Удаленное управление по протоколу UDP - это лишь одна из множества возможностей, которые предоставляют платы ESP8266 и ESP32.

Удачи в вашем эксперименте с протокола UDP!

Понравился урок. Удаленное управление светодиодами по протоколу UDP с использованием ESP8266, ESP32? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!


Фотографии к статье

Файлы для скачивания

Код отправителя (udp_sender) Код отправителя (udp_sender).ino2 Kb 233 Скачать
Код получателя (udp_receiver): Код получателя (udp_receiver):.ino2 Kb 251 Скачать
Коде отправителя с тактовой кнопкой (udp_sender) Коде отправителя с тактовой кнопкой (udp_sender).ino3 Kb 240 Скачать

Комментарии

Ваше Имя*


Разработка проектов