pusuke0418’s diary

異常にマルチタスクな社内SEのブログ

Juliusの起動エラーに関するメモ

音声認識ができるJuliusをRaspberry Piにて使いたい。Juliusをインストールして、起動させようとすると下記のようなログが出て起動しない。インストールは、単純に./configure→make→sudo make installにて実施。

Stat: adin_oss: device name = /dev/dsp (application default)
Error: adin_oss: failed to open /dev/dsp
failed to begin input stream

何となく、juliusは/dev/dspを期待しているが、それが開けないということに見える。

ログで検索すると、下記を行えば良いという情報がしばしば見当たる。snd-pcm-ossなるモジュールをロードすればよい。

$ sudo modprobe snd-pcm-oss

そして、再度Juliusを起動すると、しかし、上記のエラーは再び出る。

よくよく見てみると/dev/dspはたしかにモジュールロードによって出現したが、他に/dev/dsp1と/dev/dsp2ができていた。

そして、次のサイトORBIT SPACEに有益な情報を発見。引用をさせていただきます。「USBマイクを接続するとJuliusが標準で使用されるデバイスファイル(/dev/dsp)とは異なるため環境変数で指定します」とのことで、「AUDIODEV=/dev/dsp1」の環境変数を設定されている。手元の環境では、USBのスピーカとマイクがささっていて、マイクを抜き差しして確認してみると、そのときはdsp, dsp2がスピーカ、dsp1がおそらくマイクのようだった。なので手元の環境でもAUDIODEV=/dev/dsp1を設定したところ、動作。

あとは起動時に上記を読み込むようにするのと、dsp番号は手元の環境であると、ときに認識順によって変わってしまうかなと、いった点をもう少し調査。

[環境]
Raspberry Pi 2 Model B

$ uname -r
3.18.11-v7+

jurlius-4.3.1

Raspberry Piで雨降ってたらLED点滅させる

マンションの、家の中から雨の状況が確認しづらく、廊下からもわからなく、下までエレベータで降りたら雨が降ってたということが多かったです。

そんな中、RaspberryPiとYahoo!気象情報APIを使った雨量確認ガジェットを作ってみた | 株式会社バニーホップという情報がありました。

Raspberry PiとYahooのAPIを利用して近傍の雨量情報を取得し、雨量に応じてLEDを光らせるというもののようです。Yahooの利用方法からステップバイステップで紹介されていて、とてもわかりやすい。

そこではnode.jsとフルカラーLEDが利用されていましたが、倣って私は、pythonで単色LEDで作ってみました。まずは動いたので下記しました。

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

import sys
import urllib
import json
import time
import RPi.GPIO as GPIO
import math
import datetime
import os

#ピンをセット。16番を利用。明るさ調整にPWMを利用
#pi(16番ピン)----抵抗-----LED-----pi(GND)の接続
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(16, GPIO.OUT)
p = GPIO.PWM(16, 120)
p.start(0)

while True:
   url = "http://weather.olp.yahooapis.jp/v1/place?"
   appid = "myappid"
   params = urllib.urlencode({"appid" : appid, "coordinates" : "経度,緯度", "output" : "json",})
   
  #データを取得、雨量の部分のみをrainfallに格納
   response = urllib.urlopen(url + params)
   f = response.read()
   jsondata = json.loads(f)
   rainfall = jsondata["Feature"][0]["Property"]["WeatherList"]["Weather"][0]["Rainfall"]

   #取得した値をファイルに書き込み(log取得的な)
   d = datetime.datetime.today()
   today = d.strftime("%Y%m%d")
   f = open("/home/pi/log/"+today+"_rain.txt", "ab")   
   f.write(str(datetime.datetime.now()) + "," + str(rainfall) + "\n")
   f.close()

   #雨が降っていればLED点滅
   if rainfall <= 0:
       time.sleep(180)
   else:
       for i in range(1,90):
          for dc in range(0, 30, 3):
             p.ChangeDutyCycle(dc)
             time.sleep(0.1)
          for dc in range(30, 0, -3):
             p.ChangeDutyCycle(dc)
             time.sleep(0.1)

だいたい3分おきくらいで取れるだろうというアバウトなものです。

で、狙いとしては雨が降っていればLED点滅の部分で、取得雨量に応じて明るさと変化の間隔を分岐で変えれば雨量もなんとなくわかるかも、というものがあります。それに応じてループ回数とPWMの動作を変えればよいかなと思ってますが、雨降ってるのがわかれば良いのでこのままになりそうです

テスト動作させてうまくいってそうであったので、supervisorに登録してデーモン化しておきました。ここは参考ページだと、pm2にあたる部分かな?

Raspberry Pi、DHT22(RHT03)、GrowthForecast、不快指数

毎日の天気予報データは取得してためているのですが、実際の室内温度ならびに湿度が観測したかったので、Raspberry Piで行いました。目的は、温湿度、不快指数の可視化となります。

まずセンサーが必要なので、購入しました。DHT22というものにしました。理由は、下記です。

  • 精度が悪くなさそう
  • Amazonなどでも簡単に入手できる
  • デジタルセンサなので、Raspberry Piから直接扱うことができる
  • ブレッドボードに直接差し込める(はんだづけとか必要ない)

ただ、実際買ったらRHT03というものでしたが同じものとのことでした。

つなぎかたなのですが、ここから参考にしていく、Wiring | DHT Humidity Sensing on Raspberry Pi or Beaglebone Black with GDocs Logging | Adafruit Learning Systemであるとか、あるいはgoogleで「DHT raspberry pi」で画像検索すれば例が出てきました。他のDHT11なども同様に扱えるとのこと。

抵抗は、10kΩ(茶黒橙金)を使いました。そして、最初は案の定、配線ミスで1つダメにしました。ブレッドボードにDH22をさす向きや配線を確認してから電気を流さなければならないのですが、私のようなものにはそれがわからないのです。

そして、値を取るのですが、ここも他力本願です。つぎのとおり。感謝です。Software Install (Updated) | DHT Humidity Sensing on Raspberry Pi or Beaglebone Black with GDocs Logging | Adafruit Learning System

とりあえずグラフにしてみようと思って、GrowthForecastを使ってみました。インストールは、cpanmを使って行うとのことで、いくつかインストール方法はあると思いますが、極力パッケージ派なので、aptを使いました。GrowthForecastが利用するrrd-toolもここで入れました。

$ sudo apt-get install cpanminus rrdtool

としました。そして、

$ sudo cpanm -n GrowthForecast

エラーが出て失敗しました。ログを見ろというのでログを見ました。

configure: WARNING:
----------------------------------------------------------------------------
* I could not find a working copy of pangocairo.…
…(省略)
-> FAIL Installing Alien::RRDtool failed. See /root/.cpanm/build.log for details.

結局、正確な記録が無いために定かではないのですが、必要そうなパッケージを入れて再度行うことで、Alien::RRDtoolもクリアしてインストールはできました。あまりスマートではなかったです。おそらく私の容量が悪いのでしょう。いつもそうでした。

$ sudo apt-get install libcairo2-dev libpango1.0-dev libxml2-devel gettext

実際にはここで他にも少しはまっておりまして、昔Webサーバをしごとで移行しているときに、cpanで移設先に多くのモジュールを入れたり入れなかったり、なぜかやるたび結果が違ったり、他にも様々と、パッケージ管理されているものの横でなぜかそっと動いているコンパイルされたPostgresが思い起こされました。なお、少し調べていたら次のような記事を発見しました。また参考に読んでおきたいと思いました。Perlと本気で向き合いたくない人のためのPerl5実行環境構築 - Qiita

あとはGrowthForecastのサイトみながら動作確認などいたしますGrowthForecast - Lightning fast Graphing / Visualization

上記にて基本的な動作確認ができ、ここまできたら、先に取得しているデータをGrowthForecastに投げるのみです。Adafruitsから利用させていただけるAdafruitDHT.pyでは、humidity, temperatureにそれぞれ値が格納されています。これを、最後のprint部分を、print int(humidity)といった形で、単純に整数値で出すように変えました。元のpythonスクリプトから、print部分のみ変更して下記の3つのファイルを作りました。

[ADatemp.py] 
  print int(temperature)
[ADahumit.py]
  print int(humidity)
[ADadi.py] 
  di = (0.81*temperature)+0.01*humidity*(0.99*temperature-14.3)+46.3 #不快指数
  print int(di)

これをGrowthForecastに投げるscriptを作ります。ファイルパスはスクリプトがあるパスを書いているのみです。GrowthForecastではPOSTしたURLにしたがいグラフが作成され、アップデートされます。ちなみに22 14というのはDHT22を使って、14番ピンを使っているということです。

#!/bin/bash
temperature=`/home/pi/scripts/censor/ADatemp.py 22 14`
humidity=`/home/pi/scripts/censor/ADahumit.py 22 14`
di=`/home/pi/scripts/censor/Adadi.py 22 14`
curl -F number=$temperature http://localhost:5125/api/home/thermometer/tmperature
curl -F number=$humidity http://localhost:5125/api/home/thermometer/humidity
curl -F number=$di http://localhost:5125/api/home/thermometer/temperature-humidity_index

最後に、このscriptを、cronに登録して定期的に動作させることで、グラフが作成されます。
f:id:pusuke0418:20150514004956j:plain