import BlynkLib
import network
import utime as time
from porton import Porton
#define BLYNK_TEMPLATE_ID "TMPL5Ldr8mtcK"
#define BLYNK_TEMPLATE_NAME "PortonMadetaMicroPython"
#define BLYNK_AUTH_TOKEN "MyRM5eSKbAARJ7AK5Zl-mGpJ3e4B6SyL"
#Esto esa para conectar a la WIFI creada con mi móvil
#WIFI_SSID = 'POCOJULIAN'
#WIFI_PASS = ''
#Esto esa para simular conexión WIFI con WOKWI
WIFI_SSID = 'Wokwi-GUEST'
WIFI_PASS = ''
BLYNK_AUTH = 'MyRM5eSKbAARJ7AK5Zl-mGpJ3e4B6SyL'
#-----------------------------------------------------------
# Para conectar a la WIFI
# Lo que hago es añadir un número de intentos (120 intentos de 1 segundo 2 minutos intentando)
# Si antes acaba habiendo WIFI, todo normal, pero si tras 2 minutos intentando no hay WIFI el
# programa continua con modo local (sin conexión a Internet). Es que de la otra forma, al no
# haber WIFI no continuaba el programa y se quedaba aquí indefinidamente (Cuando puede ser que
# no haya WIFI por lo que sea, y no tiene por que quedarse sin ejecutar el programa de control)
#-----------------------------------------------------------
intentos = 120 # <- 120 intentos de 1 segundo
print("Connecting to WiFi network '{}'".format(WIFI_SSID))
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASS)
while not wifi.isconnected() and intentos > 0: # <-- 120 intentos de 1 segundo -> 120 segundos intentandolo (2 minutos)
time.sleep(1)
print(f'WiFi connect {intentos} retry ...')
intentos -=1
if intentos > 0:
print('WiFi IP:', wifi.ifconfig()[0])
#-----------------------------------------------------------
#-----------------------------------------------------------
# Para conectar con el servidor Blynk
#-----------------------------------------------------------
print("Connecting to Blynk server...")
# initialize Blynk
if intentos > 0:
blynk = BlynkLib.Blynk(BLYNK_AUTH)
# Evento de conexión a la nube Blynk
@blynk.on("connected")
def blynk_connected(ping):
print('Blynk ready. Ping:', ping, 'ms')
# Evento de desconexión a la nube Blynk
@blynk.on("disconnected")
def blynk_disconnected():
print('Blynk disconnected')
#-----------------------------------------------------------
frecuencia = 10 # Es el numero de veces por segudno que se va a ejecutar el ciclo de control del porton
# Un valor bajo provocaría que el tiempo de respuesta a eventos fuera muy bajo, pero se sobrecarga menos el ESP32
# Un valor alto provocaría que el tiempo de respuesta a eventos fuera muy bajo, pero se sobrecarga mas el ESP32
porton = Porton(frecuencia) # Instanciamos un objeto de la calse Porton (archivo porton.py). El constructor llama ya periódicamente al método ciclos interno.
if intentos > 0:
# Virtual Pin V0 - MandoA
@blynk.on("V0")
def v3_write_handler(value):
porton.bl_mandoA = bool(int(value[0])) # <-De la nube blynk viene un int y necesito un bool y la conversión por defecto veo que no trabaja bien
#print('Mando A - Current value : ', porton.bl_mandoA)
# Virtual Pin V1 - MandoB
@blynk.on("V1")
def v3_write_handler(value):
porton.bl_mandoB = bool(int(value[0])) # <-De la nube blynk viene un int y necesito un bool y la conversión por defecto veo que no trabaja bien
#print('Mando B - Current value : ', porton.bl_mandoB)
#----------------------------------------------------------------------------------
# BORRAR !!!! (es sólo para la prueba de escritura de variable hacia la nube Blynk)
from machine import Pin
Pulsador = Pin (12,Pin.IN, Pin.PULL_UP)
he_pulsado = False
valor = 13
#----------------------------------------------------------------------------------
# El bucle principal es una constante llamada al método run del objeto blynk, pero a la vez 10 veces por segundo se llama al método ciclos del objeto porton.
while True:
if intentos > 0:
blynk.run()
#----------------------------------------------------------------------------------
# BORRAR !!!! (es sólo para la prueba de escritura de variable hacia la nube Blynk)
if (he_pulsado == True) and (Pulsador.value() == True):
he_pulsado = False
if (he_pulsado == False) and (Pulsador.value() == False):
he_pulsado = True
blynk.virtual_write(2, valor) # <- En el virtual pin V2 escrivo el valor
valor += 1
print(f'Pulsado. Valor actual: {valor}')
#----------------------------------------------------------------------------------Loading
esp32-devkit-v1
esp32-devkit-v1
FdCArriba (con 1 está pisado)
FdCAbajo (con 0 está pisado)
MandoA (con 0 da orden)
MandoB (con 0 da orden)
SensorPorton
PulsadorRESET (con 0 está pulsado)
PulsadorPARO (con 0 está pulsado)
MotorSubir
MotorBajar
Velocidad
LED
NOTA: Inicialmente todos a la Izda, excepto FdCAbajo que debe estar a decha