Connect ESP32 MicroPython to AWS IoT

This topic is to discuss the following lesson:

From where we can get the device to practice and whats the cost of device , currently I am in Saudia Arabia

Hello Muhammad

If you do a quick search online, you will see that the device is available on many sites including eBay. I’m not sure what the shipping capabilities are for each of these retailers for Saudi Arabia, but you will have to look at the policies of each provider.

I hope this has been helpful!

Laz

Hi
why do you upload:

/4b7db071de-certificate.pem.crt
/4b7db071de-private.pem.key
/4b7db071de-public.pem.key
/AmazonRootCA1.pem
/AmazonRootCA3.pem

all certifications if you just use private.pem and certificate.pem for the connection?

Thanks

Hello Vic,

In this example, technically, you only need these two files:

/4b7db071de-certificate.pem.crt
/4b7db071de-private.pem.key

You could use the IoT root CA certificates to verify that you are communicating with the actual AWS IoT servers, and some server impersonating them. In this example, I didn’t.

Rene

Hello Everyone,

The code doesn’t work for the new versions of Micropython for ESP32. I got it to work with the following version:
GENERIC : Firmware with ESP-IDF v3.x —> esp32-idf3-20190529-v1.11.bin
From http://micropython.org/download/esp32/

After installing this, it works just fine!

Thank you for this lesson :slight_smile:

The coded does not work for me (ESP-WROOM-32 DevKit V1). Using Firmware version v1.11, the esp just reboots on the connect call. Newer versions tell me “invalid key”. I did some research and I suspect that I have to use a der-encoded key file. Do you know anything about that?

Hi Christian,

Did you also try the one I used?

(esp32-20190611-v1.11-44-g8b18cfede.bin)

Just to make sure it’s a software issue, not a hardware issue.

It is possible to convert certificate types. You could try to convert the AWS IOT X.509 certificates to DER:

openssl x509 -in input.crt -out input.der -outform DER
openssl x509 -in input.der -inform DER -out output.pem -outform PEM

You can convert any certificate with openssl but if you are trying this in a lab and want a more convenient solution, there are online GUI converters.

Rene

I could follow the lesson to the dot and it did work! Thank you. But needed to generate DER version of the certificate and key file using the following commands -
openssl x509 -in -certificate.pem.crt -out -certificate.pem.der -outform DER
openssl rsa -in -private.pem.key -out -private.pem.der -outform DER
I am using ESP8266 with esp8266-20191220-v1.12.bin and did successfully connected to AWS IOT.

Hello Imran

Thanks for sharing that! It’s so important for the community to share information that will make it easier for others to implement the lessons.

Thanks again!

Laz

Hi, in trying to follow the lesson but in the step of connecting to the MQTT client, when i use the command : mqtt_client.connect() i get for response a 0. Then when i try to send the test message nothing happens, and in the third time it is giving me now this error: mbedtls_ssl_handshake error: -2880. Im using an ESP32 with the esp32-idf3-20190529-v1.11.bin and i convert both the certificate and the private key to DER.

Thanks.

Now i get this error in the aws iot console “disconnectReason”: “CLIENT_ERROR”, , can someone help me with this?

Hello Kenneth

A response code of 0 means that the connection is accepted, so you’re good there. For additional return codes, take a look at this:

https://notes.networklessons.com/mqtt-return-codes

Concerning the error you mention, it seems to be related to firmware. Others have faced a similar error, and you can find out more about it here:

It looks like an update in firmware fixes the problem…

I hope this has been helpful!

Laz

Hi
I am able to connect to the cloud using mqtt_client.connect() but when I try sending the test message, nothing happens. It seems to be working as there are no errors being thrown but the message never shows in the topic.
Can someone help me with this please?

Hello Daniel

Hmm, that’s interesting. The first thing I would say is to make sure your MQTT parameters are the same as those in the lesson. I know it sounds obvious, and you’ve probably already done so, but I’m just reiterating for clarity. Secondly, ensure that the certificate is installed and that all other parameters are as shown in the lesson.

Beyond this, I can suggest some troubleshooting resources that are available from AWS for the IoT core that may be helpful.

If you’re unable to resolve this, let us know and I’ll have Rene take a look as well…

I hope this has been helpful!

Laz

mqtt_client = MQTTClient(client_id = mqtt_client_id, server=mqtt_host, port=mqtt_port, keepalive=5000, ssl=True, ssl_params={"cert":certificate_contents, "key":key_contents, "server_side":False})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unexpected keyword argument 'ssl_params'

I keep getting this error for some reason. Is there anyone who can help me? I kinda need to connect the ESP32 to an AWS server urgently

Hello @AkshaySunkara ,

Can you share your full code? What import statement did you use

MQTTClient doesn’t recognize ssl_params as input. It’s possible you use the wrong library.

The mPython library supports ssl_params as an input:

https://mpython.readthedocs.io/en/v2.2.1/library/mPython/umqtt.simple.html

classumqtt.simple.MQTTClient(client_id, server, port=0, user=None, password=None, keepalive=0, ssl=False, ssl_params={})
client_id
server
port
user
password
keepalive
ssl
ssl_params