Here's a
*duino-less (
*pi-less) simple project using
ESP11 (ESP8266) Wifi Module and SHT10 humidity-temperature sensor.
init.lua:
wifi.setmode(wifi.STATION)
wifi.sta.config("WIFI_SSID","WIFI_PASSWORD")
local DAT = 4
local CLK = 3
function DL()
gpio.write(DAT, gpio.LOW)
gpio.mode(DAT, gpio.OUTPUT)
end
function DH()
gpio.mode(DAT, gpio.INPUT)
gpio.write(DAT, gpio.HIGH)
end
function CL()
gpio.write(CLK, gpio.LOW)
end
function CH()
gpio.write(CLK, gpio.HIGH)
end
function DR()
gpio.mode(DAT, gpio.INPUT)
return gpio.read(DAT)
end
function W8()
for i = 1, 100 do
tmr.delay(10000)
if DR() == gpio.LOW then
return true
end
end
return false
end
function RB()
local val = 0
for i = 0, 7 do
CH()
val = val*2 + DR()
CL()
end
return val
end
function shtread(cmd)
DH() CH() DL() CL() CH() DH() CL()
for i = 0, 7 do
if bit.band(cmd, 2^(7-i))==0 then
DL()
else
DH()
end
CH() CL()
end
CH() CL()
if not W8() then
return nil
end
DH()
local val = RB()
DH() DL() CH() CL() DH()
val = val*256 + RB()
DH() CH() CL()
return val
end
page=[[<head><meta charset="utf-8"/>
<link href="http://projectproto.blogspot.com/favicon.ico" rel="icon"/>
<title>ESP+SHT</title></head>
<body><h1>ESP8266 and SHT1x</h1><h2 id="T">T??</h2><h2 id="H">H??</h2>
<script>
function update(){
var xrq = new XMLHttpRequest();
xrq.onreadystatechange=function(){
if (xrq.readyState==4 && xrq.status==200){
var th=JSON.parse(xrq.responseText);
var t0=th["t"], h0=th["h"];
var t=(t0*0.01)-39.7;
var hl=(0.0367*h0)+(-0.0000015955*h0*h0)-2.0468;
var h=(t-25.0)*(0.01+(0.00008*h0))+hl;
document.getElementById("T").innerHTML="Temperature: "+t.toFixed(2)+"°C";
document.getElementById("H").innerHTML="Humidity: "+h.toFixed(2)+"%";}
}
xrq.open("GET","/get/sht",true);
xrq.overrideMimeType("application/json");
xrq.send(null);
}setInterval(update, 1000);
</script></body>]]
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive", function(client,request)
local buf = "";
local _, _, mtd, path, _ = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
if(mtd == nil)then
_, _, mtd, path = string.find(request, "([A-Z]+) (.+) HTTP");
end
if path == "/" then
buf = buf..page
elseif path == "/get/sht" then
t = shtread(3)
h = shtread(5)
if (t ~= nil and h ~= nil) then
buf = buf.."{\"t\":"..t..", \"h\":"..h.."}"
end
end
client:send(buf)
client:close()
collectgarbage()
end)
end)


References:
ESP8266 Web Server Tutorial
Github esp8266 sht10
e-Gizmo ESP11 kit
ESP8266 wiki
NodeMCU firmware
NodeMCU http server