#daring #daringadalah daring adalah mpls #sekolah #guru #google classroom google classroom sekolah online guru kelas zoom webcam
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 ..
0 komentar:
Posting Komentar