Go + hardware
This repo is a directory of tools, packages and tutorials to let you introduce Go in your hardware projects.
Why Go?
- Great tooling that comes with a strong cross compilation story.
- Builtin concurrency primitives in Go is making it easier to write concurrent programs.
- Go runs on ARM boards. ARM boards are getting cheaper, making it easier for production designs to include them. Higher-level languages have more opportunities than ever on hardware projects.
- Go is garbage collected but you can still use it to write non-realtime or networked controllers. There are plenty of Go users who program their experimental drone flight control software in Go, it's OK for prototyping.
- Go's network stack is maintained well. Standard library might be missing higher level implementations for P2P protocols, but the community works to fill that gap.
- Writing C bindings in Go is a pleasure with cgo.
Tutorials
Packages
Controllers, robotics, etc
- gobot - High level Go package with a variety of platform APIs to talk to popular drivers such as GPIO on Arduino and Raspberry Pi, Leap Motion or Pebble.
- embd - Embedded programming framework for Go.
- godrone - High level Parrot AR Drone 2.0 framework written in Go.
- launchpad - High level controller library for Novation Launchpad.
- littlebits - littleBits controller for Go. It requires USB I/O module.
- hwio - hardware library for ARM boards such as Raspberry Pi and BeagleBone, loosely based on Arduino.
Signal processing, computer vision, graphics, media
- go-gl - OpenGL bindings for Go.
- go-opencv - OpenVM bindings for Go.
- go-sox - SoX bindings for Go.
- portaudio - PortAudio bindings for Go.
- portmidi - PortMidi bindings for Go.
- go-osc - Open Sound Control (OSC) bindings for Go.
Networking
- mdns - mDNS server and client implementation in Go. Multicast DNS can be used to discover services and message on the local network without the use of an authoritative DNS server.
- gatt - Provides a Bluetooth Low Energy GATT implementation.
Mobile
Contributions are welcome, please fork and open a PR if you see a missing package, tutorial, etc.