Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
96ab811a
Commit
96ab811a
authored
Jan 26, 2015
by
Vladimir Dronnikov
Browse files
yet another dht11/22 module added
parent
c89686e1
Changes
1
Show whitespace changes
Inline
Side-by-side
lua_examples/yet-another-dht22.lua
0 → 100644
View file @
96ab811a
------------------------------------------------------------------------------
-- DHT11/22 query module
--
-- LICENCE: http://opensource.org/licenses/MIT
-- Vladimir Dronnikov <dronnikov@gmail.com>
--
-- Example:
-- print("DHT11", require("dht22").read(4))
-- print("DHT22", require("dht22").read(4, true))
-- NB: the very first read sometimes fails
------------------------------------------------------------------------------
local
M
do
-- cache
local
gpio
=
gpio
local
val
=
gpio
.
read
local
waitus
=
tmr
.
delay
--
local
read
=
function
(
pin
,
dht22
)
-- wait for pin value
local
w
=
function
(
v
)
local
c
=
255
while
c
>
0
and
val
(
pin
)
~=
v
do
c
=
c
-
1
end
return
c
end
-- NB: we preallocate incoming data buffer
-- or precise timing in reader gets broken
local
b
=
{
0
,
0
,
0
,
0
,
0
}
-- kick the device
gpio
.
mode
(
pin
,
gpio
.
INPUT
,
gpio
.
PULLUP
)
gpio
.
write
(
pin
,
1
)
waitus
(
10
)
gpio
.
mode
(
pin
,
gpio
.
OUTPUT
)
gpio
.
write
(
pin
,
0
)
waitus
(
20000
)
gpio
.
write
(
pin
,
1
)
gpio
.
mode
(
pin
,
gpio
.
INPUT
,
gpio
.
PULLUP
)
-- wait for device presense
if
w
(
0
)
==
0
or
w
(
1
)
==
0
or
w
(
0
)
==
0
then
return
nil
,
0
end
-- receive 5 octets of data, msb first
for
i
=
1
,
5
do
local
x
=
0
for
j
=
1
,
8
do
x
=
x
+
x
if
w
(
1
)
==
0
then
return
nil
,
1
end
-- 70us for 1, 27 us for 0
waitus
(
30
)
if
val
(
pin
)
==
1
then
x
=
x
+
1
if
w
(
0
)
==
0
then
return
nil
,
2
end
end
end
b
[
i
]
=
x
end
-- check crc. NB: calculating in receiver loop breaks timings
local
crc
=
0
for
i
=
1
,
4
do
crc
=
(
crc
+
b
[
i
])
%
256
end
if
crc
~=
b
[
5
]
then
return
nil
,
3
end
-- convert
local
t
,
h
-- DHT22: values in tenths of unit, temperature can be negative
if
dht22
then
h
=
b
[
1
]
*
256
+
b
[
2
]
t
=
b
[
3
]
*
256
+
b
[
4
]
if
t
>
0x8000
then
t
=
-
(
t
-
0x8000
)
end
-- DHT11: no negative temperatures, only integers
-- NB: return in 0.1 Celsius
else
h
=
10
*
b
[
1
]
t
=
10
*
b
[
3
]
end
return
t
,
h
end
-- expose interface
M
=
{
read
=
read
,
}
end
return
M
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment