Deguの初期設定からAWS IoT Coreへの接続までやってみた
はじめに
CX事業本部の高橋雄大です。
発注していたDeguの機器が届きました。(Deguベースユニット、Deguゲートウェイ、Groveモジュール)
早速、Deguの初期設定とAWS IoT Coreへの接続をやってみます。
Deguとは?
Deguは、エッジ端末の開発経験のないクラウドエンジニアでも簡単に作れるIoTセンサーの実現を目指して始動したオープンソースプロジェクトです。200種類以上のセンサーやアクチュエータ中から目的にあったモジュールを選択し、通信機能を持つベースユニットに接続することで、メッシュネットワーク対応の端末「Deguセンサー」をDIY感覚で試作することができます。
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ユーザーを作成します。アクセスの種類は「プログラムによるアクセス」を許可しておけば大丈夫です。
アクセス許可の設定では「既存のポリシーを直接アタッチ」から「AWSIoTConfigAccess」を選択してください。次のステップでタグの設定は不要です。
最後に、確認画面で設定内容が正しいことを確認し、IAMユーザーを作成します。IAMユーザーの作成が完了するとアクセス情報が表示されます。このアクセス情報はDeguゲートウェイを設定する際に使用するので、「.csvのダウンロード」をクリックしてPCに保存します。
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ベースユニットをDeguゲートウェイに接続
AWS IoT Coreに登録ができたら、Deguベースユニットの電源を入れ直します。Deguベースユニットの電源を入れ直してから、数十秒でDeguゲートウェイへの接続が完了します。
Deguゲートウェイへの接続が完了すると、AWS IoT Core上に登録されているモノの「シャドウ」に、Deguが送信しているJSONメッセージが反映されてきます。
※ AWS IoT Coreに登録してから、5分以内にDeguゲートウェイに接続する必要があります。
※ 5分を超過した場合は、モノを削除してMACアドレスの登録からやり直します。
最後に
私は普段全くハードウェアには手を出していませんが、問題なくDeguをAWS IoT Coreに接続することができました。次回はGroveモジュールを使用して、データの収集をやってみようと考えています。