Hardware and Software Requirements
Hardware requirements
Section titled “Hardware requirements”- ESP32-S3-N16R8
Espressif ESP32 family microcontroller — this walkthrough targets ESP32-S3-N16R8 with PlatformIO firmware. board - USB data cable (charge-only cables are not sufficient)
- 2.4 GHz Wi-Fi network with SSID and password available
Software requirements
Section titled “Software requirements”Install these tools on your Linux host before starting the walkthrough. Use the manual steps below for Ubuntu or Red Hat family systems (RHEL, Fedora, Amazon Linux).
| Tool | Verify | Used in this walkthrough |
|---|---|---|
| GIT Distributed version control — used to clone the demo repository and supporting docs. | git —version | Clone the demo repository |
| AWS CLI v2 | aws —version | Provision, CloudWatch |
PlatformIO | pio —version | Build and flash FIRMWARE |
| TERRAFORM HashiCorp Terraform — provisions shared infrastructure (IoT rules fan-out, Lambda, DynamoDB, API Gateway, Amplify). | terraform version | Phase 2 infrastructure |
| Node.js 22 | node —version | Dashboard local run and AMPLIFY |
This repository targets Node.js 22 (see .nvmrc in the docs site repo).
Automated installs are available from jdevto/cli-tools
jdevto/cli-tools — install scripts for Git, AWS CLI, PlatformIO, Terraform, and Node.js used as an optional Red Hat install path in prerequisites. under each Red Hat subsection below.
Git on Ubuntu
Section titled “Git on Ubuntu”sudo apt update && sudo apt install -y gitGit on Red Hat
Section titled “Git on Red Hat”sudo dnf install -y gitOr install with install_git.sh:
bash <(curl -s https://raw.githubusercontent.com/jdevto/cli-tools/main/scripts/install_git.sh) installAWS CLI v2
Section titled “AWS CLI v2”AWS CLI on Ubuntu
Section titled “AWS CLI on Ubuntu”sudo apt update && sudo apt install -y curl unzipcurl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zipunzip -q awscliv2.zipsudo ./aws/installrm -rf aws awscliv2.zipAWS CLI on Red Hat
Section titled “AWS CLI on Red Hat”sudo dnf install -y curl unzipcurl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zipunzip -q awscliv2.zipsudo ./aws/installrm -rf aws awscliv2.zipOr install with install_aws_cli.sh:
bash <(curl -s https://raw.githubusercontent.com/jdevto/cli-tools/main/scripts/install_aws_cli.sh) installTerraform
Section titled “Terraform”Terraform on Ubuntu
Section titled “Terraform on Ubuntu”sudo apt update && sudo apt install -y curl gnupg software-properties-commoncurl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpgecho "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(. /etc/os-release && echo "$VERSION_CODENAME") main" | sudo tee /etc/apt/sources.list.d/hashicorp.listsudo apt update && sudo apt install -y terraformTerraform on Red Hat
Section titled “Terraform on Red Hat”sudo dnf install -y curl gnupg2sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.reposudo dnf install -y terraformOr install with install_terraform.sh:
bash <(curl -s https://raw.githubusercontent.com/jdevto/cli-tools/main/scripts/install_terraform.sh) installPlatformIO
Section titled “PlatformIO”PlatformIO on Ubuntu
Section titled “PlatformIO on Ubuntu”curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py -o get-platformio.pypython3 get-platformio.pyrm get-platformio.pyexport PATH="$HOME/.platformio/penv/bin:$PATH"If your default Python is a pre-release build, use a stable interpreter:
python3.12 get-platformio.pyPlatformIO on Red Hat
Section titled “PlatformIO on Red Hat”curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py -o get-platformio.pypython3 get-platformio.pyrm get-platformio.pyexport PATH="$HOME/.platformio/penv/bin:$PATH"Or install with install_pio.sh:
bash <(curl -s https://raw.githubusercontent.com/jdevto/cli-tools/main/scripts/install_pio.sh) installAdd PlatformIO to your PATH in a new shell, or append to ~/.bashrc / ~/.zshrc:
export PATH="$HOME/.platformio/penv/bin:$PATH"Node.js 22
Section titled “Node.js 22”Node.js on Ubuntu
Section titled “Node.js on Ubuntu”NODE_VERSION=22.14.0curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz" -o node.tar.xzmkdir -p "$HOME/.local/node"tar -xJf node.tar.xz -C "$HOME/.local/node" --strip-components=1rm node.tar.xzexport PATH="$HOME/.local/node/bin:$PATH"Persist PATH in ~/.bashrc or ~/.zshrc:
echo 'export PATH="$HOME/.local/node/bin:$PATH"' >> ~/.bashrcNode.js on Red Hat
Section titled “Node.js on Red Hat”NODE_VERSION=22.14.0curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz" -o node.tar.xzmkdir -p "$HOME/.local/node"tar -xJf node.tar.xz -C "$HOME/.local/node" --strip-components=1rm node.tar.xzexport PATH="$HOME/.local/node/bin:$PATH"Or install with install_npm.sh:
NODE_VERSION=22 bash <(curl -s https://raw.githubusercontent.com/jdevto/cli-tools/main/scripts/install_npm.sh) installVerify your toolchain
Section titled “Verify your toolchain”git --versionaws --versionpio --versionterraform versionnode --versionnpm --versionAWS account requirements
Section titled “AWS account requirements”Use an IAM
AWS Identity and Access Management — controls roles and permissions for IoT Rules, Lambda, and other services. principal with permissions to manage services used in this walkthrough:
-
AWS IoT Core
AWS IoT Core — managed MQTT broker with X.509 device authentication for ESP32 telemetry and events. -
IAM
AWS Identity and Access Management — controls roles and permissions for IoT Rules, Lambda, and other services. - CloudFormation
-
CloudWatch Logs
Amazon CloudWatch Logs — stores IoT rule output for Phase 1 verification (`/aws/iot/esp32-demo/telemetry` and `/events`). -
LAMBDA
AWS Lambda — processes IoT rule payloads and serves query API logic behind API Gateway. -
DYNAMODB
Amazon DynamoDB — persists telemetry and event records after Lambda ingest in Phase 2. -
API Gateway
Amazon API Gateway — exposes HTTP routes for latest telemetry and recent events. The browser reads data through API Gateway, not DynamoDB directly. -
AMPLIFY
AWS Amplify — hosts the walkthrough dashboard frontend and connects it to the query API URL.
Export runtime variables
Section titled “Export runtime variables”export WIFI_SSID="your-ssid"export WIFI_PASSWORD="your-password"export THING_NAME="esp32-c"export AWS_REGION="ap-southeast-2"Replace placeholder values with your own configuration before provisioning and flashing.
Linux one-time USB setup
Section titled “Linux one-time USB setup”sudo ./scripts/setup-linux-usb.shThen log out/in (or reboot), unplug/replug board, and verify access:
groups | grep dialoutlsusbls /dev/ttyACM*