Hallo, ich habe ein Skript zusammengestellt dass Messdaten von einem Feuchtigkeitssensor an eine andere ESP8266 senden soll. Das Skript an sich funktioniert, jedoch bedoch bekomme ich es nicht hin dass die Messdaten übertragen werden. Kann mir da vielleicht jemand helfen?
#include <espnow.h>
#include "ESP8266WiFi.h"
const int soilMoistPin = A0;
const int soilMoistLevelLow = 861; //Dieser Wert soll von euch entsprechend angepasst werden
const int soilMoistLevelHigh = 417; //Dieser Wert soll von euch entsprechend angepasst werden
uint8_t receiverAddress[] = {0x58, 0xBF, 0x25, 0x49, 0x90, 0xB1};
typedef struct messageToBeSent {
char text[64];
int intVal;
float floatVal;
} messageToBeSent;
typedef struct receivedMessage {
char text[64];
long runTime;
} receivedMessage;
messageToBeSent myMessageToBeSent;
receivedMessage myReceivedMessage;
void messageSent(uint8_t *macAddr, uint8_t status) {
Serial.print("Send status: ");
if(status == 0){
Serial.println("Success");
}
else{
Serial.println("Error");
}
}
void messageReceived(uint8_t* macAddr, uint8_t* incomingData, uint8_t len){
memcpy(&myReceivedMessage, incomingData, sizeof(myReceivedMessage));
Serial.printf("Incoming Message from: %02X:%02X:%02X:%02X:%02X:%02X \n\r",
macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
Serial.print("Message: ");
Serial.println(myReceivedMessage.text);
Serial.print("RunTime [s]: ");
Serial.println(myReceivedMessage.runTime);
Serial.println();
}
void setup(){
Serial.begin(115200);
// delay(1000); // uncomment if your serial monitor is empty
WiFi.mode(WIFI_STA);
if (esp_now_init() == 0) {
Serial.println("ESPNow Init success");
}
else {
Serial.println("ESPNow Init fail");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
uint8_t result = esp_now_add_peer(receiverAddress, ESP_NOW_ROLE_COMBO, 0, NULL, 0);
if(result != 0){
Serial.println("Failed to add peer");
}
esp_now_register_send_cb(messageSent);
esp_now_register_recv_cb(messageReceived);
pinMode(soilMoistPin, INPUT);
}
void loop(){
int soilMoist = analogRead(soilMoistPin);
Serial.print("Analog Value: ");
Serial.print(soilMoist); // Auswertung der Bodenfeuchtigkeit in Prozent
int percentSoilMoist = map(soilMoist, soilMoistLevelHigh, soilMoistLevelLow, 100, 0);
Serial.print("\t");
Serial.print(percentSoilMoist);
Serial.println(" %");
delay(2000);
char textMsg[] = ("Messdaten");
memcpy(&myMessageToBeSent.text, textMsg, sizeof(textMsg));
myMessageToBeSent.intVal = 4242;
myMessageToBeSent.floatVal = 42.42;
esp_now_send(receiverAddress, (uint8_t *) &myMessageToBeSent, sizeof(myMessageToBeSent));
delay(5000);
}
Das ist leider nicht sehr Aussagekräftig.
Was hast du erwartet was passiert?
Was geschieht stattdessen?
Wie sieht die Serielle Ausgabe aus? Was für Meldungen bekommst du?
Ich befürchte, du bist da im Irrtum.
Das was bei deinen Daten fehlt ist der Text "Messdaten".
Und da vermute ich ein Formatfehler bzw. Steuerzeichen, den du durch copy&paste dir reingeholt hast.
Gebe dein Struct mal manuell per Tastatur ein, dann wirds vermutlich funktionieren.
Hä wie kann ich die denn dann überhaupt übertragen so dass die da angezeigt werden, also was muss da dann ins struct rein? ich hab schon überall gegooglet aber nichts gefunden
Dein Problem ist, du beantwortest Fragen (wie in Post #9) nicht.
Und richtig, deine Daten werden nicht gesendet, also funktioniert der Sketch nicht.
Du musst deine Messwerte in eine Variable übergeben und diese dann übertragen.
Anstatt der Pseudowerte.
Ich dachte der funktioniert so halbwegs weil der Sensor ja an sich was misst und die ESPs untereinander kommunizieren könne, nur das Problem ist halt das mit den Messdaten übertragen.
Könnte ich dann quasi int percentSoilMoisture in das setup einfügen und mit einer variable versehen, und dann in char TextMsg[] = ("int percentSoilMoisture")? oder die variable davon in die klammer?
Leider noch ein Problem.
Halbwegs funktioniert nichts. Es muss alles funktionieren, damit ein gutes Ergebnis rauskommt.
Und was du machen musst, habe ich schon beschrieben.