LoginSignup
5

More than 1 year has passed since last update.

Sigfox とは?

IoT 用途の LPWA(Low Power Wide Area network)の一つで、とにかく通信料金が安く、多数の IoT 機器に使用しても運用可能コストで使用できます。
詳しくは、Sigfox の 日本でのオペレーターを務められている KCCS 様の Web サイトをご覧ください。

KCCS Sigfoxとは

本記事の特徴

Sigfox 通信のサンプルプログラムをググってもらうと、Arduino Uno に Sigfox Shield を接続したサンプルがたくさん出てきます。

下記リンクは、KCCS 様の Web サイトで、筆者の日比さんは、Qiita にも Sigfox 関連記事を多数投稿されています。
KCCS Sigfox メッセージ送信方法 - Sigfox Shield for Arduino

この記事は、非常に素晴らしいサンプルで、Arduino にセンサーを付けて Sigfox 経由で IoT データをクラウドに上げたいというご要望であれば、これだけで十分な参考資料です。

本記事は、Arduino ではなく、もう少しリッチなシステムでも Sigfox を試してみたいという方向けの資料となっており、

  • Raspberry Pi
  • Python

でのSigfox 通信のサンプル記事となっております。

今回の機材・構成・環境

マイコンボード

Raspberry Pi をマイコンボードと呼んでよいかは甚だ疑問ですが、ベースとなるコントローラーは、Raspberry Pi 4 です。(以降 RPi4)
詳細には、Raspberry Pi 4 Model B 8GB RAM です。

Raspberry Pi 自体は、Qiita でも多くの人が紹介されているので、本稿での説明は割愛いたします。

Sigfox モジュール

Sigfox モジュールは、Sigfox Breakout board BRKWS01 RC3 を使用します。
こちらは、スイッチサイエンスの Web サイトから購入可能で、執筆時点(2021/06/15)では、5,194円/pcs となっています。
Sigfox Breakout board BRKWS01 RC3

実際に Sigfox を使用して IoT システムを運用する場合、日本では KCCS と回線契約を結ぶ必要がありますが、本製品は "Development Kit" という位置づけで、Activation から1年間無料で通信できる「無償回線付き」となっていますので、購入して手に入れたら即日実験開始できます。

こちらも、KCCS - 日比さんが、紹介記事を掲載されております。

Sigfox Breakout Board (BRKWS01)の利用方法

RPi4 と Sigfox モジュールの通信

RPi4 と Sigfox は、UART を使用したシリアル通信で制御を行います。
RPi4 側からシリアル通信で制御コマンドを送ることで、Sigfox モジュールに LPWAの通信を行わせたり、モジュールのHWの設定を変更したりします。

RPi4 の UART

RPi4 では以下の UART が使用できます。

  • UART1 Tx(GPIO14) Rx(GPIO15)
  • UART2 Tx(GPIO0) Rx(GPIO1)
  • UART3 Rx(GPIO5)
  • UART4 Tx(GPIO8) Rx(GPIO9)
  • UART5 Tx(GPIO12) Rx(GPIO13)

これは、RPi4 より前の型(Raspberry Pi3 とか)では異なるようなので、使用する Raspberry Pi の型に沿って適宜読み替えてください。

今回は、UART4 を使用します。
そのための設定として、/boot/config.txt を以下のように変更してリブートします。

[pi4] 
# Enable DRM VC4 V3D driver on top of the dispmanx display stack 
dtoverlay=vc4-fkms-v3d 
max_framebuffers=2 
dtoverlay=uart4,ctsrts

Sigfox モジュールとRPi4 の接続

UART4 は、Tx(GPIO8) Rx(GPIO9) にアサインされています。

RPi4_GPIO.png

この二つおよび 3V3 power/Ground と、Sigfox モジュール側の 3.3v power, Ground を接続します。

GPIO www.raspberrypi.org

Sigfox-RPi4.JPG

Sigfox モジュールとのシリアル通信

import serial

port = '/dev/ttyAMA1'

s = serial.Serial(port, 9600, timeout=10)
# Device ID を取得する AT コマンドを送付
s.write(b'AT$I=10\r');

# Sigfox Module からのレスポンスを読み込む
resp = s.readline()

print('Device ID : {}'.format(resp))

RPi4 から 'AT$I=10' というコマンドを Sigfox モジュールへシリアル送信すると、その Sigfox モジュールの Sigfox ID が返されます。

Device ID : b'007XXXX6\r\n'

この時点では、RPi4 と Sigfox モジュール間だけの 通信で、Sigfox 通信網を使った通信は発生しません。
ここで、レスポンスとして、Sigfox ID が取得できるのであれば、RPi4 と Sigfox モジュール間の接続は確立できていることが確認できます。

ちなみに、この Sigfox モジュールは、購入後自力ではんだ付けが必要になります。
私のはんだ付けスキル不足により、最初に接続したときは Sigfox モジュールからの応答がありませんでしたが、再度、はんだを溶かしたりして接触を浴したり(その辺もよくわかってないですが)した結果、正常に動作するようになりました。

Sigfox 通信の実行

接続済の Sigfox モジュール から実際にデータを送信するためには、そのモジュールのアクティベーションの作業が必要となります。

こちらは、先ほどの KCCS - 日比さんの記事にも説明がありますので、そちらを参考に Activation してください。

Sigfox Devkit(開発キット)を1年間の無償回線で利用する

デバイスが Activation されると、Sigfox Backend の方にこんな形で現れます。
Screen_shot_01_.png

Device Type と Device Name は自動で付与されますので、後で自由に変更してください。

この状態で、RPi4 から メッセージ送信の AT コマンドを Sigfox モジュールに送信してみます。

import serial

port = '/dev/ttyAMA1'
s = serial.Serial(port, 9600, timeout=10)

# 送信するメッセージを指定(12byte(注))
message = '0123456789abcdef01234567'

# AT コマンドにコンバート
at_command = 'AT$SF={0}\r'.format(message)
# AT コマンドを Sigfox モジュールへ送信
s.write(at_command.encode())

# Sigfox モジュールから Sigfox ネットワークにデータを送信完了するまで待つ
while True:
    resp = s.readline()
    if resp != b'':
        break

print('Response: {}'.format(resp))

(注) Sigfox で送信可能なデータ量は、12 Byte です。ですが、ATコマンドで送るデータは、数値を16進数で文字列に変換したデータなので、python 上は 24 Byte になります。

送信が完了すると

Response: b'OK\r\n'

というメッセージが返ってきます。

Sigfox Backend で、このデバイスの受信メッセージを見ると Sigfox Cloud 上でメッセージが受信できていることが確認できます。

Screen_shot_02_.png

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
5