Browse Source

Merge branch 'master' into dev

funshine 9 years ago
parent
commit
fee2cf476a
3 changed files with 122 additions and 34 deletions
  1. 1 1
      examples/fragment.lua
  2. 55 22
      lua_modules/dht22/README.md
  3. 66 11
      lua_modules/dht22/dht_lib.lua

+ 1 - 1
examples/fragment.lua

@@ -14,7 +14,7 @@ sk:connect(80,"115.239.210.27")
 sk:send("GET / HTTP/1.1\r\nHost: 115.239.210.27\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
 
 sk:connect(80,"192.168.0.66") 
-sk:send("GET / HTTP/1.1\r\nHost: 1192.168.0.66\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
+sk:send("GET / HTTP/1.1\r\nHost: 192.168.0.66\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
 
 i2c.setup(0,1,0,i2c.SLOW)
 function read_bmp(addr) i2c.start(0) i2c.address(0,119,i2c.RECEIVER) c=i2c.read(0,1) i2c.stop(0) print(string.byte(c)) end 

+ 55 - 22
lua_modules/dht22/README.md

@@ -1,46 +1,78 @@
-# DHT22 module
+# DHTxx module
 
-This module is compatible with DHT22 and DHT21.  
-Supports nodemcu with or without floating point.  
+This module is compatible with DHT11, DHT21 and DHT22.  
 No need to use a resistor to connect the pin data of DHT22 to ESP8266.
 
-## Example  
+##Integer Verison[When using DHT11, Float version is useless...]
+### Example  
 ```lua
 PIN = 4 --  data pin, GPIO2
 
-dht22 = require("dht22")
-dht22.read(PIN)
-t = dht22.getTemperature()
-h = dht22.getHumidity()
+DHT= require("dht_lib")
+
+--dht.read11(PIN)
+DHT.read22(PIN)
+
+t = DHT.getTemperature()
+h = DHT.getHumidity()
 
 if h == nil then
-  print("Error reading from DHT22")
+  print("Error reading from DHT11/22")
 else
   -- temperature in degrees Celsius  and Farenheit
-  -- floating point and integer version:
+
   print("Temperature: "..((t-(t % 10)) / 10).."."..(t % 10).." deg C")
-  -- only integer version:
+
   print("Temperature: "..(9 * t / 50 + 32).."."..(9 * t / 5 % 10).." deg F")
-  -- only float point version:
-  print("Temperature: "..(9 * t / 50 + 32).." deg F")
   
   -- humidity
-  -- floating point and integer version
+
   print("Humidity: "..((h - (h % 10)) / 10).."."..(h % 10).."%")
 end
 
 -- release module
-dht22 = nil
-package.loaded["dht22"]=nil
+DHT = nil
+package.loaded["dht_lib"]=nil
 ```
-## Functions
-### read
-read(pin)  
-Read humidity and temperature from DHT22.
+##Float Verison
+###Example
+```lua
+PIN = 4 --  data pin, GPIO2
+
+DHT= require("dht_lib")
+
+--dht.read11(PIN)
+DHT.read22(PIN)
+
+t = DHT.getTemperature()
+h = DHT.getHumidity()
 
+if h == nil then
+  print("Error reading from DHT11/22")
+else
+  -- temperature in degrees Celsius  and Farenheit
+  -- floating point and integer version:
+  print("Temperature: "..t.." deg C")
+  print("Temperature: "..(9 * t / 50 + 32).." deg F")
+  
+  -- humidity
+  print("Humidity: "..h.."%")
+end
+
+-- release module
+DHT = nil
+package.loaded["dht_lib"]=nil
+```
+## Functions
+### read11
+read11(pin)  
+Read humidity and temperature from DHT11.
+###read22
+read22(pin)
+Read humidity and temperature from DHT22/21.
 **Parameters:**
 
-* pin - ESP8266 pin connect to data pin in DHT22
+* pin - ESP8266 pin connect to data pin
 
 ### getHumidity
 getHumidity()  
@@ -54,5 +86,6 @@ getTemperature()
 Returns the temperature of the last reading.
 
 **Returns:**  
-* last temperature reading in 0.1ºC
+* last temperature reading in(dht22) 0.1ºC (dht11)1ºC
+* 
 

+ 66 - 11
lua_modules/dht22/dht22.lua → lua_modules/dht22/dht_lib.lua

@@ -1,34 +1,43 @@
 -- ***************************************************************************
--- DHT22 module for ESP8266 with nodeMCU
+-- DHTxx(11,21,22) module for ESP8266 with nodeMCU
 --
--- Written by Javier Yanez 
+-- Written by Javier Yanez mod by Martin
 -- but based on a script of Pigs Fly from ESP8266.com forum
 --
 -- MIT license, http://opensource.org/licenses/MIT
 -- ***************************************************************************
 
+--Support list:
+--DHT11 Tested ->read11
+--DHT21 Not Tested->read22
+--DHT22 Tested->read22
+
+--==========================Module Part======================
 local moduleName = ...
 local M = {}
 _G[moduleName] = M
-
+--==========================Local the UMI and TEMP===========
 local humidity
 local temperature
+--==========================Local the bitStream==============
+local bitStream = {}
 
-function M.read(pin)
-  local checksum
-  local checksumTest
+---------------------------Read bitStream from DHTXX--------------------------
+local function read(pin)
+
+  local bitlength = 0
   humidity = 0
   temperature = 0
-  checksum = 0
 
   -- Use Markus Gritsch trick to speed up read/write on GPIO
   local gpio_read = gpio.read
   
-  local bitStream = {}
+  
   for j = 1, 40, 1 do
     bitStream[j] = 0
   end
-  local bitlength = 0
+
+  
 
   -- Step 1:  send out start signal to DHT22
   gpio.mode(pin, gpio.OUTPUT)
@@ -39,7 +48,7 @@ function M.read(pin)
   gpio.write(pin, gpio.HIGH)
   gpio.mode(pin, gpio.INPUT)
 
-  -- Step 2:  DHT22 send response signal 
+  -- Step 2:  Receive bitStream from DHT11/22
   -- bus will always let up eventually, don't bother with timeout
   while (gpio_read(pin) == 0 ) do end
   local c=0
@@ -59,8 +68,53 @@ function M.read(pin)
     -- bus will always let up eventually, don't bother with timeout
     while (gpio_read(pin) == 0) do end
   end
-
+end
+---------------------------Convert the bitStream into Number through DHT11 Ways--------------------------
+function M.read11(pin)
+--As for DHT11 40Bit is consisit of 5Bytes
+--First byte->Humidity Data's Int part
+--Sencond byte->Humidity Data's Float Part(Which should be empty)
+--Third byte->Temp Data;s Intpart
+--Forth byte->Temp Data's Float Part(Which should be empty)
+--Fifth byte->SUM Byte, Humi+Temp
+  read(pin)
+ local checksum = 0
+ local checksumTest
   --DHT data acquired, process.
+  for i = 1, 8, 1 do -- Byte[0]
+    if (bitStream[i] > 3) then
+      humidity = humidity + 2 ^ (8 - i)
+    end
+  end
+  for i = 1, 8, 1 do -- Byte[2]
+    if (bitStream[i + 16] > 3) then
+      temperature = temperature + 2 ^ (8 - i)
+    end
+  end
+  for i = 1, 8, 1 do --Byte[4]
+    if (bitStream[i + 32] > 3) then
+      checksum = checksum + 2 ^ (8 - i)
+    end
+  end
+
+  if(checksum ~= humidity+temperature) then
+    humidity = nil
+    temperature = nil
+  end
+  
+end
+---------------------------Convert the bitStream into Number through DHT22 Ways--------------------------
+function M.read22( pin )
+--As for DHT22 40Bit is consisit of 5Bytes
+--First byte->Humidity Data's High Bit
+--Sencond byte->Humidity Data's Low Bit(And if over 0x8000, use complement)
+--Third byte->Temp Data's High Bit
+--Forth byte->Temp Data's Low Bit
+--Fifth byte->SUM Byte
+  read(pin)
+  local checksum = 0
+  local checksumTest
+   --DHT data acquired, process.
   for i = 1, 16, 1 do
     if (bitStream[i] > 3) then
       humidity = humidity + 2 ^ (16 - i)
@@ -91,6 +145,7 @@ function M.read(pin)
   end
 end
 
+---------------------------Check out the data--------------------------
 function M.getTemperature()
   return temperature
 end