AWS IoT Edukit Core M5 - Micropython support?



  • The AWS IoT Edukit Core M5 requires you to build your own firmware using the ESP-IDF build framework.

    Will the extra hardware features like the RGB leds, microphone and crypto module be supported with an m5burner micropython image?



  • Yes it's supported, you could use the Core2 AWS like a normal version core2



  • @greenleaf, after doing some initial quick testing I found that many of the features are in parity, but things like the RBG LED is not functional because the pins are different from the M5Stack Fire. You might be able to take the existing M5Stack MicroPython library and update the pins to work with it.

    The crypto module isn't supported. However, you can use the Adafruit Crypto library for the secure element.

    M5Stack and AWS are working together to explore an option to deliver a MicroPython package specifically for the Core2 for AWS IoT EduKit.



  • @rashedtalukder Super! An officially supported MicroPython package for the Core2 for AWS would be amazing.



  • @rashedtalukder said in AWS IoT Edukit Core M5 - Micropython support?:

    Adafruit Crypto library

    waiting for that MicroPython package specific for the Core2 for AWS... When?



  • Hi @rashedtalukder - it's been a while. Is AWS still committed to bringing Micropython to this device?



  • @greenleaf I haven't heard anything but there are functions in UIFlow provided for this and I have written and published a guide but am rewriting and updating a guide to AWS using UIFlow.



  • @ajb2k3 Thanks. Yes, it looks like UIflow has evolved quite a bit since last year. I'm happy to see you can execute custom code now, and that there are some dedicated hooks for things like AWS IoT.



  • @greenleaf I recently left Amazon. I don’t know what their plans are.



  • @rashedtalukder just spent the last 7 days hacking the code and making progress.



  • I was able to send data to AWS IoT Core using the below code. If you want to run this code from VScode + Pymakr, follow this guide: MicroPython: Program ESP32/ESP8266 using VS Code and Pymakr

    import network
    from umqtt.simple import MQTTClient
    import time
    import sys
    import os
    import json
    
    # configure your wifi credentials
    WIFI_SSID = "<YOUR_WIFI_SSID_GOES_HERE>"
    WIFI_PASS = "<YOUR_WIFI_PASSWORD_GOES_HERE>"
    
    # configure your iot credentials
    MQTT_ENDPOINT = "XXXXXX.iot.XXXXX.amazonaws.com"
    MQTT_PORT = 8883
    MQTT_QOS = 0
    # thing-id
    MQTT_CLIENT = "mycore2"
    
    THING_CLIENT_CERT = "/flash/res/core2-certificate.pem.crt"
    THING_PRIVATE_KEY = "/flash/res/core2-private.pem.key"
    
    # topic
    MQTT_TOPIC = "mycore2/env"
    MQTT_SUB_TOPIC = "mycore2/command"
    
    info = os.uname()
    
    def connect_to_wifi(ssid, password):
        sta_if = network.WLAN(network.STA_IF)
        if not sta_if.isconnected():
            sta_if.active(True)
            sta_if.connect(ssid, password)
            while not sta_if.isconnected():
                pass
        ip_address = sta_if.ifconfig()[0]
        return ip_address
    
    def get_key(key_path):
        with open(key_path, "r") as f:
            key = f.read()
        return key
    
    def connect_to_mqtt():
        print("CONNECTING TO MQTT BROKER...")
        global client
        client = MQTTClient(
            client_id=MQTT_CLIENT,
            server=MQTT_ENDPOINT,
            port=MQTT_PORT,
            keepalive=0,
            ssl=True,
            ssl_params={
                "cert": get_key(THING_CLIENT_CERT),
                "key": get_key(THING_PRIVATE_KEY),
                "server_side": False
            }
        )
        client.set_callback(subscription_call_back)
        try:
            client.connect()
            print("MQTT BROKER CONNECTION SUCCESSFUL")
        except Exception as e:
            print("MQTT CONNECTION FAILED: {}".format(e))
            sys.exit()
        client.subscribe(MQTT_SUB_TOPIC)
        print("SUBSCRIBED TO TOPIC: {}".format(MQTT_SUB_TOPIC))
        return
    
    def subscription_call_back(topic, msg):
        # confirm state update
        print("RECEIVING MESSAGE: {} FROM TOPIC: {}".format(
            msg.decode("utf-8"), topic.decode("utf-8")))
        return
    
    def publish_message(topic, msg, qos=MQTT_QOS):
        client.publish(
            topic=topic,
            msg=msg,
            qos=qos)
        print("PUBLISHING MESSAGE: {} TO TOPIC: {}".format(msg, topic))
        return
    
    # connect to wifi
    print("CONNECTING TO WIFI NETWORK")
    ip_address = connect_to_wifi(WIFI_SSID, WIFI_PASS)
    print("CONNECTED SUCCESSFULLY")
    print("YOUR IP ADDRESS IS: {}".format(ip_address))
    
    # connect to mqtt
    print("CONNECTING TO MQTT BROKER")
    connect_to_mqtt()
    print("SUBSCRIBED TO TOPIC")
    while True:
        client.check_msg()
    
        tf = power.getTempInAXP192()
        msg = str(json.dumps({
            "client": MQTT_CLIENT,
            "device": {
                "uptime": time.ticks_ms(),
                "hardware": info[0],
                "firmware": info[2]
            },
            "sensors": {
                "TempInAXP192": tf
            },
            "status": "online",
        }))
        publish_message(MQTT_TOPIC, msg)
        time.sleep(5)
    


  • @rashedtalukder Congrats, hope you are on to somewhere that appreciates your skills!