viewtopic.php?f=39&t=7668&p=125551#p125551
support писал(а): ↑27.11.2021{, 15:32}
Sergoo писал(а): ↑27.11.2021{, 13:51}
support писал(а): ↑27.11.2021{, 06:20}
.... первый раз об этой проблемме слышу. Поподробнее можно?
Проблему уже описывали где-то на форуме , но у меня так полноценно не получилось устранить ее.
Попробуйте скомпилировать две программки для 8266 и 32, проги одиннаковые, но на 32й ошибка при компиляции в ARDU IDE. Скорее всего причина в разных библиотеках WiFiUDP на платы 32 и 8266 , а flprog наверное при компиляции под 32ю плату берет библиотеку из папки 8266, но это есессено не точное предположение, в ручную меняя папки результата не получил я

.
Но результат после танца с бубнами все же есть, если в ARDU IDE после объявление всех библиотеек добавить строчку #define UDP_TX_PACKET_MAX_SIZE (номер порта UDP), то проект скомпилируется, но получилась только односторонняя связь при передаче переменных между 8266 и 32. Плата 32я от 8266й принимает переменные , но 8266я не принимает переменные, но скорее всего это 32я неправильно передает в 8266ю. Связь между двух8266 работает без проблем.
viewtopic.php?f=156&t=7286 вот тема кстати
функцию допилить бы стоило в программе раз уж она встроенная)))
Постараюсь допилить)))) но теперь уже после третьего числа, сейчас заканчиваю вахту и выезжаю домой....
support, может чем то поможет для решения...)
----------------------------------------------------------------------------------------------------------------
Конечно, вот пример программы на Arduino для передачи нескольких переменных (integer, bit и строка) через WiFi UDP на плату ESP32:
#include <WiFi.h>
#include <WiFiUdp.h>
const char* ssid = "название_вашей_wifi_сети";
const char* password = "пароль_вашей_wifi_сети";
WiFiUDP Udp;
unsigned int localUdpPort = 8888; // порт, который будет использоваться для UDP соединения
IPAddress remoteIp(192, 168, 0, 100); // IP-адрес назначения
unsigned int remoteUdpPort = 8888; // порт, который будет использоваться на удаленной плате
int variable1 = 123; // первая переменная типа integer
bool variable2 = false; // вторая переменная типа bit
String variable3 = "Hello, ESP32!"; // третья переменная типа строка
void setup() {
Serial.begin(115200);
Serial.println();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi подключено");
Serial.println("IP-адрес: " + WiFi.localIP());
Udp.begin(localUdpPort);
}
void loop() {
sendVariables();
delay(5000); // ждем 5 секунд и повторяем
}
void sendVariables() {
Serial.println("Отправка переменных:");
Udp.beginPacket(remoteIp, remoteUdpPort);
Udp.write((char*)&variable1, sizeof(variable1));
byte variable2Byte = variable2 ? 1 : 0;
Udp.write(&variable2Byte, sizeof(variable2Byte));
Udp.print(variable3);
Udp.endPacket();
Serial.println("Переменные успешно отправлены");
}
Не забудьте заменить название_вашей_wifi_сети и пароль_вашей_wifi_сети на соответствующие значения ваших сети.
При этом, на плате ESP32 (принимающей стороне), вы должны использовать следующий код:
#include <WiFi.h>
#include <WiFiUdp.h>
const char* ssid = "название_вашей_wifi_сети";
const char* password = "пароль_вашей_wifi_сети";
WiFiUDP Udp;
unsigned int localUdpPort = 8888; // порт, который будет использоваться для UDP соединения
void setup() {
Serial.begin(115200);
Serial.println();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi подключено");
Serial.println("IP-адрес: " + WiFi.localIP());
Udp.begin(localUdpPort);
}
void loop() {
receiveAndPrintVariables();
delay(500); // обновляем каждые 500 миллисекунд
}
void receiveAndPrintVariables() {
int receivedVariable1;
byte receivedVariable2Byte;
bool receivedVariable2;
char receivedVariable3[255];
int packetSize = Udp.parsePacket();
if (packetSize) {
Serial.println("Получены переменные:");
Udp.read((char*)&receivedVariable1, sizeof(receivedVariable1));
Serial.print("Переменная 1 (integer): ");
Serial.println(receivedVariable1);
Udp.read((char*)&receivedVariable2Byte, sizeof(receivedVariable2Byte));
receivedVariable2 = receivedVariable2Byte == 1;
Serial.print("Переменная 2 (bit): ");
Serial.println(receivedVariable2);
int bytesRead = Udp.readBytesUntil('\n', receivedVariable3, sizeof(receivedVariable3));
receivedVariable3[bytesRead] = '\0';
Serial.print("Переменная 3 (строка): ");
Serial.println(receivedVariable3);
}
}
Аналогично, здесь вам также потребуется заменить название_вашей_wifi_сети и пароль_вашей_wifi_сети на соответствующие значения ваших сети.
напиши программу на ардуино :
передача нескольких переменых integer, bit, строка по WiFi UDP между esp32 и esp8266
Конечно, вот пример программы на Arduino для передачи нескольких переменных (integer, bit и строка) через WiFi UDP между ESP32 и ESP8266:
Для ESP32:
#include <WiFi.h>
#include <WiFiUdp.h>
const char* ssid = "название_wifi_сети";
const char* password = "пароль_wifi_сети";
WiFiUDP Udp;
unsigned int localUdpPort = 8888; // порт, который будет использоваться для UDP соединения
IPAddress destinationIp(192, 168, 0, 100); // IP-адрес ESP8266
unsigned int destinationPort = 8888; // порт, который будет использоваться на ESP8266
int variable1 = 123; // первая переменная типа integer
bool variable2 = false; // вторая переменная типа bit
String variable3 = "Hello, ESP8266!"; // третья переменная типа строка
void setup() {
Serial.begin(115200);
Serial.println();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi подключено");
Serial.println("IP-адрес: " + WiFi.localIP());
Udp.begin(localUdpPort);
}
void loop() {
sendVariables();
delay(5000); // ждем 5 секунд и повторяем
}
void sendVariables() {
Serial.println("Отправка переменных:");
Udp.beginPacket(destinationIp, destinationPort);
Udp.write((char*)&variable1, sizeof(variable1));
byte variable2Byte = variable2 ? 1 : 0;
Udp.write(&variable2Byte, sizeof(variable2Byte));
Udp.print(variable3);
Udp.endPacket();
Serial.println("Переменные успешно отправлены");
}
Для ESP8266:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char* ssid = "название_wifi_сети";
const char* password = "пароль_wifi_сети";
WiFiUDP Udp;
unsigned int localUdpPort = 8888; // порт, который будет использоваться для UDP соединения
IPAddress sourceIp(192, 168, 0, 50); // IP-адрес ESP32
unsigned int sourcePort = 8888; // порт, который будет использоваться на ESP32
void setup() {
Serial.begin(115200);
Serial.println();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi подключено");
Serial.println("IP-адрес: " + WiFi.localIP());
Udp.begin(localUdpPort);
}
void loop() {
receiveAndPrintVariables();
delay(500); // обновляем каждые 500 миллисекунд
}
void receiveAndPrintVariables() {
int receivedVariable1;
byte receivedVariable2Byte;
bool receivedVariable2;
char receivedVariable3[255];
int packetSize = Udp.parsePacket();
if (packetSize) {
IPAddress senderIp = Udp.remoteIP();
unsigned int senderPort = Udp.remotePort();
if (senderIp == sourceIp && senderPort == sourcePort) {
Serial.println("Получены переменные:");
Udp.read((char*)&receivedVariable1, sizeof(receivedVariable1));
Serial.print("Переменная 1 (integer): ");
Serial.println(receivedVariable1);
Udp.read((char*)&receivedVariable2Byte, sizeof(receivedVariable2Byte));
receivedVariable2 = receivedVariable2Byte == 1;
Serial.print("Переменная 2 (bit): ");
Serial.println(receivedVariable2);
int bytesRead = Udp.readBytesUntil('\n', receivedVariable3, sizeof(receivedVariable3));
receivedVariable3[bytesRead] = '\0';
Serial.print("Переменная 3 (строка): ");
Serial.println(receivedVariable3);
}
}
}
Убедитесь, что вы правильно указали названиеwifiсети и парольwifiсети для каждой платы, а также правильные IP-адреса и порты отправителя и получателя.
void sendVariables() {
Serial.println("Отправка переменных:");
Udp.beginPacket(remoteIp, remoteUdpPort);
Udp.write((char*)&variable1, sizeof(variable1));
byte variable2Byte = variable2 ? 1 : 0;
Udp.write(&variable2Byte, sizeof(variable2Byte));
Udp.print(variable3);
Udp.endPacket();
Serial.println("Переменные успешно отправлены");
}
Не забудьте заменить название_вашей_wifi_сети и пароль_вашей_wifi_сети на соответствующие значения ваших сети.
При этом, на плате ESP32 (принимающей стороне), вы должны использовать следующий код:
#include <WiFi.h>
#include <WiFiUdp.h>
const char* ssid = "название_вашей_wifi_сети";
const char* password = "пароль_вашей_wifi_сети";
WiFiUDP Udp;
unsigned int localUdpPort = 8888; // порт, который будет использоваться для UDP соединения
void setup() {
Serial.begin(115200);
Serial.println();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi подключено");
Serial.println("IP-адрес: " + WiFi.localIP());
Udp.begin(localUdpPort);
}
void loop() {
receiveAndPrintVariables();
delay(500); // обновляем каждые 500 миллисекунд
}
void receiveAndPrintVariables() {
int receivedVariable1;
byte receivedVariable2Byte;
bool receivedVariable2;
char receivedVariable3[255];
int packetSize = Udp.parsePacket();
if (packetSize) {
Serial.println("Получены переменные:");
Udp.read((char*)&receivedVariable1, sizeof(receivedVariable1));
Serial.print("Переменная 1 (integer): ");
Serial.println(receivedVariable1);
Udp.read((char*)&receivedVariable2Byte, sizeof(receivedVariable2Byte));
receivedVariable2 = receivedVariable2Byte == 1;
Serial.print("Переменная 2 (bit): ");
Serial.println(receivedVariable2);
int bytesRead = Udp.readBytesUntil('\n', receivedVariable3, sizeof(receivedVariable3));
receivedVariable3[bytesRead] = '\0';
Serial.print("Переменная 3 (строка): ");
Serial.println(receivedVariable3);
}
}
Аналогично, здесь вам также потребуется заменить название_вашей_wifi_сети и пароль_вашей_wifi_сети на соответствующие значения ваших сети.
Удачного программирования на Arduino!