远程控制LED灯的亮度
准备
硬件:
- FireBeetle-ESP32 × 1
软件:
- uPyCraft IDE
代码位置:
- File → Examples →Communicate → webServer → webpwm.py
- File → Examples →Communicate → webServer → webCtrl.htm
实验步骤
1. 下载运行 webCtrl.htm 文件,其具体代码如下
2. 修改 webpwm.py 文件中的WiFi名称和密码,然后下载运行,其具体代码如下
#硬件平台:FireBeetle-ESP32
from machine import Pin, PWM
import network
import os
import time
import socket
import gc
SSID="XXXXXXXX" #修改为你的WiFi名字
PASSWORD="XXXXXXXX" #修改为你的WiFi密码
wlan=None
s=None
led=None
def connectWifi(ssid, passwd):
global wlan
wlan=network.WLAN(network.STA_IF) #创建一个wlan对象
wlan.active(True) #激活网络接口
wlan.disconnect() #断开上次的WiFi连接
wlan.connect(ssid,passwd) #连接WiFi
while(wlan.ifconfig()[0] == '0.0.0.0'):
time.sleep(1)
return True
def ajaxWebserv():
#控制Webserver中最小的Ajax
global s,led
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建套接字
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #设置给定套接字选项的值
s.bind((wlan.ifconfig()[0], 80)) #绑定IP地址和端口号
s.listen(1) #监听套接字
while True:
conn, addr = s.accept() #接受一个连接,conn是一个新的socket对象
#print("Got a connection from %s" % str(addr))
request = conn.recv(1024) #从套接字接收1024字节的数据
conn.sendall('HTTP/1.1 200 OK\nConnection: close\nServer: FireBeetle\nContent-Type: text/html\n\n')
request = str(request)
ib = request.find('Val=') #find the string 'Val=' from request
if ib > 0 :
ie = request.find(' ', ib) #init address of the index with ib,then find ' '
Val = request[ib+4:ie] #get the string of ib+4 to ie in the request
print("Val =", Val)
led.duty(int(Val) * 100) #设置LED占空比
conn.send(Val) #发送数据
else:
with open('webCtrl.htm', 'r') as html: #以只读方式打开webCtrl.htm文件
conn.sendall(html.read()) #读取并发送webCtrl.htm中的数据
conn.sendall('\r\n')
conn.close() #关闭文件
#print("Connection wth %s closed" % str(addr))
#捕获异常,如果意外中断停止运行程序
try:
led=PWM(Pin(2), freq=100) #创建LED对象
led.init()
led.duty(0)
connectWifi(SSID, PASSWORD)
ajaxWebserv() #
except:
if (s):
s.close() #关闭套接字
led.deinit() #熄灭LED灯
wlan.disconnect() #断开WiFi连接
wlan.active(False) #冻结网络接口
3. 在浏览器中输入运行后的IP地址,如下图
实验效果
通过滑动方块可以调节板载LED灯的亮度,同时终端框会显示相应亮度,如下图