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:
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):
#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(F("https://www.semesin.com/project")); 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: