カテゴリー
IchigoJam

IchigoJam と RN4020 で Simple BLE (Bluetooth) センサを簡単に製作する

ハードウェアは、秋月電子通商から4月に発売されたAE-RN4020-XBモジュールをIchigoJamのシリアル端子へ接続するだけです。
ソフトウェアは、IchigoJam BASICで製作しました。通信モジュールRN4020側は購入したままでOKです。IchigoJam上で動作するBASICだけでモジュールを制御します。
また、センサ読み値をBLEビーコン内のデバイス名に含めたので、実験も簡単です。受信側はスマートフォンのビーコン検索ソフトや、Raspberry Piのhcitoolでビーコンをスキャンするだけで実現することが出来ます(gatttoolなどによる属性読み取りが不要)。
下図は、IchigoJam TへRN4020を接続し、BLEビーコンを送信する実験の様子です。
Microchip製RN4020チップを搭載した秋月電子通商のBLEモジュール(写真左上)をIchigoJam T(写真中央)のシリアル端子へ接続する(IchigoJamのTXDをBLEモジュールのRXへ、RXDをTXへ接続)。電源についてはIchigoJamのCN5の5V出力から供給した。

BLE対応BluetoothモジュールRN4020

Microchip社のRN4020は、BLE(Bluetooth Low Energy)に対応したBluetoothモジュールです。旧Roving Networks 社が開発したBluetootuモジュールRN42の技術をベースに、Microchip社がBLE対応品を開発しました。プロトコルスタックが内蔵されているので、シリアルから簡単なコマンドでBLE通信を行うことが出来ます。
Roving Networks社が開発したRN42の技術を基に、Microchip社が開発したBLEモジュールRN4020。簡単なコマンドをシリアルから送ることでBLEの通信が行える。型番の「RN」はRoving Networks社の名残り。

秋月電子通商製AE-RN4020-XBモジュール

秋月電子は、2017年4月にMicrochip社RN4020をプリント基板へ実装したBLE通信モジュールを発売しました。Digi社のZigBeeモジュールXBeeと同じ2mmピッチのピンヘッダを実装することが可能です。また、ブレッドボードなどに接続できる2.54mmピッチの端子も装備しています。

秋月電子通商から発売されたAE-RN4020-XBモジュール。XBeeシリーズとピン互換の2mmピッチのピンヘッダもしくは、ブレッドボードなどへ接続するための2.54mmピッチのピンヘッダのどちらかを装着して使用する。

IchigoJam用BASICプログラム「BLEビーコン送信機」

BLEビーコンを送信するIchigoJam用のプログラムです。シリアル通信の内容をI2C接続の液晶AQM0802へ表示することも出来ます。液晶を使用しない場合は行番号2を消してください。
行番号100番台はRN4020の初期化用です。2回目以降は実行する必要はありません。変数Zが0以外のときは初期化処理を省略します。
行番号240~260が主要部です。行番号240の「Y」はBLEビーコンを停止する命令、行番号250の「SN」はデバイス名の設定、行番号260はビーコンの開始命令です。予め行番号210でで変数Aにアナログ値を入力し、行番号250で変数Aの値をRN4020のデバイス名として設定します。
rem BLEビーコン送信機
rem Copyright (C) 2017 Wataru KUNINO
new
1 cls:uart0:?"Blue 2th":?"Beacon"
2 D=1:'LCD=ON
3 ifDgsb800

100 'INIT
110 ifZgoto200
120 uart1:cls:?"SF,2":gsb500
130 cls:?"SS,00000000":gsb500
140 cls:?"SR,00000000":gsb500
150 cls:?"R,1":wait120:gsb500
160 'cls:?"D":gsb500:wait300
170 B=-1:Z=-1

200 'LOOP
210 A=ana(0)
220 ifA>=B-5andA<=B+5goto200
230 uart0:cls:?"ANA=";A:gsb800
240 uart1:cls:?"Y":gsb500
250 cls:?"SN,IchigoJam_ANA,";A:gsb500
260 cls:?"A,07D0":gsb500

270 wait120:B=A:goto200

500 'RX
510 J=0:wait10:uart0:beep1
520 I=inkey():ifI?chr$(I);:goto520
530 ifJ<30wait1:J=J+1:goto520
540 ifDgsb800:wait30
550 uart1:beep:rtn

800 'LCD
810 poke#700,64,0,2,#C0,57,17,#70,86,#6C,56,12
820 ifi2cw(62,#701,1,#704,5)?"E"
840 ifi2cw(62,#701,1,#709,2)?"E"
910 ifi2cw(62,#701,1,#702,1)+i2cw(62,#700,1,#900,8)+i2cw(62,#701,1,#703,1)+i2cw(62,#700,1,#920,8)?"E"
920 rtn
プログラムを作成するときは、シリアル用の配線を切断しておき、プログラムを実行する直前にシリアルの配線を行い、RUNを実行します。プログラムを中断したときも、シリアルの配線を切断してください。
シリアルがつながったままだと、IchigoJamからシリアルを経由してRN4020へOKやエラーなどのメッセージが送られてしまい、その応答がIchigoJamに戻り、さらにIchigoJam側でSyntax Errorが発生し、そのメッセージがRN4020へ送られ、永久にループしてしまいます。
IF ICH-KIT(後述)では、この問題を避けつつ、開発効率を高めるために、シリアルの切り替えスイッチを装備しました。

スマホやラズパイでBLEビーコンを受信する

BLEビーコンの受信には、Bluetoothを搭載したスマートフォンやRaspberry Pi 3などを使用します。
iPhoneでは、BLE Discoveryや、BLE loggerが使えました。下図はBLE Discovery(Heap & Stack)で受信したときの様子です。Advertising DataのLocal nameの部分に「IchigoJam_ANA
,0」というデバイス名が表示されました。末尾の数字はアナログ入力ANA(0)の値によって変化します。IchigoJam基板上のタクトスイッチを押下した状態にしておくと0になり、離した状態だと800~1000くらいの値が得られます。このANA(0)入力はIchigoJamのBTN端子です。BTN端子にセンサを取り付ければ、センサ値を送信することが出来ます。
BLE Discovery(Heap & Stack)で受信してみた
Raspberry Piで簡単に受信することも出来ます。以下のコマンドを入力すると、約2秒ごとにデータが表示されます。末尾の数値1003や0がIchigoJamのアナログ入力ANA(0)の値です。
$ sudo hcitool lescan –pa –du
00:1E:C0:XX:XX:XX IchigoJam_ANA,1003
00:1E:C0:XX:XX:XX IchigoJam_ANA,0
00:1E:C0:XX:XX:XX IchigoJam_ANA,0
00:1E:C0:XX:XX:XX IchigoJam_ANA,1003
00:1E:C0:XX:XX:XX IchigoJam_ANA,0
00:1E:C0:XX:XX:XX IchigoJam_ANA,0
より詳細な情報を得るにはhcidumpをインストールしてください。ただし、hcidumpは少し使いにくいので、スクリプトble_logger.shも準備しました。4行目に書かれた一つのコマンド「ble_logger.sh」でスキャンを実行することが出来るようになります。
$ sudo apt-get install bluez-hcidump
$ cd RaspberryPi/network/ble
$ ./ble_logger.sh
BLE Logger
start LE scan
start HCI dump
, HCI, device:
2017/06/03 18:36, 0x3e, LE, ADV_IND, 00:1E:C0:XX:XX:XX, 0x06, IchigoJam_ANA,1003, -63
2017/06/03 18:36, 0x3e, LE, ADV_IND, 00:1E:C0:XX:XX:XX, 0x06, IchigoJam_ANA,0, -61
2017/06/03 18:36, 0x3e, LE, ADV_IND, 00:1E:C0:XX:XX:XX, 0x06, IchigoJam_ANA,0, -61
2017/06/03 18:36, 0x3e, LE, ADV_IND, 00:1E:C0:XX:XX:XX, 0x06, IchigoJam_ANA,1003, -64^C
$ ./ble_logger.sh dump
BLE Logger
start LE scan
start HCI dump
, HCI, device:
2017/06/03 18:38, 04,3E,23,02,01,00,00,XX,XX,XX,C0,1E,00,17,02,01,06,13,09,49, 63
2017/06/03 18:38, 04,3E,23,02,01,00,00,XX,XX,XX,C0,1E,00,17,02,01,06,13,09,49, 63
2017/06/03 18:38, 04,3E,20,02,01,00,00,XX,XX,XX,C0,1E,00,14,02,01,06,10,09,49, 63
2017/06/03 18:38, 04,3E,20,02,01,00,00,XX,XX,XX,C0,1E,00,14,02,01,06,10,09,49, 63^C
ble_logger.shでは、受信データの表示部を小プロセスとして実行することにより、1つのスクリプトでhcitoolとhcidumpを動かします。

CQ出版 IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)

こういった実験に適した専用のプリント基板も販売中です。筆者が約2年前に設計し、2016年4月に発売させていただきました。
IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)
BLEビーコンの実験を行うには、IF ICH-KITに含まれるWireless Shield基板へRN4020を実装します。RN4020モジュールやWireless Shied基板用のパーツについてはキットに含まれていません。

CQ出版 IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)に含まれるIchigoJam用のプリント基板「Personal Computer」(左)と、ワイヤレス化用のプリント基板「Wireless Shield」(右)に部品を実装したときの様子。

下図に実験の様子を示します。液晶にRN4020との通信状態が表示され、デバッグにも活用することが出来ます。この基板上のシリアルの切り替えスイッチにより、IchigoJam、パソコンのUSBシリアル、RN4020モジュールのシリアル切り替えが簡単に行えます。

Personal Computer基板には液晶やブザー、5Vと、3.3Vのレギュレータ、EEPROMなどが実装可能。また、基板裏側にはUSBシリアルICの実装も出来る(部品は別売り)。Wireless Shieldと組み合わせたときには各シリアル切り替えスイッチが便利。様々なワイヤレス対応プログラムの開発に役立てることが出来る。

なお、AE-RN4020-XBモジュールのXBee 13番ピンがプルアップされているので、常にBTNが押下された状態となります。
対策方法は、いくつかあります。入力ピンにANA(2)を使用するようにプログラムを修正するか、Wireless Shield基板上のR32を取り外すか、AE-RN4020-XBモジュールのXBee 13番ピンをカットするなどです。

ご注意

本ブログで紹介した方法は、BLEの実験や制作を簡単に行うものであり、製造元はデバイス名を頻繁に変更することを想定していないかもしれません。BASICプログラムでは数値の変化が大きい場合のみデータを書き換えることで、デバイス名の変更回数の低減を図っています(行番号220 ifA>=B-5andA<=B+5goto200)。
by ボクにもわかるIchigoJam用マイコンボード

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es