【オフライン】秋葉原でパーツお買い物＆そのままNerves入門！初日レポート

本イベントは、2024年6月22日開催の「【オフライン】秋葉原でパーツお買い物＆そのままNerves入門！」の初日イベントレポートです。

https://piyopiyoex.connpass.com/event/317734/

私はpiyopiyo.exの運営として、イベントの企画・提案・会場探しを担当しました。

## 勉強会の講師（myasuさん）

「ElixirではじめるIoT開発入門　Nervesプラットフォームで組み込み開発にトライ！」の著者、三宅 泰宏さん（myasu）さんが、秋葉原でのパーツ購入手引き、Lチカの基本、Nervesセットアップを教えてくれました！ :clap: 

https://nextpublishing.jp/book/17353.html

## 秋葉原でパーツ購入〜神田明神へお参り

### 楽しい秋葉原散策とパーツ購入

ラジオデパート
![IMG_0600.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109744/ed42cd5f-1b34-a2fa-1243-b2794e717827.png)

秋月電商
![IMG_0605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109744/8f5f81bc-2e58-fed4-9b13-e76870609444.png)

神田明神でお参り
![IMG_0608.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109744/6c98c24b-21de-049e-4847-ac026d20d9c6.png)

歩き疲れたので休憩
![IMG_0609.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109744/2883bd45-33cf-9361-7deb-95a02954fa7b.png)

## はじめてのNerves＋Lチカ

### Lチカ

まずはラズパイやNervesを使わず、LEDを光らせます。

![IMG_0619.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109744/abb72b91-00da-8fc9-671c-8d2a0cd468d7.png)

ブレッドボード、LED、抵抗について解説してくれるmyasuさん。

### Nervesのインストール

LEDが光る仕組みがわかったところでNervesのセットアップに進みます。

#### asdfを使ってerlang/elixirのインストール

erlangのインストール

```zsh
asdf list all erlang
asdf install erlang 26.2.5
asdf local erlang 26.2.5
```

elixirのインストール

```zsh
asdf list all elixir
asdf install elixir 1.16.3-otp-26
asdf local elixir 1.16.3-otp-26
```

#### nervesのインストール

macに必要なパッケージのインストール

```zsh
brew update
brew install fwup squashfs coreutils xz pkg-config
```

hexとrebarを更新

```zsh
mix local.hex
mix local.rebar
```

nerves_bootstrapのインストール

```zsh
mix archive.install hex nerves_bootstrap
```

### Nervesプロジェクト作成

```zsh
mix nerves.new hello_nerves
cd hello_nerves
```

今回はラズパイ0を使うので環境変数に`rpi0`を指定

```zsh
export MIX_TARGET=rpi0
```

依存関係をインストール

```zsh
mix deps.get
```

```zsh
mix firmware
```

microSDカードをセットしてから実行
macbookから直接ファームウェアを書き込む

```zsh
mix burn
```

microSDカードをラズパイにセットする。
ラズパイは電源ケーブルをつなぎ、ランプが点灯すること！

sshでラズパイに接続する

```zsh
ssh nerves.local
```

![IMG_0621.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109744/dbf62b39-6ac5-5572-e3a9-90e81025be31.jpeg)


### Lチカしよう

#### ファームウェアを作る

関連パッケージを追加

```mix.exs
  defp deps do
    [
      # Dependencies for all targets
      {:nerves, "~> 1.10", runtime: false},
      {:shoehorn, "~> 0.9.1"},
      {:ring_logger, "~> 0.10.0"},
      {:toolshed, "~> 0.3.0"},
      {:circuits_gpio, "~> 2.1"}, # <= 追記
```

関連パッケージをインストール実施

```zsh
mix deps.get
mix fireware
```

実行中のNervesに対してネットワーク経由でファームウェアを書き込む


```zsh
mix upload
```

ラズパイにmicroSDカードをセット、電源ケーブルをさす

```zsh
ssh nerves.local
```

#### Circuits.GPIOでLチカする

GPIOを開く

```elixir
iex> {:ok, my_output_gpio} = Circuits.GPIO.open({"gpiochip0", 5}, :output)
```

開いたGPIOに対して出力をオンにする

```elixir
iex> Circuits.GPIO.write(my_output_gpio, 1)
```

（わかりづらいけど）光った！！

![IMG_0622.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109744/cc301e4a-1140-18ca-6e20-e9b942a2d4d3.jpeg)

## さいごに

myasuさんの丁寧なサポートがあっての本イベントでした。
秋葉原散策の途中で聞いたお話は、仕事で携わっている方ならではでしたし、
Nervesセットアップまで都度ハマることに親切に助けてくれました。

myasuさん、本当にありがとうございました！
ぜひ「ElixirではじめるIoT開発入門　Nervesプラットフォームで組み込み開発にトライ！」も読んでみましょう！

https://nextpublishing.jp/book/17353.html