zegulas
zegulas

Reputation: 417

ESP32 - MQTT to AWS IoT using MicroPython

I have registered my ESP32 as a thing on AWS IoT and downloaded its respective certificate and public & private keys. Also verified that those connect properly via the following command in my terminal:

openssl s_client -connect host.iot.region.amazonaws.com:8443 -CAfile AmazonRootCA1.pem -cert certificate.pem.crt -key private.pem.key

This is my (main.py) simple code to connect to AWS IoT using MicroPython

import machine
from network import WLAN
import network
from umqtt.simple import MQTTClient

# AWS endpoint parameters.
HOST = b'HOST'    # ex: b'abcdefg1234567'
REGION = b'REGION'  # ex: b'us-east-1'

CLIENT_ID = "CLIENT_ID"  # Should be unique for each device connected.
AWS_ENDPOINT = b'%s.iot.%s.amazonaws.com' % (HOST, REGION)

keyfile = '/certs/private.pem.key'
with open(keyfile, 'r') as f:
    key = f.read()

certfile = "/certs/certificate.pem.crt"
with open(certfile, 'r') as f:
    cert = f.read()

# SSL certificates.
SSL_PARAMS = {'key': key,'cert': cert, 'server_side': False}


# Setup WiFi connection.
wlan = network.WLAN( network.STA_IF )
wlan.active( True )
wlan.connect( "SSID", "PASSWORD" )

while not wlan.isconnected():
  machine.idle()

# Connect to MQTT broker.
mqtt = MQTTClient( CLIENT_ID, AWS_ENDPOINT, port = 8883, keepalive = 10000, ssl = True, ssl_params = SSL_PARAMS )
mqtt.connect()
# Publish a test MQTT message.
mqtt.publish( topic = 'test', msg = 'hello world', qos = 0 )

But I get this error when I try to connect:

(-17168, 'MBEDTLS_ERR_RSA_PRIVATE_FAILED+MBEDTLS_ERR_MPI_ALLOC_FAILED')

Upvotes: 5

Views: 2268

Answers (1)

stanely
stanely

Reputation: 352

After much effort I got this to work. I had to use an idf3 MicroPython binary,

esp32-idf3-20191220-v1.12.bin

idf4 binaries and idf3 later than v1.12 don't work. There is a problem with not enough heap and memory allocation problems.

----------- EDIT -----------

News update! The new v1.15 release of MicroPython based on idf4 works with AWS MQTT for IoT.

Upvotes: 2

Related Questions