micropython / micropython/micropython-lib

Unable to Publish Message to AWS IoT with Micropython v1.19

Open
#567 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
2.9k
Forks
1.1k
Avg merge
7d 6h
Merged PRs (30d)
3

Description

With the following test script, I am able to publish messages to AWS Cloud for MicroPython version v1.17. However, the same script does not work for MicroPython version 1.19 and it errors out. The issue is replicable for both ESP32-S3 and ESP32-C3.

Test Script:

#AWS MQTT client cert example for esp8266 or esp32 running MicroPython 1.9
from umqtt.robust import MQTTClient
import time
import network
from time import sleep
import usocket as socket
import ujson


#Certs for ESP8266
CERT_FILE = "/flash/client.crt"
KEY_FILE = "/flash/client.key"

#if you change the ClientId make sure update AWS policy
MQTT_CLIENT_ID = "basicPubSub"
MQTT_PORT = 8883

MQTT_KEEPALIVE_INTERVAL = 45
THING_NAME = "ESP32-Core1"
SHADOW_GET_TOPIC = "$aws/things/" + THING_NAME + "/shadow/get"
#SHADOW_UPDATE_TOPIC = "$aws/things/" + THING_NAME + "/shadow/update"
SHADOW_UPDATE_TOPIC = "sdk/test/Python"

RESPONSE_RECEIVED = False

#if you change the topic make sure update AWS policy
MQTT_TOPIC = "esp8266-topic"

#Change the following three settings to match your environment
MQTT_HOST = "*****************-ats.iot.us-east-1.amazonaws.com"
WIFI_SSID = "***************"
WIFI_PW = "*************"

mqtt_client = None

def sub_cb(topic, msg, retained, duplicate):
    print((topic, msg, retained, duplicate))

def connect_mqtt():
    try:
        with open(KEY_FILE, "r") as f:
            key = f.read()

        print("MQTT received KEY")

        with open(CERT_FILE, "r") as f:
            cert = f.read()

        print("MQTT received CERTIFICATE")
        mqtt_client = MQTTClient(client_id=MQTT_CLIENT_ID, server=MQTT_HOST, port=MQTT_PORT, keepalive=5000, ssl=True, ssl_params={"cert":cert, "key":key, "server_side":False})
        mqtt_client.connect()
        mqtt_client.set_callback(sub_cb)
        print("MQTT is connected")
        a = {"message": "Hello from IoT console"}
        try:
            a = mqtt_client.publish(SHADOW_UPDATE_TOPIC, ujson.dumps(a))
            print("Publish Message", a)
        except Exception as e:
            print('Cannot Publish' + str(e))
            #mqtt_client.wait_msg()

    except Exception as e:
        print('Cannot connect to MQTT ' + str(e))
        raise


def connect_wifi(ssid, pw):
    wlan = network.WLAN(network.STA_IF)

    if(wlan.isconnected()):
        wlan.disconnect()
    nets = wlan.scan()

    if not wlan.isconnected():

        wlan.active(True)
        wlan.connect(WIFI_SSID, WIFI_PW)
        while not wlan.isconnected():
            pass
    print("Connected as:", wlan.ifconfig())

try:
    print("Connecting to WIFI...")
    connect_wifi(WIFI_SSID, WIFI_PW)
    print("Connecting to MQTT...")
    connect_mqtt()
    print("OK")

except for Exception as e:
    print(str(e))

Error Message:

>>> %Run -c $EDITOR_CONTENT
Connecting to WIFI...
Connected as: ('***********', '**************', '************', '***********')
Connecting to MQTT...
MQTT received KEY
MQTT received CERTIFICATE
Cannot connect to MQTT bytes index out of range
bytes index out of range

Can you please check and advise, if the parameters to setup Mqtt connection are right?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Use the supplied test script with umqtt.robust.MQTTClient on MicroPython 1.17 and 1.19, reproducing the error on the ESP32-S3 or ESP32-C3. Start by tracing the MQTTClient connection and publish path, especially SSL parameters and the reported bytes index error. Done means the script can connect to AWS IoT and publish the message on MicroPython 1.19.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, python
Domain
embedded-iot, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.