[ハンズオン] AWS IoT CoreハンズオンをRaspberry Pi 4でやってみた

AWS IoT Coreの初心者向けハンズオンをRaspberry Piを使ってやってみました。ハンズオンではRaspberry Pi Zeroを使っていますが、本記事ではRaspberry Pi 4で実施する場合のセットアップ手順をご紹介します。
2020.10.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2020年9月29日のAWSブログにて紹介されているAWS IoT CoreのハンズオンをRaspberry Pi 4を使ってやってみました。

下記の構成図はハンズオンより引用したものです。内容盛り沢山です。

盛り沢山なので時間かかりそう…と感じてしまいましたが、いざやってみると画面キャプチャが豊富で丁寧に手順が説明されているため、さくっと動かすことができました。

ハンズオンの概要

本ハンズオンではAWS Cloud9またはRaspberry PiをAWS IoT Coreに接続し、温度・湿度センサーで収集したデータを様々なAWSサービスを連携させて可視化・蓄積します。

Cloud9の場合は実際にセンサーで計測した温度・湿度ではなくダミーデータとなります。Cloud9であれば実際のモノを必要とせず手軽にハンズオンを進めることができます。

Raspberry Piの場合は温度・湿度センサーを取り付けて実データを使って進めることができます。

Raspberry Pi 4を使う際の注意点

本ハンズオンではRaspberry Pi Zeroの利用が前提となっています。

Raspberry Pi 4を使用する場合、ハンズオンのデバイスセットアップ手順で解説されている温度・湿度センサーの取り付け手順が異なり(使用しているセンサーの製品が異なるため)、かつダウンロードして使用するサンプルコードも少し修正が必要となります。

そのため、以降はRaspberry Pi 4を用いたハンズオンのセットアップ手順を紹介します。

Raspberry Pi 4と温度・湿度センサーはAmazonにて購入したものです。

Raspberry Pi 4自体のセットアップ

私はUbuntu 20.04を使用しているため以降の説明もUbuntu 20.04が前提となります。

OSは下記のUbuntu公式チュートリアル通りに進めれば簡単にセットアップすることができます。microSDにOSイメージを書き込むためにカードリーダが必要です。

sshでRaspberry Piに接続したらawsiotsdkをインストールします。ただし依存しているawscrtをインストールするにはcmakeが必要ですので、下記のGitHubのREADME.mdを参照してインストールしておきます。

sudo apt-get update
sudo apt-get install cmake
sudo apt-get install libssl-dev

cmakeの準備ができたらハンズオンに記載されているコマンドでawsiotsdkをインストールします。

sudo -H pip3 install awsiotsdk

温度・湿度センサーの取り付け

写真のように、温度・湿度センサーから出ているコネクタに「DAT」「VCC」「GND」と記載されています。それぞれ以下のように取り付けました。

DHT22 Raspberry Pi(数字は物理ピン番号)
DAT 3: GPIO2
VCC 2: 5V
GND 6: GND

参考:Raspberry Pi GPIO

※Googleで「Raspberry Pi DHT22」と検索すればDHT22の詳細仕様や取り付け方法を解説しているブログ記事がヒットしますので、温度・湿度センサーについてより詳しく知りたい方は参考にしてみてください。

ハンズオンのRaspberry PIセットアップ手順ではLCDディスプレイも取り付けていますが、なくても後述のようにサンプルコードを修正するとハンズオンを進めることができます。

サンプルコードの修正

ダウンロードしたget_data.pyを下記の通り修正します。使用したセンサーとピン番号に合わせます。また、LCDディスプレイへ表示しているコードをコメントアウトします。

def main():
    import time

    # sensor = DHT('11', 16)
    sensor = DHT('22', 2)

    while True:
        humi, temp = sensor.read()
        text = 'humi {0:.1f}% \ntemp {1:.1f}*'.format(humi, temp)
        if humi is not None:
            # set_display.get_output(text)
            print('DHT{0}, humidity {1:.1f}%, temperature {2:.1f}*'.format(sensor.dht_type, humi, temp))
        else:
            # set_display.get_output(text)
            print('DHT{0}, humidity & temperature: {1}'.format(sensor.dht_type, temp))
        time.sleep(1)

device_main.pyもセンサーとピン番号の部分を同様に修正します。

def device_main():
    """
    main loop for dummy device
    """
    global device_name, mqtt_connection, shadow_client

    # sensor = DHT('11', 16)
    sensor = DHT('22', 2)

get_data.pyを実行して温度・湿度が取得できているか確かめます。

ubuntu@ubuntu:dummy_client
$ python3 get_data.py
DHT22, humidity 56.1%, temperature 27.9*
DHT22, humidity 55.9%, temperature 27.8*
DHT22, humidity 55.8%, temperature 27.8*
DHT22, humidity 55.7%, temperature 27.8*
DHT22, humidity 55.6%, temperature 27.8*

ここまで実施すれば、あとはハンズオン通りに進めることができます。

おわりに

やはり実際のデータを収集してハンズオンを進めた方が楽しいです。Raspberry Pi Zeroでなくてもハンズオンは進められるので、ぜひ挑戦してみてください。