Το LoRaWAN είναι ένα πρωτόκολλο δικτύου ευρείας περιοχής χαμηλής εμβέλειας που επιτρέπει την επικοινωνία συσκευών χαμηλής κατανάλωσης σε μεγάλες αποστάσεις. Έχει σχεδιαστεί για εφαρμογές Internet of Things (IoT), όπως έξυπνες πόλεις, έξυπνα κτίρια και βιομηχανικοί αυτοματισμοί.
Dragino
Το πρόσθετο Dragino για το Arduino είναι μια συσκευή που επιτρέπει σε μια πλακέτα Arduino να επικοινωνεί χρησιμοποιώντας το πρωτόκολλο LoRaWAN. Σε αυτό το άρθρ, θα γνωρίσουμε τις δυνατότητες και τα οφέλη τόσο του LoRaWAN όσο και της ασπίδας Dragino για το Arduino, καθώς και πώς μπορούν να χρησιμοποιηθούν μαζί για τη δημιουργία ισχυρών εφαρμογών IoT.
Χαρακτηριστικά του LoRaWAN
- Μεγάλη εμβέλεια: Το LoRaWAN μπορεί να μεταδώσει δεδομένα σε αποστάσεις έως και 15 km σε αγροτικές περιοχές και 2 km σε αστικές περιοχές.
- Χαμηλή ισχύς: Οι συσκευές LoRaWAN μπορούν να λειτουργούν για χρόνια με μία μπαταρία.
- Υψηλή χωρητικότητα: Το LoRaWAN μπορεί να υποστηρίξει χιλιάδες συσκευές σε ένα μόνο δίκτυο.
- Ασφάλεια: Το LoRaWAN χρησιμοποιεί προηγμένη κρυπτογράφηση για να διασφαλίσει την ασφάλεια της μετάδοσης δεδομένων.
Πλεονεκτήματα του LoRaWAN
- Χαμηλό κόστος: Οι συσκευές LoRaWAN είναι σχετικά φθηνές στην κατασκευή, καθιστώντας τις κατάλληλες για εγκατάσταση μεγάλης κλίμακας.
- Εύκολη ανάπτυξη: Τα δίκτυα LoRaWAN μπορούν να αναπτυχθούν γρήγορα και εύκολα, καθιστώντας τα ιδανικά για προσωρινές ή έκτακτες καταστάσεις.
- Scalable: Τα δίκτυα LoRaWAN μπορούν εύκολα να κλιμακωθούν για να υποστηρίξουν έναν αυξανόμενο αριθμό συσκευών.
Χαρακτηριστικά του Dragino Shield για το Arduino
- Εύκολο στη χρήση: Το Dragino έχει σχεδιαστεί για να είναι εύκολο στη χρήση, με μια απλή διεπαφή που καθιστά εύκολη τη σύνδεση μιας πλακέτας Arduino σε ένα δίκτυο LoRaWAN και μάλιστα με λίγες μόνο εντολές στην πιο βασική του μορφή.
- Συμβατό με μια μεγάλη γκάμα πλακών Arduino: Το Dragino είναι συμβατό με μία μεγάλη γκάμα κατηγοριών Arduino, συμπεριλαμβανομένων των Arduino UNO, Arduino Mega και Arduino Leonardo.
- Χαμηλή ισχύς: Το Dragino έχει σχεδιαστεί για να καταναλώνει ελάχιστη ισχύ, καθιστώντας την κατάλληλη για εφαρμογές που τροφοδοτούνται με μπαταρία.
Τεχνικά χαρακτηριστικά του Dragino Shield
- 168 dB maximum link budget.
- +20 dBm - 100 mW constant RF output vs.
- +14 dBm high efficiency PA.
- Programmable bit rate up to 300 kbps.
- High sensitivity: down to -148 dBm.
- Bullet-proof front end: IIP3 = -12.5 dBm.
- Excellent blocking immunity.
- Low RX current of 10.3 mA, 200 nA register retention.
- Fully integrated synthesizer with a resolution of 61 Hz.
- FSK, GFSK, MSK, GMSK, LoRa™ and OOK modulation.
- Built-in bit synchronizer for clock recovery.
- Preamble detection.
- 127 dB Dynamic Range RSSI.
- Automatic RF Sense and CAD with ultra-fast AFC.
- Packet engine up to 256 bytes with CRC.
- Built-in temperature sensor and low battery indicator.
Πλεονεκτήματα του Dragino Shield για το Arduino
- Χαμηλό κόστος: Το Dragino είναι σχετικά φθηνό, καθιστώντας το προσβάσιμο σε ένα ευρύ φάσμα χρηστών και για πολλές εφαρμογές.
- Εύκολη ενσωμάτωση: Το Dragino μπορεί εύκολα να ενσωματωθεί σε υπάρχοντα έργα Arduino, επιτρέποντας στους χρήστες να προσθέσουν συνδεσιμότητα LoRaWAN με ελάχιστη προσπάθεια.
- Ευέλικτο: Το Dragino μπορεί να χρησιμοποιηθεί για ένα ευρύ φάσμα εφαρμογών IoT, συμπεριλαμβανομένων των έξυπνων πόλεων, των έξυπνων κτιρίων και του βιομηχανικού αυτοματισμού.
Συμπέρασμα
Το LoRaWAN και το Dragino Shield για το Arduino είναι ισχυρά εργαλεία για τη δημιουργία εφαρμογών IoT. Το LoRaWAN παρέχει ένα πρωτόκολλο επικοινωνίας μεγάλης εμβέλειας -έως και μερικά χιλιόμετρα αναλόγως των συνθηκών-, χαμηλής κατανάλωσης και υψηλής χωρητικότητας, ενώ το Dragino για το Arduino διευκολύνει την προσθήκη συνδεσιμότητας LoRaWAN σε έργα Arduino. Μαζί, μπορούν να χρησιμοποιηθούν για τη δημιουργία ισχυρών και οικονομικά αποδοτικών λύσεων IoT για ένα ευρύ φάσμα εφαρμογών.
Σχετικά με την εταιρεία Dragino
Η Dragino Technology είναι κορυφαίος κατασκευαστής υλικού και λογισμικού ανοιχτού κώδικα για το Internet of Things (IoT). Η εταιρεία ιδρύθηκε το 2011 και εδρεύει στο Shenzhen της Κίνας. Η Dragino ειδικεύεται στην ανάπτυξη μονάδων και συσκευών IoT που έχουν σχεδιαστεί για να είναι εύχρηστα, χαμηλού κόστους και εξαιρετικά προσαρμόσιμα. Έχουν ένα ευρύ φάσμα προϊόντων που περιλαμβάνουν πύλες LoRa, τελικές συσκευές LoRaWAN, συσκευές WiFi IoT, συσκευές GSM/GPRS IoT και μια σειρά από ασπίδες IoT για πλακέτες Arduino.
Ένα από τα πιο δημοφιλή προϊόντα τους είναι το Dragino LoRa Gateway, το οποίο είναι μια ασύρματη πύλη μεγάλης εμβέλειας και χαμηλής κατανάλωσης που επιτρέπει την επικοινωνία συσκευών LoRaWAN σε μεγάλες αποστάσεις. Αυτή η πύλη έχει σχεδιαστεί για να είναι εύκολη στη χρήση και μπορεί να ρυθμιστεί χρησιμοποιώντας μια διασύνδεση που βασίζεται στο web. Είναι επίσης συμβατό με ένα ευρύ φάσμα συσκευών LoRaWAN, καθιστώντας το μια ευέλικτη λύση για εφαρμογές IoT.
Ένα άλλο δημοφιλές προϊόν είναι το Dragino LoRa Shield, το οποίο είναι μια συσκευή που επιτρέπει σε μια πλακέτα Arduino να επικοινωνεί χρησιμοποιώντας το πρωτόκολλο LoRaWAN. Αυτή η συσκευή έχει σχεδιαστεί για να είναι εύκολη στη χρήση και είναι συμβατή με μια μεγάλη γκάμα πλακών Arduino, συμπεριλαμβανομένων των Arduino UNO, Arduino Mega και Arduino Leonardo. Έχει επίσης χαμηλή κατανάλωση ενέργειας, καθιστώντας το κατάλληλο για εφαρμογές που τροφοδοτούνται με μπαταρία.
Το Dragino παρέχει επίσης μια σειρά λογισμικού και εργαλείων για να βοηθήσει τους χρήστες να αναπτύξουν και να αναπτύξουν εφαρμογές IoT, όπως μια πλατφόρμα IoT, κιτ ανάπτυξης λογισμικού (SDK) και βιβλιοθήκες. Έχουν επίσης μια ισχυρή και ενεργή κοινότητα προγραμματιστών και χρηστών που μοιράζονται γνώσεις και παρέχουν υποστήριξη για τα προϊόντα τους.
Συνολικά, η Dragino Technology είναι γνωστή για την παροχή οικονομικά αποδοτικών και εύχρηστων προϊόντων και λύσεων IoT, οι οποίες μπορούν εύκολα να ενσωματωθούν σε υπάρχοντα συστήματα για να προσθέσουν δυνατότητες IoT. Η μεγάλη γκάμα προϊόντων τους και η υποστήριξη για υλικό και λογισμικό ανοιχτού κώδικα τα καθιστά δημοφιλή επιλογή για προγραμματιστές και κατασκευαστές στον τομέα του IoT.
Σύνδεση των Dragino με την βοήθεια μίας πύλης Dragino
Για να συνδέσετε δύο Arduinos χρησιμοποιώντας την τεχνολογία Dragino, θα χρειαστεί να χρησιμοποιήσετε ένα Dragino LoRa shield για κάθε Arduino και μια πύλη Dragino LoRa. Το Dragino shield επιτρέπει στο Arduino να επικοινωνεί χρησιμοποιώντας το πρωτόκολλο LoRaWAN και η πύλη LoRa λειτουργεί ως γέφυρα μεταξύ του δικτύου LoRaWAN και του Διαδικτύου.
Ένα παράδειγμα κώδικα που θα επέτρεπε την σύνδεση 2 arduino στα οποία θα είχαμε τοποθετήσει το shield dragino και θα είχαν σύνδεση μέσω της πύλης dragino:
#include <Dragino.h>
const int nodeAddress = 1; // unique address for the node
const int gatewayAddress = 2; // unique address for the gateway
void setup() {
Dragino.begin(); // initialize the Dragino LoRa shield
Dragino.setAddress(nodeAddress); // set the node's address
Dragino.setGatewayAddress(gatewayAddress); // set the gateway's address
Dragino.setFrequency(433); // set the frequency for LoRa communication (in MHz)
}
void loop() {
int sensorValue = analogRead(A0); // read the sensor value
String data = "Sensor value: " + String(sensorValue); // create the data to send
Dragino.send(data); // send the data to the gateway
delay(1000); // wait for a second
}
Στο Arduino που λαμβάνει, ο κωδικός θα ήταν παρόμοιος, αλλά στη λειτουργία βρόχου, αντί να στέλνει δεδομένα αισθητήρα, θα λάμβανε και θα τα επεξεργαζόταν:
#include <Dragino.h>
const int nodeAddress = 2; // unique address for the node
const int gatewayAddress = 1; // unique address for the gateway
void setup() {
Dragino.begin(); // initialize the Dragino LoRa shield
Dragino.setAddress(nodeAddress); // set the node's address
Dragino.setGatewayAddress(gatewayAddress); // set the gateway's address
Dragino.setFrequency(433); // set the frequency for LoRa communication (in MHz)
}
void loop() {
if (Dragino.available()) {
String receivedData = Dragino.receive(); // receive the data from the gateway
Serial.println(receivedData);
}
}
Αυτό είναι ένα απλοποιημένο παράδειγμα και σε εφαρμογές πραγματικού κόσμου, μπορεί να χρειαστεί να προσθέσετε πρόσθετες λειτουργίες, όπως χειρισμό σφαλμάτων, επικύρωση δεδομένων και διευθυνσιοδότηση για να διασφαλίσετε αξιόπιστη και ασφαλή επικοινωνία. Η βιβλιοθήκη Dragino παρέχει όλες τις λειτουργίες που απαιτούνται για την αλληλεπίδραση με την ασπίδα LoRa και είναι καλά τεκμηριωμένη (documented) στον ιστότοπο του Dragino.
Επίσης, είναι σημαντικό να σημειωθεί ότι η πύλη Dragino LoRa θα πρέπει να ρυθμιστεί με την ίδια συχνότητα και διεύθυνση με τις ασπίδες LoRa στο Arduinos και να συνδεθεί στο διαδίκτυο για να αναμεταδώσει τα μηνύματα μεταξύ των κόμβων.
Το Project
Για το project, έχουμε 2 arduino και 2 dragino τα οποία θα συνδέσουμε μεταξύ τους και θα προσπαθήσουμε να στείλουμε τιμές από έναν αισθητήρα θερμοκρασίας από την μία άκρη στην άλλη. Θα χρησιμοποιήσουμε τον αισθητήρα DHT11/DHT22 που έχουμε δείξει στο παρελθόν και σε άλλο βίντεο.
Το συγκεκριμένο project, παρουσιάζει ενδιαφέρον γιατί πραγματοποιεί μετάδοση δεδομένων χωρίς να υπάρχει η ανάγκη κάποιας κάρτας SIM ή σήμα WiFi. Οπότε, αν είστε εντός της εμβέλειας του Dragino, είναι μία ανέξοδη λύση που μπορεί να σας επιτρέπει να κάνετε απομακρυσμένους χειρισμούς ή να λαμβάνετε δεδομένα πχ από το μελισσοκομείο σας ή κάποιο θερμοκήπιο.
Άμεση σύνδεση, χωρίς πύλη
Στην περίπτωση (που είναι και η δική μας περίπτωση) που δεν υπάρχει πύλη, είναι ακόμα δυνατό να δημιουργηθεί μια σύνδεση από σημείο σε σημείο μεταξύ δύο Arduinos χρησιμοποιώντας την ασπίδα Dragino LoRa, αλλά η επικοινωνία θα περιοριστεί στην εμβέλεια των πομποδεκτών LoRa. Ακολουθεί ένα παράδειγμα κώδικα Arduino που δείχνει πώς να δημιουργήσετε μια σύνδεση από σημείο σε σημείο μεταξύ δύο Arduinos χρησιμοποιώντας την ασπίδα Dragino LoRa χωρίς πύλη:
Η μεριά που στέλνει δεδομένα:
#include <RHReliableDatagram.h>
#include <RH_RF95.h>
#include <Adafruit_Sensor.h>
#include <SPI.h>
#include "DHT.h"
#define CLIENT_ADDRESS 1
#define SERVER_ADDRESS 2
#define DHTPIN 3
RH_RF95 driver;
#define DHTTYPE DHT11
// Class to manage message delivery and receipt, using the driver declared above
RHReliableDatagram manager(driver, CLIENT_ADDRESS);
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600);
dht.begin(); // wait dht
while (!Serial) ; // Wait for serial port to be available
if (!manager.init())
Serial.println("init failed");
}
// Dont put this on the stack:
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
void loop()
{
float t = dht.readTemperature();
char str[6];
dtostrf(t,4,2,str);
Serial.println("Sending to rf95_reliable_datagram_server");
// int dataLength= sizeof(sensorData);
//data.toCharArray(total, dataLength);
// Στείλε μήνυμα στην απέναντι μεριά
if (manager.sendtoWait((uint8_t*)str, sizeof(str), SERVER_ADDRESS))
{
// Τώρα, περίμενε για απάντηση
uint8_t len = sizeof(buf);
uint8_t from;
if (manager.recvfromAckTimeout(buf, &len, 2000, &from))
{
Serial.print("Apantisi apo : 0x");
Serial.print(from, HEX);
Serial.print(": ");
Serial.println((char*)buf);
}
else
{
Serial.println("Den exo apantisi. Leitourgei i alli meria;");
}
}
else
Serial.println("Apetixe");
delay(1500);
}
Στο Arduino που λαμβάνει, ο κωδικός θα ήταν παρόμοιος, αλλά στη λειτουργία βρόχου, αντί να στέλνει δεδομένα αισθητήρα, θα λάμβανε και θα τα επεξεργαζόταν. Στη δική μας περίπτωση απλά τα εμφανίζουμε στην οθόνη του υπολογιστή με Serial.Println:
#include <RHReliableDatagram.h>
#include <RH_RF95.h>
#include <SPI.h>
#define CLIENT_ADDRESS 1
#define SERVER_ADDRESS 2
// Singleton instance of the radio driver
RH_RF95 driver;
RHReliableDatagram manager(driver, SERVER_ADDRESS);
void setup()
{
Serial.begin(9600);
while (!Serial) ; // Wait for serial port to be available
if (!manager.init())
Serial.println("init failed");
}
uint8_t data[] = "Elava tin thermokrasia. Euxaristo";
// Dont put this on the stack:
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
void loop()
{
if (manager.available())
{
// Wait for a message addressed to us from the client
uint8_t len = sizeof(buf);
uint8_t from;
if (manager.recvfromAck(buf, &len, &from))
{
Serial.print("elaba dedomena apo : 0x");
Serial.print(from, HEX);
Serial.print(": ");
Serial.println((char*)buf);
// Send a reply back to the originator client
if (!manager.sendtoWait(data, sizeof(data), from))
Serial.println("apetixe");
}
}
}
Για να κατεβάσετε την βιβλιοθήκη που χρησιμοποίησα στο βίντεο, κάντε κλικ εδώ
Είναι σημαντικό να σημειωθεί ότι η το Dragino LoRa έχει περιορισμένη εμβέλεια, συνήθως μερικά χιλιόμετρα, και η εμβέλεια μπορεί να επηρεαστεί από περιβαλλοντικούς παράγοντες όπως κτίρια, δέντρα και μορφολογία εδάφους. Επιπλέον, οι κόμβοι πρέπει να ρυθμιστούν ώστε να χρησιμοποιούν την ίδια συχνότητα για να επικοινωνούν μεταξύ τους και η διεύθυνση προορισμού πρέπει να ταιριάζει μεταξύ του αποστολέα και του παραλήπτη.
Επίσης, χωρίς πύλη, η επικοινωνία περιορίζεται στην εμβέλεια των πομποδεκτών LoRa και δεν είναι δυνατή η πρόσβαση στα δεδομένα από το Διαδίκτυο ή άλλα δίκτυα.