Nerves를 사용하여 택트 스위치를 누르면 LED가 빛납니다 (Elixir)

12114 단어 NervesElixir

소개


  • 택트 스위치가 눌려지면 LED를 밝게 만드십시오
  • 물론 Nerves
  • Nerves는 Elixir의 IoT에서 나우와 영 cool 놀라운 녀석입니다 🚀

  • 이번에는 택트 스위치가 온 것을 GPIO 24에서 읽으면 GPIO 18을 High로 LED를 빛냅니다.

  • 눌렀다는 것을 감지하기 위해 기다리는 곳은 NervesJP

  • GenServer 님의 @inachi
  • 참고했습니다! 감사합니다!


  • Elixir 초보자가 Nerves에서 심박수 측정 앱을 만들어보세요.

    작품




    - TORIFUKUKaiou/hello_nerves
    - 이 기사에서 만들기 시작한 끓인 프로젝트에 추가하고 있습니다

    소스 코드 발췌


  • Nerves를 사용하여 Raspberry pi2에서 Twitter 게시

  • 관련 커밋을 사용하고 있습니다

  • lib/hello_nerves/observer.ex
    defmodule HelloNerves.Observer do
      use GenServer
    
      require Logger
    
      @input_pin HelloNerves.Util.input_pin()
    
      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}")
        HelloNerves.Blinker.enable()
        {:noreply, state ++ [1]}
      end
    
      @impl true
      def handle_info({:circuits_gpio, @input_pin, _timestamp, 0}, state) do
        Logger.debug("Received falling event on pin #{@input_pin}")
        HelloNerves.Blinker.disable()
        {:noreply, state ++ [0]}
      end
    end
    
  • 택트 스위치를 누르거나 놓으면 circuits_gpio이 콜백됩니다.
  • 택트 스위치를 누르면 HelloNerves.Blinker.enable()를 호출하여 LED를 켭니다.
  • 반대로 택트 스위치의 밀어 넣기가 분리되면 HelloNerves.Blinker.disable()를 호출하여 LED를 끕니다.

    lib/hello_nerves/set_interrupter.ex
    defmodule HelloNerves.SetInterrupter do
      use GenServer
    
      require Logger
    
      alias Circuits.GPIO
    
      def start_link(state \\ []) do
        GenServer.start_link(__MODULE__, state, name: __MODULE__)
      end
    
      @impl true
      def init(state) do
        GPIO.set_interrupts(HelloNerves.Util.input_gpio(), :both, receiver: HelloNerves.Observer)
        {:ok, state}
      end
    end
    

  • handle_info/2:receive 선택적으로 HelloNerves.Observer를 지정하여 GPIO 상태 변경 (스위치 ON/OFF)이있을 때 HelloNerves.Observer.handle_info/2
  • HelloNerves.Observer.init/1에서 Circuits.GPIO.set_interrupts/3을 호출하면 좋을 것입니다. 처음에는 그렇게했지만 몇 번의 스위치 ON/OFF에만 반응하기 때문에 다른 모듈을 만들었습니다.
  • 이렇게하면 내 Raspberry Pi 2에서 잘 작동합니다

  • Circuits.GPIO.set_interrupts/3 부팅 후 일어나는 Iex에서 GPIO.set_interrupts(HelloNerves.Util.input_gpio(), :both, receiver: HelloNerves.Observer)
  • 진인을 알면 업데이트합니다


  • lib/hello_nerves/application.ex
      def children(_target) do
        [
          # Children for all targets except host
          # Starts a worker by calling: HelloNerves.Worker.start_link(arg)
          # {HelloNerves.Worker, arg},
          {HelloNerves.Blinker, name: HelloNerves.Blinker},
          {HelloNerves.Observer, name: HelloNerves.Observer},
          {HelloNerves.SetInterrupter, name: HelloNerves.SetInterrupter}
        ]
      end
    
  • List all child processes to be supervised
  • supervised되는 아이 프로세스를 열거하고 있습니다
  • 어쨌든 hello_nerves라는 응용 프로그램이 Nerves이 시작될 때 자식 프로세스가 자동으로 시작되는 것 같습니다.

  • HelloNerves.Blinker는 여기에 올려지지 않습니다.
  • Nerves
  • 기사에 영감을 받았습니다
  • 고마워요!


  • 회로



    htps : // / ぃぃrs 쵸오 l. 코 m / 그럼 / ぇそん s / 아 d ゔ 똥 세 d /

  • 이쪽의 책을 참고로 했습니다
  • 고마워요!


  • 설명이라든지 감상이라고 할까



  • Raspberry Pi로 배우기 전자 공작 초소형 컴퓨터로 전자 회로 제어 (블루백스)은 재귀를 사용하는 무한 루프로 작성됩니다.
  • Circuits.GPIO.set_interrupts(input_gpio, :both)를 호출하고 nerves_examples/hello_gpio/lib/hello_gpio.ex에서 메시지가 올 때까지 기다리고 있습니다.

  • receive 또한 읽어 보면 어쩐지 알 수 있습니다.

  • 이러한 구조는 프로세스
  • 자신이 실현하고 싶은 일이 있었으므로, GenServer
  • 좋은 웹페이지 즐겨찾기