J'ai besoin d'aide. J'ai construit un robot en utilisant Raspberry pi, puis l'a élargi avec une caméra et un haut-parleur. J'ai installé un serveur Lighthttpd et je peux le contrôler en utilisant un simple site web.Comment exécuter la commande espeak lorsque je clique sur un lien dans un site Web sur un Raspberry pi
Cela fonctionne très bien, le serveur web présente ce site: https://github.com/Mjrovai/MJRoBot-Web-RPi-Robot/blob/master/index.html et quand un bouton est cliqué un script cgi démarrer un moteur. Par exemple forward.cgi scénario (sous la direction https://github.com/Mjrovai/MJRoBot-Web-RPi-Robot/blob/master/cgi-bin/forward.cgi) contient:
#!/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
Lorsque ci-dessus script s'exécute, il définit chaque GPIO et moteurs démarre. Ce que j'essaye de faire maintenant est d'ajouter une fonction quand j'appuie sur un bouton un autre script de cgi sera employé pour produire un certain discours. Le problème que je suis est même si j'ajoute une commande ci-dessous au fichier ci-dessus, il fonctionne les moteurs, mais il ne parle pas.
espeak test
J'ai essayé avec PHP. J'ai utilisé ci-dessous le fichier index.php pour déclencher speak.sh lorsque le lien est cliqué, mais cela ne fonctionne pas.
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 (copié à partir 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 &$
Le code ci-dessus, il produit lorsqu'il est exécuté dans le terminal solide, mais lorsqu'il est exécuté dans un serveur web, il ne le fait pas. Est-ce que je peux exécuter n'importe quelle commande à partir d'un site Web? Oui, je suis conscient des implications de sécurité à ce sujet. Je ne suis pas un développeur et j'essaie d'apprendre pour que les idées soient les bienvenues.
Existe-t-il un moyen de créer un site avec un champ pour taper le texte que parlait alors fraspberry pi en utilisant espeak?
[Modifier] votre question et montrer comment vous commencez '' forward.cgi' et comment index.php'? – stovfl