2014年12月21日日曜日

ラズベリーパイがweb経由でしゃべるよ

しばらくラズベリーパイで遊んでいなかったので、
色々と忘れてしまっている。

年末はいろいろあるね。そして仕事もプライベートも停滞気味・・・
よく、仕事と家庭と趣味の3本柱で、どれか1つでも充実していれば、
やっていけるというけれど、なんとかならないかな。

と、現実逃避なのだけど、最近Mysql+PHP+Javascriptの構成で遊んでいる。
直接仕事には関係ないけど、いつか役立つ日が来るはず。

今日やることは、WEB経由でRasPiを喋らせること
node.jsとphpでそれぞれやってみた。



node.js
ar http = require('http');
http.createServer(
    function(req,res){
        res.writeHead(200,{'Content-Type':'text/html'});
        res.end('Raspberry Pi & Node.js');
    }
).listen(8000);


----------------------------------------------------
var http = require('http');
var fs = require('fs');
var url = require('url');
var exec = require("child_process").exec;

var server = http.createServer();
server.on('request', doRequest);
server.listen(8000);
console.log('Server running!');

var cmd = "echo 'ウェブサーバーを起動しました。' | ./aquestalkpi/AquesTalkPi  -v f1 -f - | aplay";
exec(
    cmd,
    function(err, stdout, stderr) {}
);

 
// リクエストの処理
function doRequest(req, res) {
    fs.readFile('./hello.html', 'UTF-8',
        function(err, data) {
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.write(data);
            res.end();
        });
    if(req.method=='GET') {
        var url_parts = url.parse(req.url,true);
        console.log(url_parts.query);
        if('talk' in url_parts.query){
            cmd = "echo '要求" + url_parts.query['talk']+"' | ./aquestalkpi/AquesTalkPi  -v f1 -f - | aplay";
            exec(
                cmd,
                function(err, stdout, stderr) {}
            );
        }
    }
}

----------------------------------------------------



    
    sample
    

 
 

    

Sample Page

これはNode.jsのサンプルページです。
しゃべる内容:

php
 /dev/null &');
 }else{
  exec('echo '.$s_talk.' | /home/pi/aquestalkpi/AquesTalkPi -v -f1 -f - | aplay > /dev/null &');
 }
 echo <<< EOD


 
  
  AquesTalkのテスト
  
 
 
     

WebからRaspiを喋らせる

WebからAquesTalkPiを制御するサンプル。
しゃべる内容:
EOD; ?>

やっていて困ったこと、phpで外部プログラムを実行しようとしたら、
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:4720:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:682: audio open error: No such file or directory

とエラーが出てしまった。
どうやらapacheの権限では、aplayを実行できないような気がする。
そこで、apacheの実行ユーザーを一般ユーザー(pi)に変えてみた
(参考)http://j-caw.co.jp/blog/?p=1407

/etc/apache2/envvars の
export APACHE_RUN_USER=www-data これをpiに変更

これで動いた!


0 件のコメント:

コメントを投稿