公開日:2023/08/22
最近、RISC-V(リスクファイブ)という名前をニュースなどで目にする機会が増えていると思います。
RISC-Vとは、オープンソースな命令セットアーキテクチャー(ISA)のCPUで、誰でも無料で使うことができます。(もちろん、半導体化するための技術は必要ですが)
IoTの普及に伴い、組込み機器に求められる機能・性能が多様化するなかで、それぞれに特化した独自CPUを作りたいというニーズの高まりも受け、ライセンスに縛られずに、自由にカスタマイズ可能なRISC-Vが注目されています。
今回は、ルネサス エレクトロニクス社の64bit RISC-Vを採用したMPU「RZ/Five」を搭載したCPUボード「AP-RZFV-0A」を使用して、IoT機器にも使われるMQTT通信を組み合わせたIoTエッジデバイスを作成してみます。
1.RISC-V, MQTT概要
RISC-V
RISC-V(リスク ファイブ)は、カリフォルニア大学バークレー校で開発された オープンソースライセンス(BSD)のCPUアーキテクチャーです。ライセンス費用が不要で、RISC-Vチップの設計や派生成果物を、オープンかつ自由に、またはクローズドで独占的に、作成することを許可されているため 近年注目を集めています。
RISC-Vの仕様は、RISC-V Internationalという団体が策定しており、世界中の有名企業も参加しています。
RISC-V 日本語ページ(https://riscv.org/japan/)
MQTT
MQTT(Message Queue Telemetry Transport)は、1999年にIBM社とEurotech社のメンバーにより考案され、2014年にはOASISによって正式な標準規格とされた通信プロトコルです。
衛星経由で石油パイプラインをモニタリングしたり、センサー情報(例えば、電気やガスの使用状況)をクラウドにアップしたりする用途でよく使用されます。
HTTPと良く比較されますが、HTTPに比べトラフィックが10分の1となり、通信量やCPU負荷が大幅に削減されます。言い換えれば、電力消費量が抑えられるためバッテリーで動作するようなモバイル向けに最適です。
MQTTプロトコルの仕様は、以下から入手可能です。
MQTT.org(https://mqtt.org/)
2. システム構築
今回は、温湿度センサーからの情報をネットワークを通して取得するシステムを考えます。
MQTTを使用したシステムは、Publisher , Broker , Subscriber の3つの要素からの構成となり、それぞれ以下の役割を担います。
要素 | 今回のシステムの役割 | 使用機器 |
---|---|---|
Publisher | メッセージとして温湿度センサーの情報をBrokerに送信します。 | RISC-V搭載のボード「AP-RZFV-0A」 + 温湿度センサー |
Broker | 温湿度センサーの情報を受信して、情報を保有します。Subscriberからの要求に対して情報を提供します。 | PC(Ubuntu) |
Subscriber | Brokerが保有する温湿度情報を取得して表示します。 | PC(Ubuntu) |
ネットワーク設定に関しては、以降の図に記載の設定として説明します。
AP-RZFV-0Aは、ルネサス エレクトロニクス社の64bit RISC-V CPUコアを搭載した「RZ/Five」を搭載したCPUボードです。
基本OSにLinuxを採用し、LANやUSB、SDカードの他、Pmodインタフェースも備えており、デバイス評価、プロトタイプから少量生産品までさまざまな用途で利用できます。
今回の温湿度センサーには、Pmodデバイス「US082-HS3001EVZ」を利用します。
Pmodについては、技術コラムVol.12「Pmod™でサクッとプロトタイピング!」もご覧ください。
(1)Publisher準備(AP-RZFV-0A)
まず、最初に開発環境として、以下のツールをインストール及び作成します。
あらかじめ、「AP-RZFV-0A」のLinux開発キット「LK-RZFV-A01」の開発環境をPCに構築しておいてください。
- Python3
- paho-mqtt(Python MQTTモジュール)
- smbus2(Python I2Cモジュール)
- Pythonプログラム
システム構築には、いくつか方法がありますが、今回は、Pythonを使用して構築します。
Python3およびMQTTのパッケージを追加するために、local.confに以下の行を追加します。
IMAGE_INSTALL:append = " python3 python3-smbus2 python3-paho-mqtt"
IMAGE_INSTALL:append = " mosquitto mosquitto-clients"
IMAGE_INSTALL:append = " tzdata "
DEFAULT_TIMEZONE = "Asia/Tokyo"
Pythonプログラムから温湿度センサー(I2C)にアクセスするため、LinuxカーネルのデバイスツリーにてI2Cを有効にします。
&i2c0 {
status = "okay";
};
上記設定した内容にて、bitbakeしてLinuxシステムを作成します。
$ bitbake core-image-bsp
作成したLinuxシステムに、Pythonプログラムを作成します。
hs3001.pyのファイル名にて作成します。
#! /usr/bin/env python3
import paho.mqtt.client as mqtt
import smbus2
import time
import datetime
bus = smbus2.SMBus(0)
client = mqtt.Client()
client.connect('192.168.128.210', 1883, keepalive=60)
def get_data():
hum = -1
temp = 0
bus.write_i2c_block_data(0x44, 0, [])
time.sleep(0.02)
for i in range(1000):
data = bus.read_i2c_block_data(0x44, 0, 4)
if data[0] < 64:
hum = (data[0] * 256 + data[1]) / 16383 * 100
temp = (data[2] * 256 + data[3]) / 4 / 16383 * 165 - 40
break
return hum, temp
while True:
h, t = get_data()
print(h, t)
if 0 < h:
dt = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
client.publish('hs3001', f'{dt},{h:7.2f},{t:7.2f}')
time.sleep(5)
※client.connect関数のIPアドレスは、BrokerのIPアドレスを指定します。
(2)Broker準備(Ubuntu)
UbuntuがインストールされたPCにBroker(mosquitto)をインストールします。
$ sudo apt install mosquitto
(3)Subscriber準備(Ubuntu)
UbuntuがインストールされたPCにSubscriber(mosquitto-clients)をインストールします。
$ sudo apt install mosquitto-clients
3. 動作確認
では、実際に構築したシステムを動かしてみましょう。
(1)Brokerを起動する(Ubuntu)
BrokerがPublisherから提供されたデータSubscriberに提供しますので、最初に起動します。 mosquittoは、インストール後に自動で起動しますので、ここでは特に起動の手順は必要ありません。
(2)Publisherを起動する(AP-RZFV-0A)
作成したpythonプログラムを実行し、温湿度センサーから取得したデータをBrokerに提供を開始します。
# python ./hs3001.py
(3)Subscriberを起動する(Ubuntu)
最後に、Brokerにある温湿度センサーのデータを取得して表示します。Ubuntuのターミナルから以下のコマンドを実行します。
5秒毎に1行ずつ(タイムスタンプ、湿度、温度)が表示されます。
$ mosquitto_sub -h 192.168.128.210 -t hs3001
20230718182244, 44.45, 32.11
20230718182249, 44.52, 31.99
20230718182254, 44.53, 31.92
20230718182259, 44.49, 32.03
:
<以降省略>
:
4. まとめ
今回は、RISC-Vの概要とAP-RZFV-0AとMQTTを使用した簡単なIoTシステムの作成手順を紹介しました。
RISC-Vは2010年から開発が始まったまだ新興のISAではありますが、従来のCPUと比較しても、性能も遜色なく、特に意識することなく使用できます。
新たなCPUの選択肢として、今後ますます普及が予想されるRISC-Vを、一度試してみてはいかがでしょうか。
製品のご案内
本コラム以外にも開発にお役立ていただける技術情報をアプリケーションノートとして公開しております。
ご興味のある方は、ぜひ製品をご利用ください。
- ※RISC-V、RISC-V International、およびRISC-Vロゴは、RISC-V Internationalの商標です。
- ※記載されている会社名、製品名は、各社の登録商標または商標です。
- ※記載の内容は改良のため、予告なく変更する場合がございます。