Apa LoRa Shield Arduino?
LoRa Shield Arduino adalah sebuah modul yang bisa mengirimkan data baik berupa data sensor atau data printah antar Arduino dengan radio frekuensi. LoRa Shield ini mampu mengirimkan data antar arduino dengan jarak yang sangat jauh namun dengan konsumi power yang sangat rendah. Beberapa orang yang telah mencoba lora shield kita mampu mengirim data sejauh 1km, 2km namun ada juga yang hanya 500m, tergantung kondisi lapangan, tipe antenna dan ketinggian. Namun menurut datasheet, LoRa ini mampu mengirim data sejauh 10km. (chip LoRa yang di gunakan adalah Sx1276).
Frekuensi LoRa shield ini bisa di adjust dengan program ( firmware ) di arduino ide nya. Freq bisa di adjust antaran 915mhz-920mhz sesuai dengan regulasi pemerintah.
LoRa shield Kita
Disini, kami dari mikroavr.com, membuat sebuah LoRa shield yang support dengan Arduino Uno, Arduino Mega dan juga Arduino Mega128 ( Arduino buatan mikroavr.com). LoRa ini kami design sesederhana mungkin menggunakan software kicad, Teman-teman bisa lihat gambar LoRa desgin di bawah ini.
Konfigurasi pin
Ada pun configurasi pin LoRa shield karya kita ini adalah sebagai berikut.
LoRa Pin | Arduino Pin |
RST | 5 |
CS | 6 |
DIO0 | 3 |
DIO1 | 2 |
DIO2 | 4 |
Contoh Program
Sebelum memprogram Arduino nya, teman-teman tambah dulu library berikut di arduino Ide anda. cukup click link berikut ini.
https://github.com/sandeepmistry/arduino-LoRa
Setelah add ketikkan program sederhana berikut ini,
LoRa Node program
#include <SPI.h> // include libraries #include <LoRa.h> const long frequency = 915E6; // LoRa Frequency const int csPin = 6; // LoRa radio chip select const int resetPin = 5; // LoRa radio reset const int irqPin = 3; // change for your board; must be a hardware interrupt pin void setup() { Serial.begin(9600); // initialize serial while (!Serial); LoRa.setPins(csPin, resetPin, irqPin); if (!LoRa.begin(frequency)) { Serial.println("LoRa init failed. Check your connections."); while (true); // if failed, do nothing } Serial.println("LoRa init succeeded."); Serial.println(); Serial.println("LoRa Simple Node"); Serial.println("Only receive messages from gateways"); Serial.println("Tx: invertIQ disable"); Serial.println("Rx: invertIQ enable"); Serial.println(); LoRa.onReceive(onReceive); LoRa.onTxDone(onTxDone); LoRa_rxMode(); } void loop() { if (runEvery(1000)) { // repeat every 1000 millis String message = "HeLoRa World! "; message += "I'm a Node! "; message += millis(); LoRa_sendMessage(message); // send a message Serial.println("Send Message!"); } } void LoRa_rxMode(){ LoRa.enableInvertIQ(); // active invert I and Q signals LoRa.receive(); // set receive mode } void LoRa_txMode(){ LoRa.idle(); // set standby mode LoRa.disableInvertIQ(); // normal mode } void LoRa_sendMessage(String message) { LoRa_txMode(); // set tx mode LoRa.beginPacket(); // start packet LoRa.print(message); // add payload LoRa.endPacket(true); // finish packet and send it } void onReceive(int packetSize) { String message = ""; while (LoRa.available()) { message += (char)LoRa.read(); } Serial.print("Node Receive: "); Serial.println(message); } void onTxDone() { Serial.println("TxDone"); LoRa_rxMode(); } boolean runEvery(unsigned long interval) { static unsigned long previousMillis = 0; unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; return true; } return false; }
Upload program di atas ke LoRa node, atau Lora yang kita jadi kan sebagai Node, selanjut nya LoRa sebagai gateway
LoRa Gateway Program
#include <SPI.h> // include libraries #include <LoRa.h> const long frequency = 915E6; // LoRa Frequency const int csPin = 6; // LoRa radio chip select const int resetPin = 5; // LoRa radio reset const int irqPin = 3; // change for your board; must be a hardware interrupt pin void setup() { Serial.begin(9600); // initialize serial while (!Serial); LoRa.setPins(csPin, resetPin, irqPin); if (!LoRa.begin(frequency)) { Serial.println("LoRa init failed. Check your connections."); while (true); // if failed, do nothing } Serial.println("LoRa init succeeded."); Serial.println(); Serial.println("LoRa Simple Gateway"); Serial.println("Only receive messages from nodes"); Serial.println("Tx: invertIQ enable"); Serial.println("Rx: invertIQ disable"); Serial.println(); LoRa.onReceive(onReceive); LoRa.onTxDone(onTxDone); LoRa_rxMode(); } void loop() { if (runEvery(5000)) { // repeat every 5000 millis String message = "HeLoRa World! "; message += "I'm a Gateway! "; message += millis(); LoRa_sendMessage(message); // send a message Serial.println("Send Message!"); } } void LoRa_rxMode(){ LoRa.disableInvertIQ(); // normal mode LoRa.receive(); // set receive mode } void LoRa_txMode(){ LoRa.idle(); // set standby mode LoRa.enableInvertIQ(); // active invert I and Q signals } void LoRa_sendMessage(String message) { LoRa_txMode(); // set tx mode LoRa.beginPacket(); // start packet LoRa.print(message); // add payload LoRa.endPacket(true); // finish packet and send it } void onReceive(int packetSize) { String message = ""; while (LoRa.available()) { message += (char)LoRa.read(); } Serial.print("Gateway Receive: "); Serial.println(message); } void onTxDone() { Serial.println("TxDone"); LoRa_rxMode(); } boolean runEvery(unsigned long interval) { static unsigned long previousMillis = 0; unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; return true; } return false; }
Produk LoRa mikroavr
Produk LoRa kami ini di bandrol dengan Harga Rp. 260.000, dengan Harga yang sangat competitive jika di bandingkan dengan LoRa merek lain. Kami sengaja membuat harga yang lebih murah agar kita bisa belajar LoRa dengan lebih mudah, cost yang lebih kecil tapi kualitas yang baik. Jika teman-teman tertarik dengan lora ini, cukup clik tomboh di bawah ini,
Untuk view 3D dari lora ini, bisa di lihat dari gambar di bawah ini
Sekian dulu artikel nya
Thanks