deploying_lorawan
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
deploying_lorawan [2016/12/21 13:58] – [2.2. Kerlink IoT Station] samer | deploying_lorawan [2017/05/01 15:00] – [1.2. Arduino with Dragino Shield] samer | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Deploying an End-to-End LoRaWAN Platform ====== | ====== Deploying an End-to-End LoRaWAN Platform ====== | ||
- | Starting from September 2016, Saint-Joseph University of Beirut (USJ) will be deploying the first academic [[http:// | + | Starting from September 2016, Saint-Joseph University of Beirut (USJ) will be deploying the first academic [[http:// |
- | [{{ : | + | * Devices that communicate to one or more gateways via a wireless interface using single hop LoRa and implementing the LoRaWAN protocol. These devices are physically connected to sensors that generate data. |
+ | * Gateways or base stations that forward frames between | ||
+ | * A LoRAWAN backend that implements the network server functions and provides frame control and security. | ||
+ | * Applications that enable to visualize and store the sensor data obtained from the devices. | ||
- | ===== -. End-nodes | + | [{{ : |
+ | ===== -. Devices | ||
==== -. Autonomo with LoRaBee ==== | ==== -. Autonomo with LoRaBee ==== | ||
+ | Starting with the devices in the LoRaWAN platform, we will use an [[http:// | ||
+ | |||
+ | In order to configure the Autonomo with LoRaBee device, you should follow these steps: | ||
+ | |||
+ | - Verify that you have the latest Arduino IDE from [[https:// | ||
+ | - Install the board files as noted in [[http:// | ||
+ | - Add the following library {{ : | ||
+ | |||
+ | Now you are ready to write a sketch for the device. Here is one example sketch {{ : | ||
+ | |||
+ | In this part, you should put the keys for Over-The-Air Activation (OTAA) as explained in the {{ : | ||
+ | <code c++> | ||
+ | // USE YOUR OWN KEYS! | ||
+ | const uint8_t devEUI[8] = | ||
+ | { }; | ||
+ | |||
+ | // USE YOUR OWN KEYS! | ||
+ | const uint8_t appEUI[8] = | ||
+ | { }; | ||
+ | |||
+ | const uint8_t appKey[16] = | ||
+ | { }; | ||
+ | </ | ||
+ | |||
+ | The pins for connecting the sensors are specified in these declarations (A0 for light sensor, A2 for moisture sensor, and D0 temperature sensor): | ||
+ | <code c++> | ||
+ | int light_pin = A0; | ||
+ | int moisture_pin = A2; | ||
+ | int temperature_pin = 0; | ||
+ | int temperature_vcc_pin = 1; | ||
+ | int moisture_vcc_pin = 8; | ||
+ | int moisture_gnd_pin = 7; | ||
+ | </ | ||
+ | |||
+ | The OTAA method is used for joining the network and Adaptive Data Rate (ADR) is activated: | ||
+ | <code c++> | ||
+ | LoRaBee.initOTA(loraSerial, | ||
+ | </ | ||
+ | |||
+ | Eight different sub channels are activated with data rate ranges from 0 to 5: | ||
+ | <code c++> | ||
+ | LoRaBee.configChFreq(0, | ||
+ | LoRaBee.configChFreq(1, | ||
+ | LoRaBee.configChFreq(2, | ||
+ | LoRaBee.configChFreq(3, | ||
+ | LoRaBee.configChFreq(4, | ||
+ | LoRaBee.configChFreq(5, | ||
+ | LoRaBee.configChFreq(6, | ||
+ | LoRaBee.configChFreq(7, | ||
+ | </ | ||
+ | |||
+ | Finally, the message containing the sensor values is sent in an unconfirmed uplink message: | ||
+ | <code c++> | ||
+ | LoRaBee.send(1, | ||
+ | </ | ||
==== -. Arduino with Dragino Shield ==== | ==== -. Arduino with Dragino Shield ==== | ||
+ | === -. Periodic Message Sending === | ||
+ | |||
+ | Devices in the LoRaWAN platform can also be implemented on Arduino boards with Dragino shields. The combined module as well as the basic configuration steps are presented in [[simple_lora_prototype|Simple Prototype of LoRa Communications]]. Similarly to the Autonomo device, you can download the following sketch {{ : | ||
+ | |||
+ | The pin mapping corresponds to the Dragino electronic schematic: | ||
+ | <code c++> | ||
+ | const lmic_pinmap lmic_pins = { | ||
+ | .nss = 10, | ||
+ | .rxtx = LMIC_UNUSED_PIN, | ||
+ | .rst = 9, | ||
+ | .dio = {2, 6, 7}, | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | The send function is rescheduled TX_INTERVAL seconds after each transmission complete event: | ||
+ | <code c++> | ||
+ | case EV_TXCOMPLETE: | ||
+ | Serial.println(F(" | ||
+ | if(LMIC.dataLen) { | ||
+ | // data received in rx slot after tx | ||
+ | Serial.print(F(" | ||
+ | Serial.write(LMIC.frame+LMIC.dataBeg, | ||
+ | Serial.println(); | ||
+ | } | ||
+ | // Schedule next transmission | ||
+ | os_setTimedCallback(& | ||
+ | break; | ||
+ | </ | ||
+ | |||
+ | The send function is initially scheduled here: | ||
+ | <code c++> | ||
+ | do_send(& | ||
+ | </ | ||
+ | |||
+ | The message containing the sensor values is transmitted on one of the radio channels (as in the Autonomo case): | ||
+ | <code c++> | ||
+ | LMIC_setTxData2(1, | ||
+ | </ | ||
+ | |||
+ | The adaptive data rate is not supported, and the spreading factor is configured as follows: | ||
+ | <code c++> | ||
+ | LMIC_setDrTxpow(DR_SF7, | ||
+ | </ | ||
+ | |||
+ | === -. Triggered Message Sending === | ||
+ | You can also find another example of sketch to download: {{ : | ||
===== -. Gateways ===== | ===== -. Gateways ===== | ||
==== -. Single Channel Gateway ==== | ==== -. Single Channel Gateway ==== | ||
- | The single channel gateway includes a LoRa transmission module (Dragino Shield) connected to a Raspberry Pi (2 or 3). Communication is done over an SPI interface. | + | The single channel gateway includes a LoRa transmission module (Dragino Shield) connected to a Raspberry Pi (2 or 3) as shown in Figure 1. Communication |
- | Start by making the correction connection between the modules: the connection pins are identified in Figures 2 and 3. | + | [{{ : |
+ | |||
+ | In order to assemble the gateway, start by making the wire connections: the connection pins are identified in Figures 2 and 3. | ||
[{{ : | [{{ : | ||
[{{ : | [{{ : | ||
- | Now you can connect | + | Connect |
* Enable SPI on the Raspberry Pi using raspi-config | * Enable SPI on the Raspberry Pi using raspi-config | ||
* Download and unzip the source code: | * Download and unzip the source code: | ||
Line 35: | Line 142: | ||
</ | </ | ||
- | * Compile | + | Compile the packet forwarder: |
<code bash> | <code bash> | ||
- | gcc version 4.6.3 | + | make all |
- | unrecognized command line option ' | + | </ |
+ | |||
+ | For gcc version 4.6.3, a compilation error results in the following warning '' | ||
+ | < | ||
CFLAGS = -std=c++0x -c -Wall -I include/ | CFLAGS = -std=c++0x -c -Wall -I include/ | ||
+ | </ | ||
+ | |||
+ | Now, you need to configure the single channel packet forwarder. This is done in the {{ : | ||
+ | |||
+ | Finally, you can run the packet forwarder as root! | ||
+ | |||
+ | <code bash> | ||
+ | nohup ./ | ||
</ | </ | ||
==== -. Kerlink IoT Station ==== | ==== -. Kerlink IoT Station ==== |
deploying_lorawan.txt · Last modified: 2021/08/28 09:50 by samer