Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Ayo Migrasi TV Digital

    Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

Selasa, 04 Juni 2024

Magang Industri Unesa 2024 - Topik : LoRa & LoRaWan

 


Kegiatan magang industri kali ke-3 bersama mahasiswa prodi teknik listrik fakultas vokasi Universitas Negeri Surabaya baru saja menyelesaikan presentasi dan pemaparan tugas akhir. Magang ini berlangsung dari februari 2024 s/d mei 2024 dan mengambil topik komunikasi LoRa dan LoRaWan. Masih berpola magang secara mandiri, disini perusahaan saya men-simulasikan sebuah proyek ke masing-masing peserta yang berjumlah 4 orang. 

Kali ini saya akan membagi apa saja hasil dari project yang saya berikan yang mungkin berguna bagi pembaca, terutama mahasiswa yang mungkin masih kebingungan mencari ide untuk praktek kerja atau tugas akhir.


- M. Erfin Pratama Setyawan : Antena LoRa 433 Mhz



Tugas yang dikerjakan adalah merancang antena Lora 433 Mhz  dengan 3 type antena yaitu :

  • Stick antenna
  • Dipole Antena
  • Yagi Antena

Pada dasarnya antena yang dirancang harus mengikuti kaedah-kaedah dan hitungan fisika dari propagasi gelombang radio dan ini mungkin agak melenceng dari jurusan kuliah peserta magang. Namun  ini tidak menjadi masalah, sebab satu hal yang sangat vital dalam pengiriman Long Range adalah antena yang MATCH ! Sehingga daya pancar dari modul semtech SX1278 yang hanya 100 miliwatt  dapat memancar dengan efisien dan kemudian diterima sinyalnya dengan baik pula disisi penerima.

Dan benar saja hasil dari tugas akhir mas erfin dapat mengirim LoRa dari 2 ujung jembatan suramadu menggunakan antena yagi modifikasi antena TV. Jaraknya cukup mencengangkan yaitu 5 km lebih. Begitu juga berhasil mengirimkan sinyal antara 2 gedung kampus Unesa ketintang vs Unesa lidah dengan jarak 6.5 km.



Video presentasi selengkapnya dapat dilihat disini :




- Yoko Hermanto : IOT Gateway untuk pertanian

 



Salah satu kegunaan komunikasi lora adalah untuk membantu bidang pertanian, dimana umumnya lahan pertanian berada pada lokasi di pedesaan. Lokasi yang kemungkinan besar akan kesulitan dijangkau sinyal GSM maupun wifi menginspirasi yoko untuk membuat sebuah IOT gateway yang akan menerima data suhu dan kelembaban tanah di sebuah lokasi pertanian.

Simulasi dilakukan dengan membaca kondisi tanah di sebuah pot yang terdapat tanaman sri rejeki (aglonema). Secara konsep IOT pada edge node computing , seharusnya microcontroller esp32 yang digunakan sudah mampu untuk melakukan pengukuran sensor kelembaban tanah secara mandiri dan melakukan otomasi penyiraman air ke dalam pot. 



IOT gateway nya akan menerima data dari komunikasi point yo point LoRa  dan kemudian mengirimkannya melalui protokol MQTT menuju aplikasi di sisi internet lainnya seperti MQTT Explorer. Video selengkapnya bisa dilihat disini:




- Satria Ego Varia : Monitoring & Kontrol Listrik Jarak Jauh Dengan LoRa - Whatsapp 



Kalau ini saya lumayan kagum dengan kemampuan koding peserta magang ini. Jadi saya persingkat saja, alat yang dibuat adalah kontrol relay serta monitoring beban listrik ac (sensor pzem) yang kemudian dikirimkan menggunakan esp32 dan komunikasi P2P antar modul LoRa, dimana mikrokontroler di salah satu sisi bertindak sebagai IOT gateway. Ajaibnya ujung dari sistem IOT adalah pelaporan serta kontrol kelistrikan menggunakan whatsapp. Canggih bukan ? Yuk kita simak saja videonya :




- Ajudan Laksamana : Drive Test Coverage Lorawan di Surabaya -Sidoarjo



Saya lumayan gembira bercampur sedih dengan tugas akhir magang yg dipegang judan ini, karena sebenarnya modul GPS yang saya pinjamkan  ini merupakan modul jadul yg dulu saya persiapkan untuk kawan yang memberi project IOT pertama saya. Masih ingat tulisan saya disini ? Ujung nya proyek ini gagal karena sang pemberi proyek direnggut covid 19.

Tugas yang saya berikan juga kelanjutan dari perkenalan pertama saya menggunakan LoRaWan Telkom Antares (baca disini)  dimana alat yang digunakan masih yang dulu itu, hasil solderan saya sendiri, dan kini hanya ditambahakan modul GPS ke port RX nya. Walau judan kemudian agak terhalang karena sakit, dia berhasil melakukan drive test yang cukup menggambarkan betapa buruknya coverage LoRaWan telkom di Surabaya-Sidoarjo.




Ada yang tertarik magang di saya lagi? Eittt episode selanjutnya bertemakan "Image Processing" dan "Artificial Inteligent" lhooo... Berani ?

Share:

Senin, 27 Mei 2024

LoRaWan Antares - Menampilkan Grafik di Aplikasi Android IOT MQTT PANEL

 



Kesulitan mendasar kembali ditemukan saat menggunakan LoRaWan telkom ber platform Antares, padahal ini merupakan ujung "raja terakhir" dari setiap kali bermain IOT. Bagian ini adalah membuat tampilan menarik dari hanya sekedar teks uplink dari console antares, namun beberapa kali saya menemukan anak-anak mahasiswa kesulitan juga dibagian awal. Jadi library yang saya gunakan mungkin satu-satunya solusi yang berhasil mengirimkan LoRaWan ke antares (Guaya puoooll). Heheheh... baca dulu deh disini ya...



Lalu ada lagi sambungan setelah mereka (pembaca blog) saya ajari kirim-kiriman, ehhh pengolahan datanya menjadi grafik belum bisa, jadi nanggung banget ! Kalau dilihat dari fasilitas chart di antares pada menu widget...yakkk ampunnn..coba deh lihat..



Belum dapat dinamakan grafik kalau seperti ini, karena data lorawan yang masuk belum sama sekali diparsing. Kesusahan kali ya membuat json parser data seperti ini di php ? Ingat dulu pembahasan saya disini ? baca dulu deh.. 

Akses data antares yang di subscribe via MQTT selalu ada pada 1 topic :  /oneM2M/resp/antares-cse/access:key/json  

Uplink perangkat LoRaWan akan menghasilkan output mqtt seperti berikut ini :


{
   "m2m:rsp" : {
      "rsc" : 2001,
      "rqi" : "123456",
      "pc" : {
         "m2m:cin" : {
            "rn" : "cin_tuYp3j-bTIy5fUm4",
            "ty" : 4,
            "ri" : "/antares-cse/cin-tuYp3j-bTIy5fUm4",
            "pi" : "/antares-cse/cnt-661860573",
            "ct" : "20240527T095651",
            "lt" : "20240527T095651",
            "st" : 0,
            "cnf" : "message",
            "cs" : 296,
            "con" : "{\"type\": \"uplink\",\"port\": 1,\"data\": { \"suhu\": 27.81,\"humi\": 75},\"counter\": 2,\"devEui\": \"4fd4a31429711655\",\"radio\": {\"gps_time\": 1400813829,\"hardware\": {\"snr\": -17.6,\"rssi\": -116},\"datarate\": 0,\"modulation\": {\"bandwidth\": 125000,\"spreading\": 12},\"delay\": 0.060113125618098,\"freq\": 922,\"size\": 40}}"
         }
      },
      "to" : "",
      "fr" : "/antares-cse"
   }
}

Data yang berguna ada di "con" sehingga harus parsing json dulu ...nah dari pada bingung, kita belajar dulu menerima data yg masuk dari LoRaWan menggunakan python sebagai penerima MQTT nya. Jangan lupa untuk menginstall library Paho-Mqtt, dimana kalau menggunakan google colab bisa install versi 1.6.0 saja yang lebih sederhana. Script ini secara realtime akan menerima data masuk jika LoRaWan menerima uplink dari device.


!pip install paho-mqtt==1.6.0



from paho.mqtt import client as mqtt_client
import time
from time import sleep
from random import randrange


# Inisialisasi broker antares
broker_address="mqtt.antares.id"
broker_port=1883

#sesuaikan dengan acces key antares kamu
antareskey= "access:key"
antaresdevice = "aplikasi/device"

#topik subscribe hanya 1 saja untuk tiap akun
topicsubantares = f'/oneM2M/resp/antares-cse/{antareskey}/json'


def connect_mqtt() -> mqtt_client:
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client= mqtt.Client(f'aisi555-client-{randrange(0,1000)}') 
    client.on_connect = on_connect
    client.connect(broker_address, broker_port)
    return client


def subscribe(client: mqtt_client):
    def on_message(client, userdata, msg):
        print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")

    client.subscribe(topicsubantares)
    client.on_message = on_message


def run():
    client = connect_mqtt()
    subscribe(client)
    client.loop_forever()


if __name__ == '__main__':
    run()


Hasil dari script diatas akan menampilkan semua data yang masuk, memang ini kekurangan oneM2M dimana tidak melayani sub mqtt per device. Hasilnya kita harus parsing per device di "pi:" lalu di bandingkan dengan device yang sedang kita olah datanya.



Sekalian saja saya kemudian akan parsing "con" dan mengambil beberapa data seperti suhu, humi, snr dan rssi. Scriptnya seperti ini :


from paho.mqtt import client as mqtt_client
import time
from time import sleep
from random import randrange
import json


# Inisialisasi broker
broker_address="mqtt.antares.id"
broker_port=1883

antareskey= "access:key"
antaresdevice = "/antares-cse/device-uri" 

topicsubantares = f'/oneM2M/resp/antares-cse/{antareskey}/json'


def connect_mqtt() -> mqtt_client:
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client= mqtt.Client(f'aisi555-client-{randrange(0,1000)}') 
    client.on_connect = on_connect
    client.connect(broker_address, broker_port)
    return client


def subscribe(client: mqtt_client):
    def on_message(client, userdata, msg):
        #print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
        olah_data(msg.payload.decode())
    client.subscribe(topicsubantares)
    client.on_message = on_message

def olah_data(datanya):
  # Parsing json
  data = json.loads(datanya)
  penerima = data["m2m:rsp"]["pc"]["m2m:cin"]["pi"] 
  # ambil con untuk data
  con_json_str = data["m2m:rsp"]["pc"]["m2m:cin"]["con"]  
  # Parse the JSON string inside "con"
  con_data = json.loads(con_json_str)
  
  print(f"Terima dari device : {penerima}")
  print("Suhu:", con_data["data"]["suhu"], " Celcius")
  print("kelembaban:", con_data["data"]["humi"], " %")
  print("Radio SNR:", con_data["radio"]["hardware"]["snr"])
  print("Radio RSSI:", con_data["radio"]["hardware"]["rssi"]) 


def run():
    client = connect_mqtt()
    subscribe(client)
    client.loop_forever()


if __name__ == '__main__':
    run()
	


Tapi masih belum juga bisa menampilkan grafik ke IOT MQTT PANEL seperti yang sering saya bahas setiap membuat proyek IOT disini.  Untuk itu saya membuat bridge untuk menjembatani MQTT diantara antares dan aplikasi melalui broker mqtt gratisan HIVEMQ. Wahh benar-benar script python saya berfungsu jadi bridge ini, dimana saya melakukan koneksi ke 2 buah broker, antares saya sub dan hivemq saya pub.  Saya kutipkan beberapa  potongan penting:




def olah_data(datanya):
  # Parsing json
  data = json.loads(datanya)
  penerima = data["m2m:rsp"]["pc"]["m2m:cin"]["pi"] 
  # ambil con untuk data
  con_json_str = data["m2m:rsp"]["pc"]["m2m:cin"]["con"]  
  # Parse the JSON string inside "con"
  con_data = json.loads(con_json_str)
  
 
  if(penerima == antaresdevice):
    print(f"Terima dari device : {penerima}")
    print("Suhu:", con_data["data"]["suhu"], " Celcius")
    print("Kelembaban:", con_data["data"]["humi"], " %")
    print("Radio SNR:", con_data["radio"]["hardware"]["snr"])
    print("Radio RSSI:", con_data["radio"]["hardware"]["snr"]) 
    print("Kirim ke HiveMQ !")
    hivemq.publish("/aisi555/suhu", con_data["data"]["suhu"])
    hivemq.publish("/aisi555/humi", con_data["data"]["humi"])
    hivemq.publish("/aisi555/snr", con_data["radio"]["hardware"]["snr"])
    hivemq.publish("/aisi555/rssi", con_data["radio"]["hardware"]["snr"])


def run():
    #konek ke antares
    client = connect_mqtt()
    #konek ke Hivemq
	global hivemq
    hivemq = connect_hivemq()
    #subscribe ke antares
	subscribe(client)
    client.loop_forever()


Hasilnya seperti ini, langsung bisa dari Sensor ==> LoRaWan Antares ==> google colab ==> grafik apk IOT MQTT PANEL (gambar paling atas) secara real time. Script saya potong dan seperti biasa kontak saya jika berminat belajar lebih dalam lagi. 








Share:

Minggu, 19 Mei 2024

LoRaWan TTGO - ESP32 - Telkom Antares

 



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;
}
   
Share:

Kamis, 09 Mei 2024

[AI] Gateway IOT Melalui Radio - ESP8266 - HT - RTL/SDR - PYTHON - MQTT

 


Saya sampai kebingungan dibuatnya, sebaiknya saya meng-kategori-kan tulisan kali ini dibagian mana ya? Nyenggol banyak topik sih.. Makanya judulnya jadi sedikit kepanjangan. 

Gini...pada intinya kebahagiaan saya tak terkira ketika berhasil mengirimkan data sensor suhu LM35 yang saya baca dengan menggunakan ESP 8266 dan kemudian saya kirimkan menggunakan Walkie Talkie. Dibagian Penerima akan saya terjemahkan data audio tadi dengan menggunakan layanan google speech dan sedikit bantuan ChatGpt untuk meng-koding python, VOILA... Jadi deh seperti gambar diatas.


- PYTHON SPEECH RECOGNITION

Bagian yang paling 'sakti' ini menggunakan python sebagai penterjemah suara manusia menjadi text, layaknya subtitle otomatis pada youtube. Dengan layanan google yang masih 'free' ini dan berbagai bahasa di dunia dapat dilayani termasuk bahasa Indonesia. Salah satu contoh coding sederhana untuk menterjemahkan suara microphone ke teks, saya bagikan seperti berikut ini :


import speech_recognition as sr
import threading
import sys
import keyboard

# Flag to indicate if escape key is pressed
escape_pressed = False

def check_escape():
    global escape_pressed
    print("Press Escape key to quit recognition...")
    keyboard.wait('esc')
    escape_pressed = True

def recognize_speech():
    global escape_pressed
    # Initialize recognizer
    recognizer = sr.Recognizer()

    # Start a separate thread to check for Escape key press
    escape_thread = threading.Thread(target=check_escape)
    escape_thread.start()

    while not escape_pressed:
        # Capture microphone input
        with sr.Microphone() as source:
            print("Listening for speech...")
            recognizer.adjust_for_ambient_noise(source)  # Adjust for ambient noise
            audio = recognizer.listen(source)

        try:
            print("Recognizing...")
            # Recognize speech using Google Speech Recognition bahasa Indonesia 
            text = recognizer.recognize_google(audio, language='id-ID')
            print("You said:", text)
        except sr.UnknownValueError:
            print("Sorry, I couldn't understand what you said.")
        except sr.RequestError as e:
            print("Could not request results from Google Speech Recognition service; {0}".format(e))

    print("Exiting...")
    sys.exit()

if __name__ == "__main__":
    recognize_speech()
Gunakan mic pada laptop atau PC kalian untuk mencobanya dan IT'S MAGIC ! Jangan lupa layanan ini memerlukan koneksi internet ke server speech recognition dari google.


- ESP8266 SENSOR READER & PTT SENDER




Untuk pembahasan di bagian ini anda dapat membaca tulisan saya sebelumnya disini : 




- RTL SDR dan VB AUDIO



Kalau ini sih beberapa tulisan kebelakang terutama april 2024, banyak sekali membahas tentang RTL-SDR dengan dongle usb murah meriah (tidak menyesal saya membelinya). Dengan merouting audionya melalui VB AUDIO menjadikan output suara SDR# menjadi  input MIC, maka software python - speech recognition dapat menterjemahkan audio menjadi teks yang berguna. 

Jika tidak menggunakan rtl-sdr bagaimana? Ya gunakan HT penerima dan dekatkan mic pc ke speaker HT atau ambil speaker out dari jack female yg tersedia ke line input PC.


- MQTT dan IOT MQTT PANEL


Barang ini sudah sampai bosen mungkin ya dibahas disini, kalau gak keberatan masuk aja ke tulisan pertama saya mengenai protokol IOT paling laris yaitu MQTT ( baca disini ). Jadi terasa mudah sekali jika terbiasa dan mengenal luar dalam protokol ini, apalagi ketika dimudahkan dengan library python Paho-mqtt (baca disini), sehingga dengan bantuan broker gratis dari Hivemq maka data suhu dapat dikirimkan ke smartphone menggunakan apk android : IOT MQTT PANEL. Jadi deh gateway IOT nya dan dapat dimanfaatkan untuk monitoring berbagai macam data dari lokasi yang lumayan jauh selama pesawat radio HT dapat menjangkaunya.




- KALAU SUARA HT ORANG LAIN IKUTAN MASUK DAN ADA YANG NGUPING ?


Untuk hal ini terdapat beberapa norma atau etika pada komunitas radio amatir seluruh dunia, dimana yang dikirimkan perangkat radio amatir adalah suara/data yang "clear" tanpa enkripsi. Wong jalur frekuensi bersama kok sembunyi-sembunyi? Jadi bisa juga data nya di olah menjadi digital seperti RATTLEGRAM di video saya dibawah ini, namun bagaimana dengan monitoring yang dilakukan oleh semisal satpam yang hanya berbekal Hotel Tango dengan Buntut Tikus ?






- JARINGAN GSM DAN WIFI SUDAH BANYAK, NGAPAIN PAKE RADIO HT LAGI ?






Kalau ditanya seperti ini, sederhana saja kok,  kenapa juga radio HT / ORARI / RAPI/ SATPAM/ POLISI dll masih banyak instansi yang menggunakannya ? Dibalik seperti itu saja pertanyaannya maka akan ada kesan 'unda-undi'  (bahasa jawa : untung-rugi) mengenai pengiriman data via radio HT. Bagaimana jika ingin mengetahui debit air di bendungan yang berada jauh di hilir sungai dan blankspot sinyal gsm ? Radio HT solusinya broo.. LORA ? coba deh loranya dibawa ke hutan pasti 100 meter penerimaan sudah megap-megap terserap pepohonan. Starlink ?  Hanya kelas juragan tambang kali yang mampu..


- HASIL dan KESIMPULAN

Video berikut ini menjawab semuanya dan jika berminat untuk mengembangkannya silahkan kontak saya di 08155737755 .






- DISCLAIMER :

"Penggunaan frekuensi radio amatir merupakan domain dari #Kemkominfo, #ORARI dan #RAPI. Jangan sekali-kali menggunakan frekuensi amatir untuk tujuan lain sebagai #Amatir Radio yang tunduk pada aturan-aturan baku yang mengikat. Jika perangkat kamu akan memancarkan pembacaan data, silahkan berkomunikasi lanjut dengan pengelola lokal orari setempat agar tidak terjadi masalah dikemudian hari. Tulisan ini hanya sebagai pembuktian teknologi radio untuk pelaporan data #IOT jaman sekarang"

Share:

Rabu, 08 Mei 2024

[AI] Kirim Data Suhu LM35 Lewat Radio Amatir / HT


 
Disclaimer : " Penggunaan frekuensi radio amatir merupakan domain dari Kemkominfo, ORARI dan RAPI. Jangan sekali-kali menggunakan frekuensi amatir untuk tujuan lain daripada Amatir Radio yang tunduk pada aturan-aturan baku yang mengikat. Jika perangkat kamu akan memancarkan pembacaan data, silahkan berkomunikasi lanjut dengan pengelola lokal orari setempat agar tidak terjadi masalah dikemudian hari. Tulisan ini hanya sebagai pembuktian teknologi radio untuk pelaporan data jaman sekarang"

Suatu hari ketika saya scanning frekuensi maritim (150Mhz-170Mhz) menggunakan RTL-SDR yang beberapa bulan ini sedang saya gandrungi, terdengar sayup-sayup suara operator yang membacakan laporan cuaca di wilayah syahbandar pelabuhan tanjung perak Surabaya. Suaranya begitu "kurang bersemangat", mungkin karena dia sadar data cuaca untuk kapal shiping line, sudah lengkap dan mudah didapatkan melalui internet atau radar mereka, jadi operator ini hanya menjalankan tugas rutinitas yang harus dia lakukan sesuai perintah instansi. 

Tahukah kamu, di belahan bumi Amerika utara terdapat stasiun radio amateur WWV yang bekerja pada 2,5Mhz, 5Mhz, 10 Mhz, 15 Mhz dan 20Mhz, dimana secara berkala akan memberikan informasi waktu yang akurat berdasarkan jam atom. Yang berbicara di radio adalah suara mesin/komputer. Sempat juga saya melihat youtuber asal kanada yg scanning radio di dekat pelabuhan, laporan cuaca nya dibacakan juga oleh komputer, seperti halnya suara google map ketika kita berkendara dan menggunakan panduan arah.

Lalu teringat lah saya pada suatu kejadian letusan gunung merapi dan gunung agung beberapa tahun yg lalu, dimana laporan kegempaan seismik ditautkan pada sebuah frekuensi radio amatir VHF dengan tone yang berayun jika ada guncangan / letusan di puncak. Dan di wilayah rural seperti pegunungan, radio amatir / HT menjadi sarana komunikasi handalan. Jadi penggunaan radio HT untuk pengiriman data serta warning lumayan masih diperlukan.

Lalu bagaiman sih caranya menggantikan operator manusia menjadi suara text to speech (TTS) layaknya suara google ? Ayo saya share caranya... Pertama-tama tentunya kamu butuh memiliki sepasang radio HT / Walkie Talkie untuk melakukan experimen ini. Dan saya pilihkan merek baofeng yang sedang laris manis digunakan satpam dimana-mana.



Saya akan menggunakan mikrocontroller ESP8266 - Wemos yang berfungsi sebagai :

  1. Pembaca Sensor Suhu LM35
  2. Penerjemah pembacaan suhu menjadi urutan file mp3
  3. Pemutar audio mp3
  4. Pemutus - sambung transmit PTT (Push To Talk) sesuai kebutuhan


Dengan komponen beserta rangkaian secara lengkap seperti ini :



Lalu pertanyaannya apakah ESP8266 dapat memutar file audio langsung tanpa memerlukan player lainnya semacan DF player ? Ooooo itu sudah lama saya tau, dengan memanfaatkan I2S dari generasi ESP8266 atau ESP32 maka memutar file audio sangatlah mudah. Silahkan meluncur ke : https://github.com/earlephilhower/ESP8266Audio untuk belajar bagaimana cara memutar beberapa jenis file audio secara langsung, tanpa atau dengan DAC.

Untuk melakukan generate audio robot, maka gunakan layanan TTS (text to speech) yang versi bahasa Indonesia secara gratis dapat di googling seperti BOTIKA. Kalau punya teman atau saudara yg suaranya renyah dapat juga direkam beberapa file pembacaan angka "satu", "dua", "sebelas" dan lainnya. Seperti contoh yang saya buat dan letakkan di folder /data dibawah directory project arduino saya.



Untuk melakukan upload file suara mp3 ke ESP8266 maka diperlukan library SPIFFS yang memungkinkan ESP memiliki penyimpanan file tersendiri. Langkah pengaturan dan cara upload nya bisa dibaca disini : https://randomnerdtutorials.com/install-esp8266-filesystem-uploader-arduino-ide/.


Sedangkan script lengkap yang bisa kalian coba, saya bagikan secara FREE alias GRATEEESS 


/* Pengubah pembacaan Suhu LM35 ke suara dan dikirim via HT Baofeng  
   www.aisi555.com  08155737755 nyoman yudi kurniawan 2024
   
   Pada IDE gunakan mode clock ESP8266 160MHz, serta mode SPIFFS sebesar 1MB atau lebih
   Pelajari cara "Tools->ESP8266/ESP32 Sketch Data Upload" untuk menyimpan MP3 di SPIFFS
   Baca disini : https://randomnerdtutorials.com/install-esp8266-filesystem-uploader-arduino-ide/
   File mp3 simpan di folder /data pada direktori sketch arduino, dengan nama file berikut
   rekam sendiri di HP/PC atau gunakan layanan text to speech untuk membuat tiap file

   0.mp3  
   1.mp3
   2.mp3
   3.mp3
   4.mp3
   5.mp3
   6.mp3
   7.mp3
   8.mp3
   9.mp3
   10.mp3 ==> sepuluh
   11.mp3 ==> sebelas
   1_1.mp3 ==> belas
   p.mp3  ==> puluh
   d.mp3  ==> derajat
   k.mp3  ==> koma
   s.mp3  ==> ucapan pertama /salam
  
  
  Selanjutnya bisa baca di www.aisi555.com
  Gunakan secara gratis dan bertanggung jawab
  semua aturan penggunaan frekuensi radio amatir mengacu pada ORARI/RAPI/KEMKOMINFO/BALMON
*/

#include <Arduino.h>
#include <ESP8266WiFi.h>

#include "AudioFileSourceSPIFFS.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"

//sesuaikan pin PTT 
#define ptt 5
#define lm35 A0

int16_t suhu = 337;
uint8_t proses = 0;


AudioGeneratorMP3 *mp3;
AudioFileSourceSPIFFS *file;
AudioOutputI2SNoDAC *out;



void setup()
{
  pinMode(ptt, OUTPUT);
  digitalWrite(ptt, LOW);
  WiFi.mode(WIFI_OFF); 
  Serial.begin(115200);
  delay(1000);
  SPIFFS.begin();
  Serial.println("======= www.aisi555.com ========");
  Serial.println("  kirim Suhu LM 35 ke HT yukkkkk");
  Serial.println("================================");
  
  audioLogger = &Serial;

  //baca suhu LM35 di A0, Vin = 3.3 volt

    int16_t analogValue = analogRead(lm35);
    
    suhu = analogValue  * (3300/1024);
    Serial.println(analogValue);
    Serial.print("Suhu : ");
    Serial.println(suhu);
  

  //awal mulai pertama
  proses=1;
  //kirim PTT dan kirim suara ke HT
  digitalWrite(ptt, HIGH);
  delay(500);
  
  file = new AudioFileSourceSPIFFS("/s.mp3");
  out = new AudioOutputI2SNoDAC();  
  mp3 = new AudioGeneratorMP3();
  mp3->begin(file, out);
}


void tts(int16_t angka) //disini proses memilih angka jadi file mp3
{   
    uint8_t pilih;
    if (proses == 2) {
       pilih = angka/100;

      if ( angka <200 && angka >=120 ) pilih = (angka /10) % 10;
      else if (angka <120 && angka >=110) pilih =11; 
      else if (angka <110 && angka >=100) pilih =10;
      else if (angka <100 && angka >=0) pilih = angka /10;
    
    }
    else if (proses == 4){  
      pilih = (angka /10) % 10;
      if (pilih == 0) return;
      if (angka <200 && angka >=0) return;  
    
    }
    else if (proses == 6) pilih = angka % 10;

   switch (pilih) {
     case 0 : file = new AudioFileSourceSPIFFS("/0.mp3");
        break;
     case 1 : file = new AudioFileSourceSPIFFS("/1.mp3");
        break;
     case 2 : file = new AudioFileSourceSPIFFS("/2.mp3");
        break;
     case 3 : file = new AudioFileSourceSPIFFS("/3.mp3");
        break;   
     case 4 : file = new AudioFileSourceSPIFFS("/4.mp3");
        break;
     case 5 : file = new AudioFileSourceSPIFFS("/5.mp3");
        break;
     case 6 : file = new AudioFileSourceSPIFFS("/6.mp3");
        break;
     case 7 : file = new AudioFileSourceSPIFFS("/7.mp3");
        break;
     case 8 : file = new AudioFileSourceSPIFFS("/8.mp3");
        break;
     case 9 : file = new AudioFileSourceSPIFFS("/9.mp3");
        break; 
     case 10 : file = new AudioFileSourceSPIFFS("/10.mp3");
        break;        
     case 11 : file = new AudioFileSourceSPIFFS("/11.mp3");
        break;
   }

  out = new AudioOutputI2SNoDAC();  
  mp3 = new AudioGeneratorMP3();
  mp3->begin(file, out);
   
}




void loop()
{
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop();
  } else {
    
    if(proses == 7){
      
    proses =1;
    Serial.printf("MP3 play selesai\n");
    //matikan PTT
    digitalWrite(ptt, LOW);


    
    delay(5000);
    //ulang reset ESP agar fresh terus 
    ESP.reset();
 
    }

   else if ( proses == 1){ //puluhan
    proses=2;
    tts(suhu);
   }
   else if ( proses == 2){ //puluh, belas atau lewat
    proses=3;
     
     if( suhu <200 && suhu >=120 ) file = new AudioFileSourceSPIFFS("/1_1.mp3");
     else if( suhu <120 && suhu >=0 ) file = new AudioFileSourceSPIFFS(NULL);
     else file = new AudioFileSourceSPIFFS("/p.mp3");
    
     out = new AudioOutputI2SNoDAC();  
     mp3 = new AudioGeneratorMP3();
     mp3->begin(file, out);
   }   
   else if ( proses == 3){ //satuan
    proses=4;
    tts(suhu);
   }    
   else if ( proses == 4){ // koma
     proses=5;
     file = new AudioFileSourceSPIFFS("/k.mp3"); 
     out = new AudioOutputI2SNoDAC();  
     mp3 = new AudioGeneratorMP3();
     mp3->begin(file, out);
   }  
   else if ( proses == 5){ //desimal
    proses=6;
    tts(suhu);
   } 

   else if ( proses == 6){ //derajat
     proses=7;
     file = new AudioFileSourceSPIFFS("/d.mp3");
     out = new AudioOutputI2SNoDAC();  
     mp3 = new AudioGeneratorMP3();
     mp3->begin(file, out);
   }
     
  }
}

Dan jika kalian sukses dan beruntung (karena setiap kali compile hasilnya bisa error mulu, jadi kesabaran adalah kunci), akan kira-kira seperti video dibawah ini :








Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (11) arduino (27) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (74) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (8) radio (28) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (93) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika