mrh fe288d121d 使用协程方式运行整个程序 3 gadi atpakaļ
..
driver a4be5d3f7f 稳定加热40°,待完善网页 3 gadi atpakaļ
microWebSocket.py a4be5d3f7f 稳定加热40°,待完善网页 3 gadi atpakaļ
microWebTemplate.py a4be5d3f7f 稳定加热40°,待完善网页 3 gadi atpakaļ
readme-heat.md fe288d121d 使用协程方式运行整个程序 3 gadi atpakaļ
run-rshell.bat a4be5d3f7f 稳定加热40°,待完善网页 3 gadi atpakaļ
run-rshell.ps1 bf9d0a135b 初步实现网页JS显示,待完善架构《Python 设计模式》 3 gadi atpakaļ
test.py bf9d0a135b 初步实现网页JS显示,待完善架构《Python 设计模式》 3 gadi atpakaļ
热敏电阻表.pdf a4be5d3f7f 稳定加热40°,待完善网页 3 gadi atpakaļ

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 从服务器获取数据给前端

    访问 index.html

    注意:在esp32中不能使用 '\'作为文件路径,应该使用 '/',否则地址识别不出来

    文件路径:/MicroWebSrv/web_file/index.html

    设置 webPath='MicroWebSrv/web_files'

    启动服务器

        web_srv.ip = my_wifi.get_wifi_addr()
        web_srv.web_path = '/MicroWebSrv/web_files'
        web_srv.start_server()
    

    以上设置,浏览器输入 ip 地址,即可进入index界面

    想要index自动加载js、CSS文件,直接在 index 源路径写上相对于文件夹 web_files 的js文件路径:

    <!-- / 表示根目录 -->
    <!-- MicroWebSrv\web_files\js\heat.js 填写相对路径: -->
    <script type="text/javascript" src="/js/heat.js"> </script>
    <img id="heat-sw" src='img/switch_off.png' alt="on/off">
    

    JS传送数据回开发板进行控制

    进行到这里,程序已经变得复杂起来,有必要优化程序架构。参考:Python设计模式(第2版)-Chetan Giridhar 吉里德尔-微信读书 (qq.com)9.4 现实世界的 MVC模式

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

    常见问题

    microWebSrv 开启线程堆栈超出:

    开启线程服务器前,可先设置线程堆栈大小

    image-20220905190339190

    硬件

    开发板

    参考:

    https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/hw-reference/esp32/get-started-devkitc.html

    img

    esp32 引脚图

    img

    img

    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
    ...
    

    NTC

    R = 10K,Rntc=7.67K

    万用表:31℃

    ADC:27000

    Vntc 1.465V

    计算温度

    参考

    (159条消息) 热敏电阻的计算公式_メイ的博客-CSDN博客

    NTC数据文档

    Rt = R EXP(B(1/T1-1/T2))

    R=1000

    T=273.15+25

    34 + 13*2

    发热电阻

    45℃, 24欧姆

    55摄氏度 23欧姆

    功率 = 12*12 / 24 = 6W

    升降压模块

    17 * 17 / 24 = 12W

    25 * 25 / 24 = 26W, 电流 = 25/24 = 1A

    20V最大功率输出时,电流0.834,铁丝维持在92℃左右,中心温度42.5