[Elixir] Nerves의 날씨로 가까운 날씨 정보 얻기

16402 단어 NervesElixir

소개



  • NervesElixir의 IoT입니다 나우에서 영 cool 놀라운 녀석입니다 🚀
  • use Toolshed 그러면 사용할 수 있습니다 weather의 소개입니다
  • 이 문서에서 Nerves 버전은 1.6.3입니다
  • 다음 작업은 PC에서 수행합니다 (나는 macOS를 사용하고 있습니다)

  • 하이라이트


    iex> weather
    Weather report: Xxxxx, Japan
    
       _`/"".-.     Patchy rain possible
        ,\_(   ).   22..25 °C      
         /(___(__)   3 km/h       
                9 km           
                2.0 mm   
    
  • 가까운 날씨 정보를 얻을 수 있습니다!

  • 준비



  • @ 타카 세히 선생님 Elixir에서 IoT#4.1: Nerves 개발 환경 준비에 대해 자세히 알아보기
  • 2020/8/8 현재, Erlang은 23을 설치해 두면 막히는 곳이 적을 것입니다

  • 1. 프로젝트 만들기 (에서 평소의 전망)


    $ mix nerves.new hello_nerves
    $ cd hello_nerves
    $ export MIX_TARGET=rpi2
    $ mix deps.get
    
  • MIX_TARGET에 지정할 수있는 것은 Supported Targets and Systems에서 선택하십시오
  • 나는 2018 년이지만 여전히 Raspberry Pi 2를 사용하고 있습니다

  • 2. 조금 다시 쓰기



    mix.exs
      def application do
        [
          mod: {HelloNerves.Application, []},
          extra_applications: [:logger, :runtime_tools, :inets] # :inetsを追加
        ]
      end
    
  • :inets의 지정은 지정하지 않고 실행하려고 하면 화가 났고, 그 때 추가하면 좋다는 메시지를 보고 눈치채는 대로입니다

  • Wi-Fi를 사용하는 경우 (선택 사항)


  • Wi-Fi로 네트워크에 연결되어 있으므로 설정을 다시 씁니다
  • $ mix nerves.new hello_nerves 때 이런 식으로있는 부분이 있다고 생각합니다

  • config/target.exs
    config :vintage_net,
      regulatory_domain: "US",
      config: [
        {"eth0", %{type: VintageNetEthernet, ipv4: %{method: :dhcp}}},
        {"wlan0", %{type: VintageNetWiFi}}
      ]
    

    ↓↓↓↓

    config/target.exs
    config :vintage_net,
      regulatory_domain: "US",
      config: [
        {"usb0", %{type: VintageNetDirect}},
        {"eth0",
         %{
           type: VintageNetEthernet,
           ipv4: %{method: :dhcp}
         }},
        {"wlan0",
         %{
           type: VintageNetWiFi,
           vintage_net_wifi: %{
             networks: [
               %{
                 key_mgmt: :wpa_psk,
                 ssid: "your_ssid", # ※ここにSSIDを追記
                 psk: "your_psk" # ※ここにパスフレーズを追記
               }
             ]
           },
           ipv4: %{method: :dhcp}
         }}
      ]
    
  • 이런 식으로 다시 씁니다

  • VintageNet Cookbook 참조

  • 3. 빌드 ~ microSD에 태워


    $ mix firmware
    
  • 👆 이제 Build a firmware bundle가 발생합니다.
  • 성공하면 microSD 카드를 PC에 꽂고 microSD 카드에 firmware를 굽습니다
  • $ mix burn
    
  • 👆 이제 Write a firmware image to an SDCard가 발생합니다.

  • 4. 실행


  • 구운 구운 microSD 카드를 Raspberry Pi 2에 꽂고 전원을 켭니다
  • 조금 기다리면 (10 ~ 15 초 정도?), ping가 지나갈 때가 있습니다
  • $ ping nerves.local
    
  • ping이 통과하면 ssh합시다
  • $ ssh nerves.local
    Interactive Elixir (1.10.4) - press Ctrl+C to exit (type h() ENTER for help)
    Toolshed imported. Run h(Toolshed) for more info.
    RingLogger is collecting log messages from Elixir and Linux. To see the
    messages, either attach the current IEx session to the logger:
    
      RingLogger.attach
    
    or print the next messages in the log:
    
      RingLogger.next
    
    iex(1)> 
    
  • IEx 사용할 수 있으므로 사용합니다
  • iex> use Toolshed
    Toolshed imported. Run h(Toolshed) for more info.
    :ok
    
    iex> weather
    Weather report: Xxxxx, Japan
    
       _`/"".-.     Patchy rain possible
        ,\_(   ).   22..25 °C      
         /(___(__)   3 km/h       
                9 km           
                2.0 mm   
    
  • 가까운 날씨 정보가 표시됩니다
  • Toolshed에는 다른 용도가 있습니다.h(Toolshed)에서 확인하십시오.
  • weather 함수의 실체는 코코입니다.
  • http://wttr.in/?An0에 HTTP Get 중
  • 어떤 구조인지는 모르지만 서버 측에서 판정하고 가까운 날씨 정보를 반환하는 것 같습니다


  • lib/toolshed/http.ex
      @doc """
      Display the local weather
    
      See http://wttr.in/:help for more information.
      """
      @spec weather() :: :"do not show this result in output"
      def weather() do
        check_inets()
    
        {:ok, {_status, _headers, body}} = :httpc.request('http://wttr.in/?An0')
    
        body |> :binary.list_to_bin() |> IO.puts()
        IEx.dont_display_result()
      end
    

    Wrapping Up


  • extra_applications: [:logger, :runtime_tools, :inets]:inets를 추가하면 weather에서 가까운 날씨를 얻을 수 있습니다
  • Enjoy Elixir !
  • 좋은 웹페이지 즐겨찾기