05 2月

[基本編] BeagleBoneBlack と Arduino を Bluetooth で接続


「コンピューターとしゃべる(Bluetooth)」で示したように、Arduino に HC-06(JY-MCU) を接続して、BeagleBone のアプリケーションと通信するまでを説明するよ。

SDPに必要なサービスを登録する

BeagleBoneBlack に SPP が登録されているか確認する。

$ sdptool browse local

登録されていないので、以下のコマンドで登録する。

$ sdptool add --channel=22 SP
Serial Port service registered

SPP が登録された。

# sdptool browse local
Service Name: Serial Port
Service Description: COM Port
Service Provider: BlueZ
Service RecHandle: 0x10007
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 22
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Serial Port" (0x1101)
    Version: 0x0100

Bluetooth デバイスの登録

Bluez-simple-agent で libffi.so ライブラリが必要なのでソースをダウンロードしてインストールしておく。
シンボリックリンクを張るのを忘れずに。

$ wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz
$ tar xzvf libffi-3.2.1.tar.gz
$ cd libffi-3.2.1
$ ./configure && make

# make install 
# ln -s /usr/local/lib/libffi.so.6 /usr/lib/

Arduino の Bluetooth デバイス HC-06 を検索する。

$ sudo  hcitool scan
Scanning ...
  30:14:10:15:02:64 HC-06

RFCOMM ポートとアダプタをバインドする。

# rfcomm bind 1 30:14:10:15:02:64

# rfcomm
rfcomm1: 30:14:10:15:02:64 channel 1 closed

rfcomm bind コマンド

指定したリモートのBluetoothデバイスと仮想シリアルポートを関連付ける。 bindコマンド実行後、/dev/rfcommDEV(DEVはポート番号)というデバイスファイルが作成されるので、 以降はこれを使って通信ができる。 bindコマンドでは、デバイスファイルを作るだけで実際にリモートデバイスと接続は行わない。 アプリケーションがデバイスファイルをオープンする段階で接続処理が行われる。

Bluetooth デバイスへの接続

HC-06 が見つかったので、MAC アドレスを指定してペアリングする。
ピンコードは 1234 を入力する。

*bluez-simple-agentは python 2.7系で動かない。

$ sudo bluez-simple-agent hci0 30:14:10:15:02:64
RequestPinCode (/org/bluez/399/hci0/dev_30_14_10_15_02_64)
Enter PIN Code: 1234
Release
New device (/org/bluez/399/hci0/dev_30_14_10_15_02_64)

現在のセッションのみで接続する。

$ sudo hidd --connect 30:14:10:15:02:64

minicom で通信確認

minicom のインストール&セットアップ

$ sudo apt-get install minicom

minicom を起動して、Serial port setup で以下のように設定する。

$ sudo minicom -s
A - Serial device: /dev/rfcomm1
E - Bps/Par/Bits: 115200 8N1

Configuration 画面から exit すると受信データが表示される。

Welcome to minicom 2.6.2

OPTIONS: I18n
Compiled on Feb  8 2013, 05:09:59.
Port /dev/rfcomm1

Press CTRL-A Z for help on special keys

hello world!
:

pySerial でシルアル通信確認 (python 3.3のみ有効)

$ pip install pyserial
$ sudo easy_install -U pyserial

注意:python 2.7 から python 3.3 へ移行したとき pip でエラーが発生したが 以下の手順でうまくいった。

# curl https://bootstrap.pypa.io/ez_setup.py | python

# easy_install --upgrade pip
# pip install --upgrade setuptools

pyserial を使って受信データを表示する。

> import serial
> ser = serial.Serial('/dev/rfcomm0', timeout=0.1)  # timeoutを秒で設定(default:None)ボーレートはデフォルトで9600
> c = ser.read(10)  # 10文字読み込み
> print(c)
> ser.close()

node-serial で通信

必要モジュールのインストール

BeagleBoneBlack に Node.js と Snowshoe 環境はインストールされているものとする。

シリアル通信モジュール インストール

$ npm install serialport

シルアル通信用のコード serialtest.js

var serialport = require('serialport');

/* ポートの設定 */
var portName = '/dev/rfcomm1';
var sp = new serialport.SerialPort(portName, {
        baudRate: 115200,
        dataBits: 8,
        parity: 'none',
        stopBits: 1,
        flowControl: false,
        parser: serialport.parsers.readline("n")
      });

/* イベントハンドラ */
sp.on('data', function(input) {
      console.log('Received : ' + input);
      });

実行結果

$ node serialtest.js
Received : hello world!
Received : hello world!
Received : hello world!
:
05 2月

コンピューターとしゃべる (Bluetooth)


JY-MCU Bluetooth モジュールを Arduino UNO に装着して Mac と通信してみるよ。

準備するもの

名前 仕様
マイコン Arduino UNO
Bluetoothデバイス JY-MCU Bluetooth to UART Wireless Serial Port Module for Arduino

参考

接続図

JY-MCU と Arduino はクロス配線となるように接続する。
JY-MCU の RX 端子を Arduino デジタルピン 1番(TX) につなぎ、JY-MCU の TX 端子を Arduino デジタルピン 0 番 (RX) につなぐ。

arduino-bluetooth-fig1arduino-bluetooth-fig1

ソースコード

Arduino に以下のコードをアップロードしておく。

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(1000);
  Serial.println("hello world!");
}

Mac からデバイスに接続する

  1. システム環境設定 > Bluetooth を開く。
  2. デバイスに HC-06 と表示されるので、ペアリングを押す。
  3. ペアリングできませんでしたと表示されるので、オプションを選択してコード欄に 1234 と入力して再度ペアリングを押す。
  4. HC-06 接続済みとなる。
  • 2回目以降は、Bluetooth 画面のデバイスから HC-06 を一度削除すると、再度 HC-06 が表示され、ペアリング釦が現われるので、上記2 から実行する。

通信の確認

iTerm で ttyデバイスを探す。

$ ls -al /dev/tty.*
crw-rw-rw-  1 root  wheel   18,  14 12 14 15:13 /dev/tty.HC-06-DevB

HC-06 から受信したデータを表示する。

$ screen /dev/tty.HC-06-DevB
hello world!
hello world!
hello world!
  :

screen を終了するには、screen の画面で ctrl + a を押し、次に k を押す。
すると画面左下に Really kill this window [y/n] と表示されるので、 y を押すと screen が終了する。