ESP32でUDP通信やってみた（ESP32インストール手順解説あり）

#まずはじめに
完全な思いつきなのです。すごく初歩からやっていって、これからesp人口が増えればいいなと。
とりあえず一番簡単な「数値を送る」だけを目標にやります。
ちなみにかなり丁寧にインストール編をやってしまったのでもうインストールしてある人は、ばばっと飛ばしてください。

#必要な環境
Arduinoのエディターくらいです。

#エディターをインストールしよう
Arduino IDE 1.8.8をインストールしていこうと思います。
esp32ですとバージョンが新しくないと、ボードのインストールが面倒なのでとりあえず最新（2018/12/10現在）でやっていきます。

###レッツトライ！！
まず[ここ](https://www.arduino.cc/en/Main/Software) にアクセス。
<img width="960" alt="arduino_firststep_qiita.png" src="https://qiita-image-store.s3.amazonaws.com/0/228792/d9d25a1f-e5be-205c-214b-5ac236dfc318.png">
でWindows AIP file のやつをダウンロード→解凍→アプリ起動まで行きましょう。

ちなみになぜわざわざzipのほうでインストールしたのかというと、いくつか整理しないといけないディレクトリがあって（記事書くのもインストールするのも）面倒だからです。

ここまで来たら次のステップです。
ファイルから環境設定を開いてください。
<img width="368" alt="arduino_second_step_qiita.png" src="https://qiita-image-store.s3.amazonaws.com/0/228792/ee866edf-2d6f-c643-b447-fb7cb1b1ad33.png">

そこで追加ボードのマネージャのURLとあります。

<img width="497" alt="arduino_third_step_qiita.png" src="https://qiita-image-store.s3.amazonaws.com/0/228792/9ce5300d-7aa4-d4ab-4472-1abaa1e50242.png">


その部分に[ESPのサイト](https://github.com/espressif/arduino-esp32)からとってきたURLを張ります。
以下手順。
<img width="444" alt="ar.png" src="https://qiita-image-store.s3.amazonaws.com/0/228792/fb1159a5-13a1-c5a7-7c0d-4cdf3cd1a319.png">

<img width="928" alt="ar2.png" src="https://qiita-image-store.s3.amazonaws.com/0/228792/34c3456e-c88c-3a42-f3d8-f97414d85aad.png">

ここでコピーしたのを追加のボードマネージャのURLに貼り付けます。


<img width="493" alt="ar3.png" src="https://qiita-image-store.s3.amazonaws.com/0/228792/68d46894-b3ac-8919-2fad-52746c0a7790.png">


ツール→ボード：　からボードマネージャを選択してください。
（筆者のは先にインストールしてあるけど気にしないで(;^ω^)）
<img width="960" alt="ar4.png" src="https://qiita-image-store.s3.amazonaws.com/0/228792/ee852608-a591-f34a-785b-afc0b7b60137.png">

ボードマネージャを開いたらうえの検索バーにespと打ち込んで出てきたのをインストール。
<img width="584" alt="teisei.png" src="https://qiita-image-store.s3.amazonaws.com/0/228792/8ff8f68e-e30a-baf8-b403-693b152f58d1.png">


とりあえずこれでおｋなはずです。
いやー長かった…

#UDP通信をやってみよう
僕一人では力不足だったので
・ [ESP8266 > UDPで送信できた / esp8266_151219_udpSender](https://qiita.com/7of9/items/a61999a914ae02673b8d)
さんの記事を参考に送信側を書きました。

###UDP送信側(ESP32)
以下コード（責任は負いかねます）

```c:udp_send.ino
#include <WiFi.h>
#include <WiFiUDP.h>

const char ssid[] = "************"; // SSID
const char pass[] = "************";  // password

static WiFiUDP wifiUdp; 
static const char *kRemoteIpadr = "***.***.***.**";
static const int kRmoteUdpPort = 9000; //送信先のポート

static void WiFi_setup()
{
  static const int kLocalPort = 7000;  //自身のポート

  WiFi.begin(ssid, pass);
  while( WiFi.status() != WL_CONNECTED) {
    delay(500);  
  }  
  wifiUdp.begin(kLocalPort);
}

static void Serial_setup()
{
  Serial.begin(115200);
  Serial.println(""); // to separate line  
}

void setup() {
  Serial_setup();
  WiFi_setup();
}

void loop() 
{
  wifiUdp.beginPacket(kRemoteIpadr, kRmoteUdpPort);
  wifiUdp.write('1');
  wifiUdp.endPacket();  

  delay(3000);
}
```

ここで使われているportですが任意なので好きな数字にしていいと思います。
ただ、4桁台後半6000～9000くらいにしとくとセンスいいらしいです。

##UDP受け取りPythonコード
こっちは適当に書きましたので許してください。

```python:udp_receive.py
import socket
import struct
import contextlib import closing

UDP_IP=""
UDP_PORT=9000

sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((UDP_IP,UDP_PORT))

with closing(sock):
    while True:
        data,addr = sock.recvfrom(1024)
        print("Send from ESP",data)
```
こんな感じです。。。

これで通信できました。

#今後の開発目処
今後はセンサーと組み合わせて外の気温とか見てもいいかもなーとか思ってます。
寒い時期は外に出るのが地獄ですからね（笑）。
それ以外にも割といろいろできそうなので、次はesp間通信をやっていきたいなと思います。
それではさようなら。