[Raspberry Piで簡単IoT] AWS連携~boto3~

boto3とは

AWS (Amazon Web Services) を Python から操作するためのライブラリです。

これを使えば、raspberry Piの開発にクラウドシステム(AWS)を取り入れることができ、一気に世界が広がります。しかも、型を覚えてしまえばとても簡単に使えるのです。備忘録兼ねて型を記事にしておきます。

インストール

まずはboto3のインストール

$sudo pip install boto3

次にaws cliもインストール

$sudo pip install awscli

下のサンプルコードテストの為にmpg321もインストールしておきます。boto3使用だけなら不要です。

$ sudo apt-get install mpg321

config設定

$ aws configure
AWS Access Key ID : アクセスキー
AWS Secret Access Key [None]: シークレットアクセスキー
Default region name [None]: ap-northeast-1(使用するリージョン)
Default output format [None]: json

アクセスキーやシークレットアクセスキーは事前に取得してください。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html

初期設定はこんなもんです。とても簡単です!

サンプルコード(S3)

試しに、S3の音声ファイルを入れてそれを再生してみましょう。

まずはS3に適当なバケットを作成して、その中に好きな音声ファイルを入れてください。サンプルはmp3ファイルを入れて、それをD/Lしてmpg321で再生するサンプルです。

#!/bin/env python
# -*- coding: utf-8 -*-

import subprocess
import boto3

s3_resource = boto3.resource('s3')
bucket_name = '***(バケット名)'

bucket = s3_resource.Bucket(bucket_name)
bucket.download_file('test/test.mp3','play.mp3')

subprocess.run(['mpg321', '-q', 'play.mp3'])

以上で、音声ファイルが再生されると思います。

もし再生されない場合は、音声出力設定(ALSA設定)を見直してくてください。

サンプルコード(Polly)

もう一つ試しにpollyに文章を渡してそれを音声ファイルに変換させて、それを再生させてみましょう。

#!/bin/env python
# -*- coding: utf-8 -*-

import subprocess
import boto3

polly_client = boto3.client('polly')
    
while True:
    print('Please write free sentences.')
    response = polly_client.synthesize_speech(VoiceId='Mizuki',
                    OutputFormat='mp3',
                    Text=input())
    with open('play.mp3', 'wb') as f:
        f.write(response['AudioStream'].read())
    subprocess.run(['mpg321', '-q', 'play.mp3'])

以上で、入力した文章が読み上げられるはずです。いろんな文章を連続で試したかったのでwhileループで記載していますが、面倒ならwhile分は削除してもOKです。

現状のPollyサービスでは日本語音声はMizuki ,Takumiの2パターンに限られますが、SoX(SOund eXchange)などのライブラリを使えば、声色も色々と変えることができます。

また、Amazon Transcribeと組み合わせれば、翻訳して英語で発音してくれるなんていう仕組みも簡単に実装できてしまいます。

まとめ

近年のawsのサービス充実度は凄まじいです。これを使いこなすだけで、誰でも簡単にクラウドを活用したモノづくりができるようになるのでしょうね。

boto3は、raspberry pi × aws の組み合わせにおいて必須ライブラリと思いますので、是非使いこなしちゃいましょう。

[Raspberry Piで簡単IoT] 開発を効率化するインフラ(ツール)

概要

Raspberry Piを使って何かを作ろうとするとき、いちいちキーボードやマウスやディスプレイをセットして使うのは面倒ですよね。
実は、ノートPCが一台あればそんなことはする必要がありません。Raspberry Pi本体があれば十分です。すべて、ノートPCから作業することができます。

というわけでノートPCとRaspberry Pi本体のみを用いて開発したい人の為の便利ツールを、備忘録兼ねて残しておきます。

PCはwindowsの例で書きます。macの人は別のブログを参照してください。

3種の神器

3種の神器と言えば、Tera Term (ターミナル), WinSCP(ファイル転送) , vnc Viewer(バーチャルデスクトップ)でしょう。

Tera Term
(https://forest.watch.impress.co.jp/library/software/utf8teraterm/ )

いわゆるターミナルエミュレータです。SSHによる接続をWindows上から行うためのソフトウェアです。Tera Termにコマンドを打ち込むことで、Raspberry Piのターミナルにコマンドを打ち込んでいることと同じになります。

使い方は簡単です。Tera Teamの画面を開いて、新しい接続で、TCP/IPを選んで、ホストにRaspberry PiのIPアドレスを入力し、ヒストリはチェックを入れて、TCPポートは22を入力、サービスはSSHを選択しておけば良いでしょう。

こんな感じでつながるはずです。user/passwordを聞かれるので入力してください。変更してなければ、pi / raspberry です。

Raspberry Piの設定で、SSHを有効にしておくのも忘れずに。Raspiのデスクトップ(Raspberr Piの設定)からもできますが、ターミナルからも設定が可能です。

$ sudo raspi-config

5 Interfacing Options を選択

P2 SSH を選択

Yes - OK

で完了します。

Win SCP
( https://forest.watch.impress.co.jp/library/software/winscp/ )

続いてはファイル転送用。raspberry pi上にpython用エディタもありますが、そこで開発をするのは面倒ですよね。使い慣れたエディタで作ってから転送する方が楽ですので、ファイル転送のツールも必須です。

こちらも使い方は簡単です。転送プロトコルはSFTPにして、あとはTeraTermと同様にホストのIPアドレスとポート番号(22)、user/passward(初期値はpi/raspberry)を入力してやればつながります。こんな感じです。

VNC Viewer
https://www.realvnc.com/en/connect/download/viewer/ )

次はバーチャルデスクトップ。こちらはあまり使いませんが、一番最初にwifi設定したりraspiのデスクトップを見たい時に使います。

使い方は簡単で、これまで同様にraspiのipアドレスを入力して、user/passwardを入力するだけです。プロトコルはTCPでポート番号は5900ですが、デフォルトで入っているので特に気にする必要はありません。

一つ注意点があります。Raspi4では、理由はよくわかりませんが、raspi起動時にHDMIが接続されていないとvnc接続がうまく出来ないようになっています。以下の設定を行う必要があります。(ターミナルからできます、つまりTera Termから設定ができます)

config.txtファイルを開きます。nanoでもviでも良いです。「hdmi_force_hotplug=1」がコメントアウトされているため、#を消して有効にして保存してください(ctrl + x)。

$sudo nano /boot/config.txt
# hdmi_force_hotplug=1

終わったら再起動してください。

$sudo reboot

Raspberry Piの設定で、VNCを有効にしておくのも忘れずに。Raspiのデスクトップ(Raspberr Piの設定)からもできますが、ターミナルからも設定が可能です。

$ sudo raspi-config

5 Interfacing Options を選択

P3 VNC を選択

Yes - OK

で完了します。

複数のRaspi開発画面を1つに集約したい場合はVScodeが便利

Tera Term + Win SCPがあれば大抵のことはできますが、欠点もあります。複数のRaspberry Piを同時に開発する場合など、Tera TermとWinSCPの画面が大量になりすぎて開くのが面倒だったり、更に言えばWinSCPでファイルをドラッグ&ドロップすることすら面倒になってきたりします。
そんな面倒を一気に解消してくれるのが、Visual Studio Code(VS code)です。Microsoftがフリーで提供してくれているこのエディタは、シンプルにエディタとしても非常に使い勝手が良いのですが、これに「Remote Development」というプラグインをインストールすると、VSCodeのSSH接続機能でRaspberryPi内のコードを編集できるようになり、かつターミナルも打てるようになります。

つまり、Tera Termの役割とWin SCPの役割を同時に担えるようになるのです。ターミナルは「+」ボタンを押すことで一つの画面に複数表示できますので、とても便利です。

インストールや使い方は割愛しますが、「Visual Studio Code」、「Remote development」のキーワードで検索するわかるかと思います。

以下の記事はとても参考になります。https://qiita.com/c60evaporator/items/26ab9cfb9cd36facc8fd

最初のwifi設定では物理手段が必要

これまでwindowsPCで使える便利ツールを紹介してきましたが、これらを使うためにはまず最初にネットワークに接続しないといけません。その際にパスワードを入力したりする必要がありますが、その時だけはマウス/キーボード/ディスプレイが必要になります。

その時は、手持ちのキーボードやマウスを使って、ディスプレイは無ければテレビを使えばよいのですが、以下2点くらいはあると便利かと思います。比較的安く入手できますので、もし金銭的に余裕があれば、お薦めします。

・ワイヤレスミニキーボード
usbドングルをraspi本体に差すだけです。マウスとキーボードの役割を果たします。線がごちゃごちゃにならないしコンパクトに収納できるので良いです。

・7インチタッチディスプレイ

HDMIケーブル経由でディスプレイを表示します。小さいので場所を取らないのと、スピーカーやタッチモニタの機能も付いているのでそれらのテストもできます。1台家にあると何かと便利です。

結論

Rasberry Piの開発が効率化して楽しくなる便利ツールを紹介しました。
それぞれ自分の型があるかと思いますが、参考になるところあれば是非参考にしてください。
p.s.
Visual Studio Codeは本当に便利。日本発のTera Termも、Microsoftの波に飲まれていってしまうのかなぁ。