请帮我设计一个main.py文件使用ESP32的GPIO引脚控制两个独立的灯泡和两个独立的继电器。它还创建了一个简单的Web服务器,可以通过HTML页面控制这些设备的状态。当您访问ESP32的IP地址时,您将看到一个包含按钮的页面,您可以单击这些按钮来控制设备的状态。页面还会显示设备的当前状态。
时间: 2023-05-11 21:04:19 浏览: 75
好的,这是一个很好的问题。以下是一个简单的main.py文件,它使用ESP32的GPIO引脚控制两个独立的灯泡和两个独立的继电器,并创建了一个简单的Web服务器,可以通过HTML页面控制这些设备的状态。
```python
import machine
import network
import socket
import time
# 设置GPIO引脚
led1 = machine.Pin(2, machine.Pin.OUT)
led2 = machine.Pin(4, machine.Pin.OUT)
relay1 = machine.Pin(5, machine.Pin.OUT)
relay2 = machine.Pin(18, machine.Pin.OUT)
# 创建一个简单的Web服务器
def web_page():
html = """
<html>
<head>
<title>ESP32 控制器</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>
html {font-family: Arial; display: inline-block; text-align: center;}
h2 {font-size: 3.0rem;}
p {font-size: 3.0rem;}
.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>
<h2>ESP32 控制器</h2>
<p>LED1 状态: <strong>""" + led1.value() + """</strong></p>
<p><a href="/led1on"><button class="button">打开 LED1</button></a></p>
<p><a href="/led1off"><button class="button button2">关闭 LED1</button></a></p>
<p>LED2 状态: <strong>""" + led2.value() + """</strong></p>
<p><a href="/led2on"><button class="button">打开 LED2</button></a></p>
<p><a href="/led2off"><button class="button button2">关闭 LED2</button></a></p>
<p>继电器1 状态: <strong>""" + relay1.value() + """</strong></p>
<p><a href="/relay1on"><button class="button">打开 继电器1</button></a></p>
<p><a href="/relay1off"><button class="button button2">关闭 继电器1</button></a></p>
<p>继电器2 状态: <strong>""" + relay2.value() + """</strong></p>
<p><a href="/relay2on"><button class="button">打开 继电器2</button></a></p>
<p><a href="/relay2off"><button class="button button2">关闭 继电器2</button></a></p>
</body>
</html>
"""
return html
# 创建一个WiFi连接
def connect_wifi():
ssid = 'your_ssid'
password = 'your_password'
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
while station.isconnected() == False:
pass
print('连接成功!')
print(station.ifconfig())
# 创建一个socket服务器
def start_server():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)
while True:
conn, addr = s.accept()
print('连接地址:', addr)
request = conn.recv(1024)
request = str(request)
print('请求内容:' + request)
led1_on = request.find('/led1on')
led1_off = request.find('/led1off')
led2_on = request.find('/led2on')
led2_off = request.find('/led2off')
relay1_on = request.find('/relay1on')
relay1_off = request.find('/relay1off')
relay2_on = request.find('/relay2on')
relay2_off = request.find('/relay2off')
if led1_on == 6:
print('打开 LED1')
led1.value(1)
if led1_off == 6:
print('关闭 LED1')
led1.value(0)
if led2_on == 6:
print('打开 LED2')
led2.value(1)
if led2_off == 6:
print('关闭 LED2')
led2.value(0)
if relay1_on == 6:
print('打开 继电器1')
relay1.value(1)
if relay1_off == 6:
print('关闭 继电器1')
relay1.value(0)
if relay2_on == 6:
print('打开 继电器2')
relay2.value(1)
if relay2_off == 6:
print('关闭 继电器2')
relay2.value(0)
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()
# 连接WiFi并启动服务器
connect_wifi()
start_server()
```
请注意,您需要将 "your_ssid" 和 "your_password" 替换为您的WiFi网络的名称和密码。您还需要将GPIO引脚的数字与实际连接的引脚匹配。
当您访问ESP32的IP地址时,您将看到一个包含按钮的页面,您可以单击这些按钮来控制设备的状态。页面还会显示设备的当前状态。