packetBuffer zerlegen

Hi,
nach dem ich endlich für das eine Problem eine Lösung gefunden habe tut sich schon das nächste auf.
Dieses mal versuche ich den packetBuffer zu zerlegen momentan erstmal in float.

so sieht der Code aus:

  int packetSize = Udp.parsePacket();
  if (packetSize) {
    int len = Udp.read(packetBuffer, 255);
    if (len > 0) packetBuffer[len-1] = 0;
    Serial.print("Empfangen(IP/Size/Data): ");
    Serial.print(Udp.remoteIP());Serial.print(" / ");
    Serial.print(packetSize);Serial.print(" / ");
    Serial.println(packetBuffer);

und das war mein Gedanke dazu:

float value1 = atof(strtok(packetBuffer, "!"));
float value2 = atof(strtok(NULL, "!"));

Serial.println(value1);
Serial.println(value2);

funktioniert nur leider nicht kann mir einer Bitte weiterhelfen.

Es ist dir vielleicht egal, wie es gesendet wird....

Aber sich dann auf eine Empfangsmethode festzulegen, empfinde ich als arg seltsam.

Vergleichbar:
Mache die Rechnung nicht ohne den Wirt.

combie:
Es ist dir vielleicht egal, wie es gesendet wird....

Aber sich dann auf eine Empfangsmethode festzulegen, empfinde ich als arg seltsam.

Vergleichbar:
Mache die Rechnung nicht ohne den Wirt.

Sry die Frage verstehe ich nicht...

wenn du den code vom Clienten sehen will das wäre der

char Test[7];
dtostrf(Temp, 5, 2, Test);

//Senden
    Udp.beginPacket(ipServidor,9999);
    char buf[20];   unsigned long testID = millis();    sprintf(buf, "%lu", testID); 
    Udp.write(buf);
    Udp.write("!");
    Udp.write(Test);
    Udp.write("\r\n");
    Udp.endPacket();
    Serial.print("enviando: ");Serial.println(buf);
delay(10);

Mit den nicht kompilierbaren Codeteilen kann man so nicht viel sagen, nur das du annimmst, in buf steht eine Zahl (von millis) aber ich sehe weder eine zweite Zahl noch ein zweites ! in buf

Ok dann nochmal von vorne:

Master:

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

WiFiUDP Udp;
char packetBuffer[255];
unsigned int localPort = 9999;
const char * ssid = "+++++";
const char * password = "++++++";

void setup() {
  Serial.begin(115200);
  WiFi.softAP(ssid, password);
  Udp.begin(localPort);
  }

void loop() {
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    int len = Udp.read(packetBuffer, 255);
    if (len > 0) packetBuffer[len-1] = 0;
    Serial.print("Empfangen(IP/Size/Data): ");
    Serial.print(Udp.remoteIP());Serial.print(" / ");
    Serial.print(packetSize);Serial.print(" / ");
    Serial.println(packetBuffer);
    Serial.println(packetBuffer);

    Udp.beginPacket(Udp.remoteIP(),Udp.remotePort());
    Udp.write("recived: ");
    Udp.write(packetBuffer);
    Udp.write("\r\n");
    Udp.endPacket();
     }


//Klappt nicht      
//float value1 = atof(strtok(packetBuffer, "!"));
//float value2 = atof(strtok(NULL, "!"));

//Serial.println(value1);
//Serial.println(value2);

}

Client:

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

WiFiUDP Udp;
const char * ssid = "#########";
const char * password = "##########";



// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Zum Temp auslesen
float rawADC;
float logRt, Rt, Temp;
float R = 100;             // Festwiderstand

float c1 = 2.204153124e-03;   // berechnete Steinhart-Hart Koeffizienten aus datenblatt mit Thermister calculator errechnet
float c2 = 2.459100717e-04;   // 
float c3 = 1.782179510e-07;   //
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Temp auslesen ende

char packetBuffer[255];
unsigned int localPort = 9999;
IPAddress ipServidor(192, 168, 4, 1);
IPAddress ipCliente(192, 168, 4, 10);
IPAddress Subnet(255, 255, 255, 0);
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  WiFi.mode(WIFI_STA); // so dass es nur STA ist und IP 192.168.4.1 nicht erzeugt
  WiFi.config(ipCliente, ipServidor, Subnet);
  Udp.begin(localPort);
}

void loop()
{
  senden();
  thermistor();
} 

void thermistor()

{
     rawADC = 0;
    for (int i = 0; i < 1024; i++)  // Mittelwert & Oversampling
    {
      rawADC += analogRead(0);
    }
    rawADC = (rawADC / 1024);

    Rt = R * ( rawADC / ( 1023.0 - rawADC )); // NTC-Widerstand berechnen

    // Steinhart-Hart Gleichung für Temperaturverlauf NTC
    logRt = log(Rt);
    Temp = ( 1.0 / (c1 + c2 * logRt + c3 * logRt * logRt * logRt ) );

    Temp = Temp - 263.15;   // von Kelvin nach Grad Celsius


    Serial.print(Temp, 2);   //  Messwert direkt
    Serial.println(" Grad Celsius"); 
}

void senden()
{
unsigned long Tiempo_Envio = millis();
char Test[7];
dtostrf(Temp, 5, 2, Test);

//Senden
    Udp.beginPacket(ipServidor,9999);
    char buf[20];   unsigned long testID = millis();    sprintf(buf, "%lu", testID); 
    Udp.write(buf);
    Udp.write("!");
    Udp.write(Test);
    Udp.write("\r\n");
    Udp.endPacket();
    Serial.print("enviando: ");Serial.println(buf);
delay(10); // um Ihnen Zeit zu geben, die Antwort auf die vorherige Sendung zu erhalten
 
//Empfangen
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    int len = Udp.read(packetBuffer, 255);
    if (len > 0) packetBuffer[len-1] = 0;
    Serial.print("RECIBIDO(IP/Port/Size/Datos): ");
    Serial.print(Udp.remoteIP());Serial.print(" / ");
    Serial.print(Udp.remotePort()); Serial.print(" / ");
    Serial.print(packetSize);Serial.print(" / ");
    Serial.println(packetBuffer);
  }
Serial.println("");
delay(1000);
}

gesendet wird Buf "!" als Trennzeichen und Test beides sind Zahlen und ich möchte sie gerne Trennen und in float speichern.

Und wenn wir schon beim Thema sind noch eine weitere Frage ist es möglich noch weitere udp Clienten zuzufügen?

Kommt das überhaupt richtig an?

Du hast gar nicht zwei Floats. Sondern einmal unsigned long und einmal float. Für ersteres brauchst du strtoul()