71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
import uPyConfig
|
|
import init_sample
|
|
|
|
hw = uPyConfig.esp8266(variant='d1-r2')
|
|
#print family, variant and IP address (using oled, if available on-board)
|
|
init_sample.init_sample(hw)
|
|
|
|
# Main app
|
|
from uPySensor import LM75A, SHT21
|
|
thsen=SHT21(hw.i2c.bus)
|
|
tsen=LM75A(hw.i2c.bus)
|
|
json={
|
|
'sht21_t': '{"temperature":"%0.3f"}',
|
|
'sht21_h': '{"humidity":"%0.3f"}',
|
|
'sht21': '{"temperature":"%0.3f","humidity":"%0.3f"}',
|
|
'lm75a_t': '{"temperature":"%0.1f"}',
|
|
'lm75a': '{"temperature":"%0.1f"}',
|
|
}
|
|
json_all='{"sht21":{"temperature":"%0.3f","humidity":"%0.3f"},"lm75a":{"temperature":"%0.1f"}}'
|
|
|
|
def header():
|
|
return "HTTP/1.1 200 OK\r\n" \
|
|
"Content-Type: application/json\r\n" \
|
|
"Server: horny\r\n" \
|
|
"\r\n"
|
|
|
|
def get():
|
|
return json_all % (thsen.read_tempC(), thsen.read_hum(), tsen.read_tempC())
|
|
|
|
def get_sht21_t():
|
|
return json['sht21_t'] % (thsen.read_tempC())
|
|
|
|
def get_sht21_h():
|
|
return json['sht21_h'] % (thsen.read_hum())
|
|
|
|
def get_sht21():
|
|
return json['sht21'] % (thsen.read_tempC(), thsen.read_hum())
|
|
|
|
def get_lm75a_t():
|
|
return json['lm75a_t'] % (tsen.read_tempC())
|
|
|
|
def get_lm75a():
|
|
return json['lm75a'] % (tsen.read_tempC())
|
|
|
|
#begin web
|
|
import socket
|
|
wssock=socket.getaddrinfo("0.0.0.0",80)[0][-1]
|
|
wss=socket.socket()
|
|
wss.bind(wssock)
|
|
wss.listen(1)
|
|
|
|
print("Server started on 0.0.0.0:80")
|
|
|
|
#main loop
|
|
while True:
|
|
wcl, wcsock = wss.accept()
|
|
print("Client connected")
|
|
wclfh = wcl.makefile('rwb', 0)
|
|
jsn=''
|
|
while True:
|
|
wcline = wclfh.readline()
|
|
if not wcline or wcline == b'\r\n': break
|
|
wcline=wcline.split(b' ')
|
|
if len(wcline) == 3 and wcline[2].startswith('HTTP'):
|
|
if wcline[0] != b'GET': wcl.close()
|
|
elif wcline[1] == b'/': jsn=get()
|
|
elif wcline[1] == b'/sht21': jsn=get_sht21()
|
|
elif wcline[1] == b'/lm75a': jsn=get_lm75a()
|
|
wcl.send(header()+jsn)
|
|
wcl.close()
|