Deguの初期設定からAWS IoT Coreへの接続までやってみた

はじめに

CX事業本部の高橋雄大です。

発注していたDeguの機器が届きました。(Deguベースユニット、Deguゲートウェイ、Groveモジュール)
早速、Deguの初期設定とAWS IoT Coreへの接続をやってみます。

Deguベースユニット、Deguゲートウェイ、Groveモジュール

Deguとは?

Deguは、エッジ端末の開発経験のないクラウドエンジニアでも簡単に作れるIoTセンサーの実現を目指して始動したオープンソースプロジェクトです。200種類以上のセンサーやアクチュエータ中から目的にあったモジュールを選択し、通信機能を持つベースユニットに接続することで、メッシュネットワーク対応の端末「Deguセンサー」をDIY感覚で試作することができます。

Degu Project

Deguの特徴

  • 専用キットを用いて、IoTセンサーをDIY感覚で実現
  • モジュールを自由に選んで、IoTセンサー本体に搭載
  • MicroPythonでコードが書ける
  • Degu量産設計サービスで量産製造にも対応

Deguの事前準備

必要機材

Deguの初期設定を行いAWS IoT Coreへ接続するには、以下の機材が必要になります。

  • Deguゲートウェイ
  • Deguベースユニット
  • PC
  • スマートフォン
  • インターネット接続環境
  • 有線LANケーブル

※ Deguゲートウェイは「Degu Gateway G3」を使用しています。
※ PCにUSB接続端子がない場合は、USB変換アダプタなども必要になります。

Degu Gateway G3 製品概要
Deguベースユニット 製品概要

環境

  • MacBook Pro(macOS Mojave 10.14.6)

※ WindowsやLinuxでも可

IAMユーザーの作成

AWSのマネージメントコンソールで、DeguゲートウェイからAWS IoT Coreに接続するためのIAMユーザーを作成します。アクセスの種類は「プログラムによるアクセス」を許可しておけば大丈夫です。

Deguゲートウェイ用のIAMユーザー作成

アクセス許可の設定では「既存のポリシーを直接アタッチ」から「AWSIoTConfigAccess」を選択してください。次のステップでタグの設定は不要です。

Deguゲートウェイ用のIAMユーザー権限

最後に、確認画面で設定内容が正しいことを確認し、IAMユーザーを作成します。IAMユーザーの作成が完了するとアクセス情報が表示されます。このアクセス情報はDeguゲートウェイを設定する際に使用するので、「.csvのダウンロード」をクリックしてPCに保存します。

Deguゲートウェイ用のIAMユーザー作成完了

Deguゲートウェイの設定

DeguゲートウェイにACアダプタを繋いで電源を入れた状態で、付属のUSB(Aオス-miniB)ケーブルとUSBシリアル変換アダプタでPCに接続します。

Deguゲートウェイにシリアル通信

以下のコマンドでDeguゲートウェイとシリアル通信を開始します。

# USBシリアル変換デバイス(Deguゲートウェイ)の名前を確認
ls /dev/tty.usbserial-*

# Deguゲートウェイに接続
screen /dev/tty.usbserial-xxxxx 115200

シリアル通信に成功するとユーザー情報を求められるので、root権限でログインします。
※ 初期のパスワードは「root」です。

初期パスワードの変更

セキュリティリスクを考慮してrootのパスワードを変更しておきます。

passwd
Enter new UNIX password: # 新しいパスワードを入力
Retype new UNIX password: # 再入力

Deguゲートウェイをインターネットに接続

Deguゲートウェイに有線LANを繋いで、インターネット接続を確認します。接続性を検証するために、pingコマンドを実行して応答することを確認します。

ping classmethod.jp

Deguゲートウェイのソフトウェアを更新

Deguゲートウェイの設定を開始する前に、ソフトウェアの更新を行います。古いバージョンのソフトウェアでは、AWS IoT Coreにモノを登録できないなどの不具合がありました。

apt-get update
apt-get upgrade

AWS設定情報の登録

設定ファイルのmqttinfo.jsonを編集します。

vi /etc/coap-mqtt/mqttinfo.json
{
  "key" : "/etc/coap-mqtt/private.pem.key",
  "cert" : "/etc/coap-mqtt/certificate.pem.crt",
  "cafile" : "/etc/coap-mqtt/RootCA.crt",
  "aws_endpoint" : "",
  "secretaccesskey" : "",
  "accesskeyid" : "",
  "region" : ""
}

以下の項目をそれぞれ編集して保存します。

  • aws_endpoint・・・AWS IoT Coreの「設定」画面で取得できるエンドポイント
  • secretaccesskey・・・IAMユーザーのシークレットキー
  • accesskeyid・・・IAMユーザーのアクセスキーID
  • region・・・AWS IoT Coreのリージョン(ap-northeast-1)

Deguゲートウェイのアクセスポイント情報を設定

設定ファイルのcreate_ap.confを編集します。

vi /etc/create_ap.conf
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
NO_HAVEGED=0
WIFI_IFACE=wlan0
INTERNET_IFACE=eth0
SSID=MyAccessPoint
PASSPHRASE=12345678
USE_PSK=0

以下の項目をそれぞれ編集して保存します。

  • SSID・・・WiFi接続で表示されるSSID(1〜32文字)
  • PASSPHRASE・・・WiFi接続のパスワード(8〜63文字)

最後にDeguゲートウェイを再起動して、スマートフォンから接続できることを確認します。

reboot

Deguベースユニットの設定

Deguベースユニットを付属のUSBケーブルを使用してPCに接続します。PC上ではマスストレージとして認識されるので、Macの場合はFinderから「Degu」を確認することができます。

MicroPythonコードの編集

Degu起動後に自動で実行されるmain.pyを編集します。例えば、以下のコードは10秒毎にバッテリー電圧を送信します。再起動(電源を再投入)すると変更されたmain.pyを実行します。

from machine import ADC
import zcoap
import time
import ujson

def battery_voltage():
    R6 = 68
    R8 = 100

    ADC_REF = 0.6
    ADC_RESOLUTION=4096 #12bit
    ain = ADC(1)
    ain.gain(ain.GAIN_1_6) #gain set to 1/6

    raw = ain.read()
    vin = (raw / ADC_RESOLUTION) * ADC_REF * 6

    v = vin * ((R6 + R8) / R8)
    return v

if __name__ == '__main__':
    path = 'thing/' + zcoap.eui64()
    reported = {'state':{'reported':{}}}

    while True:
        addr = zcoap.gw_addr()
        port = 5683
        cli = zcoap.client((addr, port))

        reported['state']['reported']['battery'] = battery_voltage()

        print(ujson.dumps(reported))
        cli.request_post(path, ujson.dumps(reported))
        time.sleep(10)

        cli.close()

DeguをAWS IoT Coreに登録

DeguをAWS IoT Coreに「モノ」として登録します。Deguゲートウェイに無線LANでスマートフォンからアクセスして、DeguのMACアドレスを登録することができます。(PCからもアクセス可)

Webブラウザで http://10.0.0.1/degu/ にアクセスして、QRコードを読み込むか、MACアドレスを手動で入力します。登録ボタンを押すとAWS IoT Coreのモノに登録されます。

DeguのMACアドレスを登録

DeguベースユニットをDeguゲートウェイに接続

AWS IoT Coreに登録ができたら、Deguベースユニットの電源を入れ直します。Deguベースユニットの電源を入れ直してから、数十秒でDeguゲートウェイへの接続が完了します。

Deguゲートウェイへの接続が完了すると、AWS IoT Core上に登録されているモノの「シャドウ」に、Deguが送信しているJSONメッセージが反映されてきます。

Deguから送信されたJSONがAWS IoT Coreのシャドウに反映される

※ AWS IoT Coreに登録してから、5分以内にDeguゲートウェイに接続する必要があります。
※ 5分を超過した場合は、モノを削除してMACアドレスの登録からやり直します。

最後に

私は普段全くハードウェアには手を出していませんが、問題なくDeguをAWS IoT Coreに接続することができました。次回はGroveモジュールを使用して、データの収集をやってみようと考えています。

参考

Degu ユーザーマニュアル
Degu ユーザーコミュニティー