{"id":9276,"date":"2024-09-26T22:50:41","date_gmt":"2024-09-26T21:50:41","guid":{"rendered":"https:\/\/telefab.fr\/?p=9276"},"modified":"2026-04-30T16:39:10","modified_gmt":"2026-04-30T14:39:10","slug":"communication-peer-to-peer-lora-e5-arduino-leonardo","status":"publish","type":"tutoriel","link":"https:\/\/hub.imt-atlantique.fr\/fablab\/tutoriel\/communication-peer-to-peer-lora-e5-arduino-leonardo\/","title":{"rendered":"Communication peer to peer LoRa-E5 | Arduino Leonardo"},"content":{"rendered":"<h1>Pr\u00e9requis<\/h1>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 25%;\">\n<p style=\"text-align: center;\">Arduino Leonardo<sup><a href=\"https:\/\/docs.arduino.cc\/hardware\/leonardo\/\" target=\"_blank\" rel=\"noopener\">[1]<\/a><\/sup><\/p>\n<\/td>\n<td style=\"width: 25%; text-align: center;\">Module Grove Base Shield<sup><a href=\"https:\/\/www.gotronic.fr\/art-module-grove-base-shield-103030000-19068.htm\">[2]<\/a><\/sup><\/td>\n<td style=\"width: 25%;\">\n<p style=\"text-align: center;\">Module LoRa-E5 Grove<sup><a href=\"https:\/\/www.gotronic.fr\/art-module-lora-e5-grove-113020091-33673.htm\" target=\"_blank\" rel=\"noopener\">[3]<\/a><\/sup><\/p>\n<\/td>\n<td style=\"width: 25%; text-align: center;\">Connecteur UART<sup><a href=\"https:\/\/www.gotronic.fr\/art-cordon-gravity-i2c-et-uart-fit0513-27871.htm\" target=\"_blank\" rel=\"noopener\">[4]<\/a><\/sup><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 25%;\"><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.limpulsion.fr\/upload\/article\/A000057.JPG\" alt=\"Outil de d\u00e9veloppement - ARDUINO ET TINKERKIT Carte Arduino AVR ARDUINO - CARTE ARDUINO LEONARDO - L'impulsion\" \/><\/td>\n<td style=\"width: 25%;\"><img decoding=\"async\" src=\"https:\/\/www.gotronic.fr\/ar-module-grove-base-shield-103030000-19068.jpg\" alt=\"Shield Grove Base 103030000\" \/><\/td>\n<td style=\"width: 25%;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/www.gotronic.fr\/ar-module-lora-e5-grove-113020091-33673.jpg\" alt=\"Module LoRa-E5 Grove 113020091\" width=\"369\" height=\"300\" \/><\/td>\n<td style=\"width: 25%;\"><img decoding=\"async\" src=\"https:\/\/www.gotronic.fr\/ar-cordon-gravity-i2c-et-uart-fit0513-27871.jpg\" alt=\"Cordon Gravity I2C et UART FIT0513\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Afin de mettre en place cette communication, j&rsquo;ai d\u00fb m&rsquo;inspirer du code de Sylvain Montagny pr\u00e9sent sur son\u00a0<a href=\"https:\/\/github.com\/SylvainMontagny\/LoRaE5\" target=\"_blank\" rel=\"noopener\">github<sup>[5]<\/sup><\/a>.<\/p>\n<p>Pour simplifier les choses, j&rsquo;ai s\u00e9par\u00e9 la partie r\u00e9ception de la partie transmission mais chaque carte est en mesure d&rsquo;envoyer et recevoir des informations.<br \/>\nLes prochaines illustrations et tests ont \u00e9t\u00e9 effectu\u00e9s \u00e0 l&rsquo;aide du logiciel \u00ab\u00a0Arduino IDE\u00a0\u00bb t\u00e9l\u00e9chargeable sur cette\u00a0<a href=\"https:\/\/www.arduino.cc\/en\/software\" target=\"_blank\" rel=\"noopener\">page<sup>[6]<\/sup><\/a>.<\/p>\n<p><!--more--><\/p>\n<h1>Branchements<\/h1>\n<p>L&rsquo;installation du module est rapide et simple. Il faut premi\u00e8rement installer le shield sur la carte. Puis connecter le LoRa-E5 au Shield \u00e0 l&rsquo;aide du connecteur UART. Il faut brancher le module LoRa-E5 au port UART du shield. Une fois cela fait, tout les branchements n\u00e9cessaires auront \u00e9t\u00e9 effectu\u00e9s.<\/p>\n<h1>Programmation<\/h1>\n<p>Il suffit de mettre dans un m\u00eame dossier les trois fichiers respectivement nomm\u00e9s lora.ino, lora.h et lora.cpp.<strong><br \/>\n<\/strong><\/p>\n<hr \/>\n<h2>lora.ino<\/h2>\n<div style=\"background: #464646;\"><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #cc99ff;\">#include<\/span> <span style=\"color: #ccffcc;\">&lt;Arduino.h&gt;<\/span><br \/>\n<span style=\"color: #cc99ff;\">#include<\/span> <span style=\"color: #ccffcc;\">\u00ab\u00a0lora.h\u00a0\u00bb<\/span><br \/>\n<\/span><\/span><span style=\"font-family: 'courier new', courier, monospace;\"><br \/>\n<span style=\"color: #cc99ff;\">#define<\/span> <span style=\"color: #ff6600;\">Debug_Serial <\/span><span style=\"color: #ffffff;\">Serial<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #cc99ff;\">#define<\/span> <span style=\"color: #ff6600;\">LoRa_Serial <\/span><span style=\"color: #ffffff;\">Serial1<\/span><\/span><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #cc99ff;\">#define<\/span><span style=\"color: #ff6600;\"> RX_PIN <\/span><span style=\"color: #ffffff;\">0<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #cc99ff;\">#define<\/span> <span style=\"color: #ff6600;\">TX_PIN <\/span><span style=\"color: #ffffff;\">1<\/span><\/span><\/div>\n<div style=\"background: #464646;\"><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #3366ff;\">uint8_t<\/span> <span style=\"color: #ffffff;\">sizePayloadUp = 4;<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #3366ff;\">uint8_t<\/span> <span style=\"color: #ffffff;\">sizePayloadDown = 0;<\/span><\/span><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #3366ff;\">uint8_t<\/span> <span style=\"color: #ffffff;\"><span style=\"color: #ff6600;\">payloadUp<\/span>[20] = { 0x00, 0x01, 0x02, 0x03 };<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #3366ff;\">uint8_t<\/span> <span style=\"color: #ffffff;\"><span style=\"color: #ff6600;\">payloadDown<\/span>[20] = { 0 };<\/span><\/span><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #3366ff;\">lora<\/span> <span style=\"color: #ff6600;\">lora<\/span><span style=\"color: #ffffff;\">(RX_PIN, TX_PIN);<\/span><br \/>\n<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #3366ff;\">String<\/span> <span style=\"color: #ffffff;\">user_input;<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #3366ff;\">bool<\/span> <span style=\"color: #ffffff;\">receptionMode = <span style=\"color: #00ff00;\">false<\/span>;<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #3366ff;\">void<\/span> <span style=\"color: #ff6600;\">setup<\/span><span style=\"color: #ffffff;\">()<\/span> <span style=\"color: #ffffff;\">{<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 <span style=\"color: #ff6600;\">lora.setup_hardware<\/span>(&amp;Debug_Serial, &amp;LoRa_Serial);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 <span style=\"color: #ff6600;\">lora.checkTheBoard<\/span>();<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 <span style=\"color: #ff6600;\">Serial.println<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0&gt; LoRa-E5 ready to get commands&#8230;\\n\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #ffffff;\">}<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"color: #3366ff;\">void<\/span> <span style=\"color: #ffffff;\"><span style=\"color: #ff6600;\">loop<\/span>() {<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 <span style=\"color: #ff00ff;\">while <\/span>(<span style=\"color: #ff6600;\">Serial.available<\/span>()) {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 user_input = <span style=\"color: #ff6600;\">Serial.readString<\/span>();<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #ff6600;\">user_input.trim<\/span>();<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #ff6600;\">Serial.print<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0Commande : \u00ab\u00a0<\/span> + user_input);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #ff6600;\">lora.sendData_pp<\/span>(user_input);<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 <span style=\"color: #ff00ff;\">if<\/span> (<span style=\"color: #ff6600;\">user_input.startsWith<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0AT+TEST=TXLRSTR\u00a0\u00bb<\/span>)) {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #ff6600;\"> Serial.println<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0Message sent : \u00ab\u00a0<\/span> + <span style=\"color: #ff6600;\">user_input.substring<\/span>(18, <span style=\"color: #ff6600;\">user_input.length<\/span>()-1));<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 <span style=\"color: #ff00ff;\">if<\/span> (user_input == <span style=\"color: #33cccc;\">\u00ab\u00a0AT+TEST=RXLRPKT\u00a0\u00bb<\/span>) {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #ff6600;\"> Serial.println<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #ff6600;\"> Serial.println<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0| Entering reception mode&#8230; |\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 <span style=\"color: #ff6600;\">\u00a0 Serial.println<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+\\n\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 receptionMode = <span style=\"color: #00ff00;\">true<\/span>;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #ff00ff;\">while<\/span> (receptionMode) {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 user_input =<span style=\"color: #ff6600;\"> Serial.readString<\/span>();<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #ff6600;\">user_input.trim<\/span>();<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #ff6600;\"> \u00a0 lora.receiveData<\/span>();<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #ff00ff;\">if<\/span> (<span style=\"color: #ff6600;\">user_input.equals<\/span>(<span style=\"color: #00ccff;\">\u00ab\u00a0EXIT\u00a0\u00bb<\/span>)) {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #ff6600;\"> \u00a0 Serial.println<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 <span style=\"color: #ff6600;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Serial.println<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0| Exiting reception mode&#8230; |\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #ff6600;\">Serial.println<\/span>(<span style=\"color: #33cccc;\">\u00ab\u00a0+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+\\n\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 receptionMode = <span style=\"color: #00ff00;\">false<\/span>;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #ffffff;\"><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n<\/span><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<\/div>\n<hr \/>\n<h2>lora.cpp<\/h2>\n<div style=\"background: #464646;\">\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#include<\/span> <span style=\"color: #ccffcc;\">&lt;Arduino.h&gt;<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#include<\/span> <span style=\"color: #ccffcc;\">&lt;HardwareSerial.h&gt;<\/span><\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#include<\/span> <span style=\"color: #ccffcc;\">\u00ab\u00a0lora.h\u00a0\u00bb<\/span><\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">static char<\/span> <span style=\"color: #ff6600;\">recv_buf<\/span>[512];<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">static bool<\/span> is_exist = <span style=\"color: #00ff00;\">false<\/span>;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff6600;\">lora<span style=\"color: #ffffff;\">::<\/span>lora<\/span>(<span style=\"color: #3366ff;\">byte<\/span> RX_PIN, <span style=\"color: #3366ff;\">byte<\/span> TX_PIN){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 this-&gt;<span style=\"color: #ff6600;\">RX<\/span> = RX_PIN;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 this-&gt;<span style=\"color: #ff6600;\">TX<\/span> = TX_PIN;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">byte<\/span> <span style=\"color: #ff6600;\">lora<\/span>::<span style=\"color: #ff6600;\">getRX<\/span>() {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">return<\/span> this-&gt;<span style=\"color: #ff6600;\">RX<\/span>;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">byte<\/span> <span style=\"color: #ff6600;\">lora<\/span>::<span style=\"color: #ff6600;\">getTX<\/span>() {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">return<\/span> this-&gt;<span style=\"color: #ff6600;\">TX<\/span>;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void<\/span> <span style=\"color: #ff6600;\">lora<\/span>::<span style=\"color: #ff6600;\">setup_hardware<\/span>(Serial_* myDebugSerial, HardwareSerial* myLoRaSerial){ <\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">unsigned long<\/span> startTime = <span style=\"color: #ff6600;\">millis<\/span>();<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 this-&gt;serialD = myDebugSerial;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 this-&gt;serialL = myLoRaSerial;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 (this-&gt;serialD)-&gt;<span style=\"color: #ff6600;\">begin<\/span>(115200);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 (this-&gt;serialL)-&gt;<span style=\"color: #ff6600;\">begin<\/span>(9600);<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">while<\/span> (<span style=\"color: #ff6600;\">millis<\/span>() &#8211; startTime &lt; 2000);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">bool<\/span> <span style=\"color: #ff6600;\">lora<\/span>::<span style=\"color: #ff6600;\">checkBoard<\/span>(){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">bool<\/span> success;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff6600;\">delay<\/span>(500);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff6600;\">SERIAL_L<\/span>(<span style=\"color: #00ccff;\">\u00ab\u00a0AT\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff6600;\">SERIAL_D<\/span>(<span style=\"color: #00ccff;\">\u00ab\u00a0\\n\\n\\n\\n\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">if<\/span> ( (success = <span style=\"color: #ff6600;\">checkResponse<\/span>(400,<span style=\"color: #00ccff;\">\u00ab\u00a0+AT: OK\\r\\n\u00a0\u00bb<\/span>,NO_DEBUG)) == <span style=\"color: #00ff00;\">false<\/span>){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff6600;\">SERIAL_D<\/span>(<span style=\"color: #00ccff;\">\u00ab\u00a0&gt; LoRa-E5 board not detected &#8230;\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">else<\/span>{<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff6600;\">SERIAL_D<\/span>(<span style=\"color: #00ccff;\">\u00ab\u00a0&gt; LoRa-E5 board detected &#8230;\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">return<\/span> success;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void<\/span> <span style=\"color: #ff6600;\">lora<\/span>::<span style=\"color: #ff6600;\">checkTheBoard<\/span>() {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">while<\/span> (!<span style=\"color: #ff6600;\">checkBoard<\/span>());<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">bool<\/span> <span style=\"color: #ff6600;\">lora<\/span>::<span style=\"color: #ff6600;\">checkResponse<\/span>(<span style=\"color: #3366ff;\">uint32_t<\/span> timeOut, <span style=\"color: #3366ff;\">char *<\/span>strCheck, <span style=\"color: #3366ff;\">bool<\/span> debug){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">uint32_t<\/span> tstart = <span style=\"color: #ff6600;\">millis<\/span>();<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">uint8_t<\/span> i=0, checkSize = <span style=\"color: #ff6600;\">strlen<\/span>(strCheck);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">char<\/span> c;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">bool<\/span> success = <span style=\"color: #00ff00;\">false<\/span>;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">while<\/span> (<span style=\"color: #ff6600;\">millis<\/span>()-tstart &lt; timeOut){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">if<\/span>((this-&gt;<span style=\"color: #ff6600;\">serialL<\/span>)-&gt;<span style=\"color: #ff6600;\">available<\/span>() &gt; 0) {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 c = (this-&gt;<span style=\"color: #ff6600;\">serialL<\/span>)-&gt;<span style=\"color: #ff6600;\">read<\/span>();<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">if<\/span> (debug == DEBUG){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (this-&gt;<span style=\"color: #ff6600;\">serialD<\/span>)-&gt;<span style=\"color: #ff6600;\">print<\/span>(c);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">if<\/span>( c == <span style=\"color: #ff6600;\">strCheck<\/span>[i] ){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">if<\/span> (i == (checkSize-1)){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 success = <span style=\"color: #00ff00;\">true<\/span>;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">else<\/span>{<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 i++;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">else<\/span>{<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 i=0;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 } <\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">return<\/span> success;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void<\/span> <span style=\"color: #ff6600;\">lora<\/span>::<span style=\"color: #ff6600;\">readResponse<\/span>(<span style=\"color: #3366ff;\">uint32_t<\/span> timeOut, <span style=\"color: #3366ff;\">bool<\/span> debug){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">uint32_t<\/span> tstart = <span style=\"color: #ff6600;\">millis<\/span>();<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">while<\/span> (<span style=\"color: #ff6600;\">millis<\/span>()-tstart &lt; timeOut){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">if<\/span>((this-&gt;<span style=\"color: #ff6600;\">serialL<\/span>)-&gt;<span style=\"color: #ff6600;\">available<\/span>() &gt; 0) {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">if<\/span> (debug == DEBUG){<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (this-&gt;<span style=\"color: #ff6600;\">serialD<\/span>)-&gt;<span style=\"color: #ff6600;\">print<\/span>((<span style=\"color: #3366ff;\">char<\/span>)(this-&gt;<span style=\"color: #ff6600;\">serialL<\/span>)-&gt;<span style=\"color: #ff6600;\">read<\/span>());<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">else<\/span>{<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (this-&gt;<span style=\"color: #ff6600;\">serialL<\/span>)-&gt;<span style=\"color: #ff6600;\">read<\/span>();<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 } <\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 } <\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void<\/span> <span style=\"color: #ff6600;\">lora<\/span>::<span style=\"color: #ff6600;\">sendData_pp<\/span>(<span style=\"color: #3366ff;\">String<\/span> str) {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">String<\/span> response;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">bool<\/span> received_message = <span style=\"color: #00ff00;\">false<\/span>;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 (this-&gt;<span style=\"color: #ff6600;\">serialL<\/span>)-&gt;<span style=\"color: #ff6600;\">print<\/span>(str);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 response += (this-&gt;<span style=\"color: #ff6600;\">serialL<\/span>)-&gt;<span style=\"color: #ff6600;\">readString<\/span>();<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff6600;\">SERIAL_D<\/span>(response);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #808080;\">\/\/ FUNCTION TO RECEIVE DATA<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void<\/span> <span style=\"color: #ff6600;\">lora<\/span>::<span style=\"color: #ff6600;\">receiveData<\/span>() {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">String<\/span> data;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 data = (<span style=\"color: #3366ff;\">String<\/span>)(this-&gt;<span style=\"color: #ff6600;\">serialL<\/span>)-&gt;<span style=\"color: #ff6600;\">readString<\/span>();<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff6600;\">data.trim<\/span>();<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff00ff;\">if<\/span> (<span style=\"color: #ff6600;\">data.startsWith<\/span>(<span style=\"color: #00ccff;\">\u00ab\u00a0+TEST\u00a0\u00bb<\/span>)) {<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \u00a0 \u00a0 (this-&gt;<span style=\"color: #ff6600;\">serialD<\/span>)-&gt;<span style=\"color: #ff6600;\">println<\/span>(data + <span style=\"color: #00ccff;\">\u00ab\u00a0\\n\u00a0\u00bb<\/span>);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 }<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">}<\/span><\/p>\n<\/div>\n<hr \/>\n<h2>lora.h<\/h2>\n<div style=\"background: #464646;\">\n<div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#define <\/span><span style=\"color: #ff6600;\">SERIAL_D<\/span>(x) \u00a0 this-&gt;<span style=\"color: #ff6600;\">serialD<\/span>-&gt;<span style=\"color: #ff6600;\">println<\/span>(x)<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#define<\/span> <span style=\"color: #ff6600;\">SERIAL_L<\/span>(x) \u00a0 this-&gt;<span style=\"color: #ff6600;\">serialL<\/span>-&gt;<span style=\"color: #ff6600;\">println<\/span>(x)<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#define<\/span> <span style=\"color: #ff6600;\">DEBUG\u00a0 \u00a0 \u00a0<\/span> 0<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#define<\/span> <span style=\"color: #ff6600;\">NO_DEBUG\u00a0 \u00a0<\/span>1<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">class <\/span>lora{<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #3366ff;\">public:<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 \/\/ uint8_t \u00a0 \u00a0 \u00a0 downlink[50];<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #3366ff;\">private:<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">byte \u00a0 \u00a0 \u00a0<\/span> RX;<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">byte \u00a0 \u00a0 \u00a0<\/span> TX;<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#if defined<\/span>(<span style=\"color: #ff6600;\">ARDUINO_AVR_LEONARDO<\/span>) || <span style=\"color: #cc99ff;\">defined<\/span>(<span style=\"color: #ff6600;\">ARDUINO_WIO_TERMINAL<\/span>)<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 Serial_* serialD;<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #cc99ff;\">#else<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 HardwareSerial* serialD;<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #cc99ff;\">#endif<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#if<\/span> defined(<span style=\"color: #ff6600;\">ARDUINO_WIO_TERMINAL<\/span>)<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 Uart* serialL;<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #cc99ff;\">#else<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">\u00a0 \u00a0 HardwareSerial* serialL;<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #cc99ff;\">#endif<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\"> bool<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #ff6600;\">checkResponse<\/span>(<span style=\"color: #3366ff;\">uint32_t<\/span> timeOut, <span style=\"color: #3366ff;\">char *<\/span>strCheck, <span style=\"color: #3366ff;\">bool<\/span> debug);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">bool<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #ff6600;\">checkBoard<\/span>(<span style=\"color: #3366ff;\">void<\/span>);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">byte \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">getRX<\/span>(<span style=\"color: #3366ff;\">void<\/span>);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">byte \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">getTX<\/span>(<span style=\"color: #3366ff;\">void<\/span>);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #3366ff;\">public:<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #ff6600;\">lora<\/span>(<span style=\"color: #3366ff;\">byte<\/span> RX, <span style=\"color: #3366ff;\">byte<\/span> TX);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #cc99ff;\">#if defined<\/span>(<span style=\"color: #ff6600;\">ARDUINO_AVR_LEONARDO<\/span>)<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">setup_hardware<\/span>(Serial_* myDebugSerial, HardwareSerial* myLoRaSerial);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #cc99ff;\">#else<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">setup_hardware<\/span>(HardwareSerial* myDebugSerial, HardwareSerial* myLoRaSerial);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #cc99ff;\">#endif<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">checkTheBoard<\/span>(<span style=\"color: #3366ff;\">void<\/span>);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">readResponse<\/span>(<span style=\"color: #3366ff;\">uint32_t<\/span> timeOut, <span style=\"color: #3366ff;\">bool<\/span> debug);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">sendData_pp<\/span>(<span style=\"color: #3366ff;\">String<\/span> str);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">sendData_ppp<\/span>(<span style=\"color: #3366ff;\">char*<\/span> str);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">sendMessage<\/span>(<span style=\"color: #3366ff;\">String<\/span> msg);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">int \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span> <span style=\"color: #ff6600;\">at_send_check_response<\/span>(<span style=\"color: #3366ff;\">char *<\/span>p_ack, <span style=\"color: #3366ff;\">int<\/span> timeout_ms, <span style=\"color: #3366ff;\">char *<\/span>p_cmd, &#8230;);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\"><span style=\"color: #3366ff;\">void \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: #ff6600;\">receiveData<\/span>(<span style=\"color: #3366ff;\">void<\/span>);<\/span><\/div>\n<div><span style=\"font-family: 'courier new', courier, monospace; color: #ffffff;\">};<\/span><\/div>\n<\/div>\n<\/div>\n<hr \/>\n<p>L&rsquo;\u00e9tape suivante consiste \u00e0 t\u00e9l\u00e9verser le code, ouvrir la console (Serial Monitor) et taper les commandes que vous voulez :<\/p>\n<table style=\"border-collapse: collapse; width: 100%; height: 232px;\">\n<tbody>\n<tr style=\"height: 24px;\">\n<td style=\"width: 25%; text-align: center; height: 24px;\">Commande<\/td>\n<td style=\"width: 25%; height: 24px; text-align: center;\">Description<\/td>\n<td style=\"width: 25%; height: 24px; text-align: center;\">R\u00e9ponse attendue<\/td>\n<td style=\"width: 25%; height: 24px; text-align: center;\">Image<\/td>\n<\/tr>\n<tr style=\"height: 48px;\">\n<td style=\"text-align: center; height: 26px;\">AT<\/td>\n<td style=\"text-align: center; height: 26px;\">Commande pour v\u00e9rifier le bon fonctionnement du module LoRa-E5<\/td>\n<td style=\"text-align: center; height: 26px;\">+AT: OK<\/td>\n<td style=\"height: 26px;\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/09\/AT_response.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9279 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/09\/AT_response.png\" alt=\"\" width=\"199\" height=\"47\" \/><\/a><\/td>\n<\/tr>\n<tr style=\"height: 104px;\">\n<td style=\"text-align: center; height: 104px;\">AT+MODE=TEST<\/td>\n<td style=\"text-align: center; height: 104px;\">D\u00e9finit le mode en TEST.<br \/>\n<span style=\"color: #ff0000;\">La transmission RX et TX ne peut pas se faire si vous n&rsquo;\u00eates pas en mode TEST<\/span><\/td>\n<td style=\"text-align: center; height: 104px;\"><span style=\"color: #000000;\">+MODE: TEST<\/span><\/td>\n<td style=\"text-align: center; height: 104px;\"><em><span style=\"color: #808080;\">Image manquante pour l&rsquo;instant<\/span><\/em><\/td>\n<td style=\"height: 104px;\"><\/td>\n<\/tr>\n<tr style=\"height: 26px;\">\n<td style=\"text-align: center; height: 26px;\">AT+TEST=RXLRPKT<\/td>\n<td style=\"text-align: center; height: 26px;\"><span style=\"color: #ff0000;\">Seulement en mode TEST<br \/>\n<span style=\"color: #000000;\">Passe en mode r\u00e9ception<\/span><br \/>\n<\/span><\/td>\n<td style=\"text-align: center; height: 26px;\">Entering reception mode&#8230;<\/p>\n<p><span style=\"color: #800000;\">Pour sortir du mode r\u00e9ception, taper EXIT<\/span><\/td>\n<td style=\"text-align: center; height: 26px;\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/09\/reception_response.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9280\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/09\/reception_response.png\" alt=\"\" width=\"239\" height=\"74\" \/><\/a><\/td>\n<td style=\"height: 26px;\"><\/td>\n<\/tr>\n<tr style=\"height: 26px;\">\n<td style=\"text-align: center; height: 26px;\"><span style=\"color: #000000;\">EXIT<\/span><\/td>\n<td style=\"text-align: center; height: 26px;\"><span style=\"color: #ff0000;\">Seulement en mode TEST<br \/>\n<span style=\"color: #000000;\">Sortie du mode r\u00e9ception<\/span><\/span><\/td>\n<td style=\"text-align: center; height: 26px;\">Exiting reception mode&#8230;<\/td>\n<td style=\"text-align: center; height: 26px;\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/09\/exit_reception_mode.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9281\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/09\/exit_reception_mode.png\" alt=\"\" width=\"231\" height=\"53\" \/><\/a><\/td>\n<td style=\"height: 26px;\"><\/td>\n<\/tr>\n<tr style=\"height: 26px;\">\n<td style=\"text-align: center; height: 26px;\">AT+TEST=TXLRSTR, \u00ab\u00a0<span style=\"color: #00ccff;\">msg<\/span>\u00ab\u00a0<\/td>\n<td style=\"text-align: center; height: 26px;\"><span style=\"color: #ff0000;\">Seulement en mode TEST<br \/>\n<span style=\"color: #000000;\">Envoie un message via LoRa<br \/>\n<\/span><\/span>Remplacez <span style=\"color: #00ffff;\">msg<span style=\"color: #000000;\"> par le mot que vous voulez envoyer<\/span><\/span><\/td>\n<td style=\"text-align: center; height: 26px;\">Message sent :\u00a0<span style=\"color: #00ffff;\">msg<\/span><\/td>\n<td style=\"text-align: center; height: 26px;\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/09\/TX_response.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9282\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/09\/TX_response.png\" alt=\"\" width=\"279\" height=\"36\" \/><\/a><\/td>\n<td style=\"height: 26px;\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>S&rsquo;il y a un probl\u00e8me, le module LoRa-E5 vous le fera savoir. Consultez cette\u00a0<a href=\"https:\/\/nasfamilyone.synology.me\/TutoElectroWeb\/Tuto\/Tuto_STM32\/LoraE5\/\" target=\"_blank\" rel=\"noopener\">page<sup>[7]<\/sup><\/a> pour conna\u00eetre la signification des erreurs que vous pourriez recevoir.<\/p>\n<h1>R\u00e9f\u00e9rences<\/h1>\n<p>[1] \u00ab\u00a0Leonardo | Arduino Documentation\u00a0\u00bb. Consult\u00e9 le 26\/09\/2024. [En ligne]. Disponible sur <a href=\"https:\/\/docs.arduino.cc\/hardware\/leonardo\/\">https:\/\/docs.arduino.cc\/hardware\/leonardo\/<\/a><br \/>\n[2] \u00ab\u00a0Module Grove Base Shield 103030000 Seeed Studio &#8211; Shields et cartes d&rsquo;interface | GO TRONIC\u00a0\u00bb. Consult\u00e9 le 26\/09\/2024. [En ligne]. Disponible sur <a href=\"https:\/\/www.gotronic.fr\/art-module-grove-base-shield-103030000-19068.htm\">https:\/\/www.gotronic.fr\/art-module-grove-base-shield-103030000-19068.htm<\/a><br \/>\n[3] \u00ab\u00a0Module LoRa-E5 Grove 113020091 Seeed Studio &#8211; Communication | GO TRONIC\u00a0\u00bb. Consult\u00e9 le 26\/09\/2024. [En ligne]. Disponible sur\u00a0<a href=\"https:\/\/www.gotronic.fr\/art-module-lora-e5-grove-113020091-33673.htm\">https:\/\/www.gotronic.fr\/art-module-lora-e5-grove-113020091-33673.htm<br \/>\n<\/a>[4] \u00ab\u00a0Cordon Gravity I2C et UART FIT0513 DFRobot &#8211; Connectique et accessoires | GO TRONIC\u00a0\u00bb. Consult\u00e9 le 26\/09\/2024. [En ligne]. Disponible sur\u00a0<a href=\"https:\/\/www.gotronic.fr\/art-cordon-gravity-i2c-et-uart-fit0513-27871.htm\">https:\/\/www.gotronic.fr\/art-cordon-gravity-i2c-et-uart-fit0513-27871.htm<\/a><br \/>\n[5] \u00ab\u00a0SylvainMontagny\/LoRaE5\u00a0\u00bb. Consult\u00e9 le 26\/09\/2024. [En ligne]. Disponible sur <a href=\"https:\/\/github.com\/SylvainMontagny\/LoRaE5\/tree\/main\">https:\/\/github.com\/SylvainMontagny\/LoRaE5\/tree\/main<\/a><br \/>\n[6] \u00ab\u00a0Software | Arduino\u00a0\u00bb. Consult\u00e9 le 26\/09\/2024. [En ligne]. Disponible sur <a href=\"https:\/\/www.arduino.cc\/en\/software\">https:\/\/www.arduino.cc\/en\/software<\/a><br \/>\n[7] \u00ab\u00a0Communication avec des modules LoRa-E5\u00a0\u00bb. Consult\u00e9 le 26\/09\/2024.\u00a0 [En ligne]. Disponible sur <a href=\"https:\/\/nasfamilyone.synology.me\/TutoElectroWeb\/Tuto\/Tuto_STM32\/LoraE5\/\">https:\/\/nasfamilyone.synology.me\/TutoElectroWeb\/Tuto\/Tuto_STM32\/LoraE5\/<\/a><br \/>\n[8] \u00ab\u00a0seeed-lora\/Grove-LoRa-E5-P2P-Example: Point-to-Point Transmission with Grove &#8211; LoRa-E5\u00a0\u00bb. Consult\u00e9 le 26\/09\/2024. [En ligne]. Disponible sur <a href=\"https:\/\/github.com\/seeed-lora\/Grove-LoRa-E5-P2P-Example\">https:\/\/github.com\/seeed-lora\/Grove-LoRa-E5-P2P-Example<\/a><\/p>\n","protected":false},"featured_media":9286,"parent":0,"template":"","meta":{"_acf_changed":false},"class_list":["post-9276","tutoriel","type-tutoriel","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/tutoriel\/9276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/tutoriel"}],"about":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/types\/tutoriel"}],"wp:attachment":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/media?parent=9276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}