Open henrikanderssoncompago opened 2 years ago
Are you using one of the esp32spi examples within https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT/tree/main/examples/azureiot_esp32spi?
Hi, Using the latest sample again. Had to change line 32 to: spi = busio.SPI(board.SCK1, board.MOSI1, board.MISO1)
Error message:
Connecting to WiFi...
Connected to WiFi!
Getting the time...
Time: 1653632230
Traceback (most recent call last):
File "code.py", line 95, in
Looking at the CircuitPython download page for RP2040 (https://circuitpython.org/board/arduino_nano_rp2040_connect/), no SSL module is included in the build.
Might this the root cause?
Regards // Henrik
I think this got modified by @jimbobbennett, ssl
is a non-native module for ESP32-SPI ("AirLift") hardware but is native for specific boards (native WiFi)
https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT/blob/main/adafruit_azureiot/iot_mqtt.py#L17
We'd need to make a pull request to better handle this within https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT/blob/f43a8e7b7cac3861b8d7a6f355d71a641fe4a508/adafruit_azureiot/iothub_device.py#L141
I'm running into this issue as well with a PyPortal after looking into this post on the forums: https://forums.adafruit.com/viewtopic.php?p=944133
I added a try/except in iot_mqtt.py and device_registration.py for importing SSL
try: import ssl except ImportError: pass
And that at least gets past the SSL import error. However, in device_registration.py, during self._mqtt = MQTT.MQTT()
SSL is called with ssl_context=ssl.create_default_context()
. I added an additional try/except for that:
try: self._mqtt = MQTT.MQTT( broker=constants.DPS_END_POINT, username=username, password=auth_string, port=8883, keep_alive=120, client_id=self._device_id, ssl_context=ssl.create_default_context(), ) except NameError: self._mqtt = MQTT.MQTT( broker=constants.DPS_END_POINT, username=username, password=auth_string, port=8883, keep_alive=120, is_ssl=True, client_id=self._device_id, )
And the PyPortal does attempt a connection with Azure. However, it seems to lock up at this step:
`744.949: DEBUG - Receiving SUBSCRIBE Topic: $dps/registrations/res/202/?$rid=2bz2xdk3z22&retry-after=3 Msg: b'{"operationId":"5.7142ef3ec990ecb3.6d658d4c-d67a-4863-bb8b-7626a3e5459b","status":"assigning"}'
745.141: INFO - Received registration results on topic $dps/registrations/res/202/?$rid=2bz2xdk3z22&retry-after=3 - {"operationId":"5.7142ef3ec990ecb3.6d658d4c-d67a-4863-bb8b-7626a3e5459b","status":"assigning"} 745.146: DEBUG - Retrying after 3s`
and does not retry after three seconds. When I do a KeyboardInterrupt
, this is the printout to the REPL:
`Traceback (most recent call last):
File "code.py", line 110, in
Code done running.`
It seems like maybe something is locking up in esp32spi
or perhaps the MQTT()
function needs to be modified differently in device_registration.py
?
hihi @dhalbert - this is the issue I was talking about last night in the meeting
Hi,
I´m trying to get this library to work on my Arduino RP2040 Nano Connect board. Got Wifi working and connected
But when running this code:
from adafruit_azureiot import IoTHubDevice device = IoTHubDevice(pool, esp, secrets["azure_device_connection_string"]) device.connect
I get this error:
code.py output: Traceback (most recent call last): File "code.py", line 76, in
File "adafruit_azureiot/init.py", line 35, in
File "adafruit_azureiot/iot_mqtt.py", line 17, in
ImportError: no module named 'ssl'
The azure_device_connection_string is copied from the IoT hub device page in Azure (and validated by using a VS Code extension to post message on the default service bus)
Using the latest CircuitPython library from https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases
I have also tried to use the Adafruit IO bundle and the MQTT client, but are unable to find any documentation how to use it against an Azure IoT Hub
Please advice