Breaking news: Telkom akan melakukan migrasi LoRaWan ke Telkomiot.id, Silahkan baca disini
Setelah beberapa tahun yang lalu blog ini berhasil mengoprek "LoRaWan" milik Telkom-Antares, ternyata nasib library loraid atau lorawan antares kelihatannya tidak di maintenance lagi. Walaupun tahun 2023 ada update di website nya antares tapi ini khusus untuk hardware yang di desain dan bekerjasama dengan antares langsung. Saya menjadi sedikit khawatir satu hari sinyal lorawan di telkom antares menghilang atau berpindah pemilik seperti terkejutnya saya melihat platform iot telkomiot (telkomiot.id) yang tiba-tiba hadir kembali namun masih gagal konek.
Beberapa mahasiswa masih rajin menghubungi saya untuk bertanya hal library ini, namun tetap saya sarankan mengikuti teknik saya menggunakan library yang walau belum lengkap (menurut penyusunnya) namun terbukti bisa mengirim data, seperti yang dilihat pada tulisan saya sebelumnya disini.
Mikrokontroler yang saya gunakan dulu adalah arduino, dan sudah berhasil mengirim data secara benar secara radio LoRaWan lanjut masuk ke platform antares. Masalahnya ada pembaca yang gagal kirim ketika menggunakan mikrokontroller modern ESP32 semacam TTGO yang sekarang makin terjangkau. "LoRa Init Failed" begitu katanya ! Yahh kalau ini pasti ada hubugannya dengan error di koneksi SPI.
Kebetulan saja saya ada project yang menggunakan TTGO dan benar saja koding saya terdahulu tidak jalan di TTGO, analisa saya karena ESP32 memiliki 2 buah port SPI, sehingga untuk SPI.begin() nya harus dilakukan penulisan port MISO, MOSI, SCK dan CS. Dan langsung saja saya kreasikan beserta display Oled nya TTGO yang walau kurang berguna (karena boros daya) namun untuk sekelas proyekan atu tugas kampus bisa memperindah tampilan.
Modul TTGO LoRa adalah perangkat yang dirancang untuk memfasilitasi pengembangan aplikasi IoT dengan kemampuan komunikasi jarak jauh yang andal dan konsumsi daya rendah. Berikut ini adalah fasilitas utama yang ditawarkan oleh modul TTGO LoRa serta informasi mengenai frekuensi kerjanya.
Fasilitas Modul TTGO LoRa
- Mikrokontroler ESP32: Modul ini dilengkapi dengan mikrokontroler ESP32 yang memiliki dual-core CPU, Wi-Fi, dan Bluetooth. ESP32 adalah salah satu mikrokontroler yang paling populer di kalangan pengembang karena kemampuannya yang serbaguna dan efisiensi daya.
- Chip LoRa SX1276/78: Chip LoRa ini memungkinkan komunikasi jarak jauh dengan konsumsi daya yang rendah. Chip ini terkenal karena kinerjanya yang stabil dan jangkauan yang luas.
- Antena LoRa: Modul ini dilengkapi dengan antena LoRa eksternal yang meningkatkan kualitas sinyal dan jangkauan komunikasi.
- Layar OLED: Banyak varian TTGO LoRa dilengkapi dengan layar OLED kecil (biasanya 0.96 inci) yang dapat digunakan untuk menampilkan informasi seperti status koneksi, data sensor, atau informasi lainnya.
- Port USB: Modul ini memiliki port USB untuk kemudahan pemrograman dan daya, memungkinkan pengembang untuk dengan mudah mengunggah kode dan menguji perangkat mereka.
- Slot Kartu SD: Beberapa varian TTGO LoRa memiliki slot kartu SD untuk penyimpanan data tambahan, memudahkan penyimpanan log data dalam aplikasi yang memerlukan pencatatan jangka panjang.
- GPIO dan Pin I/O Analog: Modul ini menyediakan beberapa General Purpose Input/Output (GPIO) dan pin input/output analog yang dapat digunakan untuk menghubungkan berbagai sensor dan aktuator.
- Dukungan Perangkat Lunak: TTGO LoRa kompatibel dengan Arduino IDE, PlatformIO, dan berbagai alat pengembangan lainnya. Hal ini memudahkan pengembang untuk memulai dan membuat prototipe proyek IoT mereka.
Frekuensi Kerja Modul TTGO LoRa
Modul TTGO LoRa bekerja pada beberapa frekuensi yang disesuaikan dengan peraturan komunikasi di berbagai wilayah. Frekuensi utama yang digunakan adalah:
- 433 MHz: Frekuensi ini sering digunakan di wilayah Eropa dan Asia.
- 868 MHz: Digunakan terutama di Eropa, frekuensi ini sesuai dengan regulasi ISM (Industrial, Scientific, and Medical).
- 915 MHz: Frekuensi ini umum digunakan di Amerika Utara dan Australia.
- 923 MHZ : Indonesia menggunakand Band Plan AS_923_2
Pemilihan frekuensi yang tepat tergantung pada wilayah penggunaan dan regulasi lokal. Modul TTGO LoRa yang berbeda dapat disesuaikan dengan frekuensi yang sesuai dengan kebutuhan proyek dan kepatuhan regulasi.
Konfigurasi PIN seperti berikut :
#define SCK 5
#define MISO 19
#define MOSI 27
#define SS 18
#define RST 14
#define DIO0 26
//OLED pins
#define OLED_SDA 4
#define OLED_SCL 15
#define OLED_RST 16
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Hasilnya ketika saya mendekati BTS lorawan, maklum di depan rumah sejak setahun lalu ada bangunan tinggi yang menghalangi pengiriman, seperti berikut ini :
Saya bagi script sederhana untuk pengiriman LoRaWan pada TTGO-ESP32 yang bisa membantu kamu belajar. Sebaiknya baca-baca dulu pembahasan LoRaWan sebelumnya agar bisa paham library yang saya pake.
/*
LoRaWan - Antares - ESP32(TTGO)
by www.aisi555.com
2024
*/
//Libraries for LoRa
#include <SPI.h>
#include <LoRa.h>
#include <LoRaWanPacket.h>
//Libraries for OLED Display
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//Gunakan pin ini untuk TTGO, sesuaikan jika berbeda
#define SCK 5
#define MISO 19
#define MOSI 27
#define SS 18
#define RST 14
#define DIO0 26
//OLED pins
#define OLED_SDA 4
#define OLED_SCL 15
#define OLED_RST 16
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RST);
//Sesuaikan dev address dan key device LoRa
const char *devAddr = "aaaaaaaa";
const char *nwkSKey = "bbbbbbbbbbbbbbbb0000000000000000";
const char *appSKey = "0000000000000000cccccccccccccccc";
struct LoRa_config
{
long Frequency;
int SpreadingFactor;
long SignalBandwidth;
int CodingRate4;
bool enableCrc;
bool invertIQ;
int SyncWord;
int PreambleLength;
};
//Scanning frekuensi satu persatu di BAND AS_923_2
long LoRa_frek_INA_923_start = 921200000 ;
long LoRa_frek_INA_923_end = 922600000 ;
long LoRa_frek_step = 200000;
long LoRa_frek_INA_923 = LoRa_frek_INA_923_start;
static LoRa_config txLoRa = {LoRa_frek_INA_923, 12, 125000, 5, true, false, 0x34, 8};
void LoRa_setConfig(struct LoRa_config config)
{
LoRa.setFrequency(LoRa_frek_INA_923);
LoRa.setSpreadingFactor(config.SpreadingFactor);
LoRa.setSignalBandwidth(config.SignalBandwidth);
LoRa.setCodingRate4(config.CodingRate4);
if (config.enableCrc)
LoRa.enableCrc();
else
LoRa.disableCrc();
if (config.invertIQ)
LoRa.enableInvertIQ();
else
LoRa.disableInvertIQ();
LoRa.setSyncWord(config.SyncWord);
LoRa.setPreambleLength(config.PreambleLength);
LoRa.setTxPower(20); //max power ubah jika ingin irit
}
void LoRa_TxMode()
{
LoRa_setConfig(txLoRa);
LoRa.idle();
}
void setup() {
//initialize Serial Monitor
Serial.begin(9600);
//reset OLED display via software
pinMode(OLED_RST, OUTPUT);
digitalWrite(OLED_RST, LOW);
delay(20);
digitalWrite(OLED_RST, HIGH);
//initialize OLED
Wire.begin(OLED_SDA, OLED_SCL);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) { // Address 0x3C for 128x32
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0,0);
display.print("LORAWAN AISI555");
display.display();
Serial.println("LoRaWan Antares Test");
LoRaWanPacket.personalize(devAddr, nwkSKey, appSKey);
//SPI LoRa pins
SPI.begin(SCK, MISO, MOSI, SS);
//setup LoRa transceiver module
LoRa.setPins(SS, RST, DIO0);
if (!LoRa.begin(txLoRa.Frequency)) {
Serial.println("LoRa Gagal. Cek perkabelan kamu...");
while (true);
}
Serial.println("LoRa init berhasil.");
Serial.println();
display.setCursor(0,10);
display.println("LoRa Initializing OK!");
display.display();
}
void loop() {
if (runEvery(5000)) { // ganti interval kirim lorawan
Serial.print("Send Message! frek = ");
Serial.println(LoRa_frek_INA_923);
LoRa_sendMessage();
display.clearDisplay();
display.setCursor(0,0);
display.print("KIRIM LORAWAN AIS555");
display.setCursor(0,20);
display.print("frekuensi: ");
float freku = LoRa_frek_INA_923/1000000.0;
display.print(freku , 1);
display.print(" MHz ");
display.display();
if( LoRa_frek_INA_923 >= LoRa_frek_INA_923_end ) LoRa_frek_INA_923 = LoRa_frek_INA_923_start;
else LoRa_frek_INA_923 += LoRa_frek_step;
}
}
void LoRa_sendMessage()
{
LoRa_TxMode();
LoRaWanPacket.clear();
LoRaWanPacket.print("coba kirim frek : ");
LoRaWanPacket.print(String(LoRa_frek_INA_923));
if (LoRaWanPacket.encode())
{
LoRa.beginPacket();
LoRa.write(LoRaWanPacket.buffer(), LoRaWanPacket.length());
LoRa.endPacket();
}
}
boolean runEvery(unsigned long interval)
{
static unsigned long previousMillis = 0;
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
return true;
}
return false;
}
0 komentar:
Posting Komentar