4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BL652というBLEの省電力モジュール使ってみた!

Last updated at Posted at 2023-05-06

image.png

今回ご依頼を頂いて
BL652という超省電力のBLEモジュールを使用し、
システム開発を行ったのでその方法を記録!

システム構想

今回は決まった間隔でBLEアドバタイズを送信するシステムを構築します。
具体的には1分間隔で10秒間BLEアドバタイズを出力するものとします。
送信するデータは、供給電圧とします。

購入品

1、 BL652ブレークアウトボードキット
https://akizukidenshi.com/catalog/g/gK-15567/

2、FT-232RQ USBシリアル変換モジュール
https://akizukidenshi.com/catalog/g/gM-11007/
※BL652のプログラム書き込み用に使用します。

開発環境構築

BL652ではSmartBASICという言語を使用します。
この言語はVBと似た言語で、ソースはメモ帳で作成しても構いません。
しかし、BL652に書き込む際は、「UwTerminalX」というソフトが必要です。
https://github.com/LairdCP/UwTerminalX/releases

現時点(23/5/7)ではV1.13aが最新のようです。「UwTerminalXa_Windows.zip」をダウンロードして
解凍してください。
image.png

プログラム

test.sb
//*******************************************************************************************************************************
//
// 共通変数
//
DIM rc                                          // 関数の戻り値用
DIM advRpt$ : advRpt$ =""
DIM deviceName$ : deviceName$ = "KUROGARA"     // デバイス名
//*******************************************************************************************************************************

//*******************************************************************************************************************************
// アドバタイズタイムアウトのイベントハンドラ
FUNCTION HndlrBlrAdvTimOut() 
  PRINT "\nAdvert stopped via timeout!"
ENDFUNC 1
//*******************************************************************************************************************************

//*******************************************************************************************************************************
// データを成形して送信する
// 企業コードと電源電圧のデータ成形
SUB SendBleAdvert()

    IF BleAdvertStop()==0 THEN              //アドバタイズを終了
    ENDIF

    // 初期化
    DIM nFlagsAD: nFlagsAD = 0              // 0=Flags=0x04(LE Limited Discoverable Mode + BR/EDR Not Supported)
    DIM nAdvAppearance : nAdvAppearance = 0 // Appearance: 0=省略, 1=表示
    DIM nMaxDevName : nMaxDevName = 10      // デバイスの表示バイト数
    IF BleAdvRptInit(advRpt$, nFlagsAD, nAdvAppearance, nMaxDevName) == 0 THEN
        PRINT "Advert report initialised\n"
    ENDIF
    DIM nTag : nTag = 0xFF      // データ格納先を「Manufacture Specific Data」に設定

    //電池残量(Vdd電圧)取得
    DIM mv
    DIM batlel$
    mv=ReadPwrSupplyMv()
    print "\n\nSupply voltage is ";mv;"mV\n"
    SPRINT #batlel$,mv

    DIM Tmp$ : Tmp$ = batlel$               // 送信データ成形
    DIM stData$ : stData$="\50\50"+Tmp$     // 企業コードと足し込む

    // 送信データのセット
    IF BleAdvRptAppendAD(advRpt$, nTag, stData$) == 0 THEN
        PRINT "AD with data '";stData$;"' was appended to the advert report\n"
    ENDIF

    DIM scnRpt$ : scnRpt$ =""
    // 確定させる
    PRINT BleAdvRptsCommit(advRpt$, scnRpt$)

    PRINT "\nadvRpt="; advRpt$; "\n"

    // アドバタイズ開始
    DIM nAdvType: nAdvType = 3              // 3=ADV_NONCONN_IND=アクティブスキャン拒否, 接続拒否
    DIM addr$ : addr$ =""                   // nAdvType1の時のみ使用 それ以外は空白
    DIM nAdvInterval: nAdvInterval = 1000   // アドバタイズ周期: 1000msec 1sec
    DIM nAdvTimeout: nAdvTimeout = 10000    // アドバタイズタイムアウト: 10sec
    DIM nFilterPolicy: nFilterPolicy = 0    // 0=ホワイトリスト無効
    IF BleAdvertStart(nAdvType, addr$, nAdvInterval, nAdvTimeout, nFilterPolicy) == 0 THEN    
        PRINT "Adverts Started\n"                  
        PRINT "If you search for bluetooth devices on your device, you should see '"; deviceName$; "'\n"
    ELSE                                          
        PRINT "\nAdvertisement not successful\n"
    ENDIF
ENDSUB
//*******************************************************************************************************************************
// 指定時間後にアドバタイズを送信する
FUNCTION HandlerTimer1()
  SendBleAdvert()    //送信フラグ
ENDFUNC 1
//*******************************************************************************************************************************


//*******************************************************************************************************************************
// メイン
//*******************************************************************************************************************************
// ここから処理開始
//*******************************************************************************************************************************
// GAP serviceの初期設定
DIM nameWritable, nAppearance, nMinConnInterval, nMaxConnInterval, nSupervisionTimeout, nSlaveLatency
nameWritable = 0                // nameWritable 非ゼロの場合、相手機器に機器名の書き込みが許可されます。
nAppearance = 512               // デバイスの種類(512: 一般タグ)
nMinConnInterval = 500000       // min_conn_interval マイクロ秒   設定:500ms
nMaxConnInterval = 1000000      // max_conn_interval マイクロ秒   設定:1s
nSupervisionTimeout = 4000000   // supervision timeout マイクロ秒 設定:4s
nSlaveLatency = 0 // slave latency
rc = BleGapSvcInit(deviceName$, nameWritable, nAppearance, nMinConnInterval, nMaxConnInterval, nSupervisionTimeout, nSlaveLatency)
PRINT "--- New DevName : "; BleGetDeviceName$(); "\n"

SendBleAdvert()    //送信フラグ

// イベントとイベント処理ルーチンの紐づけ
// ONEVENT イベント名 CALL イベントルーチン名
ONEVENT EVBLE_ADV_TIMEOUT CALL HndlrBlrAdvTimOut	// アドバタイズタイムアウト
ONEVENT EVTMR1 CALL HandlerTimer1			            // タイマーイベント設定 今回は使用しない

//start a 60000 millisecond (60 second) recurring timer
TimerStart(1,60000,1) 

// イベント待ち
WAITEVENT

動作確認

まずは以下の通りに「BL652ブレークアウトボード」と「FT-232RQ」を接続します。
※USB変換モジュールのDIPスイッチはNO1、2どちらもOFFにしてください。
image.png

次に「UwTerminalX.exe」を起動。
image.png

起動後以下の画面が表示されるので「Accept」をクリック
image.png

接続した「FT-232RQ」のポート番号を選択して、「OK」をクリック
image.png

とりあえず以下の画面が表示されれば成功!
image.png

「XComplie + Load + Run」を選択し、プログラム「test.sb」をインストールする。
image.png

今回はスマホ(Android)で受信テストをしてみる。
アプリ「LightBlue」を使用した。
無題.png

きちんと企業コードは「5050」となっており、
電圧も「(16進数)33333031」(10進数では「3301mV」)と表示された。

最後に

BL652は、非常に省電力でスタンバイ時でも「2uA」。スリープなら「0.4uA」とかなりの
低消費モジュールだ!

私も今回はコイン電池1個で運用するシステムを構築した。
サイズも小さいので小型のシステムも容易にできるだろう。

BL652での開発依頼お待ちしております!!

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?