klicken Ich brauche Hilfe. Ich habe einen Roboter mit Raspberry Pi gebaut und dann mit einer Kamera und einem Lautsprecher erweitert. Ich habe einen Lighthttpd-Server installiert und kann ihn über eine einfache Website steuern.Wie espeak Befehl ausführen, wenn ich auf einen Link in einer Website auf einem Raspberry Pi
Es funktioniert gut, der Webserver präsentiert diese Seite: https://github.com/Mjrovai/MJRoBot-Web-RPi-Robot/blob/master/index.html und wenn eine Schaltfläche angeklickt wird ein CGI-Skript einen Motor starten. Zum Beispiel forward.cgi (herausgegeben https://github.com/Mjrovai/MJRoBot-Web-RPi-Robot/blob/master/cgi-bin/forward.cgi) Skript enthält:
#!/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
Wenn obigen Skript läuft es jeweils GPIO und Motoren starten setzt.
Was ich versuche, ist jetzt, eine Funktion hinzuzufügen, wenn ich eine Taste drücke, wird ein anderes CGI-Skript verwendet, um etwas Sprache zu erzeugen. Das Problem, das ich habe, ist, selbst wenn ich einen unteren Befehl zur oben genannten Datei hinzufüge, laufen die Motoren, aber es spricht nicht.
espeak test
Ich versuchte mit PHP. Ich habe unten index.php Datei verwendet, um speak.sh zu starten, wenn Link geklickt wird, aber es funktioniert nicht.
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 (aus stackoverflow.com kopiert)
#!/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 &$
Der obige Code, wenn im Terminal laufen sie produziert Ton, aber wenn sie in einem Webserver laufen es nicht. Kann ich irgendeinen Befehl von einer Website ausführen? Ja, ich bin mir der Sicherheitsimplikationen darüber bewusst. Ich bin kein Entwickler und versuche zu lernen, also sind irgendwelche Ideen willkommen.
Gibt es auch eine Möglichkeit, eine Site mit einem Feld zu erstellen, um den Text einzugeben, der dann Raspberry Pi mit espeak sprechen würde?
[Bearbeiten] Ihre Frage und zeigen, wie Sie beginnen 'forward.cgi' und wie' Index.php'? – stovfl