我需要帮助。我用树莓派制作了一个机器人,然后用摄像头和扬声器对其进行了扩展。我安装了一个lighthttpd服务器,我可以用一个简单的网站来控制它。
它工作得很好,when服务器显示了这个站点: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 &$上面的代码,在终端上运行时会发出声音,但在when服务器上运行时就不会。有没有什么方法可以让我从网站上运行任何命令?是的,我意识到了这方面的安全隐患。我不是一个开发人员,正在努力学习,所以欢迎任何想法。
另外,有没有一种方法可以创建一个带有字段的站点来输入文本,然后raspberry pi将使用espeak来说话?
发布于 2017-09-06 02:16:04
我在/etc/sudoers文件中添加了以下内容,它可以正常工作。是的,我理解这背后的安全隐患,所以请不要在生产环境中这样做。
Cmnd_Alias ESPEAK_CMDS = /usr/bin/espeak
www-data ALL=(ALL) NOPASSWD: ESPEAK_CMDS另请查看/var/log/syslog以了解更多详细信息
https://stackoverflow.com/questions/46016576
复制相似问题