go-rpio/README.md

93 lines
2.7 KiB
Markdown
Raw Normal View History

2013-07-30 05:58:34 +02:00
go-rpio
=======
Native GPIO-Gophers for your Pi!
2013-07-30 06:10:01 +02:00
2018-01-12 13:20:14 +01:00
**Documentation:** [![GoDoc](https://godoc.org/github.com/stianeikeland/go-rpio?status.svg)](https://godoc.org/github.com/stianeikeland/go-rpio)
go-rpio is a Go library for accessing [GPIO](http://elinux.org/Rpi_Low-level_peripherals)-pins
2013-07-30 17:16:42 +02:00
on the [Raspberry Pi](https://en.wikipedia.org/wiki/Raspberry_Pi).
It requires no external c libraries such as
[WiringPI](https://projects.drogon.net/raspberry-pi/wiringpi/) or [bcm2835](http://www.open.com.au/mikem/bcm2835).
2014-08-25 12:38:50 +02:00
There's a tiny bit of additional information over at my [blog](https://blog.eikeland.se/2013/07/30/go-gpio-library-for-raspberry-pi/).
2013-07-30 20:27:10 +02:00
2013-12-05 19:39:42 +01:00
![raspberrypi-blink](http://stianeikeland.files.wordpress.com/2013/07/animated.gif)
2015-03-08 14:34:25 +01:00
## Releases ##
- 1.0.0 - Supports original rpi A/B/B+
- 2.0.0 - Adds support for rpi 2, by @akramer
2018-01-12 01:13:42 +01:00
- 3.0.0 - Adds support for /dev/gpiomem, by @dotdoom
- 4.0.0 - Adds support for PWM and Clock modes, by @Drahoslav7
2015-03-08 14:34:25 +01:00
2013-07-30 17:16:42 +02:00
## Usage ##
```go
import "github.com/stianeikeland/go-rpio"
```
Open memory range for GPIO access in /dev/mem
```go
err := rpio.Open()
```
Initialize a pin, run basic operations.
Pin refers to the bcm2835 pin, not the physical pin on the raspberry pi header. Pin 10 here is exposed on the pin header as physical pin 19.
2013-07-30 17:16:42 +02:00
```go
pin := rpio.Pin(10)
pin.Output() // Output mode
pin.High() // Set pin High
pin.Low() // Set pin Low
pin.Toggle() // Toggle pin (Low -> High -> Low)
pin.Input() // Input mode
res := pin.Read() // Read state from pin (High / Low)
pin.Mode(rpio.Output) // Alternative syntax
pin.Write(rpio.High) // Alternative syntax
```
Pull up/down/off can be set using:
```go
pin.PullUp()
pin.PullDown()
pin.PullOff()
pin.Pull(rpio.PullUp)
```
2013-07-30 17:16:42 +02:00
Unmap memory when done
```go
rpio.Close()
```
Also see example [examples/blinker/blinker.go](examples/blinker/blinker.go)
## Other ##
Currently, it supports basic functionality such as:
- Pin Direction (Input / Output)
- Write (High / Low)
- Read (High / Low)
- Pull (Up / Down / Off)
2013-07-30 17:16:42 +02:00
- PWM
2018-01-12 01:13:42 +01:00
- Clock
2013-07-30 17:16:42 +02:00
2014-02-12 21:28:37 +01:00
It works by memory-mapping the bcm2835 gpio range, and therefore require root/administrative-rights to run.
2015-12-08 01:50:14 +01:00
## Using without root ##
This library can utilize the new [/dev/gpiomem](https://github.com/raspberrypi/linux/pull/1112/files)
memory range if available.
You will probably need to upgrade to the latest kernel (or wait for the next raspbian release) if you're missing /dev/gpiomem. You will also need to add a `gpio` group, add your user to the group, and then set up udev rules. I would recommend using [create_gpio_user_permissions.py](https://github.com/waveform80/rpi-gpio/blob/master/create_gpio_user_permissions.py) if you're unsure how to do this.
2018-01-12 01:13:42 +01:00
PWM modes will still require root.