|
|
3 gadi atpakaļ | |
|---|---|---|
| .. | ||
| driver | 3 gadi atpakaļ | |
| microWebSocket.py | 3 gadi atpakaļ | |
| microWebTemplate.py | 3 gadi atpakaļ | |
| readme-heat.md | 3 gadi atpakaļ | |
| run-rshell.bat | 3 gadi atpakaļ | |
| run-rshell.ps1 | 3 gadi atpakaļ | |
| test.py | 3 gadi atpakaļ | |
| 热敏电阻表.pdf | 3 gadi atpakaļ | |
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网页的路由表
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">
进行到这里,程序已经变得复杂起来,有必要优化程序架构。参考:Python设计模式(第2版)-Chetan Giridhar 吉里德尔-微信读书 (qq.com)9.4 现实世界的 MVC模式
在 index 页面中,windows.onload 获取开发板状态,如 开关、温度、时间
microWebSrv 开启线程堆栈超出:
开启线程服务器前,可先设置线程堆栈大小
参考:
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的电压
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
...
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