2021/12/18(土) の回です。
2021/12/19(日) 04:59 くらいに書き終わりました。
遅れて
はじめに
Elixirを楽しんでいますか
Nervesを楽しんでいますか
タイトルはだいぶ大上段に構えました。
はじめに言っておくと、この記事の内容は、IoTの猛者だ! という方には物足りない記事だとおもいます。
次のような人には合うとおもいます。
タンスの肥やしになってしまっているRaspberry Piをお持ちの方です。
そういう方は、久々に引っ張り出してきて電子工作を久しぶりにやってみようかなあという気持ちを湧き起こす、血湧き肉躍る内容にしています。
ついでに、コワくない関数型言語Elixirの世界にどっぷり浸かってください。
What is Elixir?, What is Nerves?
いま、日本で一番Nervesを楽しんでいる三銃士です。
今日はこんな感じで、nerves/elixirハンズオン“ライブ“やったよ!
— myasu🍊12/25Liella!1st福井,'22/2虹4th,'22/3Aqours6th (@etcinitd) December 18, 2021
(右の三人 #nervesjp 勢www#wwest https://t.co/zNEdwhXjPI
NervesJP勢、左から @myasu さん、 @takasehideki 先生、 @pojiro さん。
Nervesは、IoTをElixirで楽しめる**ナウでヤングでcoolなすごいやつ**です。
Nervesは、誤解を恐れずに言えば**Elixir専用OS**!!! という言い方が一番しっくりきます。
だって、ssh
で中に入ったら iex>
しかできないし で一生Elixirだけを楽しめます
なんだろう と心がざわついた方、ワクワクが止まらない方、ロマンチックを止めたい方はぜひ、NervesJPのSlackワークスペースに飛び込んできてください。
IoTやNerves、Elixirが大好きなfolksたちが熱烈歓迎します
Let's join us!
$\huge{れっつじょいなす!}$
電子工作を楽しむ
ボタンを押したらLEDが光り、離したら消えるという動作をさせたいとおもいます。
Seeedさんの製品を使いまして、手先が「不器用ですから」な私でもはめ込み式で電子工作を楽しめます。
LEDをつなげるところは、「Raspberry Piで学ぶ電子工作1」を参考にしています。
部品 | 価格(2021/12/09) |
---|---|
Raspberry Pi用Grove Base Hat | 1,244円 |
Grove ボタン - Grove Button | 240円 |
ブレッドボード、抵抗、LED、ジャンパーワイヤー | 忘れました(詰め合わせセットみたいなものを買いました) |
Nerves Livebook Setup
簡単です。
動画を用意しました。
ご覧になってください。
詳しくは、ココをご参照ください。
わからないことがありましたらぜひ、NervesJPのSlackワークスペースに飛び込んできてください。
IoTやNerves、Elixirが大好きなfolksたちがあなたの訪れを熱烈歓迎します
プログラム(Notebookを書く)
画像だと写経が苦行になるとおもいますので、コードを載せておきます。
点灯夫さん
巨人のエースナンバー18を背負っています。
私は世代的に桑田真澄投手を思い出します。
defmodule Lamplighter do
def on do
run(1)
end
def off do
run(0)
end
defp run(state) do
{:ok, gpio} = Circuits.GPIO.open(18, :output)
Circuits.GPIO.write(gpio, state)
end
end
ボタンを押した離しのイベントを受け止めるモジュール
「思い切って僕の胸に飛び込んで来てほしい」
巨人の背番号5番といえば、世代的に岡崎郁選手を思い出します。
が、ここは長嶋茂雄監督(当時)の胸に飛び込んできた清原和博選手の巨人時代の背番号5番を使います。
defmodule HelloNerves.Observer do
use GenServer
require Logger
@input_pin 5
def start_link(state \\ %{}) do
GenServer.start_link(__MODULE__, state, name: __MODULE__)
end
@impl true
def init(state) do
{:ok, state}
end
@impl true
def handle_info({:circuits_gpio, @input_pin, _timestamp, 1}, state) do
Logger.debug("Received rising event on pin #{@input_pin}")
Lamplighter.on()
{:noreply, state}
end
@impl true
def handle_info({:circuits_gpio, @input_pin, _timestamp, 0}, state) do
Logger.debug("Received falling event on pin #{@input_pin}")
Lamplighter.off()
{:noreply, state}
end
end
モジュールは定義しただけでは動きませぬ、Runです
HelloNerves.Observer.start_link()
ボタン押したり、離したりしたら、HelloNerves.Observer
に通知するプログラム
{:ok, input_gpio} = Circuits.GPIO.open(5, :input)
Circuits.GPIO.set_interrupts(input_gpio, :both, receiver: HelloNerves.Observer)
駆け足で説明しました。
何度でもいいます。
わからないことがありましたらぜひ、NervesJPのSlackワークスペースに飛び込んできてください。
IoTやNerves、Elixirが大好きなfolksたちがあなたの訪れを熱烈歓迎します
Wrapping up
いま、日本で一番楽しんでいる人たちです。
今日はこんな感じで、nerves/elixirハンズオン“ライブ“やったよ!
— myasu🍊12/25Liella!1st福井,'22/2虹4th,'22/3Aqours6th (@etcinitd) December 18, 2021
(右の三人 #nervesjp 勢www#wwest https://t.co/zNEdwhXjPI
ぜひ、NervesJPのSlackワークスペースに飛び込んできてください。
IoTやNerves、Elixirが大好きなfolksたちがあなたの訪れを熱烈歓迎します
追伸
上記の写真は、「次年度のSWESTのネタ試し!なWWEST(実行委員を中心とした内輪的なWinter Workshop Embedded System Technology)を下呂の水明館」での一コマです。
温泉、うらまやしいです〜2
次年度のSWESTのネタ試し!なWWEST(実行委員を中心とした内輪的なWinter Workshop Embedded System Technology)を下呂の水明館で開催中です.今回のWWESTのテーマはハイブリッド! #WWEST pic.twitter.com/1zph7k4hff
— SWEST_JP(SWEST23は無事終了しました) (@SWEST_JP) December 18, 2021