RaspberryPiで今の環境観測データを音声にAquestalk版

RaspberryPiで温度・湿度・気圧データを音声出力をしてみる。

01_準備物

本体 RaspberryPi3  
音声合成ソフト Aquestalkpi  
センサー BME280 秋月電子通商
小さいブレッドボード BB-601(白) 秋月電子通商
ジャンプワイヤー(メスーオス)   秋月電子通商
タクトスイッチ DTS 秋月電子通商
ヘッドフォン なんでもOK  

GPIO(BCM)の24とGNDのあいだにタクトスイッチを付けただけ。

img_2047
BME280はここの接続通り。
タクトスイッチONでイヤフォンジャックから時刻と環境観測データを出力する。

img_2049

02_RaspberryPiの設定

ディスプレイをつなぐとHDMI経由の音声になってしまう?ので音声出力をイヤフォンジャックからとするための設定

$ sudo raspi-config

7 Advanced Options → A4 Audio → 1Force 3.5mm ('headphone') jack

057

$ sudo raspi-config
numid=3,iface=MIXER,name='PCM Playback Route'
; type=INTEGER,access=rw------,values=1,min=0,max=2,step=0
: values=1

03_AquesTalkPi

ダウンロードサイトからtarを取得して
/usr/local/binで解凍したのみ 04_Pythonスクリプトでも絶対パスで
/usr/local/bin/aquestalkpi/AquesTalkPiとしています。これだけで音声合成が出来る事がすごい。ライセンスについてはこちらに詳細有りです。

04_Pythonのスクリプト

000_enviroment_voice.py

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

#BME280の観測データをしゃべらせる
#2017/01/09

import RPi.GPIO as GPIO
from time import sleep

#SHELLの取り込みを可能にする
import subprocess as proc

import datetime

# BCMで初期化=GPIO番号を用いる
GPIO.setmode(GPIO.BCM)

#プルアップに設定
GPIO.setup(24,GPIO.IN, pull_up_down=GPIO.PUD_UP)

try:
    while True:
         if GPIO.input(24) == GPIO.LOW:
             #print "switch on"
             print "============================================"
             
             #現在時刻の取得
             dt=datetime.datetime.now()
             
             #時刻をファイルにWrite
             f = open("/usr/local/bin/001_datetime.txt", "w")
             tstr=dt.strftime("%H時%M分%S秒です。温度は")
             f.write(tstr)
             f.close()
             #print dt
             #PythonからSHELLの呼び出し
             #BME280温度を取得し002_temp.txtに書き込み
             proc.call("/usr/local/bin/getBME -t | sed s/C//g > /usr/local/bin/002_temp.txt", shell=True)
             proc.call("/usr/local/bin/getBME -h | sed s/%//g > /usr/local/bin/002_humd.txt", shell=True)
             #proc.call("/usr/local/bin/getBME -p | sed s/Pa//g > /usr/local/bin/002_pres.txt", shell=True)
             proc.call("echo \(`/usr/local/bin/getBME -p | sed s/Pa//g`\) / 100 | bc > /usr/local/bin/002_pres.txt", shell=True)
             
             #単位付け
             proc.call("echo '度。湿度は、' >> /usr/local/bin/002_temp.txt", shell=True)
             proc.call("echo '%。気圧は、' >> /usr/local/bin/002_humd.txt", shell=True)
             proc.call("echo 'ヘクトパスカルです。' >> /usr/local/bin/002_pres.txt", shell=True)
             
             #時刻と観測データの結合
             proc.call("cat /usr/local/bin/001_datetime.txt /usr/local/bin/002_temp.txt /usr/local/bin/002_humd.txt /usr/local/bin/002_pres.txt > /usr/local/bin/003_union.txt", shell=True)
             
             #結合したファイルの改行を除去
             proc.call("tr -d '\n' < /usr/local/bin/003_union.txt > /usr/local/bin/004_union.txt", shell=True)
             
             # ファイルの読み込み
             f = open('/usr/local/bin/004_union.txt', 'r')
             for row in f:
                 print row
             f.close()
             # s:speed v:voicekind g:volume
             proc.call("/usr/local/bin/aquestalkpi/AquesTalkPi -s 100 -v f1 -g 100 -f /usr/local/bin/004_union.txt | aplay >/dev/null 2>&1", shell=True)
         sleep(0.01)

#CTRL+C処理
except KeyboardInterrupt:
    pass
GPIO.cleanup()

getBMEは失念しましたが、Webから頂戴いたしました。感謝!

python 000_enviroment_voice.pyで起動後タクトスイッチ押下でしゃべります。
CTRL+CでPGの中止をします。

コメント

  1. 石伏 正博 より:

    はじめまして石伏です。
    ラズベリーパイで色々事を試していたら電子計算の操縦桿にたどり着きました
    さっそく、温度、湿度などのおしゃべりを Aquestalkpiで試しているのですが
    getBME のところでつまずいています。
    なんとなくですが getBMEは bme280のデータをここへ取り込んで、
    テキストへ書き込んでるなとまでは理解できたのですが その動作をどのように
    したら良いかわからず他のサイトを見ても理解出来ないのです。
    もしよろしければ、getBMEについて教えて頂けまいでしょうか
    よろしくお願いいたします。
    石伏

    • ひろきち より:

      こんにちは石伏さん。
      しゃべらせる前にターミナルで温湿度気圧が表示できるかを確認されると構築の近道になります。
      getBMEはCQ出版社のトランジスタ技術2016年08月号
      http://toragi.cqpub.co.jp/tabid/776/Default.aspx
      http://toragi.cqpub.co.jp/Portals/0/backnumber/2016/08/p121.pdf
      に詳しく掲載されています。ご興味があるようでしたらバックナンバーを取り寄せるといいと思います。
      PaspberryPiに接続するIoT実験基板のApplePiには、表示器・I/O・DAC・BME280等が搭載されておりそれらを動かすプログラムソースは上記CQ出版社のダウンロードサイトから取得いたしました。
      コンパイル後に出来るgetBMEを使ってPythonのスクリプトを作りました。
      ApplePiを製作し動かしましたが、温湿度についてはRaspberryPiのCPUで炙られて+5℃位を指していました。同じBOSCH製センサチップを使っている秋月電子通商のBME280をGPIOから引き出してこちらのソースで動かしました。
      頑張って完成するといいですね!

  2. 石伏 正博 より:

    早速の回答、有り難う御座います。

    2本のプログラムを動かしそこでできたコンパイル?からデータをとるのですね
    チャレンジしてみます。

    まずは自分で頑張ってみます。

     それとラズパイを知るきっかけになったトランジスタ技術の11月号の
     PICASOも同様に5度程度違っていて設定がおかしいのかと思っていましたが
     同様ですね
    ほぼシロウトなので不明なところが出てきましたらよろしくお願い致します。

    石伏

  3. 石伏 正博 より:

    連絡が遅くなりましたが
    色々試してうまく動かすことができました
    ブログを楽しく拝見しています

     ありがとうございました