Transfer data classic bluetooth bersifat half duplex (satu arah dalam satu waktu) namun terlihat full duplex karena kecepatannya. Dalam beberapa kasus/contoh penggunaan aplikasi android seringkali proses ReadData/ReceiveData/pembacaan bluetooth, memaksa bluetooth dalam kondisi ‘penerima’/client terus menerus sehingga tidak ada/kecil waktu yang tersedia bagi proses sendData/kirim.
Pada software Rad Studio (Delphi) khususnya target android, disediakan fungsi readdata() dan receivedata(), yang apabila dijalankan tanpa parameter maka secara default akan menahan modul bluetooth (HC-05) dalam posisi penerima selama waktu setting timeout, baik pada metode thread atau timer hal ini menyebabkan proses write/kirim harus menunggu hingga jalur komunikasi mode receive selesai.
Untuk memberikan kesempatan lebih untuk proses baca, seharusnya proses terima data bluetooth dibuat tidak terlalu lama karena dalam RX/TX android sendiri ada mekanisme buffer sebagai tampungan data yang masuk.
Berikut ini adalah contoh pemograman APK Android menggunakan Rad Studio untuk kirim/terima data bluetoth klasik:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | procedure TForm1 . ButtonLedOnClick(Sender: TObject); begin if LSockect . Connected then begin LSockect . SendData(TEncoding . UTF8 . GetBytes( '@' )); end ; end ; procedure TForm1 . ButtonLedOffClick(Sender: TObject); begin if LSockect . Connected then begin LSockect . SendData(TEncoding . UTF8 . GetBytes( '#' )); end ; end ; procedure TForm1 . Timer1Timer(Sender: TObject); var buffer : TBytes; dataString : String ; I: Integer ; begin if (LSockect <> nil ) and (LSockect . Connected) then begin buffer := LSockect . ReceiveData( 100 ); if Length(buffer) > 0 then begin Insert(buffer, bufferBluetooth, Length(bufferBluetooth)); dataString := TEncoding . UTF8 . GetString(bufferBluetooth); if dataString . Contains(# 13 # 10 ) then begin LabelData . Text := dataString; SetLength(bufferBluetooth, 0 ); end ; end ; end ; end ; |
Skema modul hc-05 bluetooth dengan arduino sebagai client:
Sedangkan contoh/sampel koding arduino untuk berkomunikasi dengan apk android berbasis delphi (rad studio):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #define led1Pin 7 #include <SPI.h> #include <SoftwareSerial.h> SoftwareSerial serialBluetooth(2, 3); // RX, TX uint32_t kirimMillis; int counter = 0; void setup() { pinMode(led1Pin, OUTPUT); Serial.begin(9600); Serial.println(F( "Aplikasi android koneksi classic bluetooth HC-05 dengan RAD Studio (Delphi)" )); Serial.println(); serialBluetooth.begin(9600); } void loop() { if (serialBluetooth.available()) { char c = serialBluetooth.read(); Serial.print(c); if (c == '@' ) { digitalWrite(led1Pin, HIGH); Serial.println( " : Led on" ); } else if (c == '#' ) { digitalWrite(led1Pin, LOW); Serial.println( " : Led off" ); } } if (kirimMillis < millis()) { kirimMillis = millis() + 1000; serialBluetooth.println(counter); counter++; } } |
Link koding aplikasi android dengan rad studio serta koding arduino: