Code für ESP32-Platine, muss als „main.py“ benannt werden:
import network
import socket
import time
SSID = "ESP32"
PASSWORD = "po12345678"
def setup_access_point(ssid, password):
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=ssid, password=password, authmode=network.AUTH_WPA2_PSK)
while not ap.active():
print("Esperando que el Access Point se active...")
time.sleep(1)
print("Access Point activado. SSID:", ssid, "Password:", password)
return ap
def setup_socket(ap):
ip, _, _, _ = ap.ifconfig()
print("IP del Access Point:", ip)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((ip, 8080))
s.listen(5)
return s
def main():
ap = setup_access_point(SSID, PASSWORD)
s = setup_socket(ap)
while True:
print("Esperando conexiones...")
conn, addr = s.accept()
print("Conexión desde:", addr)
data = conn.recv(1024)
text=data.decode('utf-8')
if text:
print(text)
try:
exec(text)
response = 'Instrucciones ejecutadas correctamente'
except Exception as e:
response = 'Error al ejecutar instrucciones: {}'.format(e)
conn.send(response.encode('utf-8'))
conn.close()
if __name__ == "__main__":
main()
Hauptcode, in dem Sie Sprachbefehle geben, ich habe es „vozOffline.py“ genannt:
from vosk import Model, KaldiRecognizer
import pyaudio
from comparaOrdenes import comprobar
#https://alphacephei.com/vosk/models
model=Model(r"/Users/cesarhernandez/Desktop/Mypython/vosk-model-small-es-0.42")
recognizer=KaldiRecognizer(model, 16000)
llamada="Hola tarjeta"
finllamada="ya puedes parar"
mic=pyaudio.PyAudio()
stream= mic.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8192)
stream.start_stream()
while True:
data=stream.read(8192)
if recognizer.AcceptWaveform(data):
text=recognizer.Result()
if llamada.lower() in text.lower():
print("Hola dime que quieres hacer")
while True:
data=stream.read(8192)
if recognizer.AcceptWaveform(data):
text=recognizer.Result()
if finllamada.lower() in text.lower():
print("ok, apago todo el servicio")
stream.stop_stream()
stream.close()
mic.terminate()
break
else:
orden=text.lower()
#{
#"text" : "enciende la luz"
#}
orden2=orden[14:-3]
comprobar(orden2)
break
else:
print("no entiendo lo que dices")
Code mit den Befehlen, die wir senden möchten, ich habe es „comparaOrdenes.py“ genannt:
from envioOrden import run_micropython_code
def comprobar(palabra):
#Comprobar si reconoce una instruccion
if palabra == 'apaga la luz':
print('entiendo que apague la luz')
run_micropython_code(apagaLed)
elif palabra == 'enciende la luz':
print('entiendo que encienda la luz')
run_micropython_code(enciendeLed)
elif palabra == 'enciende y apaga':
print('entiendo que encienda y apague la luz')
run_micropython_code(enciendeapaga)
elif palabra == 'reiniciar':
print('entiendo que haga un reset')
run_micropython_code(reset)
else:
print(palabra)
print('lo siento, no he entendido la instruccion')
def apagaLed():
return '''
import machine
print("apaga")
led=machine.Pin(14, machine.Pin.OUT)
led.off()
'''
def enciendeLed():
return '''
import machine
led=machine.Pin(14, machine.Pin.OUT)
led.on()
'''
def enciendeapaga():
return '''
import machine
led=machine.Pin(14, machine.Pin.OUT)
led.off()
'''
def reset():
return'''
import machine
machine.reset()
'''
Code, der den Befehl an die ESP32-Platine sendet, ich habe es „envioOrden.py“ genannt:
import socket
def run_micropython_code(main3):
leerparaESP32=main3()
HOST = "192.168.4.1"
PORT = 8080
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(leerparaESP32.encode('utf-8'))
return
Schreibe einen Kommentar Antworten abbrechen