Minimising disturbances to enable productive remote work - In today's remote work environment, unintentional interruptions can disrupt productivity and communication. This project aims to solve that challenge by creating an IoT-powered availability indicator that minimizes disturbances during critical work activities such as calls and meetings.
This is version 2.0, building on the foundations of the original version developed in 2020. The initial solution utilized an ESP32 microcontroller based development board to poll the Webex API and display availability using an LED strip.While effective, it had room for improvement in performance, reliability, and design — which are now addressed in this upgraded version.
- Monorepo Structure
- Features and Development Roadmap
- Architecture Diagram
- Getting Started
- Hardware Requirements
- Contributing
- License
- Support
- Acknowledgments
This project uses a monorepo that includes:
- Hardware – KiCad PCB files for custom boards
- Firmware – ESP32 firmware to drive the LED indicator
- AWS Infrastructure – Terraform setup for API Gateway, Lambda, and IoT Core
- Backend – Node.js Lambda functions to handle Webex webhook data
This project is a work in progress, the following outlines the current features and planned improvements:
- Terraform Provisioning - Automates the setup and deployment of necessary cloud infrastructure.
- Webhook Integration - Allows seamless communication between the IoT device and external services.
- Custom PCB - Designed specifically to support the IoT-driven indicator system.
- Custom ESP32 Integration - Incorporate the newly developed custom ESP32 board into the system architecture.
- Web UI dashboard - A web interface that allows users to override availability status manually.
Below is a high-level overview of how the architecture operates:
1. Webex Webhook → API Gateway - A Webex webhook sends a request to an AWS API Gateway endpoint when a user’s availability status changes.
2. Lambda Function → AWS IoT - AWS API Gateway triggers an AWS Lambda function, which processes the Webex data and publishes the updated availability status to an AWS IoT Core MQTT topic.
3. Device Subscribes → Updates LED - The device subscribes to the AWS IoT topic and receives status updates, updatings the LED indicator accordingly.
Note: A polling-based firmware version is available for setups that cannot use Webex webhooks. This version periodically queries the Webex API for status updates.
Before getting started, ensure you have the following installed:
Tool | Purpose | Link |
---|---|---|
Node.js | Backend scripts & Lambda bundling | Download |
npm | Node.js package manager | Download |
Terraform | Infrastructure provisioning | Install Guide |
AWS CLI | AWS access & configuration | AWS CLI |
Arduino IDE | Firmware upload to ESP32 | Arduino IDE |
KiCad | Open/edit PCB files | KiCad |
First, clone the repository to access the firmware, backend, and PCB files:
git clone https://github.com/ImSeanConroy/disturbance-free-calling.git
cd disturbance-free-calling
- Open the Project - Open the
PCB/disturbance-free-calling.kicad_pro
file in KiCad to view the project. - Review the Design - Inspect the schematic and PCB layout to ensure it meets your needs.
- Customize or Export - Make any modifications and export the Gerber files for fabrication.
- Order the PCB - Submit the Gerber files to your preferred PCB manufacturer (e.g. JLCPCB).
- Get the Components - Purchase the components from the BOM and a compatible board.
- Assemble the Hardware - Solder the components and assemble the board.
- Zip AWS Lambda Function.
cd Backend && npm run install && npm run zip && cd ..
- Configure Terraform Environment Variables.
export AWS_ACCESS_KEY_ID=<your-access-key>
export AWS_SECRET_ACCESS_KEY=<your-secret-key>
export AWS_REGION=<your-region>
- Deploy AWS Infrastructure
terraform init
terraform apply
- Extract AWS IoT Credentials - Save these values and add them to your firmware:
terraform output root_ca_url
terraform output device_certificate
terraform output device_private_key
- Open Firmware Sketch - Load Firmware/AwsIotController/AwsIotController.ino in the Arduino IDE.
- Configure Device Credentials - Add Wi-Fi SSID/password and paste the AWS IoT credentials into the appropriate constants.
- Upload to Device Firmware - Compile and upload the sketch to the ESP32 using Arduino IDE. Test connectivity.
TODO: Add step-by-step instructions for setting up the Webex webhook and linking it to the API Gateway endpoint.
The following are the required components to build the 2x6 LED Matrix:
Quantity | Component | Description | Source |
---|---|---|---|
10 | WS2812B-V5 | Individually addressable RGB SMD LEDs | TME |
1 | Seeed XIAO ESP32C3 | Microcontroller board | PiHut |
1 | USB-A to USB-C Cable | For power and programming | PiHut |
Contributions are welcome. Please open an issue or submit a pull request for any enhancements or bug fixes.
This project is Distributed under the MIT License - see the LICENSE file for information.
If you are having problems, please let me know by raising a new issue.
This project was made possible thanks to the following resources:
- AWS re:Post - Publish a MQTT Message to IOT Core inside a Lambda function with Node and SDK 3
- AWS Samples - Several Arduino examples for AWS IoT projects using ESP32.