Aplikasi android koneksi classic bluetooth HC-05 dengan RAD Studio (Delphi)

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(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:

  1. Koding APK Rad studio (delphi)