mirror of
https://github.com/m5stack/M5Stack_MicroPython.git
synced 2026-05-20 10:14:44 -07:00
142 lines
12 KiB
Python
142 lines
12 KiB
Python
import network, json, ubinascii, time, machine, socket
|
|
from m5stack import lcd
|
|
|
|
wlan_sta = network.WLAN(network.STA_IF); wlan_sta.active(True)
|
|
# scanlist = wlan_sta.scan()
|
|
# node_id = ubinascii.hexlify(machine.unique_id())
|
|
# ssid_name= "M5Stack-"+node_id[-6:].decode('utf-8')
|
|
|
|
|
|
def do_connect(ntwrk_ssid, netwrk_pass):
|
|
if not wlan_sta.isconnected():
|
|
print('M5Stack Core try to connect WiFi: SSID:'+ntwrk_ssid+' PASSWD:'+netwrk_pass+' network...')
|
|
lcd.println('M5Stack Core try to connect WiFi: \r\nWiFi SSID:'+ntwrk_ssid+' \t\nPASSWD:'+netwrk_pass)
|
|
wlan_sta.active(True)
|
|
wlan_sta.connect(ntwrk_ssid, netwrk_pass)
|
|
lcd.print('Connecting.')
|
|
a=0
|
|
while not wlan_sta.isconnected() | (a > 150) :
|
|
time.sleep(0.2)
|
|
a+=1
|
|
print('.', end='')
|
|
lcd.print('.')
|
|
if wlan_sta.isconnected():
|
|
print('\nConnected. Network config:', wlan_sta.ifconfig())
|
|
lcd.println("Connected! \r\nNetwork config:\r\n"+wlan_sta.ifconfig()[0]+', '+wlan_sta.ifconfig()[3])
|
|
return (True)
|
|
else :
|
|
print('\nProblem. Not Connected to :'+ntwrk_ssid)
|
|
lcd.println('Problem. Not Connected to :'+ntwrk_ssid)
|
|
return (False)
|
|
|
|
|
|
def _httpHanderRoot(httpClient, httpResponse) :
|
|
response_header = """\
|
|
<html>
|
|
<head><meta charset="UTF-8"><title>M5Stack Setup</title></head>
|
|
<meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
|
|
<style>p{margin:10px 0}h1,h2{text-align:center;margin:35px 0}h2{margin:20px 0!important}form{margin-top:30px}tr td{text-align:right}tr select,tr input{width:200px;height:30px;padding-left:10px;outline:0;border-radius:3px;border:1px solid lightgrey}input[type=submit]{width:300px;height:38px;color:#fff;background-color:#2196F1;border:none;font-size:20px;border-radius:3px;margin-top:20px}</style>
|
|
<h1><img src="data:image/png;base64,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" alt=""></h1>
|
|
<h2 style="color:#333"><p style="font-weight:100;font-size:32px">WiFi Setup</p></h2>
|
|
<form action="/configure" method="get">
|
|
<table style="margin-left:auto;margin-right:auto">
|
|
<tbody><tr><td>SSID:</td><td style="text-align:center"><select id="ssid" name="ssid">
|
|
"""
|
|
|
|
response_variable = ""
|
|
# for ssid, *_ in scanlist:
|
|
for ssid, *_ in wlan_sta.scan():
|
|
response_variable += '<option value="{0}">{0}</option>'.format(ssid.decode("utf-8"))
|
|
|
|
response_footer = """\
|
|
</select></td></tr>
|
|
<tr><td>Password:</td>
|
|
<td><input name="password" type="password"></td></tr></tbody>
|
|
</table>
|
|
<p style="text-align:center"><input type="submit" value="Configure"></p>
|
|
</form>
|
|
</html>
|
|
"""
|
|
content = response_header + response_variable + response_footer
|
|
# print('content:')
|
|
# print(content)
|
|
httpResponse.WriteResponseOk( headers = None,
|
|
contentType = "text/html",
|
|
contentCharset = "UTF-8",
|
|
content = content )
|
|
|
|
|
|
def _httpHanderConfig(httpClient, httpResponse) :
|
|
formData = httpClient.GetRequestQueryParams()
|
|
ssid = formData["ssid"]
|
|
password = formData["password"]
|
|
print(formData)
|
|
|
|
content = """\
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<title>M5Stack Setup</title>
|
|
</head>
|
|
<body>
|
|
<h1>Connecting WiFi %s ...</h1>
|
|
Device reset...<br />
|
|
</body>
|
|
</html>
|
|
""" % (ssid)
|
|
# """ % (escape(firstname), escape(lastname))
|
|
httpResponse.WriteResponseOk( headers = None,
|
|
contentType = "text/html",
|
|
contentCharset = "UTF-8",
|
|
content = content )
|
|
|
|
if do_connect(ssid, password):
|
|
try:
|
|
wifidata = {}
|
|
wifidata['ssid'] = ssid
|
|
wifidata['password'] = password
|
|
|
|
with open("config.json", "r") as fo:
|
|
cfg = fo.read()
|
|
|
|
with open("config.json", "w") as fo:
|
|
cfg = json.loads(cfg)
|
|
cfg['wifi'] = wifidata
|
|
fo.write(json.dumps(cfg))
|
|
except:
|
|
with open("config.json", "w") as fo:
|
|
cfg = {}
|
|
cfg['wifi'] = wifidata
|
|
fo.write(json.dumps(cfg))
|
|
machine.reset()
|
|
|
|
|
|
routeHandlers = [
|
|
( "/", "GET", _httpHanderRoot ),
|
|
( "/wifi", "GET", _httpHanderRoot ),
|
|
( "/configure", "GET", _httpHanderConfig )
|
|
]
|
|
|
|
# webserver.Start(threaded=True)
|
|
|
|
def webserver_start():
|
|
wlan_ap = network.WLAN(network.AP_IF)
|
|
wlan_ap.active(False)
|
|
wlan_ap.active(True)
|
|
node_id = ubinascii.hexlify(machine.unique_id())
|
|
ssid_name= "M5Stack-"+node_id[-6:].decode('utf-8')
|
|
wlan_ap.config(essid=ssid_name)
|
|
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
|
|
print('WiFi AP WebServer Start!')
|
|
print('Connect to Wifi ssid:'+ssid_name)
|
|
print('And connect to esp via your web browser (like 192.168.4.1)')
|
|
print('listening on', addr)
|
|
lcd.println(b'Connect to Wifi ssid:'+ssid_name)
|
|
lcd.println('via your web browser: 192.168.4.1')
|
|
lcd.println('listening on'+str(addr))
|
|
|
|
from microWebSrv import MicroWebSrv
|
|
webserver = MicroWebSrv(routeHandlers=routeHandlers)
|
|
webserver.Start(threaded=False)
|