{"id":58,"date":"2014-05-11T09:29:13","date_gmt":"2014-05-11T07:29:13","guid":{"rendered":"http:\/\/bricolageandco.redoutey.net\/?p=58"},"modified":"2014-07-10T12:09:27","modified_gmt":"2014-07-10T10:09:27","slug":"arduino-et-prises-commandees-les-essais","status":"publish","type":"post","link":"https:\/\/bricolageandco.redoutey.net\/?p=58","title":{"rendered":"Arduino et prises command\u00e9es (4 &#8211; les essais)"},"content":{"rendered":"<h1 align=\"CENTER\">Arduino<\/h1>\n<h1 align=\"CENTER\">Commande de prises \u00e9lectriques, \u00e9clairages\u2026<\/h1>\n<h1 align=\"CENTER\">par transmission 2.4GHz<\/h1>\n<h2 class=\"western\"><\/h2>\n<h2 class=\"western\">Premiers essais<\/h2>\n<p>&nbsp;<\/p>\n<p>Les premiers essais ont \u00e9t\u00e9 men\u00e9s pour v\u00e9rifier la port\u00e9e de la transmission. Deux modules Arduino UNO et deux modules nRF24L01 de base (mod\u00e8le avec antenne en L) ont \u00e9t\u00e9 mis en \u0153uvre; apr\u00e8s chargement, le premier modules, aliment\u00e9 par une pile 9V. m&rsquo;a accompagn\u00e9, tandis que le second module restait connect\u00e9 sur le port USB de l&rsquo;ordinateur.<\/p>\n<p>Le premier module est connect\u00e9 \u00e0 un bouton poussoir; on \u00e9met l&rsquo;\u00e9tat du bouton vers le second module; ce dernier re\u00e7oit la transmission, lit l\u2019information et la r\u00e9\u00e9met aussit\u00f4t vers le premier; le premier module re\u00e7oit la transmission et commande une led. Cela permet de tester la transmission dans les deux sens \u00e0 la fois.<\/p>\n<p>Il y a \u00e9galement les \u00ab\u00a0print\u00a0\u00bb qui vont bien pour suivre le fonctionnement sur la console.<\/p>\n<p>Les 2 programmes \u00e0 charger :<\/p>\n<blockquote><p>\/\/ L&rsquo;\u00e9metteur&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<\/p>\n<p>\/\/ Essai de transmission 2.4 GHz avril 2014<\/p>\n<p>\/\/ Philippe Redoutey sur bases issues d&rsquo;internet<\/p>\n<p>#include &lt;SPI.h&gt;<br \/>\n#include &lt;Mirf.h&gt;<br \/>\n#include &lt;nRF24L01.h&gt;<br \/>\n#include &lt;MirfHardwareSpiDriver.h&gt;<\/p>\n<p>const int buttonPin = 2; \/\/ le N\u00b0 de l&rsquo;entr\u00e9e digitale qui re\u00e7oit le bouton<br \/>\nconst int ledPin = 3; \/\/ le N\u00b0 de la sortie num\u00e9rique qui commande la led<br \/>\nint buttonState = 0; \/\/ variable pour m\u00e9moriser l&rsquo;\u00e9tat du bouton<br \/>\nbyte valeur_octet[1]; \/\/ contient la valeur d\u00e9coup\u00e9e en octet pour l\u2019envoi (pour le test = 1 octet<br \/>\nbyte Etatrecu = 0;<\/p>\n<p>void setup(){<br \/>\nSerial.begin(9600);<\/p>\n<p>Mirf.cePin = 8; \/\/ CE sur D8<br \/>\nMirf.csnPin = 7; \/\/ CSN sur D7<br \/>\nMirf.spi = &amp;MirfHardwareSpi; \/\/ On veut utiliser le port SPI hardware<br \/>\nMirf.init(); \/\/ Initialisation du SPI<\/p>\n<p>Mirf.channel = 0; \/\/ On va utiliser le canal 0 pour communiquer (128 canaux disponible, de 0 \u00e0 127)<br \/>\nMirf.payload = sizeof(unsigned byte); \/\/ = 1, ici il faut d\u00e9clarer la taille du \u00ab\u00a0payload\u00a0\u00bb soit du message qu&rsquo;on va transmettre, au max 32 octets<\/p>\n<p>\/\/ RF_SETUP=0000abcd : a=1\u2013&gt;2Mb\/s, a=0\u2013&gt;1Mb\/s;<br \/>\n\/\/ puissance \u00e9mission bc=00\u2013&gt;-18 dBm, bc=01\u2013&gt;-12dBm, bc=10\u2013&gt;-6dBm, bc=11\u2013&gt;0dBm;<br \/>\n\/\/ d=0 pas de gain sur le bruit en r\u00e9ception<\/p>\n<p>Mirf.configRegister(RF_SETUP, 0x06); \/\/ 1 Mb\/s et 0 dBm (puissance maximum)<\/p>\n<p>Mirf.config(); \/\/ Tout est bon ? Ok let&rsquo;s go !<\/p>\n<p>Mirf.setTADDR((byte *)\u00a0\u00bbnrf02&Prime;); \/\/ Le 1er module va envoyer ses info au 2eme module<br \/>\nMirf.setRADDR((byte *)\u00a0\u00bbnrf01&Prime;); \/\/ On d\u00e9finit ici l&rsquo;adresse du 1er module<\/p>\n<p>pinMode(ledPin, OUTPUT); \/\/ Initialisation de la sortie digitale pour la led<\/p>\n<p>pinMode(buttonPin, INPUT); \/\/ Initialisation de l&rsquo;ebtr\u00e9e digitale pour le bouton<br \/>\ndigitalWrite(buttonPin, HIGH); \/\/ met la r\u00e9sistance de tirage au +<\/p>\n<p>Serial.println(\u00ab\u00a0Go !\u00a0\u00bb);<br \/>\n}<\/p>\n<p>void loop(){<\/p>\n<p>buttonState = digitalRead(buttonPin); \/\/ lecture de l&rsquo;\u00e9tat du bouton<br \/>\nvaleur_octet[0] = buttonState;<\/p>\n<p>unsigned long time = millis(); \/\/ On stocque le temps actuelle retourn\u00e9 par millis() dans time<\/p>\n<p>\/\/ Mirf.send((byte *)&amp;time); \/\/ On envoi time en utilisant l&rsquo;astuce du cast de pointeur sur adresse<\/p>\n<p>Mirf.send(valeur_octet); \/\/ On envoie les octets, 1 octet pour le test<\/p>\n<p>while(Mirf.isSending()); \/\/ On boucle (attend) tant que le message n&rsquo;as pas \u00e9tait envoy\u00e9<\/p>\n<p>Serial.print(\u00ab\u00a0Octet envoye \u00ab\u00a0); \/\/ impression pour le contr\u00f4le du fonctionnement<br \/>\nSerial.print(valeur_octet[0]);<br \/>\nSerial.print(\u00a0\u00bb \u00ab\u00a0);<br \/>\ndelay(10);<\/p>\n<p>while(!Mirf.dataReady()){ \/\/ On attend de recevoir quelque chose<br \/>\nif ( ( millis() &#8211; time ) &gt; 1000 ) { \/\/ Si on attend depuis plus d&rsquo;une seconde<br \/>\nSerial.println(\u00ab\u00a0=(\u00ab\u00a0); \/\/ C&rsquo;est le drame &#8230;<br \/>\nreturn; \/\/ ce cas ne devrait pas se produire !!!<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/ Mirf.getData((byte *) &amp;time); \/\/ On r\u00e9cup\u00e9re le message recu<\/p>\n<p>if (!Mirf.isSending() &amp;&amp; Mirf.dataReady()){ \/\/ Si un message a \u00e9t\u00e9 recu et qu&rsquo;un autre n&rsquo;est pas en cours d&#8217;emission<br \/>\nMirf.getData(valeur_octet); \/\/ on r\u00e9cup\u00e9re le m\u00e9ssage<br \/>\nSerial.print(\u00ab\u00a0Recu : \u00ab\u00a0);<br \/>\nSerial.println(valeur_octet[0]);<br \/>\n}<br \/>\nEtatrecu = valeur_octet[0]; \/\/ on r\u00e9cup\u00e8re l&rsquo;octet re\u00e7u<br \/>\ndigitalWrite(ledPin, Etatrecu); \/\/ et on commande la led en cons\u00e9quence<br \/>\ndelay(100);<br \/>\n}<br \/>\nSerial.print(\u00ab\u00a0Octet envoye \u00ab\u00a0); \/\/ impression pour le contr\u00f4le du fonctionnement<br \/>\nSerial.print(valeur_octet[0]);<br \/>\nSerial.print(\u00a0\u00bb \u00ab\u00a0);<br \/>\ndelay(10);<\/p>\n<p>while(!Mirf.dataReady()){ \/\/ On attend de recevoir quelque chose<br \/>\nif ( ( millis() &#8211; time ) &gt; 1000 ) { \/\/ Si on attend depuis plus d&rsquo;une seconde<br \/>\nSerial.println(\u00ab\u00a0=(\u00ab\u00a0); \/\/ C&rsquo;est le drame &#8230;<br \/>\nreturn; \/\/ ce cas ne devrait pas se produire !!!<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/ Mirf.getData((byte *) &amp;time); \/\/ On r\u00e9cup\u00e8re le message re\u00e7u<\/p>\n<p>if(!Mirf.isSending() &amp;&amp; Mirf.dataReady()){ \/\/ Si un message a \u00e9t\u00e9 re\u00e7u et qu&rsquo;un autre n&rsquo;est pas en cours d&#8217;emission<br \/>\nMirf.getData(valeur_octet); \/\/ on r\u00e9cup\u00e8re le message<br \/>\nSerial.print(\u00ab\u00a0Recu : \u00ab\u00a0);<br \/>\nSerial.println(valeur_octet[0]);<br \/>\n}<br \/>\nEtatrecu = valeur_octet[0]; \/\/ on r\u00e9cup\u00e8re l&rsquo;octet re\u00e7u<br \/>\ndigitalWrite(ledPin, Etatrecu); \/\/ et on commande la led en cons\u00e9quence<br \/>\ndelay(100);<br \/>\n}<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<blockquote><p>\/\/ Le r\u00e9cepteur 2.4 GHz<\/p>\n<p>\/\/ Essai de transmission avril 2014<br \/>\n\/\/ Philippe Redoutey sur bases issues d&rsquo;internet<\/p>\n<p>#include &lt;SPI.h&gt;<br \/>\n#include &lt;Mirf.h&gt;<br \/>\n#include &lt;nRF24L01.h&gt;<br \/>\n#include &lt;MirfHardwareSpiDriver.h&gt;<\/p>\n<p>void setup(){<br \/>\nSerial.begin(9600);<\/p>\n<p>Mirf.cePin = 8; \/\/ CE sur D8<br \/>\nMirf.csnPin = 7; \/\/ CSN sur D7<br \/>\nMirf.spi = &amp;MirfHardwareSpi; \/\/ On veut utiliser le port SPI hardware<br \/>\nMirf.init(); \/\/ on initialise le SPI<\/p>\n<p>Mirf.channel = 0; \/\/ On va utiliser le canal 0 pour communiquer (128 canaux disponible, de 0 \u00e0 127)<br \/>\nMirf.payload = sizeof(unsigned byte); \/\/ = 1, ici il faut d\u00e9clarer la taille du \u00ab\u00a0payload\u00a0\u00bb soit du message qu&rsquo;on va transmettre, au max 32 octets<br \/>\nMirf.config(); \/\/ Tout est bon ? Ok let&rsquo;s go !<\/p>\n<p>Mirf.setTADDR((byte *)\u00a0\u00bbnrf01&Prime;); \/\/ Le 2eme module va envoyer ses info au 1er module<br \/>\nMirf.setRADDR((byte *)\u00a0\u00bbnrf02&Prime;); \/\/ On d\u00e9finit ici l&rsquo;adresse du 2eme module<\/p>\n<p>\/\/ RF_SETUP=0000abcd : a=1\u2013&gt;2Mb\/s, a=0\u2013&gt;1Mb\/s;<br \/>\n\/\/ puissance \u00e9mission bc=00\u2013&gt;-18 dBm, bc=01\u2013&gt;-12dBm, bc=10\u2013&gt;-6dBm, bc=11\u2013&gt;0dBm;<br \/>\n\/\/ d=0 pas de gain sur le bruit en r\u00e9ception<\/p>\n<p>Mirf.configRegister(RF_SETUP, 0x06); \/\/ 1 Mb\/s et 0 dBm (puissance maximum)<\/p>\n<p>Serial.println(\u00ab\u00a0Go !\u00a0\u00bb);<br \/>\n}<\/p>\n<p>void loop(){<br \/>\nbyte data[Mirf.payload]; \/\/ Tableau de byte qui va stocker le message recu<\/p>\n<p>if (!Mirf.isSending() &amp;&amp; Mirf.dataReady()){ \/\/ Si un message a \u00e9t\u00e9 re\u00e7u et qu&rsquo;un autre n&rsquo;est pas en cours d&rsquo;\u00e9mission<br \/>\nSerial.println(\u00ab\u00a0Recu&#8230; \u00ab\u00a0);<br \/>\nMirf.getData(data); \/\/ on r\u00e9cup\u00e8re le message<br \/>\nMirf.send(data); \/\/ et on le renvoit tel quel<br \/>\nSerial.println(\u00ab\u00a0Et renvoye!\u00a0\u00bb);<br \/>\ndelay(10);<br \/>\n}<br \/>\n}<\/p><\/blockquote>\n<p>Les r\u00e9sultats sont moyennement concluants; si la transmission fonctionne d\u00e8s le premier essai, la port\u00e9e n&rsquo;est pas tr\u00e8s importante : le second\u00a0module \u00e9tant au sous-sol, la transmission s&rsquo;arr\u00eate quand je suis entre le rez-de-chauss\u00e9e et le premier \u00e9tage avec le premier\u00a0modules (maison en pierres pour le sous-sol et briques au dessus); quand je sors de la maison, la transmission s&rsquo;arr\u00eate \u00e0 quelques m\u00e8tres.<\/p>\n<p>&nbsp;<\/p>\n<h2>Seconds essais<\/h2>\n<p>Les essais suivants sont destin\u00e9s d&rsquo;une part, \u00e0 am\u00e9liorer la port\u00e9e (en utilisant un autre mod\u00e8le de carte nRF24L01) et d&rsquo;autre part, \u00e0 optimiser le code pour fiabiliser les transmissions.<\/p>\n<p>==&gt; suivre&#8230;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Arduino Commande de prises \u00e9lectriques, \u00e9clairages\u2026 par transmission 2.4GHz Premiers essais &nbsp; Les premiers essais ont \u00e9t\u00e9 men\u00e9s pour v\u00e9rifier la port\u00e9e de la transmission. Deux modules Arduino UNO et deux modules nRF24L01 de base (mod\u00e8le avec antenne en L) ont \u00e9t\u00e9 mis en \u0153uvre; apr\u00e8s chargement, le premier modules, aliment\u00e9 par une pile 9V. <a href='https:\/\/bricolageandco.redoutey.net\/?p=58' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[6,16,17],"class_list":["post-58","post","type-post","status-publish","format-standard","hentry","category-arduino-philie","tag-arduino","tag-prises-commandees","tag-transmission-radio","category-5-id","post-seq-1","post-parity-odd","meta-position-corners","fix"],"_links":{"self":[{"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=\/wp\/v2\/posts\/58","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=58"}],"version-history":[{"count":14,"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=\/wp\/v2\/posts\/58\/revisions"}],"predecessor-version":[{"id":119,"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=\/wp\/v2\/posts\/58\/revisions\/119"}],"wp:attachment":[{"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bricolageandco.redoutey.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}