Personal Projects
Language: C++
Hardware: ESP32, Touchscreen Display
This is a project I worked on for about a month over Christmas (for my girlfriend). It's built with an ESP32 CYD (Cheap-yellow-display) that was purchased for just over $20. With a 3d printed case, this device sits on a desk or nightstand, displaying real-time messages sent over the internet. This is my favorite project I've created to date, I hope you find it interesting!
The software for Envelope was written entirely in C++ using a collection of available libraries to handle graphics, wifi management, and API connectivity. Envelope is interfaced with via Telegram, a free messaging platform. From the user's end, they can tap on the screen to send a push notification back via Telegram.
There were a lot of challenges that I ran into while developing Envelope. A lot of them dealt with optimizing the limited hardware of the ESP32. Initially, when listening for network calls (every five seconds or so), the entire frontend would freeze. This is obviously unusable. To resolve this issue, I implemented multithreading, placing network calls on one core, and frontend animations on the other.
Language: C++
Hardware: Arduino Nano, LCD, DHT 11 Temperature & Humidity Sensor
The Arduino-Based LCD Menu is a relatively simple project I made to integrate and test different sensors and compatible components. The framework allows me to write a simple test program and integrate it into a fully developed selection menu. As displayed in the images, there is a Temperature and Humidity Sensor.
Navigation in the menu is done entirely by a rotary encoder. Turning the knob cycles through a carousel of the available options, displayed on the LCD. The process of implementing this Rotary Encoder taught me a lot about ADC conversion, debouncing, and interrupts.
The software for this project is fairly intuitive. There is a basic class framework in place to create new menus, with a main menu being the default in scope. All encoder handling is abstracted into it's own class, so that the main file can focus on the logic of navigating through the menu.