首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Raspberry pi上单击网站中的链接时运行espeak命令

如何在Raspberry pi上单击网站中的链接时运行espeak命令
EN

Stack Overflow用户
提问于 2017-09-03 01:49:08
回答 1查看 274关注 0票数 0

我需要帮助。我用树莓派制作了一个机器人,然后用摄像头和扬声器对其进行了扩展。我安装了一个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)脚本包含:

代码语言:javascript
运行
复制
#!/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脚本将被用来生成一些语音。我遇到的问题是,即使我在上面的文件中添加一个下面的命令,它也会运行电机,但它不会说话。

代码语言:javascript
运行
复制
espeak test

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

index.php

代码语言:javascript
运行
复制
<?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复制)

代码语言:javascript
运行
复制
#!/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来说话?

EN

回答 1

Stack Overflow用户

发布于 2017-09-06 02:16:04

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

代码语言:javascript
运行
复制
Cmnd_Alias ESPEAK_CMDS = /usr/bin/espeak
www-data ALL=(ALL) NOPASSWD: ESPEAK_CMDS

另请查看/var/log/syslog以了解更多详细信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46016576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档