添加代码以从 dht11 读取数据时,Micropython 网络服务器停止工作
Micropython webserver stops working when add code to read data from dht11
我已经从 https://docs.micropython.org/en/v1.8/esp8266/esp8266/tutorial/network_tcp.html 下载了网络服务器代码,它运行良好。但是在添加读取 dht11 值的代码后,网络服务器停止响应。我的代码有什么问题?
import machine
import dht
import socket
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.connect(SSID, PASS)
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
d = machine.Pin(5, machine.Pin.IN, machine.Pin.PULL_UP)
def measure():
d.measure()
temp = d.temperature()
hum = d.humidity()
return temp, hum
s = socket.socket()
s.bind(addr)
s.listen(1)
print('listening on', addr)
while True:
cl, addr = s.accept()
print('client connected from', addr)
cl_file = cl.makefile('rwb', 0)
while True:
line = cl_file.readline()
if not line or line == b'\r\n':
break
response = measure()
cl.send(response)
cl.close()
我发现您的代码有两个问题:
首先,要读取 DHT11 传感器,您需要使用 DHT object。尝试替换
d = machine.Pin(5, machine.Pin.IN, machine.Pin.PULL_UP)
与
d = dht.DHT11(machine.Pin(5))
其次,measure()
函数的输出是一个数字元组,您将其直接传递给 cl.send()
,但是 that method 需要一个 bytes
对象。您需要将这两个值编码为一个字符串,然后先将其转换为字节。而不是
cl.send(response)
你可能想要
message = 'Temperature {} Humidity {}'.format(response[0], response[1])
cl.send(bytes(message, 'utf-8'))
我已经从 https://docs.micropython.org/en/v1.8/esp8266/esp8266/tutorial/network_tcp.html 下载了网络服务器代码,它运行良好。但是在添加读取 dht11 值的代码后,网络服务器停止响应。我的代码有什么问题?
import machine
import dht
import socket
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.connect(SSID, PASS)
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
d = machine.Pin(5, machine.Pin.IN, machine.Pin.PULL_UP)
def measure():
d.measure()
temp = d.temperature()
hum = d.humidity()
return temp, hum
s = socket.socket()
s.bind(addr)
s.listen(1)
print('listening on', addr)
while True:
cl, addr = s.accept()
print('client connected from', addr)
cl_file = cl.makefile('rwb', 0)
while True:
line = cl_file.readline()
if not line or line == b'\r\n':
break
response = measure()
cl.send(response)
cl.close()
我发现您的代码有两个问题:
首先,要读取 DHT11 传感器,您需要使用 DHT object。尝试替换
d = machine.Pin(5, machine.Pin.IN, machine.Pin.PULL_UP)
与
d = dht.DHT11(machine.Pin(5))
其次,measure()
函数的输出是一个数字元组,您将其直接传递给 cl.send()
,但是 that method 需要一个 bytes
对象。您需要将这两个值编码为一个字符串,然后先将其转换为字节。而不是
cl.send(response)
你可能想要
message = 'Temperature {} Humidity {}'.format(response[0], response[1])
cl.send(bytes(message, 'utf-8'))