Michael Hope

Software Engineer

Google Zürich


I’m a software engineer from Christchurch, New Zealand now in Zürich, Switzerland.


  • Autonomus machines, especially drones
  • Developer tools
  • Languages, and their use in embedded
  • Embedded software and electronics


  • Electrical and Electronic Enginnering

    University of Canterbury

  • Mathematics

    University of Canterbury

Recent Posts

My own spin of the CH32V003 Mini Game Console

kholia@ and I are working on porting Zephyr to the CH32V003. While he’s sorting out license issues, I’ve been working on my own spin of wagiminator@’s CH32V003 based mini game console.

CH32V003 Mini Game Console build

I had fun building a few of wagiminator@’s CH32V003 based mini game console. This was my first time buying from LCSC, ad I was quite happy with the selection and turn around time.

Ampler eBike Bluetooth protocol

I have an Ampler Stout eBike which exposes metrics as Bluetooth attributes over GATT. I’d like to track the battery level and odomoter, so spent some time and decoded some of the attributes.

Solar powered ESPHome sensor

I’m experimenting with a long life, solar powered ESPHome based device. The original idea was for outside, low update rate sensors such as a tank water level sensor. Looks like the power consumption is too high, but it’s been interesting.

ESP32 as a low power sensor

Notes on using an ESP32 as a low power sensor: Battery: I have some 18650’s already Battery holder is 76 x 21 x 19 LiPo drop by about 1 % per month 3000 mAh at 1 %/month is ~40 uA/h ESP32:



A build of the Sawppy rover

Solar in CH

A build log of my work-in-progress project to solar power my home server.

ST Link v2 clone as a dev board

Notes on using an Aluminium case ST Link v2 clone as a development board

Zephyr Project

Added SAMD21 support to the Zephyr ROS

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.

Solar power for my office

I’m getting a 10 square metre office built in the garden. Let’s solar power it! This page has notes. Most bits are from Jaycar. A 380 W pure sine wave inverter.


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.


ArduRover based nppilot log

Day 1 Controller brownout when accelerating. I can reproduce this on the bench by gunning the throttle with the wheels off the ground. The documentation suggests that the power module is designed for 3S batteries, not the 2S equivalent that my 7.

LPC810 Hacking

The LPC810 is a Cortex-M0+ in a 8 pin PDIP. PIO0_5 /RESET (o ) PIO0_0 U0_RXD PIO0_4 U0_TXD ( ) Vss PIO0_3 ( ) Vdd PIO0_2 ( ) PIO0_1 /ISPEN See also the user manual.


The NAZE32 is a STM32 based flight controller. I own a rev5 version with the baro and magnetic compass that would be a great sensor and controller board for nppilot. This page has notes on the hardware itself.

Bone v2

I’m using a small, no-name RT5370 from ebay. It’s not fast but it is compatible and reliable, unlike the other three adapters that I have. Disable interface renaming: cd /etc/udev/rules.d; ln -sf /dev/null 70-persistent-net.


crucis Thinkpad R500 P8600 HD3470 Uses PC3-8500 / DDR3-1066 orion ASUS 1215B Uses DDR3 PC3-10600 2 x SO-DIMM Spare Kingston KVR800D2S5/2G: 2GB 256M x 64-Bit DDR2-800 CL5 Elpida 1GB 2Rx16 RC2-6400S-666

Mini Xplus as a Server

Random, incomplete notes on using a Miniand Tech Mini Xplus H24 as a server machine. v2 I’ve soldered up a serial port so doing things from scratch is much easier.


From left to right: Prague for the 2010-07 sprint Orlando, Florida for the 2010-10 LDS Budapest for the 2011-05 LDS Dallas, Texas for the 2011-01 sprint San Francisco, California for the 2012-02 Connect Orlando, Florida for the 2011-10 Connect Brisbane, Australia for the 2011-01 LCA Hong Kong for the 2012-05 Connect San Diego, California for the 2012-08 Plumbers Copenhagen, Denmark for the 2012-10 Connect I’m missing a Cambridge mug for the 2011-08 Connect and Shenzhen for 2011-11.

AVR Hacking

Programmer JTAG Name M168 T85 3 - MOSI 17 5 4 - RESET 1 1 5 - SCK 19 7 6 - GND 8 4 7 - MISO 18 6 ATTINY85 PB5 (o ) VCC PB3 ( ) PB2 PB4 ( ) PB1 GND ( ) PB0 Serial 5V o o o o TX o o RX

ARM host

I’d like a lower power server for inside my home. Some requirements: Cortex-A9, quad core, 1.2 Ghz or more. 2 GiB Ethernet. USB hosted is OK, native gigabit is better. 2 or more USB ports.


I’d like to set up clean auto builds of my personal projects and some upstream projects like crosstool-ng, gcc, and binutils. Clean install I’d like the build to run in a clean setup so the base system can be used for general development without affecting the build results.


TCHAIN_PREFIX = arm-none-eabi- export CODE_SOURCERY = NO to skip -fpromote-loop-indicies Command line programming There’s an experimental command line programmer in ground/openpilotgcs/src/experimental/USB_UPLOAD_TOOL. Use http://juju.net.nz/src/pilot-hacks.git/tree/opuploadtool.mk to build it. Custom code The link command is

Olimex STM32-H103 Notes

The Olimex STM32-H103 is a ST STM32F1 based development. Pluses are the USB port, proper JTAG connector, and all I/O out on 0.1" pitch pins. Details: STM32F103RBT6 CPU 128 Ki flash, 20 Ki RAM, 72 Mhz Standard 20 pin JTAG connector Green STAT LED on PC12 8 MHz crystal Links:

Synology DS123 Hacking

Links SynoCommunity Optware What’s running The usuals cron inetd syslogd rsyslogd hotplugd Services ntpd sshd Apache httpd 2.2.22 postgres cupsd Sambda nmbd / smbd snmpd avahi-daemon lighttpd for MediaServer Layout Generally under /usr/syno with one directory per package.

Remote work from New Zealand

I’ve worked remotely since 2009. Here’s some random notes. Organisations The New Zealand Open Source Society: http://nzoss.org.nz/ Canterbury Software Cluster: http://www.canterburysoftware.org.nz/ Institute of IT Professionals (old NZCS): http://www.iitp.org.nz/ Christchurch Robotics Club:

C++11 abuse

Using the new features in C++11 and the GCC extensions in anger.


OpenWRT can do quite a few things I need on my network that are running in many places, including: DHCP server with DNS hooks - dnsmasq Netboot/DHCP/TFTP server - dnsmasq Proxy - polipo It could let me use IPv6.

LPC1114 Temperature Sensor

The idea is to use the Cortex-M0 based LPC1114 as a low power micro in a remote temperature sensor. Use a solar light as the case and power source and it should run forever.

Jaycar MP3735 MPPT solar charge controller

I’m using the Jaycar MP3735 12V/24V 30A MPPT Solar Charge Controller for charging my office. It’s got a micro on board so let’s open the box and try and get more information out of it.


This page has terse notes on installing the Linaro LEB root filesystem on a BeagleBone, setting up the USB Ethernet gadget, and enabling basic networking. Initial Grab the boot partition contents to get MLO, u-boot, and the kernel.

libmad on the BeagleBone

(or really any Cortex-A) [[notes/bonemad]] I’m mainly interested in performance as power used ~= 1/performance. Using libmad-0.15.1b-7ubuntu1 from Precise and Linaro GCC 4.6 2012.02 as a cross build setup. Has its own complicated and out of date way of selecting the optimisations.

BeagleBone playing media

I have a XITEL MD-PORT AN1 USB Audio adapter. It sounds quite good. Can I hook it to my BeagleBone and use it as a remote audio player? On Precise I see:

Running Ubuntu armel cloud instances manually

Documentation: https://help.ubuntu.com/community/UEC/Images The image itself: http://uec-images.ubuntu.com/oneiric/current/oneiric-server-cloudimg-armel-disk1.img This is the plain QCOW2 image. The normal one includes OMAP3/4(?) kernel but I’ll use the vexpress-a9 Linaro hwpack instead. michaelh@crucis:~/linaro/tests/qemu/img$ qemu-img info oneiric-server-cloudimg-armel-disk1.img image: oneiric-server-cloudimg-armel-disk1.

StatusNet installation

Download 1.0.1. Needs PHP 5.2.3+, MySQL, various extensions. apt-get install php5-cli mysql-server php5-curl php5-mysql php5-gd php5-gmp Would be nice to shift to Debianised versions of the external libraries. MySQL password with a c.

Syncing over MTP

info.product = ‘GT-P7510/Galaxy Tab 10.1’ info.vendor = ‘Samsung’ usb.serial = ‘304D19FDB028588E’ info.capabilities = { ‘camera’, ‘portable_audio_player’ } According to: https://answers.launchpad.net/ubuntu/+question/69910 Set /etc/hal/fdi/policy/no-mtp.fdi: portable_audio_player camera