1. 機器を準備する
必要なものは、ArduinoとUSBホストシールド2.0とBluetoothドングル。今回は、以下を使った。- Arduino Uno (3千円くらい)
- USB ホストシールド 2.0 (3千円くらい) → このために買ったんだけど2年くらい眠ってた
- BT-MicroEDR (当時2千円くらい)
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 スティックブースターで動くし、お手軽にライトな無線機器を作るのにいいと思う。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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; | |
} |
0 件のコメント:
コメントを投稿