Codigo placa ESP32, debe llamarse «main.py»:
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()
Codigo principal donde das las ordenes por voz, yo lo he llamado «vozOffline.py»:
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")
Codigo con las ordenes que queremos mandarle, yo lo he llamado «comparaOrdenes.py»:
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()
'''
Codigo que envia la orden a la placa ESP32, yo lo he llamado «envioOrden.py»:
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
Hola Cesar, cómo estás? Tenes algún instagram donde podamos ir siguiendo también éstos proyectos? Te encontré porque estoy cursando una tecnicatura superior en tecnologías con innovación 4.0 y tus proyectos están muy interesantes. Con mi grupo de compas tenemos que usar la ESP32 para entregar un trabajo!
Gracias, Candela
Hola Candela, muchas gracias por el comentario. Respecto a la cuenta de instagram, de momento no tengo, pero en cuanto tengo un poco de tiempo si me gustaria abrir una cuenta.
Gracias de nuevo por el comentario, me alegra resulten de interes los proyectos.
Un saludo.