Array von ESP8266 zu Arduino UNO senden

Hallo zusammen
Im Zuge eines Projektes muss ich die empfangenen Daten des Json-Paketes auslesen und in einen Array schreiben. Diesen Array muss ich dann weitersenden zu meinem Arduino UNO. Von dort wird dieser Array von anderen Personen weiterverarbeitet.
Doch leider komme ich hier nicht mehr weiter. Kann mir jemand ein Beispiel geben oder eine Hilfestellung, wie so ein Code aussehen könnte?
Ich bin wirklich für jede Antwort dankbar.

Hier wäre mein bisheriger Code auf dem ESP8266.

#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

int medi_raum[3];
 
//Wifi-Informationen
const char* ssid = "*********";  
const char* password =  "LabAUP05fdg";

//MQTT-Server Informationen
const char*mqtt_broker = "10.100.205.23";    //MQTT-Server Adresse
const int mqttPort = 1883;       //Port-Nummer

 
WiFiClient espClient;
PubSubClient client(espClient);
 
void setup() {
  delay(1000);
  //pinMode(LED,OUTPUT);
  Serial.begin(115200);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
  Serial.print("Connected to WiFi :");
  Serial.println(WiFi.SSID());
 
  client.setServer(mqtt_broker, mqttPort);
  client.setCallback(MQTTcallback);
 
  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP8266")) 
 
      Serial.println("connected");  
 
     else {
 
      Serial.print("failed with state ");
      Serial.println(client.state());  //If you get state 5: mismatch in configuration
      delay(2000);
 
    }
  }
 
  client.publish("esp/test", "Hello from ESP8266");
  client.subscribe("esp/test");
 
}
 
void MQTTcallback(char* topic, byte* payload, unsigned int length) {

  StaticJsonDocument<256> doc;
  deserializeJson(doc, payload, length);
  JsonArray Medikament = doc["Medikament"];
    int Medikament_0 = Medikament[0]; 
    int Medikament_1 = Medikament[1];  
    int Medikament_2 = Medikament[2];  
    int Medikament_3 = Medikament[3]; 

    medi_raum[0]=Medikament_0;
    medi_raum[1]=Medikament_1;
    medi_raum[2]=Medikament_2;
    medi_raum[3]=Medikament_3;

  }
 
void loop() {
  client.loop();
}

Du solltest aber auch beschreiben, wie dein Array aufgebaut ist, wie du es an den Uno weiterleiten willst und was bisher funktioniert und was nicht funktioniert.

Da fängt mein Problem eben an. Ich habe mich in die SoftwareSerial - Bibliothek eingelesen, doch ich komme da nicht mehr weiter.
Das Ziel ist es über die serielle Schnittstelle die Daten zu übermitteln.
Muss ich die ausgelesenen Daten zuerst übermitteln und dann auf dem Arduino Uno in den Array schreiben?

Warum überhaupt auf den Uno senden ?
Und ich würde die Daten erst seriell senden und dann ein Array bilden.
Ob es auch anders möglich ist, da kann dir sich noch wer was sagen.

Welchen Datentyp haben denn Deine Daten? Da gibt es Unterschiede zwischen den Prozessorarchitekturen.

Gruß Tommy

Der Datentyp wäre int.

Frage nochmal !

Sende doch den JSON vom ESP zum UNO

Ja das wäre auch eine Möglichkeit! Doch wie? Hast du eine Hilfestellung?

Auf dem Uno wird der Array dann verarbeitet, respektive weiterverwendet.

Das hattes du schon geschrieben, aber die Weiterverarbeitung geht auch auf einem ESP.

auf dem Arduino Uno sind noch mehr Sensoren angeschlossen, so wie ein Motorshield, welches eine Servolenkung für einen Greifarm steuert.

Ok, das sind Infos, die wir brauchen. Alles ok.

Indem du das empfangene payload einem String zuweist.

Z.B.

for (int i = 0; i < length; i++) {
    String message = message + (char) payload[i];  // convert *byte to string
    Serial.print(message);
  }

Findest du auch in den MQTT Beispielen

Und diesen String sendest du dann zum Uno.

Dort zerlegst du den JSON dann in seine Bestandteile.

#include <SoftwareSerial.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

SoftwareSerial linkSerial (10, 11); //RX, TX
int medi_raum[3];
 
//Wifi-Informationen
const char* ssid = "ZbW-Projekte";  
const char* password =  "LabAUP05fdg";

//MQTT-Server Informationen
const char*mqtt_broker = "10.100.205.23";    //MQTT-Server Adresse
const int mqttPort = 1883;       //Port-Nummer

 
WiFiClient espClient;
PubSubClient client(espClient);
 
void setup() {
  delay(1000);
  Serial.begin(115200);
  while(!Serial) continue;
  linkSerial.begin(4800);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
  Serial.print("Connected to WiFi :");
  Serial.println(WiFi.SSID());
 
  client.setServer(mqtt_broker, mqttPort);
  client.setCallback(MQTTcallback);
 
  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP8266")) 
 
      Serial.println("connected");  
 
     else {
 
      Serial.print("failed with state ");
      Serial.println(client.state());  //If you get state 5: mismatch in configuration
      delay(2000);
 
    }
  }
 
  client.publish("esp/auftrag", "Hello from ESP8266");
  client.publish("esp/status")
  client.subscribe("esp/auftrag");
  client.subscribe("esp/status");

}
 
void MQTTcallback(char* topic, byte* payload, unsigned int length) {
  for (int i=0; i<length; i++){
    String message=message+(char) payload[i];
    Serial.print(message);
  }
}
 
void loop() {
  client.loop();
}

Dann würde das so aussehen? Ich habe deinen vorgeschlagenen Code in Abschnitt void MQTTcallback eingefügt. Habe ich das richtig verstanden?

Wird dir den message auf dem SerialMonitor ausgegeben, wenn eine Nachricht empfangen wird?

Bin unterwegs, kann da nur wenig helfen.

ja, soweit klappt alles

Ja dann ist doch der JSON in einem String. Und diesen String kann man doch zum UNO schicken.

Chat-Array sollte auch möglich sein.

soweit klar, besten Dank für deine Hilfe, ich werde dann mal einen Code schreiben für das auslesen beim Uno

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.