{"id":2193,"date":"2019-11-28T18:44:04","date_gmt":"2019-11-28T18:44:04","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=2193"},"modified":"2019-11-28T18:55:33","modified_gmt":"2019-11-28T18:55:33","slug":"komunikacja-i2c-oraz-spi-lcd-i-nrf24-3","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=2193","title":{"rendered":"komunikacja SPI (radi\u00f3wka nRF24L01)"},"content":{"rendered":"<h2>Komunikacja SPI<\/h2>\n<p><em>(Wpis ten jest reaktywacj\u0105 <a href=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=683\">wpisu z 2017<\/a> r. Okaza\u0142o si\u0119, \u017ce warto podzieli\u0107 oryginalny wpis na dwie mniejsze cz\u0119\u015bci &#8211; jedna dotycz\u0105ca komunikacji I2C, druga SPI w\u0142a\u015bnie).<\/em><\/p>\n<p>Tutaj <a href=\"https:\/\/www.arduino.cc\/en\/reference\/SPI\">https:\/\/www.arduino.cc\/en\/reference\/SPI<\/a>&nbsp;mo\u017cna poczyta\u0107 czym jest protok\u00f3\u0142 SPI. Nam wystarczy, \u017ce jest to szybka komunikacja synchroniczna na kr\u00f3tki dystans, wykorzystuj\u0105ca przynajmniej 3 linie nazwane <strong>MISO, MOSI i SCK<\/strong>. Dodatkowo s\u0105 jeszcze linie <strong>CE i SCN<\/strong>. Je\u015bli wi\u0119c w jakim\u015b module zobaczymy tak nazwane piny &#8211; to znak, \u017ce dzia\u0142a w standardzie SPI w\u0142a\u015bnie.&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2187 size-full\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/UNO-spi_pins.jpg\" alt=\"\" width=\"656\" height=\"553\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/UNO-spi_pins.jpg 656w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/UNO-spi_pins-300x253.jpg 300w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/p>\n<p>Specjalne piny SPI w Arduino to MISO (12 w Arduino), MOSI (11 w Arduino) oraz SCK (13 w Arduin0). Inne piny &#8211; CE i CSN s\u0105 dowolne cyfrowe (wyst\u0119puje r\u00f3\u017cne nazewnictwo &#8211; SS to Slave Select i odpowiada CE, kt\u00f3ry&nbsp;musi dzia\u0142a\u0107 jako OUTPUT, w odr\u00f3\u017cnieniu od CSN). W poni\u017cszym przyk\u0142adzie wybra\u0142em 9 i 10 &#8211; a dlaczego? oka\u017ce si\u0119 to p\u00f3\u017aniej (na kolejnych spotkaniach naszego ko\u0142a).&nbsp;<\/p>\n<h2>nRF24L01+<\/h2>\n<p>Bardzo fajny modu\u0142 (no i bardzo tani &#8211; oko\u0142o 5 z\u0142, co w por\u00f3wnaniu do modu\u0142\u00f3w Bluetooth jest 1\/5 ceny) &#8211; ale najpierw trzeba wiedzie\u0107, jak pod\u0142\u0105cza\u0107 go do Arduino:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-690\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nrf24l01-pinout-top-300x152.jpg\" alt=\"\" width=\"300\" height=\"152\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nrf24l01-pinout-top-300x152.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nrf24l01-pinout-top.jpg 483w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><strong>UWAGA: zasilanie VCC jest z przedzia\u0142u 3.3V-3.6V &#8211; pod\u0142\u0105czaj\u0105c do Arduino 5V USZKODZISZ modu\u0142.<\/strong><\/p>\n<p>Oprogramowanie? Ponownie jest kilka bibliotek, ja u\u017cy\u0142em <strong>nRF24L01.h<\/strong> by <strong>TMRh20<\/strong>. Jak poprzednio &#8211; doinstalowujemy do naszego Arduino IDE i tworzymy program odbieraj\u0105cy dane:<\/p>\n<pre class=\"lang:arduino decode:true\" title=\"nRF odbiornik\">#include &lt;SPI.h&gt;\n#include &lt;nRF24L01.h&gt;\n#include &lt;RF24.h&gt;\n\nRF24 radio(9, 10);\/\/CE, CS\nconst byte rxAddr[6] = \"grzyb\";\n\nvoid setup()\n{\n  Serial.begin(9600);\n  Serial.print(\"nRF24 INIT=\");\n  bool ok=radio.begin();\n  Serial.println(ok);\n  radio.openReadingPipe(0, rxAddr);\n  \n  radio.startListening();\n}\n\nchar text[32];\n\nvoid loop()\n{\n  if (radio.available())\n  {\n    radio.read(&amp;text, sizeof(text));\n    \n    Serial.print(\"t=\");\n    Serial.print(millis()\/1000);\n    Serial.print(\"s, text=\");\n    Serial.println(text);\n  }\n}\n<\/pre>\n<p>W linii 6 nadalismy nazw\u0119 naszemu strumieniowi &#8211; dowolne 5 znak\u00f3w, niekoniecznie musi by\u0107 tak jak u mnie&#8230; Ale nadajnik te\u017c musi nadawa\u0107 na tym samym &#8222;pa\u015bmie&#8221;:<\/p>\n<pre class=\"lang:arduino decode:true\" title=\"nRF nadajnik\">#include &lt;SPI.h&gt;\n#include &lt;nRF24L01.h&gt;\n#include &lt;RF24.h&gt;\n#include &lt;printf.h&gt;\n\nRF24 radio(9, 10);\/\/CE, CS\n\nuint8_t rxAddr[6] = \"grzyb\";\n\nvoid setup()\n{\n  Serial.begin(9600);\n  Serial.print(\"nRF24 INIT=\");\n  bool ok=radio.begin();\n  Serial.println(ok);\n  printf_begin;\n  radio.printDetails();\n  radio.setRetries(15, 15);\n  radio.openWritingPipe(rxAddr);\n  \n  radio.stopListening();\n}\n\nchar text[] = \"Fiza:         OK!\";\n\nvoid loop()\n{\n  radio.write(&amp;text, sizeof(text));\n  text[7]=48+rand()%10;  \n  text[8]=48+rand()%10;\n  text[9]=48+rand()%10;\n  text[10]=48+rand()%10;\n  text[11]=48+rand()%10;\n  Serial.println(text);\n  delay(3000);\n}\n<\/pre>\n<p>Maksymalna d\u0142ugo\u015b\u0107 jednorazowo przes\u0142anego napisu wynosi 32 bajty, a inne wa\u017cne rzeczy &#8211; w <a href=\"http:\/\/tmrh20.github.io\/RF24\/index.html\">dokumentacji<\/a> (zach\u0119cam do czytania).&nbsp;<\/p>\n<h2>Problemy? Modyfikacje?&nbsp;<\/h2>\n<p>Np. problem ze zrywaniem po\u0142\u0105czenia &#8211; <a href=\"https:\/\/arduino-info.wikispaces.com\/Nrf24L01-2.4GHz-HowTo\">ludzie pisz\u0105<\/a> o niestabilnym napi\u0119ciu z pinu 3.3V Arduino oraz o problemie z pr\u0105dem (pin 3.3V mo\u017ce maksymalnie da\u0107 tylko 50mA), dlatego dodaj\u0105 dodatkowy kondensator (ma\u0142y, np 4.7 \u03bcF, 10 \u03bcF) do zasilania modu\u0142u:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-691\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nRF-capacitor-300x169.jpg\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nRF-capacitor-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nRF-capacitor.jpg 620w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Mog\u0105 pojawi\u0107 si\u0119 te\u017c problemy z anten\u0105, wi\u0119c albo kupujemy modu\u0142 z &#8222;wypasion\u0105 antenk\u0105&#8221;:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-692\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nRF24L01-LN-PA-1-264x300.jpg\" alt=\"\" width=\"264\" height=\"300\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nRF24L01-LN-PA-1-264x300.jpg 264w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nRF24L01-LN-PA-1.jpg 450w\" sizes=\"auto, (max-width: 264px) 100vw, 264px\" \/><\/p>\n<p>albo <a href=\"http:\/\/www.instructables.com\/id\/Enhanced-NRF24L01\/\">samodzielnie robimy<\/a> sobie antenk\u0119:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-693\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nRF-custom2-225x300.jpg\" alt=\"\" width=\"225\" height=\"300\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nRF-custom2-225x300.jpg 225w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/nRF-custom2.jpg 768w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/p>\n<p>Polecam zajrze\u0107 <a href=\"https:\/\/arduino-info.wikispaces.com\/Nrf24L01-2.4GHz-HowTo\">tutaj<\/a> aby poczyta\u0107 o problemach i r\u00f3\u017cnych sposobach ich rozwi\u0105zywania, a tak\u017ce o oprogramowywaniu tego modu\u0142y.<\/p>\n<p style=\"text-align: right;\"><em>(c) K.G. 2017, 2019<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Komunikacja SPI (Wpis ten jest reaktywacj\u0105 wpisu z 2017 r. Okaza\u0142o si\u0119, \u017ce warto podzieli\u0107 oryginalny wpis na dwie mniejsze cz\u0119\u015bci &#8211; jedna dotycz\u0105ca komunikacji I2C, druga SPI w\u0142a\u015bnie). Tutaj https:\/\/www.arduino.cc\/en\/reference\/SPI&nbsp;mo\u017cna poczyta\u0107 czym jest protok\u00f3\u0142 SPI. Nam wystarczy, \u017ce jest to szybka komunikacja synchroniczna na kr\u00f3tki dystans, wykorzystuj\u0105ca przynajmniej 3 linie nazwane MISO, MOSI i [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":2187,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[146,145,140,142,130,139],"class_list":{"0":"post-2193","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-uncategorized","8":"tag-miso","9":"tag-mosi","10":"tag-nrf","11":"tag-nrf24","12":"tag-radio","13":"tag-spi","15":"post-with-thumbnail","16":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/2193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2193"}],"version-history":[{"count":5,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/2193\/revisions"}],"predecessor-version":[{"id":2225,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/2193\/revisions\/2225"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/2187"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}