KIKI 发表于 2020-10-28 11:13:24

4.3.4 webServer.py 远程控制LED灯的亮度

## 准备
#### 硬件:

- (https://www.dfrobot.com.cn/goods-1872.html) × 1

#### 软件:

- (https://github.com/dfrobot/upycraft_src)

代码位置:

- 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'):
    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(), 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                               #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灯的亮度,同时终端框会显示相应亮度,如下图

页: [1]
查看完整版本: 4.3.4 webServer.py 远程控制LED灯的亮度