Building a complete serverless IoT solution with CICD and in scale: smart light availability indicator using AWS, ESP32 & Xamarin (Part 1)
Part 1: Introduction & High Level Architecture
How to build a complete internet of things product that spans over embedded, mobile and cloud development (and even 3D modeling!) to create a wireless LED indicator that connects to your cloud apps like Google Calendar and shows your availability status to keep your meetings private and undisturbed, wherever you are.
Why?
- The kids interrupt your meetings?
- Your partner needs something right when you’re presenting?
- Disruptions from others ruin your concentration?
If you can resonate with these type of situations, you’ll understand why you need an indicator outside your room to let your household or colleagues at the office know when you are busy.
Architecture
Cloud Backend (serverless):
- AWS DynamoDB (users and things data)
- AWS Cognito (users and authentication)
- AWS IoT Core (things management, + automation utilities in Python)
- AWS Fleet Hub (things monitoring)
- AWS Amplify (backend in NodeJS & express, CICD)
- AWS S3 (OTA firmware update storage for things)
- AWS Route53 (DNS)
- Bitbucket (git)
- Lumigo.io (backend app monitoring and debugging)
- XKit.co (3rd party integrations and token management)
Cloud Frontend (serverless):
- AWS Amplify (frontend in ReactJS)
Website:
- AWS Lightsail (Wordpress)
- Sendinblue (email campaigns)
- Elementor Pro (UX Design)
Mobile:
- Xamarin Forms (C#)
Embedded:
- Device: ESP32
- Framework: Arduino using PlatformIO (C++)
- MQTT-based communication
- OTA capabilities (internet & LAN)
Programming Languages
- NodeJS: cloud backend
- Python: tools
- JavaScript & React: frontend
- C++: embedded device
- C#: mobile application
IDEs
VSCode
- Amplify frontend and backend (javascript, NodeJS)
- ESP32 development (PlatformIO with Arduino, C++)
- Utilities: Python3
Visual Studio 2022
- Mobile development (C#, Xamarin)
My main focus in this project was to use the latest cutting edge technologies, developing at scale from the beginning using serverless technology and full continuous integration and deployment while keeping the highest security level according to the best practices.