私は実行する必要がある2つのループを持っています.1つは音声コマンドを聞き取り、もう1つはMQTTブローカーに接続しておき、MQTTトピックを聞いて/ポストし、音声コマンドが発行されたときにポストします。問題は、これを設定する最善の方法がわからないことです。 MQTTが音声コマンドを実行して関数を実行するのを待って、これらの両方を実行するようにこれらを設定するにはどうすればよいですか?クラス?マルチスレッド?どこから始めるべきかわからない2つのループを同時に呼び出すと2つのループが同時に実行されますか?
また、 - この音声認識(ポケットフィックス)は絶対に恐ろしいです。おそらく5%のオン/オフを拾い、毎回あらゆる種類のランダムな応答を与えます。ボーナスブローポイントは、正しい方向に私を向けることができれば、より良いモジュールを使用したり、より正確なコードポケットフィックスを使用して修正することができます(既に私はGoogle Cloud-Speech APIキーに申し込みましたが、まだ受け取っていません) 。
import pyaudio, os
import mqttPublisher
import speech_recognition as sr
def mainfunction(source):
audio = r.listen(source)
user = r.recognize_sphinx(audio)
print(user)
if user == 'on':
mqttPublisher.led_on()
elif user == 'off':
mqttPublisher.led_off()
if __name__ == '__main__':
r = sr.Recognizer()
with sr.Microphone() as source:
while 1:
mainfunction(source)
mqttPublisher.py:
ここでコード
voice.pyだ
import paho.mqtt.client as mqtt
def led_on():
mqttc.publish("IoT/LED", payload="1")
print("LED is ON")
def led_off():
mqttc.publish("IoT/LED", payload="2")
print("LED is OFF")
def get_status():
mqttc.publish("IoT/LED", payload="3")
def on_connect(client, userdata, flags, rc):
mqttc.publish("IoT/LED", "connected")
print("connected")
def on_subscribe(client, userdata, mid, granted_qos):
mqttc.publish("IoT/LED", payload="3")
print("subscribed")
def on_publish(client, userdata, mid):
print("message published")
def on_message(client, userdata, message):
print("message printed to topic")
def on_disconnect(client, userdata, rc):
print("Client Disconnected")
mqttc = mqtt.Client()
mqttc.on_connect = on_connect
mqttc.on_subscribe = on_subscribe
mqttc.on_message = on_message
mqttc.on_publish = on_publish
mqttc.on_disconnect = on_disconnect
mqttc.connect("192.168.1.3", 1883)
mqttc.subscribe("IoT/LED", 1)
run = True
while run:
mqttc.loop_start()
ループを別々のスレッドで実行する – hardillb
Coroutinesが実装しようとしていることは私には聞こえます。 – AndyG