(この記事は、「#NervesJP Advent Calendar 2019」の10日目です)
昨日はnishiuchikazumaさんの「ElixirでラズパイのLEDをチカ〜RaspbianOSインストールから〜」です!
こちらもぜひぜひ!
私もチカチカさせてみます!
はじめに
- Nervesを使ってRaspberry pi2からTwitterの投稿を行う
- ここで作ったプロジェクトで、LEDをチカチカさせる機能を追加します
- NervesはElixirのIoTでナウでヤングなクールなすごいやつです
作品
変更ポイント
diff --git a/mix.exs b/mix.exs
index 7eb5f71..1e02c45 100644
--- a/mix.exs
+++ b/mix.exs
@@ -61,7 +61,8 @@ defmodule HelloNerves.MixProject do
{:poison, "~> 3.1"},
{:oauther, "~> 1.1"},
{:extwitter, "~> 0.8"},
- {:cronex, github: "jbernardo95/cronex", ref: "345b57e14667a08280d790afdfbb359f467649df"}
+ {:cronex, github: "jbernardo95/cronex", ref: "345b57e14667a08280d790afdfbb359f467649df"},
+ {:circuits_gpio, "~> 0.4"}
]
end
- Elixir Circuits - GPIO を追加しています
lib/hello_nerves/led.ex
defmodule HelloNerves.Led do
def blink do
turn_on()
Process.sleep(500)
turn_off()
Process.sleep(500)
spawn(HelloNerves.Led, :blink, [])
end
defp turn_on do
Circuits.GPIO.write(gpio(), 1)
end
defp turn_off do
Circuits.GPIO.write(gpio(), 0)
end
defp gpio do
{:ok, gpio} = Circuits.GPIO.open(18, :output)
gpio
end
end
- 私は
GPIO 18
を使いましたがお好みのものをお使いください - 回路は、Raspberry Piで学ぶ電子工作 超小型コンピュータで電子回路を制御する (ブルーバックス) を参考にしてつくりました(エイっ! と差し込みました)
$ export MIX_TARGET=rpi2
$ mix deps.get
$ mix firmware
$ mix firmware.burn
して、Nerves on Raspberry Pi 2にssh
で接続して
iex(1)> HelloNerves.Led.blink
なんてやると、LEDがチカチカずっとします。
閑話休題
lib/hello_nerves/led.ex
defmodule HelloNerves.Led do
def start do
spawn(Led, :blink, [])
end
def blink do
{:ok, gpio} = Circuits.GPIO.open(18, :output)
Stream.iterate(0, &(&1 + 1))
|> Enum.each(fn _ ->
Circuits.GPIO.write(gpio, 1)
Process.sleep(500)
Circuits.GPIO.write(gpio, 0)
Process.sleep(500)
end)
end
end
- ずっと無限にチカチカするものを作りたかっただけなのですが、最初に書いたのはこんな感じの(たぶん)無限ループでした
- なんだか美しくないようにみえたので上のように書き直しました
- どっちがいいのか、はたまたもっと良い書き方があるのかはわかっていません
- ご指導ご鞭撻のほどよろしくお願いします
A very merry Christmas (war is over if you want it)
次回
- 明日も私が担当いたしましてNervesを使って毎朝天気予報をRaspberry Pi 2にしゃべらせる(できた!) です
- こちらもよろしくお願いします