diff --git a/examples/LoRaDumpRegisters/LoRaDumpRegisters.ino b/examples/LoRaDumpRegisters/LoRaDumpRegisters.ino index 6f6a7b4..5a23d2e 100644 --- a/examples/LoRaDumpRegisters/LoRaDumpRegisters.ino +++ b/examples/LoRaDumpRegisters/LoRaDumpRegisters.ino @@ -1,26 +1,30 @@ /* LoRa register dump - context: Arduino + This examples shows how to inspect and output the LoRa radio's + registers on the Serial interface */ #include // include libraries #include void setup() { - while (!Serial); Serial.begin(9600); // initialize serial - Serial.println("LoRa Receiver"); - LoRa.setPins(7, 6, 1); // set CS, reset, IRQ pin - if (!LoRa.begin(915E6)) { // initialize ratio at 915Mhz + while (!Serial); + + Serial.println("LoRa Dump Registers"); + + // override the default CS, reset, and IRQ pins (optional) + // LoRa.setPins(7, 6, 1); // set CS, reset, IRQ pin + + if (!LoRa.begin(915E6)) { // initialize ratio at 915 MHz Serial.println("LoRa init failed. Check your connections."); while (true); // if failed, do nothing } - LoRa.sleep(); - LoRa.dumpRegisters(Serial); + + LoRa.dumpRegisters(Serial); } void loop() { - } diff --git a/examples/LoRaDuplex/LoRaDuplex.ino b/examples/LoRaDuplex/LoRaDuplex.ino index bfdeadc..c914254 100644 --- a/examples/LoRaDuplex/LoRaDuplex.ino +++ b/examples/LoRaDuplex/LoRaDuplex.ino @@ -6,18 +6,20 @@ with 0xFF as the broadcast address. Uses readString() from Stream class to read payload. The Stream class' - timeout may affect other functuons, like the radio's callback. For an + timeout may affect other functuons, like the radio's callback. For an created 28 April 2017 by Tom Igoe */ #include // include libraries #include + const int csPin = 7; // LoRa radio chip select const int resetPin = 6; // LoRa radio reset const int irqPin = 1; // change for your board; must be a hardware interrupt pin String outgoing; // outgoing message + byte msgCount = 0; // count of outgoing messages byte localAddress = 0xBB; // address of this device byte destination = 0xFF; // destination to send to @@ -25,32 +27,33 @@ long lastSendTime = 0; // last send time int interval = 2000; // interval between sends void setup() { - while (!Serial); Serial.begin(9600); // initialize serial + while (!Serial); + Serial.println("LoRa Duplex"); + + // override the default CS, reset, and IRQ pins (optional) LoRa.setPins(csPin, resetPin, irqPin);// set CS, reset, IRQ pin - if (!LoRa.begin(915E6)) { // initialize ratio at 915Mhz + if (!LoRa.begin(915E6)) { // initialize ratio at 915 MHz Serial.println("LoRa init failed. Check your connections."); while (true); // if failed, do nothing } - LoRa.setTimeout(10); // set Stream timeout of 10ms - Serial.println("LoRa init succeeded."); + Serial.println("LoRa init succeeded."); } void loop() { - if (millis() - lastSendTime > interval) { - String message = "HeLoRa World!"; // send a message - sendMessage(message); - Serial.println("Sending " + message); - lastSendTime = millis(); // timestamp the message - interval = random(2000) + 1000; // 2-3 seconds - } + if (millis() - lastSendTime > interval) { + String message = "HeLoRa World!"; // send a message + sendMessage(message); + Serial.println("Sending " + message); + lastSendTime = millis(); // timestamp the message + interval = random(2000) + 1000; // 2-3 seconds + } // parse for a packet, and call onReceive with the result: - onReceive(LoRa.parsePacket()); - + onReceive(LoRa.parsePacket()); } void sendMessage(String outgoing) { @@ -64,7 +67,6 @@ void sendMessage(String outgoing) { msgCount++; // increment message ID } - void onReceive(int packetSize) { if (packetSize == 0) return; // if there's no packet, return @@ -73,10 +75,13 @@ void onReceive(int packetSize) { byte sender = LoRa.read(); // sender address byte incomingMsgId = LoRa.read(); // incoming msg ID byte incomingLength = LoRa.read(); // incoming msg length + String incoming = ""; + while (LoRa.available()) { - incoming += (char)LoRa.read(); + incoming += (char)LoRa.read(); } + if (incomingLength != incoming.length()) { // check length for error Serial.println("error: message length does not match length"); return; // skip rest of function @@ -89,13 +94,13 @@ void onReceive(int packetSize) { } // if message is for this device, or broadcast, print details: - Serial.println("Received from:" + String(sender, HEX)); - Serial.println("Sent to:" + String(recipient, HEX)); - Serial.println("Message ID:" + String(incomingMsgId)); - Serial.println("Message length:" + String(incomingLength)); - Serial.println("Message:" + incoming); - Serial.println("RSSI:" + String(LoRa.packetRssi())); - Serial.println("Snr:" + String(LoRa.packetSnr())); + Serial.println("Received from: 0x" + String(sender, HEX)); + Serial.println("Sent to: 0x" + String(recipient, HEX)); + Serial.println("Message ID: " + String(incomingMsgId)); + Serial.println("Message length: " + String(incomingLength)); + Serial.println("Message: " + incoming); + Serial.println("RSSI: " + String(LoRa.packetRssi())); + Serial.println("Snr: " + String(LoRa.packetSnr())); Serial.println(); } diff --git a/examples/LoRaDuplexCallback/LoRaDuplexCallback.ino b/examples/LoRaDuplexCallback/LoRaDuplexCallback.ino index ddb4b74..2385188 100644 --- a/examples/LoRaDuplexCallback/LoRaDuplexCallback.ino +++ b/examples/LoRaDuplexCallback/LoRaDuplexCallback.ino @@ -14,6 +14,7 @@ */ #include // include libraries #include + const int csPin = 7; // LoRa radio chip select const int resetPin = 6; // LoRa radio reset const int irqPin = 1; // change for your board; must be a hardware interrupt pin @@ -26,12 +27,15 @@ long lastSendTime = 0; // last send time int interval = 2000; // interval between sends void setup() { - while (!Serial); Serial.begin(9600); // initialize serial + while (!Serial); + Serial.println("LoRa Duplex with callback"); + + // override the default CS, reset, and IRQ pins (optional) LoRa.setPins(csPin, resetPin, irqPin);// set CS, reset, IRQ pin - if (!LoRa.begin(915E6)) { // initialize ratio at 915Mhz + if (!LoRa.begin(915E6)) { // initialize ratio at 915 MHz Serial.println("LoRa init failed. Check your connections."); while (true); // if failed, do nothing } @@ -42,14 +46,14 @@ void setup() { } void loop() { - if (millis() - lastSendTime > interval) { - String message = "HeLoRa World!"; // send a message - sendMessage(message); - Serial.println("Sending " + message); - lastSendTime = millis(); // timestamp the message - interval = random(2000) + 1000; // 2-3 seconds - LoRa.receive(); // go back into receive mode - } + if (millis() - lastSendTime > interval) { + String message = "HeLoRa World!"; // send a message + sendMessage(message); + Serial.println("Sending " + message); + lastSendTime = millis(); // timestamp the message + interval = random(2000) + 1000; // 2-3 seconds + LoRa.receive(); // go back into receive mode + } } void sendMessage(String outgoing) { @@ -63,7 +67,6 @@ void sendMessage(String outgoing) { msgCount++; // increment message ID } - void onReceive(int packetSize) { if (packetSize == 0) return; // if there's no packet, return @@ -72,10 +75,13 @@ void onReceive(int packetSize) { byte sender = LoRa.read(); // sender address byte incomingMsgId = LoRa.read(); // incoming msg ID byte incomingLength = LoRa.read(); // incoming msg length + String incoming = ""; // payload of packet + while (LoRa.available()) { // can't use readString() in callback, so incoming += (char)LoRa.read(); // add bytes one by one } + if (incomingLength != incoming.length()) { // check length for error Serial.println("error: message length does not match length"); return; // skip rest of function @@ -88,13 +94,13 @@ void onReceive(int packetSize) { } // if message is for this device, or broadcast, print details: - Serial.println("Received from:" + String(sender, HEX)); - Serial.println("Sent to:" + String(recipient, HEX)); - Serial.println("Message ID:" + String(incomingMsgId)); - Serial.println("Message length:" + String(incomingLength)); - Serial.println("Message:" + incoming); - Serial.println("RSSI:" + String(LoRa.packetRssi())); - Serial.println("Snr:" + String(LoRa.packetSnr())); + Serial.println("Received from: 0x" + String(sender, HEX)); + Serial.println("Sent to: 0x" + String(recipient, HEX)); + Serial.println("Message ID: " + String(incomingMsgId)); + Serial.println("Message length: " + String(incomingLength)); + Serial.println("Message: " + incoming); + Serial.println("RSSI: " + String(LoRa.packetRssi())); + Serial.println("Snr: " + String(LoRa.packetSnr())); Serial.println(); } diff --git a/examples/LoRaSetSpread/LoRaSetSpread.ino b/examples/LoRaSetSpread/LoRaSetSpread.ino index 7a7f0b7..99d0e8d 100644 --- a/examples/LoRaSetSpread/LoRaSetSpread.ino +++ b/examples/LoRaSetSpread/LoRaSetSpread.ino @@ -6,13 +6,13 @@ Spreading factor affects how far apart the radio's transmissions are, across the available bandwidth. Radios with different spreading - factors will not receive each other's transmissions. This is one way you + factors will not receive each other's transmissions. This is one way you can filter out radios you want to ignore, without making an addressing scheme. Spreading factor affects reliability of transmission at high rates, however, so avoid a hugh spreading factor when you're sending continually. - - See the Semtech datasheete, http://www.semtech.com/images/datasheet/sx1276.pdf + + See the Semtech datasheet, http://www.semtech.com/images/datasheet/sx1276.pdf for more on Spreading Factor. created 28 April 2017 @@ -20,6 +20,7 @@ */ #include // include libraries #include + const int csPin = 7; // LoRa radio chip select const int resetPin = 6; // LoRa radio reset const int irqPin = 1; // change for your board; must be a hardware interrupt pin @@ -29,16 +30,20 @@ int interval = 2000; // interval between sends long lastSendTime = 0; // time of last packet send void setup() { - while (!Serial); Serial.begin(9600); // initialize serial - Serial.println("LoRa Duplex"); - LoRa.setPins(csPin, resetPin, irqPin);// set CS, reset, IRQ pin + while (!Serial); - if (!LoRa.begin(915E6)) { // initialize ratio at 915Mhz + Serial.println("LoRa Duplex - Set spreading factor"); + + // override the default CS, reset, and IRQ pins (optional) + LoRa.setPins(csPin, resetPin, irqPin); // set CS, reset, IRQ pin + + if (!LoRa.begin(915E6)) { // initialize ratio at 915 MHz Serial.println("LoRa init failed. Check your connections."); while (true); // if failed, do nothing } - LoRa.setSpreadingFactor(8); // ranges from 6-12,default 7 see API docs + + LoRa.setSpreadingFactor(8); // ranges from 6-12,default 7 see API docs Serial.println("LoRa init succeeded."); } @@ -64,18 +69,19 @@ void sendMessage(String outgoing) { msgCount++; // increment message ID } - void onReceive(int packetSize) { if (packetSize == 0) return; // if there's no packet, return // read packet header bytes: String incoming = ""; + while (LoRa.available()) { incoming += (char)LoRa.read(); } - Serial.println("Message:" + incoming); - Serial.println("RSSI:" + String(LoRa.packetRssi())); - Serial.println("Snr:" + String(LoRa.packetSnr())); + + Serial.println("Message: " + incoming); + Serial.println("RSSI: " + String(LoRa.packetRssi())); + Serial.println("Snr: " + String(LoRa.packetSnr())); Serial.println(); } diff --git a/examples/LoRaSetSyncWord/LoRaSetSyncWord.ino b/examples/LoRaSetSyncWord/LoRaSetSyncWord.ino index be0ea88..69af87d 100644 --- a/examples/LoRaSetSyncWord/LoRaSetSyncWord.ino +++ b/examples/LoRaSetSyncWord/LoRaSetSyncWord.ino @@ -4,8 +4,8 @@ Sends a message every half second, and polls continually for new incoming messages. Sets the LoRa radio's Sync Word. - Spreading factor is basically the radio's network ID. Radios with different - Sync Words will not receive each other's transmissions. This is one way you + Spreading factor is basically the radio's network ID. Radios with different + Sync Words will not receive each other's transmissions. This is one way you can filter out radios you want to ignore, without making an addressing scheme. See the Semtech datasheet, http://www.semtech.com/images/datasheet/sx1276.pdf @@ -25,16 +25,20 @@ int interval = 2000; // interval between sends long lastSendTime = 0; // time of last packet send void setup() { - while (!Serial); Serial.begin(9600); // initialize serial - Serial.println("LoRa Duplex"); + while (!Serial); + + Serial.println("LoRa Duplex - Set sync word"); + + // override the default CS, reset, and IRQ pins (optional) LoRa.setPins(csPin, resetPin, irqPin);// set CS, reset, IRQ pin - if (!LoRa.begin(915E6)) { // initialize ratio at 915Mhz + if (!LoRa.begin(915E6)) { // initialize ratio at 915 MHz Serial.println("LoRa init failed. Check your connections."); while (true); // if failed, do nothing } - LoRa.setSyncWord(F3); // ranges from 0-0xFF, default 0x34, see API docs + + LoRa.setSyncWord(0xF3); // ranges from 0-0xFF, default 0x34, see API docs Serial.println("LoRa init succeeded."); } @@ -60,18 +64,19 @@ void sendMessage(String outgoing) { msgCount++; // increment message ID } - void onReceive(int packetSize) { if (packetSize == 0) return; // if there's no packet, return // read packet header bytes: String incoming = ""; + while (LoRa.available()) { incoming += (char)LoRa.read(); } - Serial.println("Message:" + incoming); - Serial.println("RSSI:" + String(LoRa.packetRssi())); - Serial.println("Snr:" + String(LoRa.packetSnr())); + + Serial.println("Message: " + incoming); + Serial.println("RSSI: " + String(LoRa.packetRssi())); + Serial.println("Snr: " + String(LoRa.packetSnr())); Serial.println(); }