Ethernet Setup
This page assumes you've set up and connected your CircuitPython board to an Ethernet connection.
- If you have not connected to the internet using Ethernet yet, please follow this guide and come back to this page when you've successfully connected to the internet
Connect Ethernet Cable
Make sure you have your Ethernet FeatherWing or Ethernet Shield firmly plugged into your hardware, and an Ethernet cable connected to your router or switch.
Code Usage
Copy the following code to a file on your computer. Name the file code.py. With your operating system file explorer/finder, copy this file to the CIRCUITPY drive which appears when your microcontroller board is plugged in via USB.
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT import os import time import adafruit_connection_manager import board import busio from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K from digitalio import DigitalInOut import adafruit_minimqtt.adafruit_minimqtt as MQTT # Add settings.toml to your filesystem. Add your Adafruit IO username and key as well. # DO NOT share that file or commit it into Git or other source control. aio_username = os.getenv("aio_username") aio_key = os.getenv("aio_key") cs = DigitalInOut(board.D10) spi_bus = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) # Initialize ethernet interface with DHCP eth = WIZNET5K(spi_bus, cs) ### Feeds ### # Setup a feed named 'photocell' for publishing to a feed photocell_feed = aio_username + "/feeds/photocell" # Setup a feed named 'onoff' for subscribing to changes onoff_feed = aio_username + "/feeds/onoff" ### Code ### # Define callback methods which are called when events occur def connected(client, userdata, flags, rc): # This function will be called when the client is connected # successfully to the broker. print("Connected to Adafruit IO! Listening for topic changes on %s" % onoff_feed) # Subscribe to all changes on the onoff_feed. client.subscribe(onoff_feed) def disconnected(client, userdata, rc): # This method is called when the client is disconnected print("Disconnected from Adafruit IO!") def message(client, topic, message): # This method is called when a topic the client is subscribed to # has a new message. print(f"New message on topic {topic}: {message}") pool = adafruit_connection_manager.get_radio_socketpool(eth) ssl_context = adafruit_connection_manager.get_radio_ssl_context(eth) # Set up a MiniMQTT Client # NOTE: We'll need to connect insecurely for ethernet configurations. mqtt_client = MQTT.MQTT( broker="io.adafruit.com", username=aio_username, password=aio_key, is_ssl=False, socket_pool=pool, ssl_context=ssl_context, ) # 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. print("Connecting to Adafruit IO...") 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(photocell_feed, photocell_val) print("Sent!") photocell_val += 1 time.sleep(5)
Feed Publishing Example
Directly after saving the code.py file, open a serial monitor/REPL to see the output. It should look something like the following:
code.py output: Connecting to Adafruit IO... Connected to Adafruit IO! Listening for topic changes on brubell/feeds/onoff Sending photocell value: 0... Sent! Sending photocell value: 1... Sent! Sending photocell value: 2... Sent! Sending photocell value: 3... Sent!
Navigate to the dashboard you created earlier. You should see the photocell gauge increasing its value as your CircuitPython device publishes the increasing photocell value to Adafruit IO.
If you navigate to the page for the photocell feed, you'll see the values increasing there along with metadata about when the data was received by the Adafruit IO broker.
Feed Subscription Example
While we're publishing the increasing photocell value to Adafruit IO - our code also subscribes to changes on the onoff feed.
The example code.py subscribes to the onoff feed when the client successfully connects to Adafruit IO. You don't need to make any changes to your code!
With the code still running on your CircuitPython device - click the toggle switch to send a value to the onoff feed. You should see the value appear on your serial monitor/REPL.
If you really want to see the speed of MQTT - remove the one second delay in the while True
loop.
Change the following code (within while True
) from:
print('Sent!')
photocell_val += 1
time.sleep(1)
to
print('Sent!')
photocell_val += 1
time.sleep(0.5)
Be warned - if you do this you will not be able to run the code for very long. This is because Adafruit IO's MQTT server imposes a rate limit to prevent excessive load on the service.
The current Adafruit IO Data Rate is at most 1 request per second (or 60 requests within 60 seconds), without an Adafruit IO+ Boost applied to your account.
Going Further - the Adafruit IO CircuitPython Module
While you can use this code to communicate with Adafruit IO, the recommended method of using CircuitPython with Adafruit IO is with the Adafruit IO CircuitPython module.
This module has methods to simplify using the Adafruit IO MQTT API. It also includes helper features to make your experience using Adafruit IO better.
If you want to use Adafruit IO and CircuitPython, check out Adafruit IO CircuitPython and the code example for Ethernet on GitHub!
Text editor powered by tinymce.