ボクにもわかる電子工作

Raspberry Pi、IchigoJam、Wi-Fi、BLE、XBee、RN-42、ESP-WROOM-02、ESP32

全体表示

[ リスト ]

BASICでBLEビーコンを発信! IchigoJamとRN4020を使って、BLE (Bleutooth Low Energy)によるワイヤレスIoTセンサを製作してみました。

ハードウェアは、秋月電子通商から4月に発売されたAE-RN4020-XBモジュールをIchigoJamのシリアル端子へ接続するだけです。
ソフトウェアは、IchigoJam BASICで製作しました。通信モジュールRN4020側は購入したままでOKです。IchigoJam上で動作するBASICだけでモジュールを制御します。
また、センサ読み値をBLEビーコン内のデバイス名に含めたので、実験も簡単です。受信側はスマートフォンのビーコン検索ソフトや、Raspberry Piなどのhcitoolでビーコンをスキャンするだけで実現することが出来ます(gatttoolなどによる属性読み取りが不要)。

下図は、IchigoJam TへRN4020を接続し、BLEビーコンを送信する実験の様子です。

イメージ 1
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通信を行うことが出来ます。

イメージ 2
Roving Networks社が開発したRN42の技術を基に、Microchip社が開発したBLEモジュールRN4020。簡単なコマンドをシリアルから送ることでBLEの通信が行える。型番の「RN」はRoving Networks社の名残り。

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

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

イメージ 3
秋月電子通商から発売された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ビーコンの受信には、Bletoothを搭載したスマートフォンやRaspberry Pi 3、Raspberry Pi Zero Wなどを使用します。
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端子にセンサを取り付ければ、センサ値を送信することが出来ます。

イメージ 4
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
イメージ 5

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基板用のパーツについてはキットに含まれていません。付属する他の基板用のパーツを使うなど、工夫が必要です。

イメージ 6
CQ出版 IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)に含まれるIchigoJam用のプリント基板「Personal Computer」(左)と、ワイヤレス化用のプリント基板「Wireless Shield」(右)に部品を実装したときの様子。ワイヤレス実験に便利なプリント基板が付属。この機会に検討していただければ幸いです。

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

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

なお、AE-RN4020-XBモジュールのXBee 13番ピンがプルアップされているので、タクトスイッチが常に押下された状態となります。XBee ZBモジュールがスリープから復帰するときにIchigoJamを起動するために必要な信号ですが、RN4020を使用する場合は邪魔になります。
対策方法は、いくつかあります。ANA(2)を使用するように修正するか、Wireless Shield基板上のR32を取り外すか、AE-RN4020-XBモジュールのXBee 13番ピンをカットするなどです。

イメージ 8

ご注意

本ブログで紹介した方法は、BLEの実験や制作を簡単に行うものであり、本来のBLEの使い方ではありません。また、RN4020側についてもデバイス名を頻繁に変更することが想定されていない可能性があります。BASICプログラムでは数値の変化が大きい場合のみデータを書き換えることで、デバイス名の変更回数の低減を図っていますが、連続的に何か月も動かした場合、フラッシュメモリの書き換え回数が多くなり、動作に支障をきたすかもしれません(行番号220 ifA>=B-5andA<=B+5goto200)。一方で、シリアル接続のフラッシュメモリが搭載されているようにつき、一般的なNVMに比べて長寿命である可能性もあります(RN4020の仕様書には明記されていません)。
書籍「Wi-Fi/Bluetooth/ZigBee無線用Raspberry Piプログラム全集」では、gatttoolでBLEタグの情報を取得するサンプルプログラムを(少しだけ)紹介しています。書籍をお持ちの方はP.280〜294を参照していただければと思います。

by ボクにもわかるIchigoJam用マイコンボード

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


みんなの更新記事