WiFiアクセスポイントとWebサーバを立ち上げる (ESP32 MicroPython)
はじめに
こんにちは、清水です。ESP32 MicroPython で、WiFiアクセスポイントとWebサーバを同時に立ち上げてみました。簡単で良いです。
ESP32上のWiFiアクセスポイントにクライアントが接続すると、IPアドレスを発番して提供します。
ESP32上で次の2つは同時に実行可能でした。
- WiFiアクセスポイントの立ち上げ
- 既存のWiFiアクセスポイントへの接続
WiFiアクセスポイントはパラメータを外部からセットする手段として使えそうです。
プログラム
このプログラムは、ESP32ボード上のLEDの点滅間隔を、Webブラウザから制御します。
点滅間隔(秒)の指示方法
http://192.168.5.1/?LED=0.1
http://192.168.5.1/?LED=0.9
Webブラウザの表示画面
ESP32 LED Delay (Sec) : 0.1
プログラム説明
- WiFiアクセスポイントを立ち上げます wiFiAccessPoint(essid,pwd,ip,mask,gw,dns)
- LEDをLedDelaySecで点滅するスレッドを起動します ledLoop()
- HTTPポート(80)でクライアントの接続を待機します
- 受信メッセージから、LED点滅間隔を取得して保存します LedDelaySec
- ブラウザに応答メッセージを返します
# WiFiAccessPoint, WebServer, Flashing LED on ESP32 MicroPython
ESSID = 'ESP2'
PASSWORD = '123456789'
IP = '192.168.5.1'
LED_PIN = 2
import network, machine, time, _thread, socket, re
def wiFiAccessPoint(essid,pwd,ip,mask,gw,dns):
ap = network.WLAN(network.AP_IF)
ap.config(essid=essid, authmode=3, password=pwd)
ap.ifconfig((ip,mask,gw,dns))
print("(ip,netmask,gw,dns)=" + str(ap.ifconfig()))
ap.active(True)
return ap
def wiFiConnect(essid,pwd):
nic = network.WLAN(network.STA_IF)
nic.active(True)
nic.connect(essid, pwd)
while not nic.isconnected(): pass
print("(ip,netmask,gw,dns)=" + str(nic.ifconfig()))
return nic
def ledLoop():
led = machine.Pin(LED_PIN, machine.Pin.OUT)
while True:
led.value(not led.value())
time.sleep(LedDelaySec)
wiFiAccessPoint(ESSID,PASSWORD,IP,'255.255.255.0',IP,'8.8.8.8')
#wiFiAccessPoint('ESP99',PASSWORD,IP,'255.255.255.0',IP,'8.8.8.8')
#wiFiConnect('essidXXX','pwdXXX')
LedDelaySec = 1.0
_thread.start_new_thread(ledLoop, ())
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80)) # host,port
s.listen(5) # backlog
while True:
conn, addr = s.accept()
request = str(conn.recv(1024)).lower()
print("request : "+ request)
m = re.search(r'led=(\d*\.\d*)', request)
if m != None :
LedDelaySec = float(m.group(1))
response = 'ESP32 LED Delay (Sec) : ' + str(LedDelaySec)
conn.send(response)
conn.close()
受信メッセージ例
request : b'get /?led=0.1 http/1.1\r\nhost: 192.168.5.1\r\nconnection: keep-alive\r\ncache-control: max-age=0\r\nupgrade-insecure-requests: 1\r\nuser-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/76.0.3809.100 safari/537.36\r\naccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\naccept-encoding: gzip, deflate\r\naccept-language: ja,en-us;q=0.9,en;q=0.8\r\n\r\n'
その他
スマフォからWebサーバにアクセスできない場合
request : b'get /?led=0.1 http/1.1\r\nhost: 192.168.5.1\r\nconnection: keep-alive\r\ncache-control: max-age=0\r\nupgrade-insecure-requests: 1\r\nuser-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/76.0.3809.100 safari/537.36\r\naccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\naccept-encoding: gzip, deflate\r\naccept-language: ja,en-us;q=0.9,en;q=0.8\r\n\r\n'
スマフォからWebサーバにアクセスできない場合
スマフォからWiFiアクセスポイントに接続してIPアドレス取得後、Webサーバにアクセスできない場合は、スマフォの「モバイルネットワーク」をOFFにして、インターネット接続を遮断するとうまくいくようです。
クライアントのコネクション
ap.isconnected() で、クライアントからのWiFiコネクションの有無を判定できます。
WiFiアクセスポイントパラメータ
プログラム中の「ap.config(essid=essid, authmode=3, password=pwd)」
にて、つぎのパラメータを設定できます。
authmode:
0 – open
1 – WEP
2 – WPA-PSK
3 – WPA2-PSK
4 – WPA/WPA2-PSK
hidden:
0 – visible
1 – hidden
1台のESPで複数WiFiアクセスポイントの同時起動はできないようです。
参考URL
ESP32 用クイックリファレンス
https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/quickref.html
ESP32でMicroPythonを試す!簡単ですぐできました!
https://kokensha.xyz/electronics/try-micropython-on-esp32/#Wifi
【ESP32】MicroPythonでwebサーバー建てて遊ぶ
https://dfram.hatenablog.jp/entry/2017/11/12/150357
class WLAN – control built-in WiFi interfaces
https://docs.micropython.org/en/latest/library/network.WLAN.html
Author And Source
この問題について(WiFiアクセスポイントとWebサーバを立ち上げる (ESP32 MicroPython)), 我々は、より多くの情報をここで見つけました https://qiita.com/tshimizu8/items/4db68cb42bf7ed84c6e9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .