Kembali ke STM8

Tujuh tahun lalu (2016) saya mencoba STM8 dan mendokumentasikannya di sini. Seiring waktu, teknologi yang dikembangkan secara sistematis untuk mempermudah pemrograman semakin matang. Saat ini STM8 sudah sedemikian mudah untuk diprogram dengan mempergunakan Arduino IDE dengan dialek bahasa turunan C dan C++.

Gambar 1.
Gambar 2.
Gambar 3.

 

Arduino IDE

Cara pertama di artikel ini adalah dengan melakukan standar pengujian kode kedip (blink).  LED di papan yang akan diatur terhubung dengan D3 (PB5).

Gambar 4.
[sourcecode] /*
* Kode kedip untuk menguji STM8 (STM8s103f3 | stm8s103?3)
*
*/

#define onBoardLED 3

void setup() {
pinMode(onBoardLED, OUTPUT);
}

void loop() {
digitalWrite(onBoardLED, HIGH); // LED OFF
delay(400);
digitalWrite(onBoardLED, LOW); // LED ON
delay(200);
}
[/sourcecode]

Gambar 5.

Eksekusi perintah “Burn Bootloader” seperti di Gambar 5 sebelum melakukan pemrograman sistem STM8 untuk pertama kali.
 

Gambar 6. Pemrograman telah berhasil dilakukan.

Berikutnya, dicoba pengaturan yang lebih kompleks, yaitu pemanfaatan fasilitas PWM.

[sourcecode] /*
Dimodifikasi dari kode aslinya

Blink without Delay
created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen
modified 11 Nov 2013
by Scott Fitzgerald
modified 9 Jan 2017
by Arturo Guadalupi

This example code is in the public domain.

https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay
*/

// constants won’t change. Used here to set a pin number:
const int ledPin = 3;// D3 (PB5 di papan STM8S103F3)
const int pwmTestA = 5;
const int pwmTestB = 13;

// Variables will change:
int pinState = LOW; // pinState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated

// constants won’t change:
const long interval = 10; // interval at which to blink (milliseconds)

void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
pinMode(pwmTestA, OUTPUT);
pinMode(pwmTestB, OUTPUT);
}

void loop() {
// here is where you’d put code that needs to be running all the time.

// check to see if it’s time to blink the LED; that is, if the difference
// between the current time and last time you blinked the LED is bigger than
// the interval at which you want to blink the LED.
unsigned long currentMillis = millis();

if (currentMillis – previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;

// if the LED is off turn it on and vice-versa:
if (pinState == LOW) {
pinState = HIGH; //LED OFF
} else {
pinState = LOW; //LED ON
}

// set the LED with the pinState of the variable:
digitalWrite(ledPin, pinState);
analogWrite(pwmTestA, 50);
analogWrite(pwmTestB, 50);
}
}
[/sourcecode]

Cara pemrograman kode terakhir ini sama seperti sebelumnya. Dengan logic analyzer bisa dilihat lebar pulsa low kode kedip (Gambar 7) dan periode (frekuensi) PWM di D5 (PC3) di Gambar 8.

Gambar 7.
Gambar 8.

Berikutnya dengan bantuan oscilloscope ATTEN (f/w Siglent) bisa dilihat lebar pulsa high PWM di pin D13 (PD4).

Gambar 9.
Gambar 10.

Juga dengan bantuan fasilitas di oscilloscope bisa dilihat dengan lebih baik profil rise time dari sinyal digital yang dibangkitkan oleh fasilitas PWM di STM8 (dengan pemrograman via Arduino).

SDCC STM8FLASH

Hampir sama dengan sebelumnya, berikut dicoba kembali kode program kedip dengan SDCC. Versi SDCC yang dipakai adalah 3.8.0 #10562 (Linux).

[sourcecode] #include "stm8l.h"

int main() {
int d;
// Configure pins
PB_DDR = 0x20;
PB_CR1 = 0x20;
// Loop
do {
PB_ODR ^= 0x20;
for(d = 0; d < 29000; d++) { }
} while(1);
}
[/sourcecode]

Penetapan nilai heksadesimal 0x20 (0b00100000) untuk PB_DDR (DDR5), PB_CR1 (C15), dan PB_ODR (ODR5)  dapat dipelajari dari kutipan tabel berikut ini (sumber).

Jika papan stm8 baru pertama kali diprogram, beberapa perintah berikut ini perlu dijalankan untuk menghilangkan write protection (ROP /Read Out Protection ).

[intense_code type=”block”] echo “00” | xxd -r -p > ROP_CLEAR.bin
stm8flash -c stlinkv2 -p stm8s103?3 -s opt -w ROP_CLEAR.bin
[/intense_code]

Bisa juga mempergunakan versi berikut ini.

[intense_code type=”block”] echo “00 00 ff 00 ff 00 ff 00 ff 00 ff” | xxd -r -p > factory_defaults.bin
stm8flash -c stlinkv2 -p stm8s103?3 -s opt -w factory_defaults.bin
[/intense_code]

Berikutnya sebagai contoh program kedip disimpan di file yang diberi nama blinky.c. Untuk melakukan kompilasi, compiler sdcc yang dipergunakan. Sedangkan untuk memasukkan kode mesin hasil kompilasi, software stm8flash yang dipakai.

[intense_code type=”block”] sdcc -lstm8 -mstm8 –out-fmt-ihx blinky.c
stm8flash -c stlinkv2 -p stm8s103?3 -w blinky.ihx
[/intense_code]
Gambar 11. Hasil kompilasi dan flashing STM8.
Gambar 12.
Gambar 13.
Gambar 14. [Sumber]

Rujukan:

 

Contoh Pembacaan Input di Blynk

Berikut dokumentasi singkat pembacaan masukan di aplikasi Blynk 2.0.

Gambar 1.
Gambar 2.

Gambar 1 dan Gambar 2 merupakan tampilan modifikasi dari dashboard sebelumnya. Modifikasi dilakukan hanya untuk menambah indikator hasil pembacaan dari ESP8266. Sebagai catatan, indikator gauge sebenarnya tidak kurang begitu optimal untuk nilai biner, tetapi di sini hanya dipakai untuk contoh singkat dengan pengerjaan cepat.

Gambar 3.

Virtual pin V5 terhubung ke widget label sedangkan V6 terhubung ke widget gauge.

Kode berikut juga dapat diunduh di Pastebin.

[sourcecode] /*************************************************************
Download latest Blynk library here:
https://github.com/blynkkk/blynk-library/releases/latest

Blynk is a platform with iOS and Android apps to control
Arduino, Raspberry Pi and the likes over the Internet.
You can easily build graphic interfaces for all your
projects by simply dragging and dropping widgets.

Downloads, docs, tutorials: http://www.blynk.cc
Sketch generator: http://examples.blynk.cc
Blynk community: http://community.blynk.cc
Follow us: http://www.fb.com/blynkapp

Blynk library is licensed under MIT license
This example code is in public domain.

*************************************************************
This example runs directly on ESP8266 chip.

Note: This requires ESP8266 support package:
https://github.com/esp8266/Arduino

Please be sure to select the right ESP8266 module
in the Tools -> Board menu!

Change WiFi ssid, pass, and Blynk auth token to run 🙂
Feel free to apply it to any other example. It’s simple!
*************************************************************/

/* Comment this out to disable prints and save space */
// #define BLYNK_PRINT Serial

#define BLYNK_TEMPLATE_ID "isiDenganPengenalTemplate"
#define BLYNK_DEVICE_NAME "Uji baris LED Dev 01"
#define BLYNK_AUTH_TOKEN "isiDenganAuthToken"

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = BLYNK_AUTH_TOKEN;

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "mySSID";//Enter your WIFI name
char pass[] = "myPASS";//Enter your WIFI password

BlynkTimer timer;
WidgetLED led1(V4);

BLYNK_WRITE(V0){
int pinValue = param.asInt();
digitalWrite(16, pinValue);
}
BLYNK_WRITE(V1){
int pinValue = param.asInt();
digitalWrite(5, pinValue);
}
BLYNK_WRITE(V2){
int pinValue = param.asInt();
digitalWrite(4, pinValue);
}

BLYNK_WRITE(V3){
int pinValue = param.asInt();
digitalWrite(0, pinValue);
}

void bacaD5(){
int val_D5 = digitalRead(14);
if(val_D5 == HIGH){
led1.on();
Blynk.virtualWrite(V5, "D5 LED ON");
Blynk.virtualWrite(V6, 90);
}
else{
led1.off();
Blynk.virtualWrite(V5, "D5 LED OFF");
Blynk.virtualWrite(V6, 25);
}
}

void setup()
{
// Debug console
//Serial.begin(9600);
pinMode(14, INPUT); //D5 GPIO14
pinMode(16, OUTPUT); //D0 GPIO16
pinMode(5, OUTPUT); //D1 GPIO5
pinMode(4, OUTPUT); //D2 GPIO4
pinMode(0, OUTPUT); //D3 GPIO0
pinMode(2, OUTPUT); //D2 GPIO2
digitalWrite(16, HIGH); //Hanya dipakai untuk display LED
digitalWrite(2, HIGH); //Hanya dipakai untuk display LED
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, bacaD5);
}

void loop()
{
Blynk.run();
timer.run();
}
[/sourcecode]

 

Rujukan:

 

Uji Baris LED dengan Blynk Web Dashboard dan Android App

Web Dashboard

Di bagian awal akan dicatatkan dokumentasi pengendalian 5 jalur keluaran digital (D0~D5) dengan memanfaatkan web dashboard.

Gambar 1.
Gambar 2.
Gambar 3.
Gambar 4.
Gambar 5.

Android App

Gambar 6.

Di smartphone Android, pengguna dapat mengawali pembuatan antarmuka dengan memasuki Developer Mode.

Gambar 7.
Gambar 8.
Gambar 9.
Gambar 10.
Gambar 11.

Untuk keperluan yang sama tombol/sakelar lain dapat dibuat  dan disesuaikan dengan cara yang sama.

Gambar 12.

Contoh kode yang perlu dioperasikan di sistem papan Arduino bisa disalin dari Pastebin atau di bawah ini. 

[sourcecode] /*************************************************************
Download latest Blynk library here:
https://github.com/blynkkk/blynk-library/releases/latest

Blynk is a platform with iOS and Android apps to control
Arduino, Raspberry Pi and the likes over the Internet.
You can easily build graphic interfaces for all your
projects by simply dragging and dropping widgets.

Downloads, docs, tutorials: http://www.blynk.cc
Sketch generator: http://examples.blynk.cc
Blynk community: http://community.blynk.cc
Follow us: http://www.fb.com/blynkapp

Blynk library is licensed under MIT license
This example code is in public domain.

*************************************************************
This example runs directly on ESP8266 chip.

Note: This requires ESP8266 support package:
https://github.com/esp8266/Arduino

Please be sure to select the right ESP8266 module
in the Tools -> Board menu!

Change WiFi ssid, pass, and Blynk auth token to run 🙂
Feel free to apply it to any other example. It’s simple!
*************************************************************/

/* Comment this out to disable prints and save space */
//#define BLYNK_PRINT Serial

#define BLYNK_TEMPLATE_ID "isiDenganPengenalTemplate"
#define BLYNK_DEVICE_NAME "Uji baris LED Dev 01"
#define BLYNK_AUTH_TOKEN "isiDenganAuthToken"

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = BLYNK_AUTH_TOKEN;

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "mySSID";//Enter your WIFI name
char pass[] = "myPASS";//Enter your WIFI password

BlynkTimer timer;
WidgetLED led1(V4);

BLYNK_WRITE(V0){
int pinValue = param.asInt();
digitalWrite(16, pinValue);
}
BLYNK_WRITE(V1){
int pinValue = param.asInt();
digitalWrite(5, pinValue);
}
BLYNK_WRITE(V2){
int pinValue = param.asInt();
digitalWrite(4, pinValue);
}

BLYNK_WRITE(V3){
int pinValue = param.asInt();
digitalWrite(0, pinValue);
}

void bacaD5(){
int val_D5 = digitalRead(14);
if(val_D5 == HIGH){
led1.on();
}
else{
led1.off();
}
}

void setup()
{
// Debug console
//Serial.begin(9600);
pinMode(14, INPUT); //D5 GPIO14
pinMode(16, OUTPUT); //D0 GPIO16
pinMode(5, OUTPUT); //D1 GPIO5
pinMode(4, OUTPUT); //D2 GPIO4
pinMode(0, OUTPUT); //D3 GPIO0
pinMode(2, OUTPUT); //D2 GPIO2
digitalWrite(16, HIGH); //Hanya dipakai untuk display LED
digitalWrite(2, HIGH); //Hanya dipakai untuk display LED
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, bacaD5);
}

void loop()
{
Blynk.run();
timer.run();
}
[/sourcecode]

 

 

Uji Coba Blynk Virtual Datastream

Di post sebelumnya sudah dicatatkan ringkasan percobaan pengaturan awal Blynk melalui web dan hanya menggunakan digital datastream. Di artikel ini akan dicatat penggunaan virtual datastream, masih dengan menggunakan antarmuka web.

Template yang dipergunakan masih sama dengan yang dibuat sebelumnya.

Gambar 1.

Pilih virtual pin  saat menu pilihan tampil, lalu kerjakan seperti di Gambar 2.

Gambar 2.
Gambar 3.

Di Gambar 3 terlihat bahwa virtual pin datastream telah berhasil ditambahkan, ditandai sebagai V0. Sedangkan digital datastream sebelumnya tetap ada ditandai dengan angka pin 2.

Jika dikehendaki untuk dapat melakukan pengaturan melalui web, kita perlu melakukan penambahan di web dashboard seperti di Gambar 4 dan Gambar 5.

Gambar 4.
Gambar 5.
Gambar 6.

Logika penyakelaran perlu disesuaikan dengan kondisi riil rangkaian elektronik. Terutama untuk papan yang sudah dipabrikasi seperti modul ESP8266/Nodemcu. Cobtoh pengubahan dari active high ke active low dapat dilihat di Gambar 5 dan Gambar 6.

Gambar 7.
Gambar 8.
Gambar 9.

Agar perintah yang dikirim dari Blynk dapat dieksekusi, kode program yang mengendalikan ESP8266 (atau mikrokontroler lain) perlu disesuaikan.

Gambar 10.

Kode lengkap sebagai contoh cepat dapat diunduk di Pastebin berikut, atau langsung dari halaman ini.

[sourcecode] /*************************************************************
Download latest Blynk library here:
https://github.com/blynkkk/blynk-library/releases/latest

Blynk is a platform with iOS and Android apps to control
Arduino, Raspberry Pi and the likes over the Internet.
You can easily build graphic interfaces for all your
projects by simply dragging and dropping widgets.

Downloads, docs, tutorials: http://www.blynk.cc
Sketch generator: http://examples.blynk.cc

Blynk library is licensed under MIT license
This example code is in public domain.

*************************************************************
This example runs directly on ESP8266 chip.

Note: This requires ESP8266 support package:
https://github.com/esp8266/Arduino

Please be sure to select the right ESP8266 module
in the Tools -> Board menu!

Change WiFi ssid, pass, and Blynk auth token to run 🙂
Feel free to apply it to any other example. It’s simple!
*************************************************************/

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial

#define BLYNK_TEMPLATE_ID "isiDenganPengenalTemplate"
#define BLYNK_DEVICE_NAME "Uji baris LED Dev 01"
#define BLYNK_AUTH_TOKEN "isiDenganAuthToken"

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = BLYNK_AUTH_TOKEN;

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "mySSID";//Enter your WIFI name
char pass[] = "myPASS";//Enter your WIFI password

BLYNK_WRITE(V0){
int pinValue = param.asInt();
digitalWrite(16, pinValue);
}

void setup()
{
// Debug console
Serial.begin(9600);
pinMode(16, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(0, OUTPUT);
pinMode(2, OUTPUT);
Blynk.begin(auth, ssid, pass);
}

void loop()
{
Blynk.run();
}

[/sourcecode]
Gambar 11.

Virtual pin lain dapat ditambahkan dengan pola yang sama. Di artikel berikutnya masih berupa catatan pengaturan satu arah, tetapi sudah termasuk penggunaan aplikasi Blynk di Android. 

 

Rujukan:

 

Ringkasan Uji Coba Blynk 2.0

Dokumentasi singkat uji coba new blynk (blynk 2.0).

Instalasi Pustaka

Gambar 1.

Percobaan ini memanfaatkan Arduino IDE, sehingga instalasi pustaka perlu dilakukan seperti di Gambar 1.

Blynk Template

Gambar 2. Aksesweb site ini di https://sgp1.blynk.cloud/ atau https://blynk.cloud/  .
Gambar 3.
Gambar 4.

Papan ESP8266

Sebelum melanjutkan percobaan, terlebih dahulu diketahui pengaturan pin di papan/modul mikrokontroler.

Gambar 5.

Gambar 5 menunjukkan dua LED yang bisa dipakai sebagai indikatordi papan RobotDyn WIFI NODEM 32 MBit. Di penanda 1, adalah LED GPIO16 (D0), sedangkan di penanda 2 adalah LED GPIO2 (D4).

Gambar 6.

Sebagai pembanding, berikut konfigurasi papan ESP8266 (LOLIN dan Amica).

Gambar 7. [Sumber]
Gambar 8. [Sumber]
Gambar 9. Screenshot tabel pinout [Sumber].

Digital Datastream

Untuk contoh penyakelaran pertama, akan dipergunakan digital datastream untuk mengatur keluaran berupa LED di D4 (GPIO2).

Gambar 10.
Gambar 11.
Gambar 12.
Gambar 13.
Gambar 14.
Gambar 15.

Add New Device

Gambar 16.
Gambar 17.
Gambar 18.
Gambar 19.

Program Arduino

Gambar 20.

Isian di penanda 1 dan penanda 2 perlu diganti dan disesuaikan. Isian untuk penanda 1 diperoleh dari Blynk (lihat Gambar 19) sedangkan isian untuk penanda 2 disesuaikan dengan AP/hotspot WiFi lokal yang akan dipakai untuk menghubungkan ESP8266 ini ke Blynk melalui Internet. Kode beikut ini juga dapat diunduh melalui Pastebin (https://pastebin.com/qAgHgMSr).

[sourcecode] /*************************************************************
Download latest Blynk library here:
https://github.com/blynkkk/blynk-library/releases/latest

Blynk is a platform with iOS and Android apps to control
Arduino, Raspberry Pi and the likes over the Internet.
You can easily build graphic interfaces for all your
projects by simply dragging and dropping widgets.

Downloads, docs, tutorials: http://www.blynk.cc
Sketch generator: http://examples.blynk.cc
Blynk community: http://community.blynk.cc
Follow us: http://www.fb.com/blynkapp

Blynk library is licensed under MIT license
This example code is in public domain.

*************************************************************
This example runs directly on ESP8266 chip.

Note: This requires ESP8266 support package:
https://github.com/esp8266/Arduino

Please be sure to select the right ESP8266 module
in the Tools -> Board menu!

Change WiFi ssid, pass, and Blynk auth token to run 🙂
Feel free to apply it to any other example. It’s simple!
*************************************************************/

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial

#define BLYNK_TEMPLATE_ID "isiDenganPengenalTemplate"
#define BLYNK_DEVICE_NAME "Uji baris LED Dev 01"
#define BLYNK_AUTH_TOKEN "isiDenganAuthToken"

#include <ESP8266WiFi.h>;
#include <BlynkSimpleEsp8266.h>;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = BLYNK_AUTH_TOKEN;

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "mySSID";//Enter your WIFI name
char pass[] = "myPASS";//Enter your WIFI password

void setup()
{
// Debug console
Serial.begin(9600);
pinMode(16, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(0, OUTPUT);
pinMode(2, OUTPUT);
Blynk.begin(auth, ssid, pass);
}

void loop()
{
Blynk.run();
}
[/sourcecode]

Uji Aktivasi LED di GPIO2

Pada tahap pertama, uji coba dilakukan hanya menggunakan satu buah LED yang terhubung ke D4 (GPIO2) dengan menggunakan digital datastream.

Gambar 21.

Penyakelaran hidup & mati LED dengan antarmuka di halaman web terlihat di Gambar 21. Berikutnya untuk penggunaan fasilitas virtual pin datastream dan penggunaan antarmuka aplikasi di Android akan dicatat di artikel terpisah.

Untuk catatan ringkas penggunaan virtual pin datastream sudah dapat dilihat di sini.

 

Rujukan:

 

Catatan ringkas penggunaan Arduino-CLI

Selain menggunakan Arduio IDE, kita juga bisa mempergunakan Arduino-CLI. Ini bisa jadi berguna dan mempermudah di sistem seperti Raspberry Pi. Berikut catatan singkat contoh penggunaannya.

[intense_code type=”block”] sudo arduino-cli compile -b arduino:avr:uno /home/pengguna/Arduino/sunubt/
sudo arduino-cli upload -p /dev/ttyUSB0 –fqbn arduino:avr:uno /home/penggguna/Arduino/sunubt/
[/intense_code]

Di contoh ini file kode program Arduino terdapat di:
[intense_code type=”block”] /home/penggguna/Arduino/sunubt/sunubt.ino
[/intense_code]

Beberapa contoh penggunaan lain:
[intense_code type=”block”] sudo arduino-cli board attach serial:///dev/ttyUSB0 /home/penggguna/Arduino/sunubt/
arduino-cli upload -v -p /dev/rfcomm0 –fqbn arduino:avr:uno /home/penggguna/Arduino/sunubt
[/intense_code]

Rujukan:

 

Catatan avrdude: stk500_recv(): programmer is not responding

Ada beberapa kemungkinan terjadinya pesan kesalahan sebagai berikut ini:

[intense_code type=”block”] avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
[/intense_code]

Salah satunya adalah kemungkinan kesalahan konfigurasi atau perubahan akibat instalasi software baru. Misalnya pustaka yang tadinya telah terinstal menjadi hilang, seperti tampak di Gambar 1 berikut ini.

Gambar 1.

Konfigurasi ini berpotensi mengakibatkan kegagalan upload ke papan yang sebenarnya dalam kondisi baik (demikian juga kondisi PC secara umum). Ini terjadi baik untuk operasi dengan Arduino IDE maupun Arduino-CLI seperti di Gambar 2.

Gambar 2.

Upaya perbaikan dapat dilakukan dengan cara melakukan instalasi ulang/update dari menu board manager seperti di Gambar 3 dan Gambar 4.

Gambar 3.
Gambar 4.

Hasil perbaikan (di GNU/Linux) seharusnya akan tampai seperti di Gambar 5.

Gambar 5.

Setelah pustaka kembali normal, lakukan restart Arduino IDE. Setelah itu bisa dicoba melakukan uploading kembali, misalnya ke Arduino Nano ( old bootloader ) dengan Arduino IDE di Gambar 6.

Gambar 6.
Gambar 7. Hasil uji coba untuk Arduino Uno menggunakan arduino-cli.

Hasil uji coba di Gambar 8 dan Gambar 9 membuktikan bahwa pustaka untuk arsitektur lain tidak terganggu dan tetap berfungsi normal.

Gambar 8. Hasil uji coba untuk ESP8266.
Gambar 9. Uji coba dengan ESP32.

 

Berikut ini ada beberapa rujukan lain yang bisa dibaca untuk gejala yang sama (sekalipun bisa jadi penyebabnya berbeda).

 

Pengaturan HC-05

Pengaturan (setting) operasi modul HC-05 dapat dilakukan dengan beberapa cara. Berikut catatan pengaturan dengan dua cara, dengan FTDI USB to serial adapter  dan dengan memanfaatkan papan Arduino.

Pengaturan Menggunakan Modul FTDI

Gambar 1.

Dari sisi pertimbangan hardware cara ini relatif paling mudah untuk dilakukan. Tidak memerlukan resistor tambahan, cukup mengatur agar modul FTDI bekerja di tegangan 3,3 V (ubah poisisi jumper).

Gambar 2.
Gambar 3.

Gambar 2 dan Gambar 3 diperoleh dari dokumen PDF karya Gyula Molnar berikut ini. Hubungan RX dan TX antar modul perlu diperhatikan.

Untuk memasuki mode AT command, tekan dan tahan tombol yang berada di modul HC-05 sebelum menghubungkannya dengan sumber tegangan ( USB port ).

Gambar 4. [Sumber]
Software yang dapat dipakai untuk pengaturan misalnya CuteCom atau Arduino IDE.

Gambar 5.
Gambar 6.

Yang penting diperhatikan adalah pengaturan baud rate agar sesuai dengan pengaturan yang sudah dilakukan di modul HC-05. Di Gambar 5 dan Gambar 6, pengaturan masih menggunakan pengaturan default untuk HC-05.

Pengaturan Menggunakan Papan Arduino

Pengaturan HC-05 dengan menggunakan papan Arduino (semisal Arduino Uno) memerlukan lebih banyak komponen. Tetapi di sisi lain, memiliki keuntungan yaitu tidak memerlukan pembelian modul FTDI (jika memang belum dimiliki).

Gambar 7. [Sumber]
Untuk sistem Arduino Uno atau Arduino Nano yang hanya memiliki satu kanal hardware untuk komunikasi serial, pengguna perlu mempergunakan software serial.

Untuk dapat berkomunikasi dengan modul HC-05, papan sistem Arduino Uno perlu diprogram dengan kode berikut.

[sourcecode] /*
* Kode asal dari:
* HC05 – Bluetooth AT-Command mode
* modified on 10 Feb 2019
* by Saeed Hosseini
* https://electropeak.com/learn/guides
*/
#include "SoftwareSerial.h"
SoftwareSerial myHC05a(2, 3); // RX | TX
void setup()
{
delay(100);
Serial.begin(9600);

//myHC05a.begin(9600); //Baud Rate for AT-command Mode.
myHC05a.begin(38400); //Baud Rate for AT-command Mode.
//myHC05a.begin(115200); //Baud Rate for AT-command Mode.

delay(1000); //Delay untuk Arduino IDE.
Serial.println("***AT commands mode***");
}
void loop()
{
//from bluetooth to Terminal.
if (myHC05a.available())
Serial.write(myHC05a.read());
//from termial to bluetooth
if (Serial.available())
myHC05a.write(Serial.read());
}
[/sourcecode]

Gambar 8.

 

Gambar 9.

Gambar 9 menunjukkan akses AT command dengan default baud rate  untuk modul HC-05, yaitu 38400. Sedangkan komunikasi dari PC ( laptop ) ke papan Arduino Uno menggunakan 9600. Ciri adanya ketidaksesuaian pengaturan baud rate adalah tampilnya karakter ASCII  yang berbeda dari pesan yang seharusnya muncul, termasuk respon untuk AT command

AT Command

Ada banyak sumber daftar AT command yang bisa dan biasa dipakai untuk modul HC-05. Beberapa contohnya:

[intense_code type=”block”] AT : Check the connection.
AT+NAME : See default name
AT+ADDR : see default address
AT+VERSION : See version
AT+UART : See baudrate
AT+ROLE: See role of bt module(1=master/0=slave)
AT+RESET : Reset and exit AT mode
AT+ORGL : Restore factory settings
AT+PSWD: see default password
[/intense_code]
Gambar 10. [Sumber]

AT command :

 

Rujukan tambahan AT command:

HC-05 HC-06 Master Slave:

HC-05 :

 

Uji kendali digital pin Arduino dengan HC-05

Uji penggunaan aplikasi Bluetooth Application di smartphone Android untuk melakukan penyakelaran pin digital di Arduino Uno ini dilakukan dengan memanfaatkan modul HC-05.

Gambar 1.

Rangkaian yang dipakai pada prinsipnya sama dengan yang terlihat di Gambar 1.

[sourcecode] /*
Kode hasil modifikasi dari:
https://create.arduino.cc/projecthub/electropeak/getting-started-with-hc-05-bluetooth-module-arduino-e0ca81

HC05 – Bluetooth AT-Command mode
modified on 10 Feb 2019
by Saeed Hosseini https://electropeak.com/learn/
*/

#include <SoftwareSerial.h>
SoftwareSerial MyBlue(2, 3); // RX | TX
int flag = 0;
int LED = 8;
void setup()
{
Serial.begin(9600);
//Sesuaikan baud rate dengan pengaturan di HC-05
//MyBlue.begin(9600);
MyBlue.begin(38400);
//MyBlue.begin(115200);

pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
Serial.println("Ready to connect\nDefualt password is 1234 or 000");
}
void loop()
{
if (MyBlue.available() > 0)
{
flag = MyBlue.read();
}
//if (flag == 1) //Hex
if (flag == ‘1’) //ASCII
{
digitalWrite(LED, HIGH);
Serial.println("LED On");
}
//else if (flag == 0) //Hex
else if (flag == ‘0’) //ASCII
{
digitalWrite(LED, LOW);
Serial.println("LED Off");
}
}
[/sourcecode]

Gambar 2.

Perintah yang dikirim dapat berupa karakter ASCII sebagaimana yang terlihat di Gambar 2 untuk Switch 1. Untuk itu hanya perlu penyesuaian kecil di kode program untuk Arduino (Uno).

Rujukan :

Uji serial HC-05 Linux Mint dengan CuteCom dan Moserial

Uji coba koneksi dari Moserial ke CuteCom (dan sebaliknya). Hardware serial port Arduino Uno terhubung ke CuteCom (/dev/ttyUSB0) dan software serial Arduino Uno (/dev/rfcomm0) terhubung ke Moserial.

Gambar 1.

Koneksi Perangkat Keras

Gambar 2. [Sumber]
Hanya sebagai pembanding, Gambar 2 yang diperoleh dari howtomechatronics.com menunjukkan penggunaan modul HC-05 dengan Arduino Mega yang memiliki dua kanal komunikasi serial. Sedangkan di artikel ini selanjutnya hanya akan menggunakan sistem papan yang memiliki satu kanal serial hardware comm seperti Arduino Uno (Gambar 3).

Gambar 3.

Jika modul HC-05 dicabut atau tidak berfungsi baik, maka percobaan ini tidak dapat dilakukan. Hanya serial hardware lewat ttyUSB0 saja yang bisa terhubung. LED dalam percobaan ini tidak dipakai tetapi rangkaian yang sama ini akan dipakai untuk beberapa percobaaan yang berbeda (di artikel berikutnya).

Program Arduino

Kode asal program yang akan dipakai diambil dan dimodifikasi dari sumber ini. Kode ini sebenarnya dipakai untuk dapat memberikan AT command dari laptop ke modul HC-05. Tetapi kode yang sama bisa dimanfaatkan untuk demonstrasi komunikasi antar dua aplikasi di laptop yang sama melalui ttyUSB0 dan rfcomm0.

[sourcecode] /*
* Kode asal dari:
* HC05 – Bluetooth AT-Command mode
* modified on 10 Feb 2019
* by Saeed Hosseini
* https://electropeak.com/learn/guides
*/
#include "SoftwareSerial.h"
SoftwareSerial myHC05a(2, 3); // RX | TX
void setup()
{
delay(100);
Serial.begin(9600);
// myHC05a.begin(9600); //Baud Rate for AT-command Mode.
// myHC05a.begin(38400); //Baud Rate for AT-command Mode.
myHC05a.begin(115200); //Baud Rate for AT-command Mode.

delay(1000); //Delay untuk Arduino IDE.
Serial.println("***AT commands mode***");
}
void loop()
{
//from bluetooth to Terminal.
if (myHC05a.available())
Serial.write(myHC05a.read());
//from termial to bluetooth
if (Serial.available())
myHC05a.write(Serial.read());
}
[/sourcecode]

Pengaturan Bluetooth

Untuk HC-05 sudah dalam kondisi berkedip cepat saat uji coba akan dimulai. Ini menandakan modul itu sudah siap untuk dihubungkan.

[intense_code type=”block”]$ sudo service bluetooth restart[/intense_code]

Berikutnya periksa keberadaan rfcomm0. Berikut akan terlihat bahwa rfcomm0 belum ada.

[intense_code type=”block”] $ ls -la /dev/rf*
crw-rw-r–+ 1 root netdev 10, 242 Jul 16 07:05 /dev/rfkill
[/intense_code] [intense_code type=”block”] $ hciconfig
$ sudo hciconfig hci0 up
$ hcitool dev
Devices:
hci0 F0:03:8C:xx:xx:xx
[/intense_code] [intense_code type=”block”] $ hcitool scan
Scanning …
33:03:30:xx:xx:xx sunu-X2
20:14:10:xx:xx:xx Bluino#00
[/intense_code] [intense_code type=”block”] $ hcitool -i hci0 scan
$ sudo rfcomm release 0
$ sudo rfcomm bind 0 20:14:10:xx:xx:xx 1
$ rfcomm
[/intense_code] [intense_code type=”block”] $ sudo rfcomm connect 20:14:10:xx:xx:xx
[/intense_code] [intense_code type=”block”] $ sudo rfcomm bind 0 20:14:10:xx:xx:xx 1
[/intense_code] [intense_code type=”block”] $ sudo rfcomm connect /dev/rfcomm0 20:14:10:xx:xx:xx 1 &
[/intense_code] [intense_code type=”block”] $ bluetoothctl
trust 20:14:10:xx:xx:xx
pair 20:14:10:xx:xx:xx
connect 20:14:10:xx:xx:xx
[/intense_code] [intense_code type=”block”] $ ls -la /dev/rf*
crw-rw—- 1 root dialout 216, 0 Jul 16 16:31 /dev/rfcomm0
crw-rw-r–+ 1 root netdev 10, 242 Jul 16 07:05 /dev/rfkill
[/intense_code]

Perintah berikut hanya diperlukan jika ingin mencoba Minicom.

[intense_code type=”block”] $ sudo minicom -D /dev/rfcomm0
Untuk keluar minicom, tekan ctrl+A lalu tekan X.
[/intense_code]

Perintah berikut hanya sebagai catatan, tidak mutlak diperlukan untuk percobaan ini.

[intense_code type=”block”] $ sudo hcitool cc 20:14:10:xx:xx:xx
$ sudo hcitool auth 20:14:10:xx:xx:xx
$ sdptool browse 20:14:10:xx:xx:xx
[/intense_code]

Pengaturan CuteCom

Pengaturan pertama adalah pengaturan komunikasi untuk CuteCom agar dapat berkomunikasi dengan kanal serial Arduino Uno melalui ttytUSB0. 

Gambar 4.

Pengaturan Moserial

Gambar 5.

Di percobaan ini software Moserial dipakai untuk dapat terhubung ke modul bluetooth HC-05 melalui rfcomm0. Sebelum terhubung, led di modul akan berkedip cepat. Setelah terbung (dengan penundaan beberapa saat), led akan berkedip dengan jauh lebih lambat.

Uji dengan Serial Bluetooth Terminal

Gambar 6.

Sebagai uji coba lanjutan, penggunaan Moserial diganti dengan penggunaan aplikasi SBT yang dijalankan dari smartphone Android. Laptop dan Android dapat terhubung dengan baik dan dapat berkomunikasi sebagaimana di Gambar 6.

 

Rujukan: