Skip to content

spider-gazelle/gpio.cr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gpio

bindings for linux gpiod, a user space interface for general purpose IO control.

NOTE:: libGPIO version 2 was re-written so it could maintain backwards compatibility while introducing new features. Use the 1.x branch for lib version 1.x versions.

Installation

ensure the development dependencies are installed: sudo apt install libgpiod-dev

  1. Add the dependency to your shard.yml:

    dependencies:
      gpio:
        github: spider-gazelle/gpio.cr
  2. Run shards install

Usage

You can list the various chips available on a system by running gpioinfo this will list chips and IO line details.

require "gpio"

GPIO.default_consumer = "my app"
all_chips = GPIO::Chip.all

# or if you know the name
chip = GPIO::Chip.new "gpiochip0"
chip.lines

# take control of a line and set it's state
line = chip.line(5)
line.name
line.request_output
line.set_high
line.high? # => true
sleep 0.5
line.set_low
line.high? # => false

# release the line once finished using
# this will also happen on garbage collection
line.release

You can also configure the line for input and wait for input events to occur

require "gpio"
GPIO.default_consumer = "my app"

chip = GPIO::Chip.new "gpiochip0"
line = chip.line 0

# blocks here until this line is released
# so you might want to do this in a spawn etc
line.on_input_change do |input_is|
  case input_is
  in .rising?
    puts "input is high"
  in .falling?
    puts "input is low"
  end
end

About

crystal lang bindings for linux gpiod

Resources

License

Stars

Watchers

Forks

Packages

No packages published