ラズパイをAWS IoTと連携させてみた


# はじめに
最近AWSの勉強を始めたので、書籍で勉強してもあまりイメージがわかないので、手元にあるラズパイを使ってAWSと接続してみようと思う。

以下の記事を参考に実施した。

https://qiita.com/h_id32/items/a2655e8b7040c1c10016

https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/connecting-to-existing-device.html

# 接続してみる
AWSのマネジメントコンソールからAWS IoT Coreを選択し、デバイスを接続ボタンを押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529381/25edb730-d797-577f-9627-306fc0954fbb.png)

sshでMacからラズパイに接続し、terminalで以下のコマンドを実行


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529381/4b27b08e-1626-9ba6-f0d9-4913347dbb74.png)



```bash
4 bytes from ec2-54-64-88-250.ap-northeast-1.compute.amazonaws.com (54.64.88.250): icmp_seq=2 ttl=248 time=34.9 ms
64 bytes from ec2-54-64-88-250.ap-northeast-1.compute.amazonaws.com (54.64.88.250): icmp_seq=3 ttl=248 time=74.8 ms
64 bytes from ec2-54-64-88-250.ap-northeast-1.compute.amazonaws.com (54.64.88.250): icmp_seq=4 ttl=248 time=24.7 ms
64 bytes from ec2-54-64-88-250.ap-northeast-1.compute.amazonaws.com (54.64.88.250): icmp_seq=5 ttl=248 time=25.7 ms
64 bytes from ec2-54-64-88-250.ap-northeast-1.compute.amazonaws.com (54.64.88.250): icmp_seq=6 ttl=248 time=14.1 ms
```

うまく行ったみたい。


次にデバイスのプロパティを設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529381/59d33bb2-a3b8-07f3-fbce-aec7524ef2bf.png)


OSとSDKを選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529381/365946b3-9a4d-6b23-4e97-89cc4f60b13d.png)


接続キットをダウンロードする。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529381/c6ab6a9a-a3dd-34e1-d779-e4c5b1b7d781.png)



macからラズパイへscpでファイル転送。
書き込み権限がなかったため、chmodで権限付与して実施。

参考：

https://qiita.com/hirQ/items/65c4182564c0f11595a0


無事転送できたのunzipする。

```
unzip connect_device_package.zip
```

解凍できた。

```
connect_device_package.zip  RaspberryPi3B.private.key 
RaspberryPi3B.cert.pem      RaspberryPi3B.public.key
RaspberryPi3B-Policy        start.sh
```

AWS IoT Device SDK に必要なツールとライブラリをインストールする。

実行したコマンドは以下。

```
sudo apt update
sudo apt-get upgrade
sudo apt-get install cmake
sudo apt-get install libssl-dev
sudo apt install maven -y
```


スタートスクリプトを実行するための権限を付与する。

```
chmod +x start.sh
```

スクリプトを実行。
```
./start.sh
```

DownloadやらInstallが実行されたが、エラーになった。

```
Installing AWS SDK...
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.
    
    For more information visit http://rptl.io/venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
```

Pythonのパッケージ管理が外部で管理されている環境で、システム全体にパッケージをインストールしようとしているという警告みたい。仮想環境を作成して実行してみる。

```
python3 -m venv myenv
source myenv/bin/activate
```

AWS IoT Device SDK for Python をインストール

```
python3 -m pip install awsiotsdk
```

再度スタートスクリプトを実行。
```
./start.sh
```
サンプルアプリケーションが起動した。うまく行ったみたい。

```
Running pub/sub sample application...
Connecting to .iot.ap-northeast-1.amazonaws.com with client ID '...
Connection Successful with return code: 0 session present: False
Connected!
Subscribing to topic 'sdk/test/python'...
Subscribed with 1
Sending messages until program killed
Publishing message to topic 'sdk/test/python': Hello World!  [1]
Received message from topic 'sdk/test/python': b'"Hello World!  [1]"'
Publishing message to topic 'sdk/test/python': Hello World!  [2]
Received message from topic 'sdk/test/python': b'"Hello World!  [2]"'
Publishing message to topic 'sdk/test/python': Hello World!  [3]
Received message from topic 'sdk/test/python': b'"Hello World!  [3]"'
Publishing message to topic 'sdk/test/python': Hello World!  [4]
```

AWSのコンソールを確認してもメッセージが届いている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529381/1598d141-a0e6-0d24-41f6-16e0da081f1d.png)


# おわりに

とりあえずラズパイをAWSで接続させることには成功した。
今度は温度センサで取得したデータを送れるか試そうと思う。