Веб-сервер Micropython перестает работать при добавлении кода для чтения данных из dht11 - PullRequest
0 голосов
/ 20 января 2019

Я скачал код веб-сервера с 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()

1 Ответ

0 голосов
/ 22 января 2019

Я вижу две проблемы с вашим кодом:

Во-первых, для считывания датчика DHT11 необходимо использовать объект DHT .Попробуйте заменить

d = machine.Pin(5, machine.Pin.IN, machine.Pin.PULL_UP) 

на

d = dht.DHT11(machine.Pin(5))

Во-вторых, выходные данные вашей функции measure() представляют собой числовой кортеж, и вы передаете его непосредственно cl.send(), но этот метод нуждается в bytes объекте.Вам необходимо закодировать два значения в строку, а затем сначала преобразовать их в байты.Вместо

cl.send(response)

вы, вероятно, хотите что-то вроде

message = 'Temperature {} Humidity {}'.format(response[0], response[1])
cl.send(bytes(message, 'utf-8'))
...