rpi_gpio 0.5.0

  • Readme
  • Changelog
  • Example
  • Installing
  • 51

rpi_gpio.dart #

pub package Build Status

rpi_gpio is a Dart package for accessing the Raspberry Pi GPIO pins.

Overview #

  • The Gpio library provides the API for accessing the various General Purpose I/O pins on the Raspberry Pi.

  • RpiGpio provides the implementation for the Gpio API derived from the WiringPi library.

Setup #

RpiGpio accesses the GPIO pins using a native library written in C. For security reasons, authors cannot publish binary content to pub.dartlang.org, so there are some extra steps necessary to compile the native library on the RPi before this package can be used. These two steps must be performed when you install and each time you upgrade the rpi_gpio package.

  1. Activate the rpi_gpio package using the pub global command.
    pub global activate rpi_gpio
  1. From your application directory (the application that references the rpi_gpio package) run the following command to build the native library
    pub global run rpi_gpio:build_lib

pub global activate makes the Dart scripts in the rpi_gpio/bin directory runnable from the command line. pub global run rpi_gpio:build_lib runs the rpi_gpio/bin/build_lib.dart program which in turn calls the build_lib script to compile the native librpi_gpio_ext.so library for the rpi_gpio package.

Example #

The example launches the example app to demonstrate:

  • Blinking an LED.

  • Responding to a button press by turning on an LED.

The example is structured such that the example test can inject a mock gpio to facilitate testing and allow test execution on platforms other than the Raspberry Pi.

Changelog #

0.5.0 #

  • BREAKING: automatically allocate I2C, SPI, and EEPROM pins unless flag in RpiGpio constructor is set to false
  • consolidate all examples into single example.dart with debouncer
  • add example_test.dart with mock gpio
  • add Gpio dispose for cleaning up native resources
  • code cleanup

0.4.0-dev.1 #

  • BREAKING CHANGES rework and simplify API
  • Upgrade for pre-2.0 and fix analyzer issues
  • Format dart code using dartfmt

0.3.0 #

  • BREAKING CHANGES so that the rpi_gpio package much more closely matches fletch gpio package
  • Removed GpioHardware.pinMode in favor of GPIO.setMode
  • Removed GpioHardware.digitalRead in favor of GPIO.getPin
  • Removed GpioHardware.digitalWrite in favor of GPIO.setPin
  • Removed Mode.pulsed in favor of Mode.output and pulseWidth
  • Removed GpioHardware.enableInterrupt in favor of RpiGPIO.setTrigger
  • Removed PWM (Pulse Width Modulation) support for pins other than pin 1
  • Removed top level input, output, pulsed const
  • Removed top level pullup, pulldown, pullOff const
  • Removed Gpio.pin method in favor of top level pin function
  • Removed RpiGPIO.gpioNum and Pin.gpioNum in favor of RpiGPIO.description
  • Moved classes similar to fletch gpio package into gpio.dart library
  • Moved Pin and related code into new gpio_pins.dart library
  • Renamed PinMode to Mode
  • Renamed PinPull to Pull
  • Renamed GpioException to GPIOException
  • Renamed GpioHardware to RpiGPIO
  • Renamed RpiHardware to WiringPiGPIO
  • Renamed MockHardware to MockGPIO
  • Renamed RecordingHardware to RecordingGPIO
  • Renamed RpiGPIO.pullUpDnControl to setPull
  • Renamed RpiGPIO.pwmWrite to setPulseWidth
  • Changed Pin.events from getter to a method that takes an optional parameter
  • Changed Pin.value and PinEvent.value from int to bool
  • Changed Gpio.hardware= to Pin.gpio=
  • Added optional RpiGPIO.description method
  • Added Mode.other to match fletch gpio package
  • Added abstract GPIO class to match fletch gpio package

0.2.2 #

  • Update wiringPi native code for Pi v2
  • Add top level pin function and deprecated Gpio.pin method
  • Add gpioNum method to return GPIO number for pin
  • Rework isRaspberryPi to check /etc/os-release
  • Rework and simplify examples

0.2.1 #

  • Fix bug to track both rising and falling interrupt edge
  • Fix bug that prevented application from completing normally when interrupts were used
  • Switch tests to use package:test rather than package:unittest
  • Fix read, polling, and interrupts examples to wait for rpi.loadLibrary() before proceeding.

0.2.0 #

  • Support for interrupts via Pin.events
  • Rename pin to pinNum
  • Improve build native library script
  • Rename repo to danrubel/rpi_gpio.dart

0.1.0 #

  • Read and write digital values
  • Hardware pulse width modulation on pin 1
  • Software simulated pwm for other pins (work in progress)


import 'package:rpi_gpio/rpi_gpio.dart';

import 'exampleApp.dart';

/// Launch the example by injecting an instance of [RpiGpio].
/// This only works on the Raspberry Pi.
/// The [exampleApp] resides in a separate library
/// so that it does not reference the [RpiGpio] native libary
/// and thus can be tested with a mock [Gpio] on any platform.
main() async {
  final gpio = new RpiGpio();
  await runExample(gpio);

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  rpi_gpio: ^0.5.0

2. Install it

You can install packages from the command line:

with pub:

$ pub get

with Flutter:

$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:rpi_gpio/rpi_gpio.dart';
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on Mar 31, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.7.1
  • pana: 0.13.6

Health suggestions

Fix lib/rpi_gpio.dart. (-8.17 points)

Analysis of lib/rpi_gpio.dart reported 17 hints, including:

line 13 col 32: Unnecessary new keyword.

line 22 col 7: DO use curly braces for all flow control structures.

line 22 col 13: Unnecessary new keyword.

line 26 col 7: DO use curly braces for all flow control structures.

line 26 col 13: Unnecessary new keyword.

Fix bin/build_lib.dart. (-4.41 points)

Analysis of bin/build_lib.dart reported 9 hints, including:

line 11 col 17: Unnecessary new keyword.

line 14 col 14: Unnecessary new keyword.

line 25 col 22: Unnecessary new keyword.

line 29 col 15: Unnecessary new keyword.

line 34 col 18: Unnecessary new keyword.

Fix lib/gpio.dart. (-1 points)

Analysis of lib/gpio.dart reported 2 hints:

line 32 col 13: Unnecessary new keyword.

line 41 col 11: Unnecessary new keyword.

Fix lib/src/gpio_const.dart. (-0.50 points)

Analysis of lib/src/gpio_const.dart reported 1 hint:

line 2 col 27: Avoid const keyword.

Maintenance suggestions

Package is getting outdated. (-51.23 points)

The package was last published 78 weeks ago.


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.0.0-dev.60.0 <3.0.0
path >=1.0.0 <2.0.0 1.6.4
Dev dependencies
grinder ^0.8.0
pedantic ^1.1.0
test ^1.2.0