Brak opisu

mrh 8ccca26349 浏览器访问主页面 3 lat temu
MicroWebSrv 8ccca26349 浏览器访问主页面 3 lat temu
driver 8ccca26349 浏览器访问主页面 3 lat temu
.gitignore 8ccca26349 浏览器访问主页面 3 lat temu
heat.py 8ccca26349 浏览器访问主页面 3 lat temu
local_test.py 8ccca26349 浏览器访问主页面 3 lat temu
main.py 8ccca26349 浏览器访问主页面 3 lat temu
mywifi.py 8ccca26349 浏览器访问主页面 3 lat temu
oled.py 8ccca26349 浏览器访问主页面 3 lat temu
readme-heat.md 8ccca26349 浏览器访问主页面 3 lat temu
test.py 8ccca26349 浏览器访问主页面 3 lat temu
work_led.py 8ccca26349 浏览器访问主页面 3 lat temu

readme-heat.md

web开发

运行服务器

def main():
	import sys
	if sys.platform == 'win32':
		ip_addr = '192.168.43.240'
		web_path = 'MicroWebSrv\web_files'
	else:
		from mywifi import my_wifi
		ip_addr = my_wifi.get_wifi_addr()
		web_path = '/MicroWebSrv/web_files'
	print(web_path)
	srv = MicroWebSrv(routeHandlers=routeHandlers, bindIP=ip_addr, webPath='MicroWebSrv\web_files')
	srv.MaxWebSocketRecvLen     = 256
	srv.WebSocketThreaded		= True
	srv.AcceptWebSocketCallback = _acceptWebSocketCallback
	srv.SetNotFoundPageUrl("https://www.baidu.com/")
	srv.Start(threaded=True)
	print("start:", ip_addr)

	if sys.platform == 'win32':
		while True:
			pass
if __name__ == '__main__':
	main()

在Windows中,web_path 是从当前Python脚本的上级目录开始,否则页面无法访问。

例如:运行的主程序是 MicroWebSrv\web_server.py,则 web_path = MicroWebSrv\web_files

bindIP='192.168.31.123' 必填。在WiFi已经连接路由器的情况下,填写esp32的ip地址 这个脚本同时支持 Python3.10 代码,测试时填上电脑本机IP地址即可 routeHandlers 这是web网页的路由表

  • 当浏览器访问 192.168.31.123/test 时,会调用 _httpHandlerTestGet 函数
  • 当浏览器点击 summit 时,
    • 如 _httpHandlerTestGet 函数中 content 的 html 内容 method="post" 所显示的那样:
    • 该语句会以 POST 方式请求服务器
    • 再经过 routeHandlers 路由到 _httpHandlerTestPost 回调函数,输出函数内 content 的结果返回给浏览器 ` 浏览器直接输入: 192.168.43.67 会出现 index.html 页面(前提是 webPath='MicroWebSrv/www/' 路径设置正常)
  • index.html 文件在哪路由?
    • 在 MicroWebSrv\microWebSrv.py 文件中,初始化提到:_indexPages,函数 _physPathFromURLPath 调用相关页面
    • 理论上这是作者源文件里面的东西,我们可以不用管它,也无法从外部修改,直接使用 WriteResponseFile 函数返回网页文件即可
    • httpResponse.WriteResponseFile(filepath= '/my-html.html',contentType = "text/html",headers = None)
  • 从服务器获取数据给前端

    参考《web全栈开发:从入门到实践》9.5 从服务器获取数据给前端

    TODO

    在 index 页面中,windows.onload 获取开发板状态,如 开关、温度、时间

    ADC

    MicroPython 参考:http://docs.micropython.org/en/latest/esp32/quickref.html#adc-analog-to-digital-conversion

    基准电压

    ADC的基准电压是1.8V,因此接3.3V分压光敏电阻,很难达到1.8V以下

    光敏分压始终在2~3.3V,参考MicroPython文档,可以将atten关键字设置增益,让它能读取超过1.8V的电压

    image-20220720224520754

        adc = ADC(Pin(34),atten=ADC.ATTN_11DB)        # create an ADC object acting on a pin
    
        while True:
            val = adc.read_u16()  # read a raw analog value in the range 0-65535
            print('val16:', val)
            time.sleep(1)
    

    NTC 选型

    电源电压:3.3V

    NTC分压电压:0~2.45V,若0℃时,电压为 2.45,则:

    电阻分压:3.3-2.45 = 0.85V

    分压比:Rntc : R = 1.2 : 2.1 = 1 : 1.75

    因此,选用10K热敏电阻,应选择分压电阻 10K * 1.75 = 17.5k

    如果 R~NTC~ 选10K, 0℃阻值为27.766,U~分压~= 0.85/(2.45/27.766) = 10K

    R=20K,U~adc~= 3.3V/(R~NTC~+20)*R~NTC~

    带入函数计算得出:

    ...
    R_ntc: 5        Vntc:1.10 V
    R_ntc: 6        Vntc:1.24 V
    R_ntc: 7        Vntc:1.36 V
    R_ntc: 8        Vntc:1.47 V
    R_ntc: 9        Vntc:1.56 V
    R_ntc: 10       Vntc:1.65 V
    R_ntc: 11       Vntc:1.73 V
    R_ntc: 12       Vntc:1.80 V
    R_ntc: 13       Vntc:1.87 V
    R_ntc: 14       Vntc:1.92 V
    ...