Programming ESP32 using MQTT with AWS and FreeRTOS

2021-01-08



What we’re doing

Set up your ESP-32 running FreeRTOS to subscribe and publish events to AWS IoT via MQTT

Install the development environment (I use a Mac)

I used this excellent guide from Espressive

Get started with the example code

Read the post by Espressive here and use the code here. I don’t have the WROOM-32Se, so I skipped the instructions for “Using an ATECC608A with the ESP-AWS-IoT” and embedded the creds in code.

Using ‘idf.py menuconfig’:

  • Set up your WiFi SSID and password
  • Set up to embed the AWS certs into the binary

wifi

  • Set up AWS IoT endpoint

aws

Copy your credentials

Get started on the AWS side by creating, activating, and downloading your credentials as described in my previous post. The demo comes with the AWS CA in the cert directory (main/certs), so you need to only copy your certificate and private key to the same place.

Compile, flash, monitor

Use idf.py flash monitor --port /dev/cu.usbserial-0001, substituting your connection port accordingly.

You’ll see the trace output in your terminal:

I (75682) subpub: test_topic/esp32	Hello from ESP32 (QOS0) : 112
I (75712) subpub: Subscribe callback
I (75712) subpub: test_topic/esp32	Hello from ESP32 (QOS1) : 113
I (75802) subpub: Stack remaining for task 'aws_iot_task' is 3544 bytes
  I (76862) subpub: Subscribe callback
  I (76862) subpub: test_topic/esp32	{
      "message": "Hello from AWS IoT console"
    }
  I (76882) subpub: Subscribe callback
  I (76882) subpub: test_topic/esp32	Hello from ESP32 (QOS0) : 114
  I (76912) subpub: Subscribe callback
  I (76912) subpub: test_topic/esp32	Hello from ESP32 (QOS1) : 115
  I (77002) subpub: Stack remaining for task 'aws_iot_task' is 3544 bytes
    I (78062) subpub: Subscribe callback

Note that ‘Hello from AWS IoT console’ trace above is the result of going to the AWS console and publishing to the topic. The demo program subscribes and publishes to the topic, so anything coming from the simulator on that topic will be picked up and displayed.

You can see the messages sent to AWS:

console

Next step

Publish meaningful events from sensors? Have a second ESP32 communicate with this one?



Other Tags

API GW
AWS
ActiveRecord
Agile
Alexa
Analysis
Ansible
BDD
BLE
C
CAB
CloudFormation
CloudFront
CloudWatch
Cross-compile
Cucumber
DevOps
Devops
DotNet
Embedded
Fitbit
GNU
GitHub Actions
Governance
How-to
Inception
IoT
Javascript
Jest
Lambda
Mac OS X
MacRuby
Metrics
MySQL
NetBeans
Objective-C
PMO
Product Management
Programme management
Project Management
Quality Assurance
Rails
Raspberry Pi
Remote compilation
Remote debugging
Remote execution
Risk Assessment
Route 53
Ruby
S3
SPA
Self Organising Teams
SpecFlow
TDD
Unit testing
VSM
Value
arm
contract testing
inception
nrf51
pact
planning
rSpec
ruby
ssh