夏休みの工作特別企画　壁のスイッチをwifiにする

# 夏休みの工作特別企画　壁のスイッチをwifiにする
この季節になると引退後でも、夏休みの工作がしたくなる。また、「青春１８きっぷ」、これも気になる。年齢にかかわらず、利用できる、老人でも使える学割である。
### 今回の記事は、「トラ技(とらわざ)的自作です。」私は、40年ぐらい前トランジスタ技術という雑誌のことを「虎わざ」と命名した。
#さて
#イメージは、下記の通りです。
###wifiに接続されているスマートフォンまたは、PCのブラウザーからコマンドを送ると壁のスイッチをonする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/0a27de94-3b6c-1da1-5cfb-96579f5aa317.png)

材料
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/d383c1c7-0974-793a-6e21-b793bbd5b87f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/06949bcb-779b-6a52-c7d1-c580961f13f1.png)

フラッシュメモリ書き込み用に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/6cb9a77a-58cb-40af-c33f-38a1401b1fb3.png)
今回の記事に使う[参考資料](https://github.com/IOT-MCU)は、下記の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/24eb6560-222b-9df3-3818-23902f09c4f2.png)

```
$ git clone https://github.com/IOT-MCU/ESP-01S-Relay-v1.0.git
```
資料によると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/3f002a41-b938-4de6-2eaa-f24a2d3a75f0.png)

赤枠のGPIO0にリレーがつながっていることがわかる。この信号をLowにするとリレーがonになり部屋の電灯がつくようにする。適当でも大丈夫JP2で1-2につなぐか2-3につなぐかだから大丈夫。
jp2を壁のスイッチに接続すればOK!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/25c4c690-b18f-451d-029f-a5b15c44068d.png)
感電するといけないから使い捨ての手術用手袋を忘れないで!
これでwifiでも手動でも使えるようになった。

こここで用いられるESP01は、Espressif Systemsによって製造されているTCP/IPスタックとマイクロコントローラを備えたWi-Fiモジュールです。
アメリカのドラマによくでるスマートフォンから爆弾起爆する部品でする。
フラッシュメモリーにプログラムを書いて使用します。
老人ボケでc言語めんどくさいのでluaを勉強して使います。

この製品は、中国製なのでまず受入検査します。
usb ideモジュールにESP01を差し、PCに接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/3e22700d-e0c9-1acf-c3ad-fc24479f5319.png)
設定をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/16eaef9e-aab5-ed3b-ebf7-ae88cba7f468.png)
Rlogin等の端末で確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/c3154a42-9e00-1af7-7348-14a256889968.png)

```
AT
OK
AT+CWJAP="SSIDを入れる","パスワードを入れる"
WIFI CONNECTED
WIFI GOT IP
OK
AT+CIFSR
+CIFSR:STAIP,"192.168.1.13"
+CIFSR:STAMAC,"84:0d:8e:a7:d8:3a"
OK
```
AT+CIFSRコマンド入れてIPが出力されればOK。

```
AT+CIFSR
+CIFSR:STAIP,"192.168.1.13"
+CIFSR:STAMAC,"84:0d:8e:a7:d8:3a"

```
Rloginを閉じてESP8266Flasher.exeを起動します。
[ESP8266Flasher.exe](https://github.com/nodemcu/nodemcu-flasher)は、git clone https://github.com/nodemcu/nodemcu-flasher.git ダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/80fb3c30-24b0-50aa-56de-fde61e049219.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/7e71fd1a-5705-5a76-3b6c-459d052e3862.png)

私は、nodemcu_integer_0.9.6-dev_20150704.binを使っています。

次にLuaLoader.exeを起動します。
LuaLoader.exeは、ESP-01S-Relay-v1.0にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/43d45bce-2ddf-0692-40c9-f63a6d811a88.png)
下部のテキストボックスにprint('hello world')を入力します。

```
> print('hello world')
hello world
```
と出力されます。きちんと入りました。
下記のプログラムをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/ca514cba-a935-bdba-74c9-a76c5e67fc71.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/a2a0432e-e331-d0b6-12a5-da35a9ddebed.png)

```init.lua
led1 = 3
led2 = 4
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
gpio.write(led1, gpio.HIGH)
gpio.write(led2, gpio.HIGH)
print("Ready to start STATION")
wifi.setmode(wifi.STATION)
wifi.sta.config("ssid","password")
collectgarbage();
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive", function(client,request)
        local buf = "";
        buf = buf.."HTTP/1.1 200 OK\n\n"
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
        end
		print(vars);
        if (vars == 'sw=on')then
			gpio.write(led1, gpio.LOW);
			print("led1 on")
		 elseif(vars=='sw=off')then
		    gpio.write(led1, gpio.HIGH);
			print("led1 off");
        end
        client:send(buf);
        client:close();
        collectgarbage();
    end)
end)
```

```
> = wifi.sta.getip()
192.168.1.13	255.255.255.0	192.168.1.1
> 
```
wifiに参加できていればOKです。
ping して確認します。

```
(base) C:\Users\hirat\esp01>ping 192.168.1.13
192.168.1.13 に ping を送信しています 32 バイトのデータ:
192.168.1.13 からの応答: バイト数 =32 時間 =28ms TTL=255
192.168.1.13 からの応答: バイト数 =32 時間 =50ms TTL=255
192.168.1.13 からの応答: バイト数 =32 時間 =3ms TTL=255
192.168.1.13 からの応答: バイト数 =32 時間 =3ms TTL=255
192.168.1.13 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 3ms、最大 = 50ms、平均 = 21ms
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/ca95a1af-b59b-6b44-2784-822a5c89f321.png)
USBから取り外し配線します。
テストプログラムを実行します。

```test.py
import time,requests
r = requests.post('http://192.168.1.13/?sw=off')
for i in range(5):
    r = requests.post('http://192.168.1.13/?sw=on')
    print(i,r,"On")
    time.sleep(2)
    r = requests.post('http://192.168.1.13/?sw=off')
    print(i,r,"Off")
    time.sleep(2)
```

```result.txt
C:\Users\hirat\source\repos\py\000tests>test.py
0 <Response [200]> On
0 <Response [200]> Off
1 <Response [200]> On
1 <Response [200]> Off
2 <Response [200]> On
2 <Response [200]> Off
3 <Response [200]> On
3 <Response [200]> Off
4 <Response [200]> On
4 <Response [200]> Off
```
電源は、100円均一で入手した、充電器とケーブルを改造した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/35c9a200-1320-61c0-eac7-2b4eb1a233b5.png)
Enjoy