Arduino Bluetooth na Ubuntu

Arduino Bluetooth – czyli Arduino bez portu USB, a zamiast tego moduł Bluetooth. Rozwiązanie idealne gdy potrzebna jest komunikacja bezprzewodowa z Arduino.

Najpierw – kilka różnic w stosunku do zwykłego Arduino Duemilanove. Arduino BT jest oparte o ATmega168 – czyli mamy do dyspozycji trochę mniej pamięci. Nie ma portu USB, więc musimy zasilać Arduino BT we własnym zakresie. Jeśli już o zasilaniu mowa – Arduino BT jest wrażliwe na polaryzację zasilania, więc uważnie podłączajcie masę i Vcc do płytki. Na dodatek maksymalne napięcie zasilania płytki to tylko 5.5V!. Na osłodę – dzięki konwerterowi DC/DC minimalne napięcie zasilające to tylko 1.2V.

Arduino Bluetooth
Arduino Bluetooth

Ponieważ nie ma portu USB, również programowanie odbywa się przez bluetooth. Krótka instrukcja jak to zrobić – system Ubuntu 9.10.

Nie korzystałem z GUI Ubuntu aby skonfigurować połączenie, możliwe że też zadziała ;)

Najpierw (oczywiście po włączeniu Arduino BT) szukamy dostępnych urządzeń:

$ hcitool scan
Scanning ...
	00:07:80:91:30:09	ARDUINOBT

Oto znaleziony moduł. 00:07:80:91:30:09 – to jest adres MAC urządzenia i oczywiście jest różny dla każdego modułu. Wszędzie gdzie wystąpi teraz ten adres należy zastąpić go właściwym dla Arduino, które wy macie.

Teraz podłączamy się do modułu:

$ sudo hcitool cc 00:07:80:91:30:09
$ sudo hcitool auth 00:07:80:91:30:09

Zapewne poprosi was o PIN – domyślny PIN to 12345.

Potrzebujemy informacji o urządzeniu:

$ sdptool browse 00:07:80:91:30:09
Browsing 00:07:80:91:30:09 ...
Service Name: Bluetooth Serial Port
Service RecHandle: 0x10000
Service Class ID List:
  UUID 128: 00001101-0000-1000-8000-00805f9b34fb
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100

To co jest ważną informacją to RFCOMM i Channel 1. RFCOMM jest to protokół emulacji portu szeregowego w transmisji radiowej.

Teraz można wypisać do /etc/bluetooth/rfcomm.conf:

rfcomm0 {
	bind yes;
	device 00:07:80:91:30:09;
	channel	1;
	comment "Arduino BT";
}

Oczywiście channel ma mieć taką samą wartość jak ten zwrócony przez sdptool. Mając wpisane powyższe w plik konfiguracyjny możemy się podłączyć:

$ sudo rfcomm connect 0
Connected /dev/rfcomm0 to 00:07:80:91:30:09 on channel 1
Press CTRL-C for hangup

Teraz wystarczyć powinno minicom -s ustawić port na /dev/rfcomm0 i powinniśmy być podłączeni do seriala Arduino.

Teoretycznie :) Arduino BT powinno być fabrycznie zaprogramowane z następującym programem (oryginał bez formatowania):

/* BT test 01
* ——————
* Massimo Banzi
*
*/

int LED = 13; // select the pin for the LED
int RESET = 7;

void setup() {
  pinMode(LED,OUTPUT); // declare the LED’s pin as output
  pinMode(RESET,OUTPUT); // declare the LED’s pin as output
  Serial.begin(115200); // connect to the serial port
  digitalWrite(RESET, HIGH);
  delay(10);
  digitalWrite(RESET, LOW);
  delay(2000);
  Serial.println(“SET BT PAGEMODE 3 2000 1”);
  Serial.println(“SET BT NAME ARDUINOBT”);
  Serial.println(“SET BT ROLE 0 f 7d00”);
  Serial.println(“SET CONTROL ECHO 0”);
  Serial.println(“SET BT AUTH * 12345”);
  Serial.println(“SET CONTROL ESCAPE – 00 1”);
  Serial.println(“SET CONTROL BAUD 115200,8n1”); //first release 19200
}

void loop () {
  digitalWrite(LED, HIGH);
  delay(100);
  digitalWrite(LED, LOW);
  Serial.println(“ciao”);
  delay(1000);
}

Powinien – z moich skromnych doświadczeń wynika, że z fabryki przychodzi z klasycznym blink – cyfrowy pin 13 zapala się i gaśnie. Tak też jest w powyższym kodzie, ale powinien jeszcze pisać komunikat “ciao” na serial. Nie udało mi się na ‘świeżym’ Arduino BT uzyskać tego komunikatu na serialu (na /dev/rfcomm0 była cały czas cisza), choć pin 13 faktycznie się przełączał (Arduino BT nie ma na płytce diody podłączonej do 13 więc trzeba samemu podłączyć)

Pozostaje wgrać powyższy kod na płytkę. Najlepiej na stałe powiedzieć Arduino IDE, że chcemy korzystać z BT i do pliku ~/.arduino/preferences.txt dodać:

serial.stopbits=1
serial.databits=8
serial.parity=N
serial.port=/dev/rfcomm0
serial.debug_rate=115200
serial.burn_rate=115200
board=bt

Teraz można bez problemu wgrać powyższy program. Uwaga – nawet jeżeli Arduion IDE pisze że korzysta z /dev/ttyS0 czy USB0 to przy powyższym wpisie do preferences.txt powinno wgrywać przez rfcomm0.

Wgrać bez problemu – jeżeli wie się jak to zrobić. Otóż obecne Arduino wyposażone w USB mają firmware pozwalający wgrać w każdej chwili nowy kod (przez USB jest robiony reset płytki po którym jest wgrywany nowy kod). Wersja firmware na Arduino BT nie wspiera tej wygodnej funkcji więc trzeba ręcznie zresetować moduł (przycisk S1) i w ciągu 1 sekundy nacisnąć ‘Upload’ w IDE.

Po takim zabiegu powyższy programik wgra się bez problemu i od teraz minicom nam będzie pokazywał ciao.

Arduino BT jest dostępne na nettigo.pl – w małych ilościach, możliwe jest sprowadzenie na zamówienie (maksymalny czas oczekiwania – miesiąc)