ボクにもわかる電子工作

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

全体表示

[ リスト ]

開発環境 Arduino core for ESP32 WiFi chipを使ってBLEを送信するサンプルを作成してみました。超簡単なスケッチ&実験なので、ESP32をお持ちの方は試してみてください。RN4020よりも安価なESP-WROOM-32を使って、BLEの実験を行ってみましょう。

ふと、ESP32用のBLE通信の情報をネットで検索してみたところ、開発環境にArduino IDEを使ったサンプルが見当たらないことが判明しました。Arduino IDE版では、いまのところビーコン送信(BLE Advertising)しかできないからだと思います。とはいえ、ビーコン送信だけでもセンサ値の送信くらいなら可能です。また、とても簡単なスケッチ(プログラム)で、BLE送信することが出来るのです。

10分でできる Arduino ESP32を使った簡単BLE送信実験

※10分でできる:開発環境のセットアップ時間は除きます。また個人差があります。

下図はRaspberry Piで受信した時のようすです。

イメージ 1
ESP32内蔵のホールセンサから得られた値を約3秒ごとにBLE送信し、ビーコンをRaspberry Piで受信してみた時のようす。各行の末尾の数字がセンサの読み値(100サンプルの平均)。

BLEって何? Bluetoothとは違うの?

BLEはBluetooth 4.0でサポートされた Bluetooth Low Energy と呼ばれるプロトコルです。従来のクラッシックBluetoothとの互換性はありませんが、超低消費電力動作が可能です。Bluetooth Smartの名称で普及が促進されており、現在販売されているほぼ全てのスマートフォン、Raspberry Pi 3、Zero W、USBアダプタ(例:プラネックスコミュニケーションズ製のBT-Micro 4)等でサポートされています。

Raspberry PiのLXTerminalで以下のコマンドを実行すると、ビーコンを受信することが出来ます。Raspberry Pi 3、Zero W以外をお使いの場合は、プラネックスコミュニケーションズ製のBT-Micro 4をUSB端子に接続してから実行してください。
$ sudo hcitool lescan --pa --du
「LE Scan ...」が表示されない場合は、BluetoothをONにしてください。
$ sudo hciconfig hci0 up
少し、古いですが、BLEタグと呼ばれるビーコン送信を行う製品も発売されています。

イメージ 2
市販のBLEタグ。使い方は、XBee ZigBeeモジュールなどを使ったワイヤレス機器のサンプル集「Wi-Fi/Bluetooth/ZigBee無線用Raspberry Piプログラム全集(出版元=CQ 出版社・著者=国野亘)」を参考にしていただければ幸いです。https://www.amazon.co.jp/dp/4789842231

ESP32用開発環境Arduino ESPのセットアップ方法

既に、より良い記事がさまざまなところで紹介されていますが、ボクが過去に作成した中途半端なものでも(我慢して)読んでいただけるという方は、下記をご覧ください。

磁気センサ(ホール効果センサ)の読み値をBLE送信する

以下にサンプル・スケッチを示します。ble.beginでBLEのビーコンに含めたいテキストを設定し、ble.endで送信を停止します。 hallReadは、ホールセンサの値を読み取る命令です。以前に動作確認した時に、平均化しないと使い物にならなかったので、100回平均を行っています。執筆時点のライブラリでは、ble.beginとble.endの間に、ビーコン送信待ち時間50ms〜100msのdelayが必要でした。
#include "SimpleBLE.h"
SimpleBLE ble;
void setup() {
    delay(10);
    ble.begin("BLE Hall Effect Sensor");
    delay(50);
    ble.end();
}
void loop() {
    int hall=0,i;
    for(i=0;i<100;i++) hall += hallRead(); hall/=100;
    String out = "ehall_1," + String(hall,DEC);
    ble.begin(out);
    delay(50);
    ble.end();
    delay(3000);
}

Raspberry Piで受信する

既に説明した通り、Raspberry Piで受信するには以下のコマンドを使用します。lescanはBLEのビーコンを見つけるとMACアドレスとデバイス名を表示する命令です。今回は、ホール効果センサの読み値をデバイス名に含めて送信しているので、冒頭に示した図のように、lescanだけでセンサ値を受信することが出来ます。
$ sudo hcitool lescan --pa --du
ビーコンに含まれる情報を閲覧したい場合はlescan実行中にhcidump命令を使用します。hcidumpをapt-getでインストールし、実行してみてください。
$ sudo apt-get install bluez-hcidump
$ sudo hcidump
hcidumpでESP32からのビーコンを受信すると下図のような結果が表示されます。LE Advertising Reportと書かれている部分が、実際に受信したビーコンの内容です。デバイス名Complete local nameに「ehall_1,33」の受信結果が得られました。このように、デバイス名の中にセンサ値「33」が含まれていることが分かります。

イメージ 3

上図の受信結果には、もう一つ興味深い結果が得られています。最後から2行目のUnknown typeの部分はビーコンに含まれる不明なデータです。定義されていない値0x12と、4バイトの不明なデータが本ビーコンに含まれていました。
実際に受信した生データを見たいときは、hcidumpに「-R」オプション(Dump raw data)を付与します。すると、この不明なデータの内容を含む全受信データ列が表示されます(赤文字部分が不明データ)。
$ sudo hcidump -R
> 04 3E 24 02 01 03 00 XX XX XX C4 0A 24 18 02 01 06 0B 09 65
  68 61 6C 6C 5F 31 2C 33 33 02 0A EB 05 12 00 02 00 04 C2
赤文字で示したデータ以外については、hcidumpが解析してくれています。「-R」オプションなしの受信結果と比較すれば良いでしょう。
将来的には、このデータ列を開発環境Arduino ESP32から指定できるようになると思います。今後のアップデートに期待しましょう。

ボクにもわかる ESP32

参考文献(というよりも、宣伝です。)

簡単にBLEのビーコンを受信できるスクリプトも準備しました。

by ボクにもわかる電子工作
https://bokunimo.net/

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

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

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

.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事