Recent Posts

More Posts

As a winter project, I’m turning my PinePhone into an indoor robot. The Pinephone has everything needed for a decent stand-alone robot: plenty of CPU, a camera, gyro/accelerometor/compass, display, and it can run Debian. Below is a video of the hardware in teleop mode. A Lolin32 ESP32 running MicroPython takes commands over Bluetooth LE and sends PWM and direction signals to the FIT0441 motors. The frame is 3D printed. Currently the phone is just a passenger.


These are short notes on loading baremetal software on the Raspberry Pi Zero. I started down this path due to wanting to learn Rust, which lead to Tock which is an embedded operating system in Rust. Rather than buy yet another piece of hardware I though I’d use one of my 5 (!) Raspberry Pi Zeros as a development board instead. It’s just another microcontroller, just one that runs at 1 GHz and has a ton of RAM…


ESPHome is a framework for building custom home automation that runs on an ESP8266 or ESP32. It’s pretty cool - you select and configure components by writing a YAML file, which then drives host side Python snippets to configure and bind the device side code, which is then built and pushed using PlatformIO. Some nice touches: It integrates with Home Assistant and has automatic discovery It can drive displays, including rendering TTF files host side to give nice fonts device side It looks reasonably composable so, for example, you can have multiple Bluetooth broadcast parsers I used this to bridge between Ruuvi tags and my Home Assistant instance.


My son wanted to get an alarm clock for his room which preferably plays MP3s. MP3 players are surprisingly expensive at 40 CHF for a 4 GiB model so I picked up a used Moto E 2nd gen phone for 35 GBP, loaded a stripped down version of Lineage OS on it, and designed a 3D printed a stand: I’m quite happy with how it turned out. The phone is just an alarm clock and MP3 player as the other apps are either not installed or (like the Play Store) behind Lineage’s protected app feature.


I got distracted and had a hack on using a STL Link v2 clone as a development board. There’s a lot to like: A Cortex-M3 STM32F103C8T processor with 64 KiB of flash and 20 KiB of RAM 4 I/O lines and a LED to blink Decent support in STM32duino with a DFU bootloader Comes in a case and plugs directly into a USB port ~$2/each The I/O is strange and limited but it’s enough to drive a RGB LED via PWM, drive a 40 RGB LED pHAT over SPI, and drive a 320x240 LCD over fast bitbanged SPI.



C++ in 2017

Seeing how C++17 compares to Go


A fast indoor mousebot


A rover tracking camera


A balancing robot written in Go and running on ARM Linux.


Ideas for future projects.


The Never complete; often never started autopilot.


Some things I’ve hacked on.

PL/0 implementation

A toy compiler for the PL/0 educational language.


ser2neo makes it easier to drive a NeoPixel ring


Markdown templates for project plans, etc.