Connect to Azure IoT Hub using Micropython and MQTT on W5100S-EVB-Pico
The process of connecting W5100S-EVB-Pico to Azure IoT Hub by MQTT using Micropython and sending and receiving messages.
I used SAS Token authentication method for IoT Hub.
W5100S-EVB-Pico Micro 5pin USB cable LAN cable
- RP2040 Micropython Development Environment
- Azure IoT Explorer
- Check device information
- Telemetry monitoring
- C2D transmission
Prepare Azure Resource
Create a Azure IoT Hub
There are various ways to create an Azure IoT Hub, such as the Azure portal, Azure CLI, REST API, etc. In the beginning, we mainly use the method of creating through the Azure portal.
Instructions can be found at the link below.
The build operation used WSL2 (Ubuntu 20.04.4 LTS) environment.
rena@Rena-PC:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codename: focal
You can refer to the official documentation of Micropython for information on building the build environment, such as installing tools .
The build process was referenced in the README within the Micropython Repository.
Clone the Repository including the submodules and retrieve the submodules.
git clone https://github.com/micropython/micropython.git cd micropython git submodule update --init
make -C ports/rp2 submodules
mpy-cross build (MicroPython cross-compiler)
Before building the device firmware, the mpy-cross build must be preceded.
make -C mpy-cross
Build W5100S-EVB-Pico Device Firmware
W5100S_EVB_PICOBuild the firmware using any of the supported devices .
A list of support can be found at Micropython: ports/rp2/boards.
cd ports/rp2 make BOARD=W5100S_EVB_PICO submodules make BOARD=W5100S_EVB_PICO
This is the final build process. It takes at least a few minutes.
Upload the firmware to the device.
Enter Boot Mode
The shape of H/W v1.0 and v1.1 is slightly different, but the board I have is v1.0, so supply power (USB cable) while pressing the BOOTSEL button of the board, it enters Boot mode.
In the case of v1.1, if you press the RUN button while holding down the BOOTSEL button, it enters the boot mode and there is no need to re-apply the power.
The built firmware is located in the following path.
Upload the file
Now the work for firmware is done.
Next, install umqtt library, write some code with Thonny, and send/receive data to IoT Hub and monitor data using Azure IoT Explorer.
Write device code
The example code was referenced in IoTMQTTSample code in Azure-Samples.
Azure-Samples/IoTMQTTSample - src/MicroPython (master)
- Azure-Samples/IoTMQTTSample - src/MicroPython
[2022.10.14] As the master branch was updated, the Micropython directory was removed. Edit with commit branch address
Get device information from IoT Explorer
You need to get the information to connect to Azure IoT Hub and write it in your code.
See the Azure IoT Hub Guide: Communicate with your IoT hub using the MQTT protocol for what each field requires when communicating with MQTT
In the case of the example code, the data below should be obtained.
- Device Connection String
- Device SAS Token
If you look at the code, it is implemented to parse the Connection String to obtain the Host name, Device Id, and Shared access key values.
There are several ways to get information, and among them, I used the IoT Explorer.
Set up IoT Explorer IoT Hub connection
- Reference: https://docs.microsoft.com/en-us/azure/iot-fundamentals/howto-use-iot-explorer#connect-to-your-hub
First, need to grant access so that IoT Explorer can access IoT Hub.
Among the default permissions,
iothubowner permission including all permissions will be granted to IoT Explorer.
iothubonwer, click the button to the right of the Primary connection string, copy the value, and then paste it into the window that appears when you click Add connection in IoT Explorer and save.
If you set up this setting only once in the beginning, you can perform most of the tasks for IoT Hub and devices in the tool.
After creating the device, get the information value as shown in the figure.
Copy Connection String
SAS Token Creation and Copy
I uploaded the device code to the link below.
The following contents have been added and modified in the original example code.
- W5100S Network Connection Settings
- Modification of telemetry message transmission
- String -> Json string
Without changing to Json, it is difficult to identify the data in IoT Explorer.
Install the library in the Thonny environment.
After selecting Tools - Manage packages from the top menu, enter
umqtt and search.
Among the found packages, install umqtt.simple and umqtt.robust in order.
If the installation is successful, when you click umqtt in the list on the left, the installed packages are displayed as follows.
Execution and monitoring
connecting Publishing Sending message 0 Sending message 1 Sending message 2 Sending message 3 Sending message 4 Sending message 5 Sending message 6 Sending message 7 Sending message 8 Sending message 9 Sending message 10 waiting for message Received message b'message from IoT Hub'