LoginSignup
4
0

More than 3 years have passed since last update.

NervesにPhoenixを入れてHTTPのGETでLEDをウェブチカ〜Phoenix準備・確認編3/3〜

Last updated at Posted at 2020-06-19

概要

NervesにPhoenixを入れてウェブチカできたので備忘録です。

  • NervesにPhoenixを入れるとNerves起動時にPhoenixも起動します
  • ウェブチカとは、とあるURLにアクセスするとNervesにつけているLEDをチカらせることを言ってます
  • 前提としてNervesとPhoenixはインストール済みとします
fish
❯ mix nerves.new -v
Nerves Bootstrap v1.8.0

❯ mix phx.new -v
Phoenix v1.5.3

長編になりそうだったので3部作としました(^^ゞ
前回はNerves設定編だったので、今回はいよいよPhoenix設定・確認編です。

Nerves起動時に起動するPhoenixの設定と確認をおこないます。

関連ファイル

mix.exs
lib/
  neosapi/
    exi.ex
  neosapi_web/
    controllers/
      page_controller.ex
    templates/
      page/
        exineos.html.eex
    router.ex

mix.exs

mix.exsファイルのdepsに以下の行を追記して、ElixirからGPIOの操作をできるようにします。

mix.exs
defp deps do
  [
    {:circuits_gpio, "~> 0.4"},
  ]
end

追記した後、mix deps.getコマンドを実行します。

fish
❯ mix deps.get

lib/neosapi/exi.ex

LEDをチカチカさせたり、オン・オフするモジュールを作成します。

lib/neosapi/exi.ex
defmodule Exi do
  @led_on 1
  @led_off 0

  def chika(sleep_msec) do
    {:ok, gpio} = Circuits.GPIO.open(25, :output)
    Circuits.GPIO.write(gpio, @led_on)
    :timer.sleep(sleep_msec)
    Circuits.GPIO.write(gpio, @led_off)
    Circuits.GPIO.close(gpio)
  end

  def led("on") do
    {:ok, gpio} = Circuits.GPIO.open(25, :output)
    Circuits.GPIO.write(gpio, @led_on)
    Circuits.GPIO.close(gpio)
  end

  def led("off") do
    {:ok, gpio} = Circuits.GPIO.open(25, :output)
    Circuits.GPIO.write(gpio, @led_off)
    Circuits.GPIO.close(gpio)
  end

  def led(_) do
    nil
  end
end

lib/neosapi_web/router.ex

HTTP GETで受け取る設定などをおこないます。

lib/neosapi_web/router.ex
defmodule NeosapiWeb.Router do
  scope "/", NeosapiWeb do
    get "/exineos/:device/:action", PageController, :exineos    # ←この行を追記
  end
end

lib/neosapi_web/controllers/page_controller.ex

HTTP GETでアクセスされた場合の処理を記載します。

lib/neosapi_web/controllers/page_controller.ex
defmodule NeosapiWeb.PageController do
  def exineos(conn, params) do    # ←この関数を追加
    device = params["device"]
    action = params["action"]

    led_onoff(device, action)

    render(conn, "exineos.html", device: device, action: action)
  end

  defp led_onoff(_device, action) do    # ←この関数も追加
    Exi.led(action)
  end

end

lib/neosapi_web/templates/page/exineos.html.eex

HTTP GETでアクセスされた場合の画面を作ります。

lib/neosapi_web/templates/page/exineos.html.eex
<h1>Exineos Page</h1>

<p>Exineosのページです</p>

Device => <%= @device %><br />
Action => <%= @action %>

デプロイ

最後に、Nervesプロジェクトのディレクトリに移動してデプロイします。

fish
pwd
/path/to/exineos
❯ cd exineris

❯ mix firmware
❯ ./upload.sh 192.168.5.55

ブラウザでhttp://192.168.5.55/にアクセスしてPhoenixの画面が表示されたことを確認後、以下のURLでLEDがオン・オフできるかどうかを確認します。

動画

直線距離で18km離れたNervesのLEDをウェブチカできたのTweetはこちら。

まとめ

NervesにPhoenixを入れてHTTPのGETでLEDををウェブチカすることができました\(^o^)/
次はLiveViewで、もにょもにょしたまとめを書こうと思ってます。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0