import time
import network
from machine import Pin, PWM
from umqtt.simple import MQTTClient
MQTT_BROKER = "broker.hivemq.com"
MQTT_CLIENT_ID = "buzzer-12G-17-Plamena"
MQTT_TOPIC = "elsys/12G/17/Plamena"
BUZZER_PINS = [32, 33, 25, 26]
pwm_buz1 = PWM(Pin(32))
pwm_buz2 = PWM(Pin(33))
pwm_buz3 = PWM(Pin(25))
pwm_buz4 = PWM(Pin(26))
last_active_time = 0
buzzer = None
def connect_to_wifi():
print("Connecting to Wi-Fi", 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(" Connected!")
def connect_to_mqbroker():
connect_to_wifi()
print("Connecting to MQ Hive", end="")
client.connect()
print("Connected to broker ", end="")
client.subscribe(MQTT_TOPIC)
print("Subscribed to {}".format(MQTT_TOPIC))
def buzzer_activate(buzzer_number):
global last_active_time, buzzer
current_time = time.time()
if (current_time - last_active_time < 5):
print("Not enought time passed since activation")
return
if buzzer is not None:
buzzer.value(0)
buzzer_pin = Pin(BUZZER_PINS[buzzer_number - 1], Pin.OUT)
buzzer_pin.value(1)
buzzer_pin = buzzer
last_active_time = current_time
def send_message(topic, message):
buzzer_number = int(message.decode("utf-8"))
if 1 <= buzzer_number <= 4:
print("Recieve message from {} - activate buzzer {}".format(topic, message))
buzzer_activate(buzzer_number)
else:
print("Invalid number! Must be between 1 and 4!")
for buzzer_pin in BUZZER_PINS:
Pin(buzzer_pin, Pin.OUT, value=0)
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER)
client.set_callback(send_message)
connect_to_mqbroker()
while True:
client.wait_msg()