パートナーブログ

ST製Sigfoxトランシーバー評価ボードを使ってみる

2019.02.14

FT-ATR-SIGFOX1は、STM32Cubeファンクションパックとして、環境センサ・モーションセンサから取得したデータをSigfoxネットワークを利用し送信することができる、S2-LP Transceiverベースの評価ボード用ソフトウェアパッケージです。
このファンクションパックを使えば、Sigfoxトランシーバ(S2-LP)ボードをマイコンボード(STM32 Nucleo)から制御できるようになります。

ハードウェアの準備

下記ハードウェアを準備します。

  • マイコンボード:STM32 Nucleo-64 boards(NUCLEO-L053R8、NUCLEO-L476RG)
  • センサボード:X-NUCLEO-IKS01A2
  • SigfoxトランシーバS2-LPボード:X-NUCLEO-S2868A1
  • USBケーブル(USB A - USB Mini B)
img-20190214-partnerblog-01.png
各種ボードの準備が整っていれば、マイコンボードとトランシーバボード、センサボードを下写真のように連結します。

img-20190214-partnerblog-02.png

ソフトウェアの準備

マイコンボード(STM32 Nucleo-64)を動かすためにSTSW-LINK004をダウンロード&インストールします。

その後、FP-ATR-SIGFOX1からZIPファイルをダウンロード解凍します。
解凍すると下図のようなフォルダが生成されます。

img-20190214-partnerblog-03.png

この中にサンプルコードやバイナリが入っています。
その他、TeraTerm等のターミナルソフトと、Sigfoxクラウドへのアクセス権があることを確認してください。

サンプルを動かしてみる

Sigfoxクラウドへのデバイス登録(ID / PAC)

Sigfoxクラウドへのデバイス登録は、こちらを参考に、Sigfox Buyなどの手段で事前に登録しておいてください)

STM32 NucleoをPCと接続する

STM32 NucleoとPCをUSBケーブルを接続するとSTMicroelectronics STLink Virtual COM Portとして認識されます。

img-20190214-partnerblog-04.png

同時に新たなドライブが認識されます。今回は、NODE_L053R8という名前でドライブDが出来上がりました。

バイナリファイルを書き込む

このドライブにサンプルのバイナリファイルをコピーするだけで、マイコンボードに書き込みが完了します。
今回は、先ほどZIP解凍したフォルダにある下記バイナリファイルをコピーします。
Projects\STM32L053R8-Nucleo\Applications\Sigfox\AssetTracker\Binary\NUCLEO_L0_ARIB.bin

img-20190214-partnerblog-05.png

動作確認

ターミナルソフトのシリアルポートのレートを115200bpsと設定したうえで、STM32 Nucleoが接続されているCOMポートを開けます。
さきほど書き込んだバイナリは動きを検知すると温度・湿度・気圧をSigfoxネットワークで送信するプログラムになっているようですので、ボードを動かしてみると、下記のようにMems eventが起こり、Sigfox Messageを送信していることが見れます。

>> Mems event
Sending: 01a500cf277a (Hum=421 Temp=207 Pres=10106)
>> Mems event
Sending: 01a700cf277a (Hum=423 Temp=207 Pres=10106)
>> Mems event
Sending: 01aa00d1277a (Hum=426 Temp=209 Pres=10106)

メッセージの送信トリガは、動き検知(加速度センサ)に加え、ボタン(青ボタン)プッシュ、タイマー(3分)のトリガが実装されています。
送信されたメッセージは、Sigfoxクラウドでも確認できました。

img-20190214-partnerblog-06.png

最後にソースコードをチラ見

最後に、センサデータを取得し、Sigfoxメッセージを送信するソースコードを見てみます。
Projects\STM32L053R8-Nucleo\Applications\Sigfox\AssetTracker\Src\main.cです。

main.c
#if SEND_SENSORS     int16_t humidity, temperature, pressure;

    sensors_read(&humidity,&temperature,&pressure);

    customer_data[0] = ( humidity >> 8 ) & 0xFF;
    customer_data[1] = humidity & 0xFF;
    customer_data[2] = ( temperature >> 8 ) & 0xFF;
    customer_data[3] = temperature & 0xFF;
    customer_data[4] = ( pressure >> 8 ) & 0xFF;
    customer_data[5] = pressure & 0xFF;

    printf("Sending: ");
    for(uint8_t i=0;i<6;i++)
      printf("%02x",customer_data[i]);
    printf(" (Hum=%d Temp=%d Pres=%d)\r\n", humidity, temperature, pressure);

    /* Call the send_frame function */
    SIGFOX_API_send_frame(customer_data,6,customer_resp,2,0);

ここでSIGFOX_API_send_frameでデータ送信していますが、この内部は"Middlewares"フォルダ配下に絡んでいそうですが、特にカスタムすることもないと思いますので、このライブラリ関数をそのまま使用すればよさそうです。
次回は、もう少しセンサの特性を活かした制御プログラムを作ってみたいと思っています。

著者情報

STマイクロエレクトロニクス株式会社

システム・ソリューション技術部
河野 裕二