Skip to content

Instantly share code, notes, and snippets.



Last active Dec 14, 2016
What would you like to do?

Brewbot 🍻

Beer kit

You can get the basic equipment in a kit for ~$100, but probably cheaper if you shop around.


Two shops in Christchurch:

Annoyingly, both always seem to be closed on Sundays, which is usually my brew day.

Christchurch Home Brew Club has been very helpful:

Honourable mention: which has a lot of “clone” kits for well-known brews

Temperature sensor

Waterproof temperature sensor:

I used the high temperature one, just for kicks:


Program with what is essentially C/C++ with a bunch of helper utilities and a custom IDE.

Important: If you're on El Capitan, you'll need to disable a part of the new System Integrity Protection to install an unsigned kext driver. Recovery restart vodoo can be found here. Ping me on Twitter or Ruby NZ's Slack if you need help.

The one I brought along was a Uno, which is a good general purpose one to play with.

Lots of cheap clones around (Jaycar tends to stock the Freetronics ones), which use the same chips and are generally just as good.

Amazing value Arduino starter kit:

Adafruit lessons:

Arduino WiFi shield:

Raspberry Pi

Essentially a ~US$40 Linux computer with a few pins for electronics.

Get a Class-10 SD card. You don't need much space.

I used Raspbian, which you can good install through NOOBs or by itself.

You'll probably want to pick up a wifi dongle.


Very easy to install and play with – have a go!


Final result (left unfactored):

require 'rack/request'
require 'json'

# Simple persistence
require 'redis'
redis =

# Middleware example
require 'rack/contrib'
use Rack::JSONP

# `run` accepts any object that responds to `call` and takes a single argument, `env`
run ->(env) {
  request =

  case [request.request_method, request.path]
    when ['POST', '/temperature']
      response = { ok: true }
    when ['GET', '/temperatures']
      response = redis.lrange('temps', 0, -1).map(&:to_i)

  if response
    status = 200
    headers = { 'Content-Type' => 'application/json' }
    body = JSON.generate(response)
    status, headers, body = 404, {}, 'Not Found'

  [status, headers, [body]]


LCD screen:

Internet-enabled plug:,searchweb201644_5,searchweb201560_9

I drew the pixel art in my talk using Pixen for OS X, and the raw files as well as PNGs are available at:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.