P1179501


NodeMCUをWiFiのアクセスポイントにしてみるの記事に引き続き、ESP8266のWiFi周りを試してみる。

今回はNodeMCU(ESP8266)をWebサーバにしてみた。


5. ネットワーク - TCPソケット — MicroPython 1.17 ドキュメント#シンプルなWebサーバに記載されている内容をコピペしてコードを実行してみた。

main.py

import machine
pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 2, 4, 5, 12, 13, 14, 15)]

html = """<!DOCTYPE html>
<html>
    <head> <title>ESP8266 Pins</title> </head>
    <body> <h1>ESP8266 Pins</h1>
        <table border="1"> <tr><th>Pin</th><th>Value</th></tr> %s </table>
    </body>
</html>
"""

import socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()
s.bind(addr)
s.listen(1)

print('listening on', addr)

while True:
    cl, addr = s.accept()
    print('client connected from', addr)
    cl_file = cl.makefile('rwb', 0)
    while True:
        line = cl_file.readline()
        if not line or line == b'\r\n':
            break
    rows = ['<tr><td>%s</td><td>%d</td></tr>' % (str(p), p.value()) for p in pins]
    response = html % '\n'.join(rows)
    cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
    cl.send(response)
    cl.close()

実行してみたところ、

MicroPython v1.17 on 2021-09-02; ESP module with ESP8266
Type "help()" for more information.
>>> %Run -c $EDITOR_CONTENT
    listening on ('0.0.0.0', 80)

シェルの箇所に上記のように出力された。


これだけでは、ブラウザでどのIPアドレスにアクセスして良いか?分からないので、PCの端末を開き、NmapでローカルネットワークにあるデバイスのIPアドレスを調べてみた。

NmapでLAN内のRaspberry Piを探してみる


Starting Nmap 7.92SVN ( https://nmap.org ) at 2022-01-19 05:33 JST
#途中省略
MAC Address: E6:00:45:9A:67:4D (Unknown)
Nmap scan report for 192.168.0.20
Host is up (0.68s latency).
#途中省略
Nmap done: 256 IP addresses (7 hosts up) scanned in 6.53 seconds

Unknownという見慣れないデバイスが見つかったので、出力されたIPアドレスをブラウザで開いてみた。


esp8266_web_server


正しいようだ。




コードをざっくりと俯瞰してみて、HTTPプロトコルのリクエストやレスポンスまでを細かく書いているので、普段のPHPよりもより細かく意識が向いて、得られる事が多そうだ。

Webサーバを立ち上げ、他のデバイスからGETで値を送信して、その値を受取り何らかの処理を行うといった事が出来るようになるなと。