IPの固定化(ESP32,PC,ルーター)

![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) バチンと電源を入れるだけでWiFi通信が確立してほしい


# WiFiを使うガジェット開発のアレ
人類ならだれもが、ラズパイやESP32でwifiを使った無線環境を構築し、自由に画像をとばしたりのびのびとロボットを操作したいと思うはずです。

しかし、IPが自動割り当てのままだと、**起動の度にラズパイやESP32といった子機のアドレスがどうなっているのかを確認する必要があり、非常に面倒**です。

一方、**IPの固定となると、それはそれで設定が面倒な印象**があります。
これはそこをなんとかするためのメモです。

# ローカルのwifi環境を構築する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/cc6a6107-cd65-3bf4-61a3-70042042ee6a.png" width =500/>

今回は**ローカル通信専用のWiFiルーターを用意**して環境を整えます。
こうするとPC側ではインターネット用のアクセスポイントとIoTガジェット用のアクセスポイントを通常操作で簡単に切り替えることができて便利です。

最近は以下の写真のような感じの小さなルーター(型番WMR-433W2)が2000円ぐらいで買えます。PCからの給電でも動きました。
(他にもPCをWIFI親機にしてアドホックに子機と接続してしまう方法もあります。以前試したことがありますが、少しややこしかったと思います。）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/8f75ebcd-d78e-b1a1-8152-81ff1be31eaf.png" width = 150 />


# 設定方法

① ルーターの設定 ② ESP32の設定 ③ PCの設定と３ステップで解説します。

## ① ルーターの設定
アクセスポイントとなるルーターの説明書を読んで設定を行います。
まずルーターの電源を入れて、PCでルーターにWiFi接続します。
次にアドレスバーにルーターのIPアドレスを入力します。IPアドレスは製品の説明書に書かれていると思います。

アクセスに成功すると下記のような画面になります。入力すべきIDとパスワードは製品に付属しているものを使います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/92fcb35e-32be-f4c1-92ec-12048ca92439.png" width = 300/>

ログインすると設定画面に入れると思います。

先程の写真の商品の場合は、設定ウィザードというところからルーターを「ローカルモード」に設定することができました。
ローカルモードはインターネット接続なしの割り切り仕様で、今回の目的にピッタリのモードです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/9bfe4ac9-15f0-09e2-d98c-1d8821c41cdd.png" width = 500/>

ルーターの情報を調べる画面もあると思いますので、内容を表示します。
今記事の製品では「ステータス」がそれに該当します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/2d50f28b-314b-deac-1fb6-ab810417bd42.png" width = 500/>

設定を写メモします。
ISIDやパスワードはもちろんのこと、
IPアドレスやサブネットマスク、ゲートウェイがわかるようにしておきます。すぐに使います。

また、このタイミングで手持ちのガジェットに合わせて**通信速度も確認**しておきます。
手持ちの**ESP32は2.4GHzのみ対応**なので、ルーターの速度も2.4GHzにします。
WMR-433W2の場合は本体に切り替えスイッチが付いていましたが、この画面で設定する製品もあるかもしれません。製品によっては2.4GHz/5GHzが同時に使えるかもしれません。

また、WMR-433W2ではこれ以上の設定はできないようですが説明書を見るとDHCPサーバーとしてのIP自動割り当ては192.168.13.2から64台とあるので、機器から固定IPを設定したい場合には192.168.13.70以降で設定するとよいかもしれません。

ここからは少し古い家庭用ルーター(WRC1900GHBK)の例で見てみます。
こちらは接続機器のIPの固定が同様の設定画面から可能です。
DHCPで接続できる機器の範囲を指定できる場合があり、その場合はDHCPの帯域をキープ（100-200など）します。
その上で、DHCP以外の範囲にPCやESP32のMacアドレスに対し、固定IPを与えていきます。

#### PCのMacアドレス（機器に固有のハードウェア的なアドレス）の調べ方

**ubuntuの場合**
ifconfigを実行したときのetherの値がMacアドレスです。
ifconfigが実行できない場合は、sudo apt install net-toolsでifconfigをインストールすればOKです。

**WindowsやMacの場合**
下記のようなサイトが参考になるかもしれません。
https://www.buffalo.jp/support/faq/detail/15257.html

**ESP32の場合**
次で説明するようにESP32側から固定IPを設定できます。（と思います）
さらにルーター側からもMacアドレスの指定・固定を設定すれば盤石かもしれません。
ESP32のMACアドレスの取得方法については下記サイトが参考になると思います。
[【ESP32】MACアドレスを取得する方法](https://mobile.k05.biz/e/2018/12/esp32-mac-addr.html)

## ② ESP32の設定

WiFi接続の設定に部分だけスクリプトを抜粋します。

```c++:IP_kotei

#define AP_SSID "xxxxxxx" //アクセスポイントのAP_SSID
#define AP_PASS "xxxxxxx" //アクセスポイントのパスワード
IPAddress ip(192,168,xxx,xxx);//ESP32のIPアドレスを固定する場合のアドレス
IPAddress subnet(255,255,255,0);//ESP32のIPアドレス固定する場合のサブネット
IPAddress gateway(192,168,xxx,xxx);//ルーターのゲートウェイを入れる
IPAddress DNS(192,168,xxx,xxx);//DNSサーバーの設定（使用せず）

void setup()
{
  WiFi.config(ip, gateway, subnet, DNS);//IP固定の設定
  WiFi.begin(AP_SSID, AP_PASS);//WiFiに接続
  while ( WiFi.status() != WL_CONNECTED) {
    delay(50);//接続が完了するまでループで待つ
  }
```
さきほど調べた内容をxxxのところに転記していきます。
DNSについては使用しないので、適当な数字を入れておけば問題ないと思います。
（ちなみにDNSとはインターネット上のIPアドレスの数字の並びにドメイン名を割り振るサービスです。たとえば202.214.194.138にはwww.kantei.go.jpが割り当てられているという感じになります。ので今回のローカル接続ではわざわざ使いません。）

## ③ PCの設定
使用するPCからのアクセスポイントを今回のルーターのものに設定します。
Win/Mac/Linuxの環境にあわせて、PC側のIP設定を固定します。

https://qiita.com/routerman/items/4d19b3084fa58723830c

設定後は、アクセスポイントを選んでパスワードを入力するだけOKです。のはずです。

# 快適通信生活のはじまり
これで準備完了です。
ルーターと子機の電源をバチンと入れて、PCのアクセスポイントをポチっと変更すれば、ローカルWiFi通信が確立するという便利な環境が手にはいります。と思います。

開発サクサク！　デモもサクサク！

...となることを祈ります。

# 参考記事
[覚え書き：ESP32/arduino : 固定IPアドレス ](https://qazsedcftf.blogspot.com/2018/07/ip.html)

上記の記事等を参考にさせていただきました。ありがとうございました。