Skip to content

Instantly share code, notes, and snippets.

@PhilOwen
Created January 1, 2017 13:44
Show Gist options
  • Save PhilOwen/663a237f2a2c1fdd9f94eba743eb6911 to your computer and use it in GitHub Desktop.
Save PhilOwen/663a237f2a2c1fdd9f94eba743eb6911 to your computer and use it in GitHub Desktop.
Haskellで、Raspberry Pi 2のLチカ

HaskellでRaspberry PiのLチカをやってみる。
初歩的なのに、やたら苦労した…

RasPi2を使った。 LEDに抵抗を付けて、RasPiのグラウンドと GPIOの21番ピンに繋いだ。

GPIOへのアクセスには、HPiを使った。 hpioというパッケージもあるが、 依存関係の解決でコケた上、 ライブラリが必要以上に煩雑な感じだったのでやめた。
system-gpioというのもあったが、 これはやり方が原始的すぎてやめた。

HPiは、bcm2835というCライブラリを使っている。 細かな制御ができて速いらしい。
ここ からソースをダウンロードして、RasPiにインストールする。 インストール方法は、ページ内にある通り。

RasPiでは、Haskellでよく使うstackがすぐには使えない。 色々とパッケージが古かったりして苦労する。 仕方ないので代わりにcabalでパッケージ管理等をやることにした。

このgistリポジトリを、 hs-gpioという名前のディレクトリへcloneしたら、そこで

cabal install --only-dependencies.  
cabal run

で実行できる。 (sudo不要)

素直にpythonを使うと、ネットの情報も豊富で、 カンタンに実行まで持っていけた。 が、Haskellだと落とし穴が多かった。 ピン番号が、GPIOでは21なのに、 HPiだとPinV1_13に対応していたり…

References

name: hs-gpio
version: 0.1.0.0
license: MIT
author: hiloki owen
build-type: Simple
cabal-version: >=1.10
executable hs-gpio-exe
main-is: Main.hs
build-depends: base >=4.6 && <4.9
, HPi
default-language: Haskell2010
import Control.Concurrent
import Control.Monad
import System.RaspberryPi.GPIO
main :: IO ()
main = withGPIO $ do
let p = PinV1_13
setPinFunction p Output
forever $ do
writePin p True
threadDelay $ 1000*1000
writePin p False
threadDelay $ 1000*1000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment