メインコンテンツまでスキップ

「スマートスピーカー」タグの記事が2件件あります

全てのタグを見る

· 約4分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

Firefox開発元のMozillaがIoTデバイスを管理するGatewayを公開しました。 バージョン0.3なので初公開ではないのかな? いち早く使ってみました。

公式サイト

インストール手順のブログ →インストール手順はここを参考にしました。

GitHubのWiki →インストールした後に何ができるかよくわからなかったのですが、ここに書いてあります。

用意したもの​

  • Raspberry Pi Zero W
  • SDカード 4GBでいけました

インストール​

  1. ここからOSイメージをダウンロード
  2. EtcherでSDカードにコピー
  3. SDカードをRaspberry Piにセット
  4. 電源オン
  5. 初回起動時にはRaspberry PiがWi-Fiのアクセスポイント(SSID:Mozilla IoT Gateway)として起動するので、パソコンをそっちのWi-Fiに接続する
  6. ホスト名はgateway.localなので、ブラウザでアクセス。
    ※私の環境(Windows 10)では上手く接続できなかったので、ipconfigしてデフォルトゲートウェイのIPアドレスに接続しました。
  7. Wi-FiルーターのSSIDが表示されるので選択、パスワードを入力。
  8. 「Connecting...」の表示になると、Raspberry Piのアクセスポイントオフになり、Wi-Fiルーター側のネットワークに接続します。
  9. パソコンをWi-Fiルーターに接続しなおし、再度gateway.localにアクセス。
  10. 外からアクセスするためのドメインxxxxx.mozilla-iot.orgが取得できるので、xxxxxの部分とメールアドレスを入力
  11. 確認メールが届くので、メール記載のURLにアクセス。
  12. ユーザーアカウントを作成する。

これで初期設定が完了です。 お気づきかとおもいますが、専用のドメインが取得できますので、これで外からもアクセスできます。

できること​

機器制御​

アドオンを追加することで様々な機器に対応できる仕組みになっています。バージョン0.3で用意されているアドオンは以下のものです。 残念ながら我が家には対応した機器がありません。

  • GPIO → 後述
  • Philips Hue
  • TP-Link
  • Virtual Things
  • Zigbee
  • Z-Wave

そのうちAlexaやGoogle Homeに対応するかなー。期待大。

フロアマップ​

フロアマップが作れるみたいです。へー。

ルール​

IFTTT的な「○○になったら××する」ができます。

GPIOでLチカしてみよう​

ここの内容です。 https://github.com/mozilla-iot/wiki/wiki/Configuring-GPIO-for-use-with-the-gpio-adapter

初期状態で18番ピンに割当らてています。 上の手順に沿って、ボタンの設定をしても何も変わらず。。

Raspberry Piとスマホは同じWi-Fiに接続していますが、Wi-Fiを切ってもインターネット経由でオンオフができました。

その他​

Raspberry Piにログインしたい​

初期状態ではユーザーpi、パスワードraspberryです。SSHしたい場合にbootパーティションにsshファイルが必要なのも同じです。

https://github.com/mozilla-iot/wiki/wiki/Logging-into-the-Raspberry-Pi

· 約4分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

前回「GoogleアシスタントをAlexa Skillにして「アレクサ、オーケーグーグルで天気を調べて」を実現する」という投稿をしました。

少し改良し、Googleアシスタントの声で応答を返すように改良しました。

こんな感じです。

処理の流れ​

  1. Echoに話しかける
  2. Skill Kit(AWS Lambda)にリクエストが来る
  3. Googleアシスタントにリクエストを投げる
  4. Googleアシスタントからレスポンス(音声・テキスト)が返却される
  5. 音声を一度tmp領域にファイル出力する
  6. ffmpegでAlexaのフォーマットに変換する
  7. 変換した音声ファイルをS3にアップロードする(バケットはパブリック公開しておく)
  8. S3にアップロードした音声ファイルのURLをaudioタグに入れたSSMLレスポンスを返却する
  9. EchoがGoogleアシスタントの声で返事をする

長くなりそうなので、要点だけ解説します。 ソースコードはこちら

Googleアシスタントからのレスポンスをファイルに出力する​

Googleアシスタントのレスポンス中のresp.audio_out.audio_dataが複数に分割されて取得されるので、連結してファイルに出力します。

response_audio_data = b''
for resp in self.assistant.Assist(iter_assist_requests(),
self.deadline):
if resp.audio_out.audio_data:
response_audio_data += resp.audio_out.audio_data
def save_file(output_path, binary):
with open(output_path, "wb") as fout:
fout.write(binary)

音声ファイルをAlexaのフォーマットに変換する​

Googleアシスタントのレスポンスは、mp3で取得できますが、Alexaが求める要件は以下の用になっています。

音声ファイルをAlexaに適した形式に変換する

必要に応じて、変換ソフトウェアを使用してMP3ファイルを必要なコーデックバージョン(MPEGバージョン2)とビットレート(48 kbps)に変換してください。

丁寧にffmpegのパラメーターの記述もあります。

ffmpeg -i <input-file> -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 <output-file.mp3>

ffmpegはLambdaの環境には準備されていないので、デプロイパッケージに含める必要があります。 ffmpegは ここ の「Linux Static Builds」のリンク先からx86_64 buildのものを取得しました。 取得したファイルの中にある、ffmpegバイナリーのみを、デプロイパッケージのルートに格納されるように圧縮します。

Pythonのプログラム中でffmpegを呼び出す部分はこんな感じです。

def convert(input_path, output_path):
try:
command = './ffmpeg -i '+input_path+' -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 -af volume=2.0 ' + output_path
output = subprocess.check_output(
command, stderr=subprocess.STDOUT, shell=True, timeout=3,
universal_newlines=True)
except subprocess.CalledProcessError as exc:
print("Status : FAIL", exc.returncode, exc.output)
else:
print("Output: \n{}\n".format(output))

つづく