It turns out that it’s pretty dang gratifying to build embedded systems. Don’t like the power LED that’s always on? It’s your code that turns it on! You can turn it off!
I have three projects that are functional so far. One logs temperature to a MicroSD card, which helped convince the leasing office that my fridge was not cooling well enough to be food safe. Another displays CO2 sensor readings. The third sends door close/open events over MQTT.
Currently I’m working on giving a kitchen scale the MQTT treatment so I can make detailed cat food consumption graphs over time instead of manually weighing for two inconsistently timed data points per day. Next will probably be designing and printing a case for the CO2 thing, which is currently just a bunch of components taped to a power bank, and is very flimsy.
I moved my computer, and with a new setup comes new hazards. My headphone cable was wrapped around my foot when I tried to get up, and it ripped the headphones out of the jack. Both the jack and the plug were damaged – the jack was no longer in one piece, and pieces of plastic had flown off its housing, and the plug was bent but still in one piece. We were able to bend the plug back into shape with a vice, but the damaged jack would only provide audio to the left ear. Enter jack retasking in the Realtek Audio Console:
I was able to use the remaining front panel jack, and made sure to run the headphone cable with less slack to try to prevent a repeat performance. There’s a bug here, too: even though I’ve requested separate playback devices for the front and rear panel, it only gives me two if the normally-output jack is set to output. Close enough, and if I really wanted to work around it I could probably rewire the remaining jack to appear as the output one by moving cables in the front panel connector.
For the 8th grade talent show at the end of the year, I made a Flash animation to Lemon Demon‘s Dance Like An Idiot. As you may be aware, Flash hasn’t aged super well, so I tried making a video of it at modern resolutions. It now has a height of 1080 pixels, compared with its original mid-2000s 548×400, but is still 12 FPS. I noticed some problems such as duplicated frames, but deemed it good enough for a first published attempt.
This video rendition is over 25x the size of the original SWF at around 33 MiB.
With heavier services removed, it turns out this site can run on a Raspberry Pi! It’s a bit low in RAM headroom, mainly due to MySQL, but it cut my network and server hardware power usage by about 2/3! Ubuntu 20.04 works quite nicely on it, and I ran into a certbot bug while I was at it. An interesting experience!
I’ve been working towards this for several months, but today I finally wrote initial software for the thing:
The intent is that this provide useful information as you’re getting ready to go out the door. What’s displayed in the image above are easier, proof-of-concept things:
Sunrise and sunset times (this still required dealing with Daylight Savings Time, as if I needed another reason for it to annoy me)
Day and date
As it is now I have it refreshing on the hour.
This is just the beginning, though! I hope to add support for configuration files, and weather and bus information too. It’d be nice to know what sort of temperatures to expect that day, and whether I’m likely to need an umbrella. And when to leave for the bus. (I have USB speakers so it could chime.) The e-ink display (PaPiRus Zero) I’m using has some tiny switches on it, but they’re not easy to use at all, so I’m hoping to figure out how to use a handful of keyboard keys. 3D printing will likely be very helpful with that.
It’ll involve more hardware work, but I’m also hoping to have this thing provide a UI for measuring the weight of my cat’s food and water bowls. Currently I’m doing it manually, and I only get a start and end measurement for each day at varying times, so there’s a lot of slack to it. If I automate it, every few minutes will be no problem, and I can get an idea of his consumption rate. Graphs! This seems likely to require more soldering, as I haven’t been able to find a USB scale that operates in grams, but I have been able to find someone else with the same problem who solved it by soldering things.