{"id":3465,"date":"2020-02-12T22:36:26","date_gmt":"2020-02-12T21:36:26","guid":{"rendered":"http:\/\/arduino.net.pl\/?p=3465"},"modified":"2020-05-23T21:31:21","modified_gmt":"2020-05-23T19:31:21","slug":"arduino-json-i-nrf24l01","status":"publish","type":"post","link":"https:\/\/arduino.net.pl\/index.php\/arduino-json-i-nrf24l01\/","title":{"rendered":"Arduino JSON i nRF24L01"},"content":{"rendered":"\n<p><a href=\"https:\/\/pl.wikipedia.org\/wiki\/JSON\">JSON<\/a> to lekki i do\u015b\u0107 uniwersalny spos\u00f3b wymiany danych komputerowych. Nie znalaz\u0142em tutorialu, kt\u00f3ry pokaza\u0142by jak przesy\u0142a\u0107 tego typu dane przez sie\u0107 opart\u0105 o modu\u0142 radiowy nRF24L01. O <a href=\"http:\/\/arduino.net.pl\/index.php\/nrf24l01-czyli-tania-lacznosc-bezprzewodowa\/\">nRF24l01<\/a> pisa\u0142em wielokrotnie. Wykorzystuj\u0105c ciekaw\u0105 bibliotek\u0119 <strong>bblanchon<\/strong>&nbsp;<a href=\"https:\/\/github.com\/bblanchon\/ArduinoJson\">ArduinoJson<\/a> i korzystaj\u0105c z pomocy niezawodnych koleg\u00f3w z forum <a href=\"https:\/\/www.elektroda.pl\/rtvforum\/topic3659246.html\">elektroda.pl<\/a> uda\u0142o mi si\u0119 napisa\u0107 program na arduino (TX) i nodeMCU (RX) kt\u00f3re pokazuj\u0105 jak prosto mo\u017cna korzysta\u0107 z dobrodziejstw formatu <strong>JSON<\/strong>. W przyk\u0142adzie przesy\u0142ana jest prosta struktura danych:<\/p>\n\n\n\n<p>temp: 35.33<br>hum: 77.77<br>light: 198&nbsp;<br>batt: 3.33&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">TX JSON &#8211; arduino<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; light: false; title: Kod:; toolbar: true; notranslate\" title=\"Kod:\">\n\/*\n  TX Json, arduino Nano, nRF24l01\n*\/\n#include &lt;ArduinoJson.h&gt;\n#include &lt;SPI.h&gt;\n#include &lt;Wire.h&gt;\n#include &lt;RF24.h&gt;\n#include &lt;RF24Network.h&gt;\n\n#include &lt;Timers.h&gt;\nTimers &lt;1&gt; akcja;\n\n\nRF24 radio(7, 8);\nRF24Network network(radio);      \/\/ Include the radio in the network\nconst uint16_t this_node = 01;   \/\/ Address of this node in Octal format ( 04,031, etc)\nconst uint16_t node00 = 00; \/\/ (Address where the data is going)\n\nvoid setup() {\n\n  Serial.begin(115200);\n  SPI.begin();\n  radio.begin();\n  radio.setPALevel(RF24_PA_HIGH);\n  network.begin(2, this_node);  \/\/(channel, node address)\n  akcja.attach(0, 5000, wyslij_co5sek);  \/\/ inicjalizacja procesu\n}\n\nvoid loop() {\n  network.update();\n  akcja.process();  \/\/pooling timers\n}\n\n\/\/ ======================== FUNKCJE ===============================\nvoid wyslij_co5sek() {\n\n  \/\/wlasny podprogram do wykonania co 5s biblioteka Timers.h\n  DynamicJsonDocument doc(200);\n\n  doc&#x5B;&quot;temp&quot;] = 33.33 + random(10);\n  doc&#x5B;&quot;hum&quot;] = 77.77;\n  doc&#x5B;&quot;light&quot;] = 198;\n  doc&#x5B;&quot;batt&quot;] = 3.33;\n\n  String output = &quot;&quot;;\n\n  serializeJson(doc, output); \/\/ tworzenie dokumentu Json w zmiennej output\n  Serial.println(output);\n\n  RF24NetworkHeader header(node00);     \/\/ (Address where the data is going)\n  bool ok = network.write(header, output.c_str(), output.length()); \/\/ Send the data\n  if (ok) {\n    Serial.println(&quot;Posz\u0142o do node00&quot;);\n  } else {\n    Serial.println(&quot;Brak kontaktu z node00!&quot;);\n  }\n}\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">RX JSON &#8211; nodeMCU ESP8266<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; light: false; title: Kod:; toolbar: true; notranslate\" title=\"Kod:\">\n\/*\n   RX JSON, nodeMCU ESP8266\n\n*\/\n#include &lt;SPI.h&gt;\n#include &lt;Wire.h&gt;\n#include &lt;RF24.h&gt;\n#include &lt;RF24Network.h&gt;\n#include &lt;ArduinoJson.h&gt;\n\n\nRF24 radio(2, 0);               \/\/ D4, D3 nRF24L01 (CE,CSN), D1, D2 zwolnione dla I2C \nRF24Network network(radio);      \/\/ Include the radio in the network\nconst uint16_t this_node = 00;   \/\/ Address of this node in Octal format ( 04,031, etc)\nconst uint16_t node01 = 01; \/\/ (Address where the data is going)\n\nchar incomingData&#x5B;64];\n\nvoid setup() {\n\n  Serial.begin(115200);\n  SPI.begin();\n  radio.begin();\n  radio.setPALevel(RF24_PA_HIGH);\n  network.begin(2, this_node);  \/\/(channel, node address)\n\n}\n\nvoid loop() {\n\n  network.update();\n\n  while ( network.available() ) {     \/\/ Is there any incoming data?\n    RF24NetworkHeader header;\n    network.read(header, &amp;incomingData, sizeof(incomingData)); \/\/ Read the incoming data\n\n    if (header.from_node == 1) {    \/\/ If data comes from Node 01\n      Serial.println(&quot;Przysz\u0142o z node01&quot;);\n      \/\/Serial.println(incomingData);\n\n      \/\/ ================== sekcja Json =================\n      \/\/StaticJsonDocument&lt;200&gt; doc;\n      DynamicJsonDocument doc(200);\n      DeserializationError error = deserializeJson(doc, incomingData);\n      if (error) {\n        Serial.print(F(&quot;ESP deserializeJson() failed: &quot;));\n        Serial.println(error.c_str());\n        return;\n      }\n      serializeJsonPretty(doc, Serial);\n      Serial.println();\n      float hum = doc&#x5B;&quot;hum&quot;];\n      Serial.print(&quot;Wilgotno\u015b\u0107 = &quot;);\n      Serial.println(hum);\n      Serial.println();\n    }\n  }\n}\n<\/pre><\/div>\n\n\n<p>W formacie <strong>JSON<\/strong> wygl\u0105da ona tak:<br>{&nbsp;<br>&#8222;temp&#8221;: 35.33,&nbsp;<br>&#8222;hum&#8221;: 77.77,&nbsp;<br>&#8222;light&#8221;: 198,&nbsp;<br>&#8222;batt&#8221;: 3.33&nbsp;<br>}&nbsp;<\/p>\n\n\n\n<p>Odwo\u0142anie do dowolnego elementu struktury po wywo\u0142aniu metody <strong>deserializeJson(doc, incomingData)<\/strong> wygl\u0105da tak:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> float temperatura = doc&#91;\"temp\"];\n  Serial.print(\"Temperatura = \");\n  Serial.println(temp);\n  Serial.println();<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">LINKI<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/starter-kit.nettigo.pl\/2018\/09\/obsluga-formatu-json-w-arduino\/\">https:\/\/starter-kit.nettigo.pl\/2018\/09\/obsluga-formatu-json-w-arduino\/<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>JSON to lekki i do\u015b\u0107 uniwersalny spos\u00f3b wymiany danych komputerowych. Nie znalaz\u0142em tutorialu, kt\u00f3ry pokaza\u0142by jak przesy\u0142a\u0107 tego typu dane przez sie\u0107 opart\u0105 o modu\u0142 radiowy nRF24L01. O nRF24l01 pisa\u0142em&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2,5,65],"tags":[9,16,56,72],"class_list":["post-3465","post","type-post","status-publish","format-standard","hentry","category-arduino","category-esp8266","category-programowanie","tag-arduino","tag-esp8266","tag-json","tag-nrf24l01"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/3465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/comments?post=3465"}],"version-history":[{"count":5,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/3465\/revisions"}],"predecessor-version":[{"id":3654,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/3465\/revisions\/3654"}],"wp:attachment":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/media?parent=3465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/categories?post=3465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/tags?post=3465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}