完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
得益于最新的 nodeMCU 固件,esp 现在能够使用 Dallas 1-wire DS18S20 和 DS18B20 测量温度。
原始的(和过时的 DS1820)没有测试,因为我不再有这样的芯片。 推荐的上拉电阻是 2k7,但我测试了从 5k6 到 1k 的所有电阻,一切正常。 代码中的延迟(1 秒)可以降低到 780 毫秒,但是当连接超过 3 个传感器时它给我带来了问题,所以我将它延长到完整的 1 秒 - 现在它工作正常。 感谢对这个线程的反馈,我重新编写了一些程序并修复了多个问题——报告了更多的传感器,正确处理了负温度,DS18S20 工作正常,分辨率更高,……这是固定代码 : 代码:全选pin = 4 ow.setup(pin) counter=0 temps={} function bxor(a,b) local r = 0 for i = 0, 31 do if ( a % 2 + b % 2 == 1 ) then r = r + 2^i end a = a / 2 b = b / 2 end return r end function getTemp() addr = ow.reset_search(pin) repeat tmr.wdclr() if (addr ~= nil) then crc = ow.crc8(string.sub(addr,1,7)) if (crc == addr:byte(8)) then if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then sensor = "" for j = 1,8 do sensor = sensor .. string.format("%02x", addr:byte(j)) end ow.reset(pin) ow.select(pin, addr) ow.write(pin, 0x44, 1) tmr.delay(1000000) present = ow.reset(pin) ow.select(pin, addr) ow.write(pin,0xBE, 1) data = nil data = string.char(ow.read(pin)) for i = 1, 8 do data = data .. string.char(ow.read(pin)) end crc = ow.crc8(string.sub(data,1,8)) if (crc == data:byte(9)) then t = (data:byte(1) + data:byte(2) * 256) if (t > 32768) then t = (bxor(t, 0xffff)) + 1 t = (-1) * t end t = t * 625 if(addr:byte(1) == 0x10) then -- we have DS18S20, the measurement must change t = t * 8; -- compensating for the 9-bit resolution only t = t - 2500 + ((10000 * (data:byte(8) - data:byte(7))) / data:byte(8)) end temps[sensor] = t print(sensor .. ": " .. t) end tmr.wdclr() end end end addr = ow.search(pin) until(addr == nil) end srv=net.createServer(net.TCP) srv:listen(8080,function(conn) getTemp() output = wifi.sta.getmac() .. "\n" for sensorID, temperature in pairs(temps) do t1 = temperature / 10000 t2 = (temperature >= 0 and temperature % 10000) or (10000 - temperature % 10000) output = output .. sensorID .. "\t" output = output .. t1 .. "." .. string.format("%04d", t2) .. "\n" end conn:send(output) conn:on("sent",function(conn) conn:close() end) end) |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
142 浏览 1 评论
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
438浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 14:39 , Processed in 0.732936 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号