JSON-Format zur Datenübertragung zwischen zwei Mikrocontroller
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?
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
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
https://youtu.be/bEx_ASdbDXQ
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
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
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
// 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);
}
if (jsonVar.hasOwnProperty("nachname")) {
Serial.print("nachname:");
Serial.println(jsonVar);
}
if (jsonVar.hasOwnProperty("alter")) {
Serial.print("alter:");
Serial.println(jsonVar);
}
}
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
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 = "Stefan";
output = "Draeger";
output = 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
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);
}
if (jsonVar.hasOwnProperty("nachname")) {
Serial.print("nachname:");
Serial.println(jsonVar);
}
if (jsonVar.hasOwnProperty("alter")) {
Serial.print("alter:");
Serial.println(jsonVar);
}
}
}
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.
Read the full article
0 notes
Séance 9 à l'IUT
Neuvième séance :
Pendant cette séance nous avons fait un test général de tout les capteurs. Notre carte ArduinoMEGA nous permets de récupérer les données de nos 3 capteurs de températures, la vitesse, la tension et le courant. Nous avons du corriger des morceaux de programmes notamment sur les capteurs de températures. On a eu un problème dans l'appel de nos fonctions et de la déclaration de nos valeurs, un mélange d'entier avec des flottant.
On a ensuite horodatés nos données. Après avoir galéré pendant 3h sur le module RTC qui ne fonctionnait pas car la pile qui faisait office d'horloge et de mémoire sur le module était morte, nous avons pu changer la pile et pu initialiser le module RTC grâce à ce programme.
A la ligne 10 on initialise la RTC et on envoie le programme sur le module. Ce programme est envoyé une seule fois. Ensuite dans notre programme générale on fera appel juste aux lignes de codes suivantes :
Grâce à ce programme on vient juste lire l'heure. Une fois ce programme injecté dans notre programme principal du projet, on a pu horodater nos données dans la carte SD. Voici le résultat :
On peut voir dans la première colonne que l'heure et la date apparait bien et correctement.
Il nous reste la transmission de donnée et le câblage de nos capteurs sur notre carte ArduinoMEGA et la conception de nos boites pour protéger nos Arduino et les connections.
0 notes
* 🇧🇷 Prog Board - Gravador Atmega 328, Atmega 8 , Attyne85. Compatível com Arduino Uno. Gravação via ISP --------------------------- www.projetoseletronicos.com youtube.com/ProjetosEletronicos --------------------------- 🇺🇸 Prog Board - Recorder Atmega 328, Atmega 8 , Attyne85. Compatible with Arduino Uno. Recording via ISP --------------------------- #gravador #bootloader #isp #shield #programador #arduino #arduinonano #arduinomega #arduinouno #maker #diy #geek #hardware #firmware #walproj #projetosmaker #projetoseletronicos #Attiny85 #atmega (em Projetos Eletronicos) https://www.instagram.com/p/CSx7oYxrrLq/?utm_medium=tumblr
2 notes
·
View notes
Battle bots 😂😂 Having fun even with out expensive robot kits! 😂 . #robots #robot #electrician #project #projects #innovation #circuit #technology #techno #arduinoproject #arduinoprojects #engineer #arduinouno #arduino #programmer #arduinolove #automation #arduinomega #robotic #robotics #diy #electronics #diyelectronics #arduinoindonesia #instructables #IOT #internetofthings #arduinofun #automationengineering (at Busan, South Korea) https://www.instagram.com/p/CGIJi2_DI0Y/?igshid=g0usl3fdkdo9
12 notes
·
View notes
Yeah... The #GUI #hmi is #ready and #working I #hacked #everything #together on a #breadboard and #gpio wires . After some testing I decided to use the #arduinomega because of its 2 #serial #ports . This #nextion #display is so #easy to use #iloveit #3dprinting #diy #programmers #python3 #drinks #bartender #hmi #egirl #whynot #arduino #vote #Meme #technology #contactnavarra https://www.instagram.com/p/CHwuHtVA-SL/?igshid=1o1zylng6jkhm
1 note
·
View note
How to make bluetooth speaker follow @techa_tronic for more @er_shahid_saifi #arduino #arduinoproject #arduinomega #arduinouno #arduinonano #arduinoprojects #embedded #embeddedsystems #electronics #aktu #delhi #benglore #iit #technology #sensors #gujrat #btech #electronicsandcommunication #technology #students #science #scienceprojects #robotics #soldering #engineering #linefollower #avr #bluetoothspeaker #stayhome #staysafe https://www.instagram.com/p/CAGCG_IDLCm/?igshid=1hhbn8gb9niww
1 note
·
View note
#Repost @circuitmix • • • • • ➡️ Different parts of an optical mouse. 😃 Please follow @circuitmix for such informative posts . . Make your diy pcb: http://www.stariver.com . . . . . #iot #microcontroller #pcb #circuitboard #arduinoday #raspberrypi #arduinomega #circuit #coder #electronics #nodemcu https://www.instagram.com/p/B_6ZbK6J6O7/?igshid=1em33k84fjky8
1 note
·
View note
Un resumen de los proyectos que he desarrollado este año con arduino
No olviden suscribirse, darle like y compartir, me ayuda mucho a seguir haciendo vídeos
1 note
·
View note
📸 Photo of the day: AD9833 sine and square wave function generator module. #Enewground #ad9833 #functiongenerator #sinewave #squarewave #arduino #arduinouno #arduinomega #arduinonano #arduinopromini #raspberrypi #raspberrypi4 #maker #electronic https://www.instagram.com/p/B0x0yZGHRo4/?igshid=1lk0oo63dctya
2 notes
·
View notes
Amazing how far they've come 😱 #Repost @makers_moment • • • • • • Atlas by Boston Dynamics ⚊⚊⚊ 👉 Follow @makers_moment 📌 Like and save it for later ⚊⚊⚊ #arduino #maker #instatech #computers #hack #technology #arduinomega #arduinouno #arduinofun #arduinolover #embedded #robotica #esp8266 #arduinoproject #makerlife #diyelectronics #raspberrypi #raspberrypi3 #raspberryproject #mekatronik #electronicengineering #programmerslife #device #robot #robotics #bostondynamics https://www.instagram.com/p/B20apnqHPar/?igshid=ly0huvpdjgmu
1 note
·
View note
#Repost @engineers.asylum • • • • • 💥Like, comment and tag your friends for more #electronicengineering and #embeddedsystems related videos and pics . . . . 💥Follow us @engineers.asylum to support us!! . . . . 👉🏼Repost @siemens_ausbildung 💡The self ball balancing robot!! . . . . #arduino #arduinonano #arduinomega #arduinoproject #microcontroller #embedded #electronicsengineer #electronicsprojects #sensors #proteus #voltage #diyelectronics #robotics #raspberrypizero #raspberrypi #raspberrypi2 #elektronik #iot #atmega #circuitdesign #nodemcu #esp8266 #esp32 #elettronica #internetofthings #printedcircuitboard #engineersasylum https://www.instagram.com/p/BximHHTjAjI/?igshid=1n17rn0p51m35
3 notes
·
View notes
Time to start playing with the @mandlabs_inc kit again! This seems easy enough for eva and she really likes mixing electronics with water. 😳 #payitforward #repostthursday from @easytronic3795 (@get_repost) Full clip and more #robotics projects on his feed... Enjoy ・・・ ARDUINO INTERFACING SOIL MOISTURE SENSOR AND RGB LED ◇◇ #arduinomega #arduinoproject #arduinouno #arduino #maker #pythoncode #programming #pcbuild #pcb #computer #device #circuit #nodemcu #maker #arm #creat #creative #java #python @andystechgarage #atg #andystechgarage #stemandy #stemeva #stematg #evastem #atgstem #andystem https://www.instagram.com/p/BrUwmkwnsC7/?utm_source=ig_tumblr_share&igshid=1oxvdt1vi3rfc
1 note
·
View note
* 🇧🇷 Protótipo inicial para uma placa de automação com RTC, USB ,e HM10 ---------------------------- youtube.com/ProjetosEletronicos ---‐------------------------ 🇲🇾 Initial prototype for an automation card with RTC, USB, and HM10 ---------------------------- #pci #pcb #automação #eletrônica #hm10 #rtc #controle #arduino #arduinouno #arduinonano #arduinomega #makers #maker #diy #geek #walproj #projetoseletronicos #projetosmaker (em Projetos Eletronicos) https://www.instagram.com/p/CUv8T1ELbjh/?utm_medium=tumblr
1 note
·
View note
Це пізда, це відбувається насправді. Коли ти жив мирно, а на твою країну напали повномасштабно російські війська. Але згинуть наші вороженьки. It's going around really. Believe only the Ukrainian media .. because they see it with their own eyes. #ukraine🇺🇦 #ukrainegirl #ukraine #esp32 #diyelectronics #electronics #arduino #makers #украина #ukraine #diy #prototype #aelmaker #электроника #homemade #electronics #arduinomega #18650 #diyprojects #lorawan #lora (Zaporozhye, Ukraine) https://www.instagram.com/p/CaXTaORt7YB/?utm_medium=tumblr
0 notes
#Repost @bio.makers • • • • • 🦠 Corona time 🦠 Follow my projects: @bio.makers . . . . . #arduino #technology #arduinoproject #robotics #electronics #arduinouno #engineering #robot #raspberrypi #arduinoprojects #arduinomega #arduinonano #diyelectronics https://www.instagram.com/p/B9xpQy6pol2/?igshid=1dkyvusr63zr7
1 note
·
View note
Pembahasan Arduino
Arduino adalah sebuah mikrokontroller atau pengendali yang bersifat open source, dirancang untuk penggunaan elektronik dalam berbagai bidang, dengan hardware berupa Atmel AVR dan menggunakan bahasa C
3.5.1 Perbedaan Arduino Uno,Nano dan Mega
a. Tipe Atmega Yang Digunakan.
§ Pada arduino mega menggunakan tipe 2650 dengan spesifikasi Ram 8kb Dan internal SRAM 4kb.
§ Pada arduino uno Menggunakan tipe 328p dengan spesifikasi memory flash berukuran 32kb, EERom 1kb, SRAM 2kb.
§ Pada arduino uno Menggunakan tipe 328MCU dengan spesifikasi memory flash berukuran 32kb, EERom 1kb, SRAM 2kb
b. Board Yang Digunakan :
v Pada arduino mega menggunakan board dengan pin sebanyak 16 buah
v Pada arduino uno dan nano memiliki board yang sama namun dengan ukuran yang jauh berbeda.
c . Spesifikasi Arduino Uno.
Menggunakan chip Atmega 328P,bekerja pada tegangan 5v dengan range input yang direkomendasikan 7-12 V.pilihan terbaik untuk mensuplai adalah 9 volt sehingga arduino bisa awet dan tahan lama atau menggunakan USB A-B. Arduino uno memiliki 14 digital Input/Output pin. 6 diantaranya pin PWM.
Aplikasi Arduino Uno
· Line follower robot
· Lampu kamar otomatis
· Moitoring posisi kendaraan
· Kontrl alat berbsis waktu
· Thermometer digital
· Kunci elektrik dengan RIFD
· Running teks
0 notes