"Kembali Ke Dasar Elektronika Digital ... "

Rabu, 22 Januari 2020

Operasi Input Output Serial Bluetooth HM10 MLT-BT05-BLE4.0 - LED dan DHT11




Modul Bluetooth HM10 MLT-BT05-BLE4.0 yang saya beli ternyata merupakan emulator komunikasi serial pada BLE dan cocok untuk proses belajar mengenal parameter dan pengaturan dari device BLE pada umumnya. Harapan saya untuk dapat mengoprek UUID dan Service / Characteristic yg ada ternyata terbatas pada CHAR nama Bluetooth serta UUID 0xFFE0 yang merupakan layanan TX RX Serial seperti yg bisa dilihat di hasil scan pada aplikasi android BLE console ( gunakan google play).

Beberapa kali saya temukan kerancuan dalam mengartikan mana yg UUID dan mana CHARACTERISTIC, tapi dari kenyataan hasil praktek dan manual book maka modul saya ini memang hanya mempunyai 1 UUID dan 1 CHAR yaitu 0xFFE0 dan 0xFFE1. Ada beberapa blog yg mengatakan bahwa angka itu muncul dari kombinasi parameter serivis yg bisa read write dan notify. Daripada bingung kita ikut aja aturan seperti contoh yg ada di internet sana dimana harus disertakan AT command berikut ini :

  • AT+ROLE0              ==> Sebagai mode slave
  • AT+UUID0xFFE0   ==>  atur UUID
  • AT+CHAR0xFFE1  ==> atur Characteristic


Kembali ke kelanjutan praktek sebelumnya, kita kembali menghubungkan Arduino Uno dan modul BLE dan kali ini akan disertakan 2 buah lampu LED.



Jadi tujuan dari prakteknya adalah untuk menghidupkan dan mematikan LED melalui terminal android. Scriptnya bagaimana ? Kita bahas satu persatu bagian yuk..

#include <SoftwareSerial.h> // library serial
#define merah 5   // pin LED merah
#define hijau 6   // pin LED hijau

SoftwareSerial mySerial(3, 4); // RX, TX



void setup() {

  pinMode(merah, OUTPUT);     //inisialisasi led merah
  pinMode(hijau, OUTPUT);     //inisialisasi led merah
  digitalWrite(merah, HIGH);  //test led saat awal
  digitalWrite(hijau, HIGH);  // Nyala lalu mati
  delay(500);
  digitalWrite(merah, LOW);
  digitalWrite(hijau, LOW);
  
  mySerial.begin(9600);  // inisialisasi serial BLE
  Serial.begin(9600);    // inisialisasi serial UNO

  // inisialisasi UUID dan BLE sebagai slave mode
  sendCommand("AT");
  sendCommand("AT+ROLE0");
  sendCommand("AT+UUID0xFFE0");
  sendCommand("AT+CHAR0xFFE1");
  sendCommand("AT+NAMEwww.aisi555.com");
}



Nah begitu aturan awal menginisialisasi modul BLE pembaca cukup ikuti saja aturan ini. Lalu untuk mengirim AT command secara serial ke BLE digunakan function / routine bernama sendCommand()

void sendCommand(const char * command){
  Serial.print("Command kirim :");  // menulis command ke monitor
  Serial.println(command);
  mySerial.println(command);  // kirim AT command ke BLE
  //tunggu bntar
  delay(100);
  
  char reply[100]; //kumpulkan reply dalam char array 
  int i = 0;
  while (mySerial.available()) { 
    reply[i] = mySerial.read(); 
    i += 1;
  }
  //akhir string selalu '\0'
  reply[i] = '\0';  
  Serial.print(reply);

  Serial.println("Pesan Dibalas");



Untuk menerima perintah dari lawan yaitu Smartphone Android dengan aplikasi BLE Console maka diperlukan pembacaan perintah dan dicompare sesuai kata "kunci" yg dipakai. Misal "LED ON" maka akan di compare melalui script STRCMP seperti berikut :



if (strcmp(reply,"merah on")==0) digitalWrite(merah, HIGH);
else if (strcmp(reply,"merah off")==0) digitalWrite(merah, LOW);
else if (strcmp(reply,"hijau on")==0) digitalWrite(hijau, HIGH);
else if (strcmp(reply,"hijau off")==0) digitalWrite(hijau, LOW);
  
  if(strlen(reply) > 0){
    Serial.println(reply);
    Serial.println("Perhatikan LED nya");


  }
}  

Simple bukan ? Dengan kreasi menambahkan delay maka kita bisa juga menambahkan fasilitas flip- flop pada hijau merah seperti pada script dan video dikakhir tulisan ini

void loop() {
  readSerial();
  delay(500);

  if( flip == true) {
      if(flop == false) {
        digitalWrite(merah, LOW );
        digitalWrite(hijau, HIGH);
        flop = true;
      }

      else  {
        digitalWrite(merah, HIGH );
        digitalWrite(hijau, LOW);
        flop = false;
      }
  }

}


Bagaimana jika kita tambahkan DHT11 dan akan membaca suhu udara? Kita cukup menambahkan proses pembacaan DHT11 saat ada perintah serial masuk dari BLE yg dikirim smartphone,  misalnya seperti gambar dibawah. Saya menggunakan aplikasi BLE console dengan setting Notify centang dan Send Enter jangan di centang.



Jadi modifikasi script sama saja seperti pembahasan pembacaan DHT 11 pada percobaan yang lalu lalu, yg ditambahkan hanya reply ke  BLE melalui serial port.


void SendTempHumid(bool jenis){ // jenis suhu apa humi

    //script umum pembacaan DHT11
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
      //return; This will ensure that data is always sent
    }

    
    if(jenis == false) // baca suhu
    {
    
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" °C ");

    mySerial.print("T: "); //kirim suhu ke BLE
    mySerial.print(t); 
    mySerial.println("°C ");

    }
    else
    {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.println(" %");

    mySerial.print("H: "); //kirim humi ke BLE
    mySerial.print(h); 
    mySerial.println(" %");
    }
}

Sedangkan pada function readSerial() kita tambahkan seperti ini  untuk menangkap pengiriman kata "suhu" dan "humi" yg dikirimkan oleh smartphone.

      else if (strcmp(reply,"suhu")==0) SendTempHumid(false);
    else if (strcmp(reply,"humi")==0) SendTempHumid(true);



Hasil selengkapnya bisa dilihat pada video berikut ini :



 SELAMAT MENCOBA ..
Share:

0 komentar:

Posting Komentar

Kontak Penulis



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

Site View

Categories

555 (6) 7 segmen (3) adc (3) amplifier (1) analog (9) android (11) arduino (4) attiny (1) attiny2313 (16) blog (1) bluetooth (1) cmos (2) crypto (2) dasar (35) display (3) gcc (1) iklan (1) infrared (2) Input Output (3) iot (4) jam (6) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (12) komputer (3) komunikasi (1) kontrol (2) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (50) mikrokontroller (2) mikrotik (5) ninmedia (1) paket belajar (19) palang pintu otomatis (1) parabola (28) pcb (2) project (33) proyek (1) radio (3) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (2) signage (1) sms (6) software (18) tachometer (2) telepon (7) televisi (53) television (1) transistor (1) troubleshoot (3) tulisan (48) tutorial (75) tvri (1) vu meter (1) vumeter (1) wav player (3) wayang (1) wifi (1)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika