Clojure
ClojureScript
RaspberryPi
ClojureDay 1

Raspberry PiをClojureから触る時のあれこれ

More than 1 year has passed since last update.

ご挨拶

どうも今晩は、Xcoo, Inc.にてインターン生をしていますBOXPです。

大分前にRaspberry Pi Bを購入した僕ですが、9月頃になれない手つきで半田ごてを握り、モーターのドライブ回路を作り繋いだ結果、思いっきり回路を焼いてしまい壊してしまいました…

その後、まるで焼かれたRaspberry Piの意思を継ぐかのようにRaspberry Pi B+が発売されたので早速購入しました

既出の様な気もしますが、Clojureでledを点滅させるまでのあれこれをまとめておきます

下準備

※既にRaspbianWiringPiがRaspberry Piにインストールされているものとして書きます
(インストール方法はRaspberry Pi Documentationが参考になります)

Clojureを実行するために以下のパッケージをインストールしましょう

  • oracle-java7-jdk
  • leiningen

REPLを立ち上げる

作業用のディレクトを準備します

cd ~/
mkdir -p program/clojure
cd program/clojure
lein new raspi-test

手前味噌ではありますが、簡素なライブラリを作りましたのでproject.cljの:dependenciesに追記します
ついでにcore.asyncも追記します

[raspberrypi "0.1.0-SNAPSHOT"]
[org.clojure/core.async "0.1.346.0-17112a-alpha"]

REPLを立ち上げます

lein trampoline repl :headless

ライブラリの前準備をします

(use 'raspberrypi.core)
(require '[clojure.core.async :refer [go <! timeout]])

ledを点滅させる

最初にgpioを使ってする事と言えば、Blink(LEDチカチカ)ですよね
まず、ledが繋がれたピン番号をもとに、ledを定義します。

(def pin "0")
(def my-led (->PIN pin))

ledに電流を流す前に、ledが接続されたピンを出力に設定します

(set-out! my-led)

前準備が出来たので、実際に点滅させてみます

(go (while true
      (<! (timeout 500))
      (write my-led 1)
      (<! (timeout 500))
      (write my-led 0)))

これで、0番ピンに接続されたledが点滅します

まとめ

とにかくREPLを立ち上げるまでの時間が長く、trampolineを付けて起動しないとあまりにも起動に時間がかかりすぎてタイムアウトを起こします

今回はClojureをそのまま使いましたが、使い勝手としてはClojureScriptを使った方が良いかもしれません

快適な開発が出来ると信じて、近いうちにClojureScriptでも試してみます