A very elaborate embedded Valentine's day gift

Overview

Morse Gadget

An overly-complicated Valentine's day gift (worth it).

PCB design and code have been entirely done by me.

SPECS:

  • Custom hand-held pcb design the size of a credit card
  • RISC-V ESP32 C3 as the brains of the operation
  • SSD1306 equivalent display
  • USB-C power (no power-delivery)
  • WS2812 Neopixel

The device

A small inscription

This project was made for my girlfriend as a Valentine's day gift, thus it only feels due mentioning her as the sole purpose and motivation behind this project. It took me quite a bit of time and dedication and I wouldn't have done it for anyone other than her 💜

The device

Demo

Demo GIF of the device working

Description

It's a pocket-size device that uses ESP-NOW to communicate small text messages without the need of an internet connection.

Due to the lack of space to insert a keyboard (who would have guessed) the letters are inputted through morse!

Technologies used

The project is based on embassy. Not using the IDF was a deliberate choice as it concedes me more flexibility on how i poll devices for updates.

Everything is up-to-date with the latest major release of embedded-hal.

Mistakes

Oh god, well, a lot actually, ranging from the stupidest up to the funniest.

PROBLEMS:

  1. I've got the date wrong. I am not joking, I thought Valentine's day was on the 15th and not the 14th. This has fortunately become an inside joke

  2. I haven't exposed GPIO9 thus making it IMPOSSIBLE to enter the bootloader and re-program the device.

FIXES:

  1. The only fix was to laugh about it plenty

  2. I had to REMOVE THE RF SHIELD and bridge GPIO9 with a jumper for the first upload. I then put a snippet in my code that allows me to enter download mode by pressing SW4 upon startup.

Things I'd improve

  1. First of all, I'd actually spend the time to design the UART circuit to program it through the USB, it would have been just much cooler and would have allowed my girlfriend, if she ever got interested in doing this kind of things in the future, to reprogram freely the device with just a USB cable

  2. I would have also put the USB-C power delivery circuit to make it work with USB-C <-> USB-C cables. Right now it only works with USB-A -> USB-C cables

  3. Better buttons. These buttons are a bit hard to press unless you do it with your fingernail. They're not really suited for pressing them with the soft side of your fingertips.

  4. 3D printed case

  5. A small battery: this device doesn't actually consume a lot (except for the Neopixel which consumes almost 5W at peak power!!) so it would only make sense to implement a battery circuit to make it fully handheld

You might also like...
Advent of Code, different language each day

I forgor 💀 Advent Of Code 2022 Using a different language each Day!! (For obvious reason some solutions might be absolute shitcode, since I'm learnin

Adapt the screen's color spectrum according to the hour of the day in order to improve your sleep

circadianlight What It Is Circadian Light is a program, currently only working on Linux with X, that controls the color spectrum of your screen accord

Bongo Copy Cat wants to be involved in everything you do but instead just imitates you hitting your keyboard all day. After all it's just a cat.
Bongo Copy Cat wants to be involved in everything you do but instead just imitates you hitting your keyboard all day. After all it's just a cat.

Bongo Copy Cat Introduction Bongo Copy Cat wants to be involved in everything you do but instead just imitates you hitting your keyboard all day. Afte

Convert a unix timestamp (seconds) to a struct {year, month, day, hour, minute, second, weekday}.

uts2ts uts2ts is a simple function that does only one thing: It converts a unix timestamp to something slightly more useful. ;-) So why then? Well, it

A simple cli tool for generating quotes in your terminal from Kanye west. Start the day out strong.
A simple cli tool for generating quotes in your terminal from Kanye west. Start the day out strong.

Kanyey A simple cli tool for generating quotes in your terminal from Kanye West. Install Just do cargo install kanyey and be blessed. Bonus: throw it

Training material for the KDAB training day 2023

Rust & Qt workshop This workbook contains the material for a Rust & Qt workshop held by Ferrous Systems, developed and held together with KDAB. It is

Programming language just for fun, will kill LUA some day.

Loom Programming language just for fun, will kill LUA some day. Currently development of this language is algorithm driven. I'm trying to implement va

Very small rust docker image

mini-docker-rust Very small rust docker image. This is an example project on how to build very small docker images for a rust project. The resulting i

A starter template for actix-web projects that feels very Django-esque. Avoid the boring stuff and move faster.

Jelly A.K.A, the actix-web starter you probably wish you had. This is provided as-is, and anyone is free to extend it or rework it as they desire - ju

3rd person shooter in the very early development phase
3rd person shooter in the very early development phase

Station Iapetus Description: 3rd person shooter in the very early development phase. This is commercial project that will eventually be released in St

A very fast implementation of tldr in Rust
A very fast implementation of tldr in Rust

A very fast implementation of tldr in Rust: Simplified, example based and community-driven man pages.

A library that makes it VERY easy to run Holochain as a library, from your own binary, with great defaults

embedded-holochain-runner A library that makes it VERY easy to run Holochain as a library, from your own binary, with great defaults How it will work

very cool esoteric language pls use

okfrick has one memory pointer has less than 5 characters hopefully works well is turing complete (possibly) + - increase memeory pointer value ( - st

Zopfli Compression Algorithm is a compression library programmed in C to perform very good, but slow, deflate or zlib compression.

Zopfli Compression Algorithm is a compression library programmed in C to perform very good, but slow, deflate or zlib compression.

A very simple third-party cargo subcommand to execute a custom command

cargo-x A very simple third-party cargo subcommand to execute a custom command Usage install cargo-x cargo install cargo-x or upgrade cargo install -

OxHTTP is a very simple synchronous HTTP client and server

OxHTTP is a very simple synchronous implementation of HTTP 1.1 in Rust. It provides both a client and a server.

Very overengineered Brainfuck compiler tools

BFVM - The overengineered brainfuck compiler tool Why? just learning about some codegen stuff Why so pathetic? The whole concept is pathetic. This is

This project aims to implement a CSS(less like) parser in rust. Currently the code is targeting the PostCSS AST. Very early stage, do not use in production.

CSS(less like) parser written in rust (WIP) This project aims to implement a CSS(less like) parser in rust. Currently the code is targeting the PostCS

A cli based pastebin in Rust, but very insecure

pasta A cli based pastebin in Rust, but very insecure Use nightly toolchain to build rustup override set nightly When this program is running, you can

Owner
Pietro
@stack_smash on telegram.
Pietro
A very fast Rust tool to crack a password protected PDF (Dangerous ☠️)

DOCBOT A PDF password cracking tool with multi-threading capabilities, featuring password format generators for commonly used patterns and dictionary

Akhil Sharma 3 Mar 22, 2024
Bruteforce Nitro gift codes

Nitro Brute Bruteforcing Nitro gift codes in what is probably the most efficient way. I doubt it's very useful though (there are $9.5E29$ possible cod

mib 1 Nov 13, 2021
A very-very simple url shortener for Rust

urlshortener-rs A very simple urlshortener for Rust. This library aims to implement as much URL shortener services as possible and to provide an inter

Victor Polevoy 39 Nov 20, 2022
Freebsd-embedded-hal - Like linux-embedded-hal but FreeBSD

freebsd-embedded-hal Implementation of embedded-hal traits for FreeBSD devices: gpio: using libgpio, with stateful and toggleable support, with suppor

null 2 Oct 1, 2022
A no_std GIF library for embedded applications(embedded-graphics)

tinygif A tiny gif decoder written in no_std Rust. This crate requires about 20kB of memory to decode a gif. basic decoding frame iterator interlace s

Andelf 12 Jun 15, 2023
Super-lightweight Immediate-mode Embedded GUI framework, based on the awesome embedded-graphics library. Written in Rust.

Kolibri - A GUI framework made to be as lightweight as its namesake What is Kolibri? Kolibri is an embedded Immediate Mode GUI mini-framework very str

null 6 Jun 24, 2023
7-day Roguelike, 2021 (Success)

SecBot - 7 Day Roguelike Challenge (2021) Play in your Browser. Chrome, Firefox or similar recommended. It's also published on itch.io. A tutorial ser

Herbert 23 Jul 23, 2022
Just a little game I made in a day to try out the WASM-4 fantasy console.

Dodgeball This is just a little game I made in a day to try out the WASM-4 fantasy console. Play it here. The palette is SODA-CAP by Cappuchi. License

Sander in 't Veld 1 Jan 15, 2022
a day-planner/calendar app based on egui

Malakal Malakal is a day planner application. I crafted it because I was not able to find a comfortable calendar application for Linux. I myself have

null 5 Dec 21, 2022
Trying to solve Advent of Code 2022 in 25 different languages (1 day = 1 language)

Advent of Code 2022: 15/25 langs I’ll try to solve this Advent of Code using different language for each day. Any programs needed to run the code will

Max “Goldstein” Siling 2 Dec 15, 2022