Çalıştırmam gereken 2 döngüye sahibim, biri ses komutlarını dinlemek için, diğeri MQTT aracı kurumuna bağlı kalmak ve bir MQTT konusunu dinlemek/göndermek, bir ses komutu gönderildiğinde yayınlamak. Sorun şu ki, bunu ayarlamanın en iyi yolu olduğundan emin değilim. Bunları MQTT işlevlerini yürütmek için bekleyen bir ses komutuyla birlikte çalıştırmayı nasıl ayarlayabilirim/çözümü araştırmaya nereden başlarım? Sınıflar? Çoklu kullanım? Nereden başlayacağından emin değilim. Ayrıca - not - bu ses tanıma (pocketsphinx) kesinlikle korkunçtur. Zamanın% 5'ini açar/kapatır, her seferinde rastgele yanıt verir. Daha doğru bir modül veya daha doğru bir kodlama pocketsphinx kullanarak düzeltmek için doğru yönde işaret ederseniz bonus bro puanları (daha önce bir Google Cloud-Speech API anahtarı için kaydoldum ancak henüz almadım) .Aynı anda işlevleri çağırmak için 2 döngüyü çalıştırın?
İşte kod
voice.py:
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: Per hardillb önerisi, ben diş araştırılmış ve sınıfları ile sorunu çözüldü bazı sorular bulundu
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()
Döngüleri ayrı iş parçacığı üzerinde çalıştırın – hardillb
Coroutines uygulamanızın yapmaya çalıştığınız şey bana. – AndyG