d.sunnyone.org
sunnyone.org

ページ

2013-09-21

Arduino + USB ホストシールド + BTドングルでBluetooth Lチカ

このあたりを参考にしたら、思ったよりも圧倒的に簡単にできたので、思わず記事にする。ArduinoとUSBホストシールドにBluetoothドングルを使うと、SPP (Serial Port Profile)を使って簡単にLEDチカチカできちゃう。

1. 機器を準備する

必要なものは、ArduinoとUSBホストシールド2.0とBluetoothドングル。今回は、以下を使った。
最後のBluetoothドングルはもう売ってないと思うけど、似たようなやつが千円くらいで買えると思う。だいたい使えそうな気がするけど、Linuxで使える報告があがってるやつとかが無難なのかな?

USBホストシールドは2.0なものを選ばないとたいへんらしい

2. つなぐ

USBホストシールドにBluetoothドングルを差して、Arduino Unoに重ねて、適当なデジタルピンにLEDと抵抗のセットをつなげばいい。ただし、デジタル8~13は使っているらしいので注意。今回は6番を使った。

3. Arduino IDEの所定のディレクトリにzipを展開する

https://github.com/felis/USB_Host_Shield_2.0 から、zipアーカイブをダウンロードして、/usr/share/arduino/libraries/USB_Host_Shield_20 に展開する。

4. SPPサンプルを開く

Arduino IDEのメニューからUSB_Host_Shield_20のBluetoothのSPPのサンプルを開く。

5. ちょちょいと書き換えて転送する

サンプルはSerialとSerialBTでお互いにechoする感じなので、適当にif文を書き換えてdigitalWrite(ピン, HIGH/LOW); でチカチカさせるようにする。

変更した部分はこんなかんじ(全体は最後に)。
if (SerialBT.available()) {
  char c = SerialBT.read();
  if (c == '1') {
    digitalWrite(6, HIGH);
  } else {
    digitalWrite(6, LOW);
  }
  Serial.write(c);
}

あとは転送する。

6. ペアリングして通信する


ターミナル的なソフトが使えれば、WindowsでもLinuxでもなんでもいいと思うけど、今回はAndroidとS2 Terminal for Bluetooth Free を使った。1とか0とか送ってチカチカすれば成功!

ソース全体でもこれだけ。eneloop スティックブースターで動くし、お手軽にライトな無線機器を作るのにいいと思う。
/*
Example sketch for the RFCOMM/SPP Bluetooth library - developed by Kristian Lauszus
For more information visit my blog: http://blog.tkjelectronics.dk/ or
send me an e-mail: kristianl@tkjelectronics.com
*/
#include <SPP.h>
#include <usbhub.h>
USB Usb;
USBHub Hub1(&Usb); // Some dongles have a hub inside
BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
/* You can create the instance of the class in two ways */
SPP SerialBT(&Btd); // This will set the name to the defaults: "Arduino" and the pin to "1234"
//SPP SerialBT(&Btd, "Lauszus's Arduino","0000"); // You can also set the name and pin like so
boolean firstMessage = true;
void setup() {
Serial.begin(115200);
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while(1); //halt
}
Serial.print(F("\r\nSPP Bluetooth Library Started"));
}
void loop() {
Usb.Task(); // The SPP data is actually not send until this is called, one could call SerialBT.send() directly as well
if(SerialBT.connected) {
if(firstMessage) {
firstMessage = false;
SerialBT.println(F("Hello from Arduino")); // Send welcome message
}
if(Serial.available())
SerialBT.write(Serial.read());
if(SerialBT.available()) {
char c = SerialBT.read();
if (c == '1') {
digitalWrite(6, HIGH);
} else {
digitalWrite(6, LOW);
}
Serial.write(c);
}
}
else
firstMessage = true;
}
view raw sppled.ino hosted with ❤ by GitHub



0 件のコメント:

コメントを投稿