Witam serdecznie
wczoraj pol dnia glowilem sie nad pewnym tematem i nic nie wymyslilem, robie zdalny system pomiarowy w ktorym kilka modulów WiFi (jeden glowny ESP32 jest serverem, pozostale 8266 to klienci) beda zbierac dane z czujnikow, wysylac po UDP (moze w przyszlosci TCP) do serwera a stamtad powedruja na jakas strone/apke.
Mam zrobiona na esp komunikacje UDP zarowno po stronie accespointa jak i klienta, natomiast przesylana ramka danych jest w formacie ASCII, problem (moze trywialny) to wyslanie i odebranie danych w formacie int/float (bo tego typu dane beda pochodzily z czujnikow). Probowalem roznych funkcji jak i sposobow rzutowania, zawsze arduino ide (bo w tym programuje ESP) zwraca mi bledy o niedozwolonej konwersji itp...
Wrzuce kod na ktorym poprawnie sa wysylane dane jednak tak jak pisalem jako tekst w ASCII:
Strona klienta:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
WiFiUDP Udp;
unsigned int localUdpPort = 4210; // local port to listen on
IPAddress ip(192, 168, 4, 1);
void setup()
{
Serial.begin(115200);
Serial.println();
WiFi.begin("ESP32", "123456789");
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
while (WiFi.status() != WL_CONNECTED)
{
WiFi.reconnect();
delay(10000);
Serial.print(".Reconnected");
Serial.println(WiFi.localIP());
}
Udp.beginPacket(ip, localUdpPort);
Udp.write("45"); // wysyłamy jeden bajt
Udp.endPacket();
Serial.print("Wyslalem cos\n");
delay(5000);
}
Jak widac wyslanie tekstu nie jest problemem ale nie umiem wyslac danych np z typu int, gdyz wysyla sie calkmien zmieniona wartosc
Na stronie serwera wyglada to tak:
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
#include <WiFiUdp.h>
#include <stdlib.h>
WiFiUDP Udp;
unsigned int localUdpPort = 4210; // local port to listen on
char incomingPacket[255]; // buffer for incoming packets
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.print("Setting soft-AP ... ");
Serial.println(WiFi.softAP("ESP32", "123456789") ? "Ready" : "Failed!");
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
Udp.begin(localUdpPort);
Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
}
void loop()
{
int packetSize = Udp.parsePacket();
if (packetSize)
{
// receive incoming UDP packets
Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
int len = Udp.read(incomingPacket, 255);
if (len > 0)
{
incomingPacket[len] = 0;
}
Serial.printf("UDP packet contents: %s\n", incomingPacket);
}
}
Czy ktos moglby powiedziec albo moze wskazac przyklad jak poprzez UDP przeslac np float?
Bede wdzieczny za rady