技術コラム Vol.14

RISC-VとLinuxではじめるIoT

公開日: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概要
  2. システム構築
  3. 動作確認
  4. まとめ

1.RISC-V, MQTT概要

RISC-V

RISC-V(リスク ファイブ)は、カリフォルニア大学バークレー校で開発された オープンソースライセンス(BSD)のCPUアーキテクチャーです。ライセンス費用が不要で、RISC-Vチップの設計や派生成果物を、オープンかつ自由に、またはクローズドで独占的に、作成することを許可されているため 近年注目を集めています。

RISC-Vの仕様は、RISC-V Internationalという団体が策定しており、世界中の有名企業も参加しています。

MQTT

MQTT(Message Queue Telemetry Transport)は、1999年にIBM社とEurotech社のメンバーにより考案され、2014年にはOASISによって正式な標準規格とされた通信プロトコルです。

衛星経由で石油パイプラインをモニタリングしたり、センサー情報(例えば、電気やガスの使用状況)をクラウドにアップしたりする用途でよく使用されます。

HTTPと良く比較されますが、HTTPに比べトラフィックが10分の1となり、通信量やCPU負荷が大幅に削減されます。言い換えれば、電力消費量が抑えられるためバッテリーで動作するようなモバイル向けに最適です。

MQTTプロトコルの仕様は、以下から入手可能です。

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の商標です。
  • ※記載されている会社名、製品名は、各社の登録商標または商標です。
  • ※記載の内容は改良のため、予告なく変更する場合がございます。