[Micropython esp32/8266] Web page lighting control example in AP mode + custom GPIO status display

perseverance52 2022-09-09 03:17:32 阅读数:491

micropythonesp32espwebpage

【Micropython esp32/8266】AP模式下网页点灯控制示例+自定义GPIO状态显示


This article is a synthesis of the functions of the previous two articles.可扩展性比较强,For the time being, every pin is not brought under control,On this basis, the control of the display pins can be added to improve.Now the general function is basically realized.

访问控制页面html代码

<!DOCTYPE html>
<html>
<head> <title>ESP8266 Pins</title> </head>
<style>
body {
text-align: center;} table {
margin: auto;}
</style>
<body> <h1>ESP8266 Pins</h1>
<table border="1" align="center"><tr> <th>Pin(0)</th>
<th>Pin(2)</th>
<th>Pin(4)</th>
<th>Pin(5)</th>
<th>Pin(12)</th>
<th>Pin(13)</th>
<th>Pin(14)</th>
<th>Pin(15)</th>
</tr><tr>
<td>1</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>0</td>
</tr> </table>
</body>
</html>

程序代码

'''
authmode模式:
AUTH_OPEN -- 0
AUTH_WEP -- 1
AUTH_WPA_PSK -- 2
AUTH_WPA2_PSK -- 3
AUTH_WPA_WPA2_PSK -- 4
'''
import usocket as socket
import network
from machine import Pin
pins = [Pin(i, Pin.OUT,Pin.PULL_UP) for i in (0, 2, 4, 5, 12, 13, 14, 15)]
ap_ssid = "ESP8266AP"
ap_password = "12345678"
ap_authmode = 3 # WPA2
wlan_ap = network.WLAN(network.AP_IF)
wlan_ap.active(True)
wlan_ap.config(essid=ap_ssid, password=ap_password, authmode=ap_authmode)
print('Connect to WiFi ssid ' + ap_ssid + ', default password: ' + ap_password)
print('and access the ESP via your favorite web browser at 192.168.4.1.')
#print('Listening on:', addr)
led = Pin(2, Pin.OUT)
def web_page():
rows = ['<th>%s</th>' % str(p) for p in pins]
str1 ="""</tr><tr>"""
rows_Value = ['<td>%d</td>' %p.value() for p in pins]
# rows=rows_Pin.extend(rows_Value)
rows.append(str1)
rows.extend(rows_Value)
rows.append("""</tr></table>""")
str2=''.join(rows)
if led.value():
gpio_state="OFF"
else:
gpio_state="ON"
html = """<!DOCTYPE html><html><meta charset="UTF-8"><head><title>ESP32/8266网页控制界面(AP模式)</title><style>body {text-align: center;} table {margin: auto;}</style><table border="1" align="center"><tr>""" + str2 +"""<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,"> <style>html{
font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;}
h1{
color: #0F3376; padding: 2vh;}p{
font-size: 1.5rem;}.button{
display: inline-block; background-color: #e7bd3b; border: none;
border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}
.button2{
background-color: #4286f4;}</style></head><body> <h1><font color="red">ESP32/8266网页控制界面</font></h1>
<p>GPIO2 state: <strong>""" + gpio_state + """</strong></p><p><a href="/?led=on"><button class="button">ON</button></a></p>
<p><a href="/?led=off"><button class="button button2">OFF</button></a></p></body></html>"""
return html
addr = socket.getaddrinfo('192.168.4.1', 80)[0][-1]
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
#s.bind(addr)
s.listen(5)
while True:
conn, addr = s.accept()
print('Got a connection from %s' % str(addr))
request = conn.recv(1024)
request = str(request)
print('Content = %s' % request)
led_on = request.find('/?led=on')
led_off = request.find('/?led=off')
if led_on == 6:
print('LED ON')
led.value(0)
if led_off == 6:
print('LED OFF')
led.value(1)
response = web_page()
conn.send('HTTP/1.1 200 OK\n')
conn.send('Content-Type: text/html\n')
conn.send('Connection: close\n\n')
conn.sendall(response)
conn.close()
版权声明:本文为[perseverance52]所创,转载请带上原文链接,感谢。 https://pythonmana.com/2022/252/202209090311408903.html