Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

JSON-Format zur Datenübertragung zwischen zwei Mikrocontroller

Posted on 27. Januar 20233. Mai 2023 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen, wie du das JSON-Format zur Datenübertragung zwischen zwei Mikrocontroller verwenden kannst.

Die Idee zu diesem Beitrag kam aus den Kommentaren zum Beitrag Übertragen von Sensordaten per nRF24L01 Modul wo ich Sensordaten mit diesem Format von einem Arduino zum anderen sende. In dem verlinkten Beitrag habe ich die JSON-Daten per Hand geparst, hier möchte ich nun einen bequemen Weg zeigen, wie dieses mit einer Bibliothek geht.

  • Warum das JSON-Format?
  • Benötigte Ressourcen für den Aufbau
  • Arduino UNO / Nano V3
  • Verbinden von zwei Mikrocontroller per serieller Schnittstelle
  • Programmieren
    • Bibliothek – Arduino_JSON
    • Parsen eines JSONs
    • Übertragen eines JSON zwischen zwei Mikrocontroller per serieller Schnittstelle
      • Quellcode des Senders
      • Quellcode des Empfängers
  • Downloads

Warum das JSON-Format?

Der Vorteil am JSON-Format ist, dass dieses einfach zu lesen und auch zu erweitern ist. Des Weiteren ist dieses gut komprimiert bzw. lässt sich gut komprimieren und somit ist eine hohe Datenübertragung möglich.

{
   "vorname":"Stefan",
   "nachname":"Draeger",
   "alter":42
}

Um ein selbst erstelltes JSON-Objekt zu prüfen, bieten sich einige Onlinetools wie Bsp https://jsonformatter.curiousconcept.com/# an. Hier bekommst du bei einem Fehler gleich den Hinweis, was fehlerhaft ist bzw. das Tool ergänzt sogar fehlende Anführungszeichen.

Benötigte Ressourcen für den Aufbau

Wenn du dieses kleine Projekt nachbauen möchtest, dann benötigst du:

  • einen Mikrocontroller Bsp Arduino Mega 2560 R3,
  • ein USB Datenkabel

Der Arduino Mega 2560 R3 hat den Vorteil, dass dieser mehrere hardwareseitige serielle Schnittstellen hat.

Funduino MEGA 2560 R3 - Buchsenleisten mit Pinbeschriftungen
Funduino MEGA 2560 R3 – Buchsenleisten mit Pinbeschriftungen

Arduino UNO / Nano V3

Natürlich kannst du auch einen Arduino UNO oder Nano verwenden, diese haben lediglich nur einen seriellen Anschluss, und dieser ist beim Upload des Sketches belegt, somit musst du die Verbindungen (Breadboardkabel) vor dem Hochladen des Programmes entfernen.

Alternativ kannst du auch die Bibliothek SoftwareSerial verwenden und somit zwei digitale Pins des Arduino UNOs als zusätzlichen seriellen Anschluss definieren.

Verbinden von zwei Mikrocontroller per serieller Schnittstelle

JSON-Daten zwischen zwei Mikrocontroller per serieller Schnittstelle versenden
Dieses Video auf YouTube ansehen.

Die beiden Mikrocontroller kannst du auf verschiedene Wege verbinden, entweder per Bluetooth, nRF24L01, LoRa oder ganz einfach per serieller Schnittstelle.

In diesem Beitrag verwende ich die serielle Schnittstelle, da dieses recht einfach ist und vor allem das eigentliche Projekt nicht zusätzlich durch Bibliotheken aufbläht.

zwei Arduino Mega per serieller Schnittstelle verbunden
zwei Arduino Mega per serieller Schnittstelle verbunden

Auf der Grafik ist zu sehen, dass die Kontakte RX & TX jeweils über Kreuz verbunden sind.

Programmieren

Nachdem wir nun die beiden Mikrocontroller verbunden haben, kommen wir zur Programmierung. Wie erwähnt möchte ich eine Bibliothek zum Verarbeiten der JSON Daten verwenden.

Bibliothek – Arduino_JSON

Bevor wir mit der eigentlichen Programmierung beginnen, installieren wir die benötigte Bibliothek über den Bibliotheksmanager der Arduino IDE.

Zunächst öffnen wir den Bibliotheksverwalter in der Arduino IDE (1) danach suchen wir nach „json“ (2) und wählen an dem Eintrag „Arduino_JSON by Arduino“ die Schaltfläche „INSTALL“ (3). Wenn die Installation abgeschlossen ist, dann erscheint der Text „INSTALLED“ (4).

Installieren der Bibliothek Arduino_JSON über den Bibliotheksverwalter
Installieren der Bibliothek Arduino_JSON über den Bibliotheksverwalter

Parsen eines JSONs

Zerlegen wir zunächst einmal auf einem Mikrocontroller ein kleines JSON.

{
   "vorname":"Stefan",
   "nachname":"Draeger",
   "alter":42
}

Damit wir dieses JSON in eine String Variable ablegen können, müssen wir alle Anführungszeichen escapen, d.h. wir setzen ein Backslash davor.

{\"vorname\":\"Stefan\",  \"nachname\":\"Draeger\", \"alter\":42}

Nachfolgend ein kleines Programm zum Parsen von JSON Daten auf dem Arduino.

// einbinden der Bibliothek zum verarbeiten von JSON
#include <Arduino_JSON.h>

// das JSON-Objekt welches verarbeitet werden soll
String input = "{\"vorname\":\"Stefan\",  \"nachname\":\"Draeger\", \"alter\":42}";

void setup() {
  // beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);

  // initialisieren eines JSONVar Objektes
  // mit den verarbeiteten JSON Daten
  JSONVar jsonVar = JSON.parse(input);

  // prüfen ob es ein Key mit der Bezeichnung "vorname" gibt.
  if (jsonVar.hasOwnProperty("vorname")) {
    // Ausgeben der Zeichenkette "vorname:" auf der seriellen Schnittstelle
    Serial.print("vorname:");
    // Ausgeben des Wertes zum Key
    Serial.println(jsonVar["vorname"]);
  }

  if (jsonVar.hasOwnProperty("nachname")) {
    Serial.print("nachname:");
    Serial.println(jsonVar["nachname"]);
  }

  if (jsonVar.hasOwnProperty("alter")) {
    Serial.print("alter:");
    Serial.println(jsonVar["alter"]);
  }
}

void loop() {
  // bleibt leer
}

Die Ausgabe auf der seriellen Schnittstelle bzw. im seriellen Monitor sieht wie folgt aus:

Übertragen eines JSON zwischen zwei Mikrocontroller per serieller Schnittstelle

Im nächsten Schritt wollen wir ein JSON zwischen zwei Mikrocontroller übertragen. Das JSON könnte hier Sensordaten (Temperatur, Luftdruck, relative Luftfeuchtigkeit, CO₂ Konzentration etc.) enthalten. In meinem Fall möchte ich das JSON mit festen Daten beschreiben.

Quellcode des Senders

// einbinden der Bibliotheken zum verarbeiten
// von JSON
#include <Arduino_JSON.h>

JSONVar output;

void setup() {
  // beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);
  Serial1.begin(9600);

  // einfügen des Schlüssel/Werte Paares in
  // das JSON-Objekt
  output["vorname"] = "Stefan";
  output["nachname"] = "Draeger";
  output["alter"] = 42;

  // Umwandeln des JSON-Objektes in ein String
  String jsonOutput = JSON.stringify(output);
  Serial.print(jsonOutput);
  Serial1.print(jsonOutput);
}

void loop() {
  // put your main code here, to run repeatedly:
}

Quellcode des Empfängers

Am Empfänger müssen wir „lauschen“, ob Daten an der seriellen Schnittstelle anliegen und diese dann mit der Funktion „readString()“ im Ganzen lesen.

Diese gelesenen Daten parsen wir dann in ein JSON-Objekt und können diese, wie zuvor im einfachen Beispiel gezeigt, auswerten und ausgeben.

// einbinden der Bibliotheken zum verarbeiten
// von JSON
#include <Arduino_JSON.h>

void setup() {
  // beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  while (Serial1.available() > 0) {
    String data = Serial1.readString();
    Serial.println(data);

    // initialisieren eines JSONVar Objektes
    // mit den verarbeiteten JSON Daten
    JSONVar jsonVar = JSON.parse(data);

    // prüfen ob es ein Key mit der Bezeichnung "vorname" gibt.
    if (jsonVar.hasOwnProperty("vorname")) {
      // Ausgeben der Zeichenkette "vorname:" auf der seriellen Schnittstelle
      Serial.print("vorname:");
      // Ausgeben des Wertes zum Key
      Serial.println(jsonVar["vorname"]);
    }

    if (jsonVar.hasOwnProperty("nachname")) {
      Serial.print("nachname:");
      Serial.println(jsonVar["nachname"]);
    }

    if (jsonVar.hasOwnProperty("alter")) {
      Serial.print("alter:");
      Serial.println(jsonVar["alter"]);
    }
  }
}

Hier nun die Ausgaben auf der seriellen Schnittstelle in der Arduino IDE.

Downloads

Hier der Quellcode zu den Beispielen aus diesem Beitrag zum bequemen Download.

Arduino JSON – einfaches BeispielHerunterladen
Arduino JSON – SenderHerunterladen
Arduino JSON – EmpfängerHerunterladen

2 thoughts on “JSON-Format zur Datenübertragung zwischen zwei Mikrocontroller”

  1. Niels Nelson sagt:
    30. Januar 2023 um 15:29 Uhr

    Hi,
    Vielen Dank für den Beitrag war sehr hilfreich aber ich habe Probleme beim Empfangen der Daten mit dem NRF-Modul, denn im seriellen Monitor wird der Anfang des Strings angezeigt und dann tauchen komische Zeichen, sodass beim Aufruf der einzelnen Werten keine Daten gezeigt werden. Kannst du vielleicht wissen worauf es liegen kann? Denn beim Sender werden alles normal angezeigt. Nur beim Empfänger bekomme ich es nicht vollständig angezeigt.

    Antworten
  2. Pingback: Arduino zu Raspberry Pi: Bluetooth für die Übertragung von Sensorwerten einsetzen - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}