Adding MQTT connection to your UI
At some point you may want to connect your UI to a Pub Sub service like MQTT. Here is some example code that uses the miniMQTT and PyPortal libraries to connect with a hosted MQTT server. See is you can add some of these UI elements to the example.
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT import time import adafruit_esp32spi.adafruit_esp32spi_socket as socket import adafruit_pyportal import adafruit_minimqtt.adafruit_minimqtt as MQTT pyportal = adafruit_pyportal.PyPortal() ### WiFi ### # Get wifi details and more from a secrets.py file try: from secrets import secrets except ImportError: print("WiFi secrets are kept in secrets.py, please add them there!") raise # ------------- MQTT Topic Setup ------------- # mqtt_topic = "test/topic" ### Code ### # Define callback methods which are called when events occur # pylint: disable=unused-argument, redefined-outer-name def connected(client, userdata, flags, rc): # This function will be called when the client is connected # successfully to the broker. print("Subscribing to %s" % (mqtt_topic)) client.subscribe(mqtt_topic) def disconnected(client, userdata, rc): # This method is called when the client is disconnected print("Disconnected from MQTT Broker!") def message(client, topic, message): """Method callled when a client's subscribed feed has a new value. :param str topic: The topic of the feed with a new value. :param str message: The new value """ print("New message on topic {0}: {1}".format(topic, message)) # Connect to WiFi print("Connecting to WiFi...") pyportal.network.connect() print("Connected!") # Initialize MQTT interface with the esp interface # pylint: disable=protected-access MQTT.set_socket(socket, pyportal.network._wifi.esp) # Set up a MiniMQTT Client mqtt_client = MQTT.MQTT( broker=secrets["broker"], username=secrets["user"], password=secrets["pass"], is_ssl=False, ) # Setup the callback methods above mqtt_client.on_connect = connected mqtt_client.on_disconnect = disconnected mqtt_client.on_message = message # Connect the client to the MQTT broker. mqtt_client.connect() photocell_val = 0 while True: # Poll the message queue mqtt_client.loop() # Send a new message print("Sending photocell value: %d" % photocell_val) mqtt_client.publish(mqtt_topic, photocell_val) photocell_val += 1 time.sleep(1)