当我点击Raspberry pi

时间:2017-09-02 17:49:08

标签: php python linux raspberry-pi cgi

我需要帮助。我使用Raspberry pi构建了一个机器人,然后使用相机和扬声器进行扩展。 我安装了一个lighthttpd服务器,我可以使用一个简单的网站控制它。

工作正常,网络服务器提供此网站:https://github.com/Mjrovai/MJRoBot-Web-RPi-Robot/blob/master/index.html,当点击按钮时,cgi脚本启动电机。例如,forward.cgi(已编辑的https://github.com/Mjrovai/MJRoBot-Web-RPi-Robot/blob/master/cgi-bin/forward.cgi)脚本包含:

#!/bin/bash
gpio mode 7 out
gpio mode 0 out
gpio mode 2 out
gpio mode 3 out
gpio write 7 0
gpio write 0 1
gpio write 2 0
gpio write 3 1

当上面的脚本运行时,它会设置每个GPIO并启动电机。

我现在要做的是在按下按钮时添加一个功能,另一个cgi脚本将用于生成一些语音。我遇到的问题是,即使我在上面的文件中添加了一个下面的命令,它也可以运行电机,但它不会说话。

espeak test

我试过PHP。我在下面的index.php文件中使用了当点击链接时触发speak.sh但它不起作用。

的index.php

<?php
if ($_GET['run']) {
  # This code will run if ?run=true is set.
  exec("speak.sh");
}
?>

<!-- This link will add ?run=true to your URL, myfilename.php?run=true -->
<a href="?run=true">Click Me!</a>

speak.sh(从stackoverflow.com复制)

#!/bin/bash
#
#  announce  -  script to convert text parameter into spoken sound
#
#  Prerequisites:
#  eSpeak
#  mbrola binary
#  mbrola voice
#  alsa sound
#  libportaudio
#
#  Axel Kemper  21-Feb-2015
#
#==================================================================
#

get_abs_dir() {
  echo "$(cd "$(dirname "$1")" && pwd)"
}

set_volume() {
  #  "amixer scontrols" lists all simple ALSA controls
  #  http://manpages.ubuntu.com/manpages/lucid/man1/amixer.1.html
  amixer set Headphone $1 > /dev/null
  amixer set Headphone $2 > /dev/null
  amixer set PCM $1 > /dev/null
  amixer set PCM $2 > /dev/null
}

text=$*
amplitude=100      #  0 .. 200   default: 100
pitch=50           #  0 .. 99    default: 50
wordsPerMinute=90  #  80 .. 450  default: 175
charFormat=2       #  8-bit character set
charFormat=1       #  UTF-8 character set
soundDevice=sysdefault  #  cf. aplay -L
esHome=$(get_abs_dir $0)
esHome=${esHome%/bin}

voice=en+m3       #   "de+f2"

export LD_LIBRARY_PATH=$esHome/shared_library

set_volume 100% on
#  espeak-data has to reside in $esHome
espeak -a $amplitude -p $pitch -b $charFormat -v $voice "text" --stdout | aplay -D$soundDevice &$

上面的代码,当在终端中运行时会产生声音,但是当在网络服务器中运行它时却没有。无论如何我可以从网站上运行任何命令吗?是的,我知道这对安全的影响。我不是开发人员并且正在努力学习所以欢迎任何想法。

还有一种方法可以创建一个带有字段的网站来输入文本然后树莓派会用espeak说话吗?

1 个答案:

答案 0 :(得分:0)

我在下面添加了/ etc / sudoers文件,它可以工作。是的,我理解这背后的安全隐患,所以请不要在生产环境中这样做。

Cmnd_Alias ESPEAK_CMDS = /usr/bin/espeak
www-data ALL=(ALL) NOPASSWD: ESPEAK_CMDS

还要检查/ var / log / syslog以获取更多详细信息