import network
import time
from machine import Pin, time_pulse_us
import neopixel
import ujson
from umqtt.simple import MQTTClient
MQTT_CLIENT_ID = "micropython-distance-demo"
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC = "wokwi-distancia"
MQTT_TOPIC_SUB = "wokwi-leds"
trigger = Pin(32, Pin.OUT)
echo = Pin(33, Pin.IN)
strip = neopixel.NeoPixel(Pin(21), 8)
def sub(topic, msg):
try:
colors = ujson.loads(msg)
for i in range(8):
strip[i] = colors
strip.write()
except:
print("Cores são inválidas.")
def distancia_cm():
trigger.value(0)
time.sleep_us(5)
trigger.value(1)
time.sleep_us(10)
trigger.value(0)
pulse_duracao = time_pulse_us(echo, 1, 30000)
if pulse_duracao < 0:
return None
return int(pulse_duracao / 58.0)
print("Conectando ao WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Conectado!")
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.set_callback(sub)
client.connect()
client.subscribe(MQTT_TOPIC_SUB)
print("Conectado!")
prev_distance = ""
while True:
print("Medindo distancia.. ", end="")
distance = distancia_cm()
message = ujson.dumps({
"distance": distance,
})
if message != prev_distance:
print("Atualizado!")
print(f"Reporting to MQTT topic {MQTT_TOPIC}: {message}")
client.publish(MQTT_TOPIC, message)
prev_distance = message
else:
print("Sem alterações nos dados")
client.check_msg()
time.sleep(1)Loading
esp32-devkit-c-v4
esp32-devkit-c-v4