Преглед на файлове

Add DHT Lua Module for interfacing with the DHTxx sensors (xx = 11-21-22-33-44).

vowstar преди 9 години
родител
ревизия
899935e60b
променени са 8 файла, в които са добавени 215 реда и са изтрити 59 реда
  1. 52 0
      app/dhtlib/dht.c
  2. 7 4
      app/dhtlib/dht.h
  3. 1 0
      app/include/user_modules.h
  4. 1 0
      app/modules/Makefile
  5. 20 11
      app/modules/auxmods.h
  6. 80 0
      app/modules/dht.c
  7. 53 44
      app/modules/modules.h
  8. 1 0
      app/platform/common.c

+ 52 - 0
app/dhtlib/dht.c

@@ -27,6 +27,7 @@
 // Released to the public domain
 //
 
+#include "user_interface.h"
 #include "platform.h"
 #include "dht.h"
 
@@ -51,6 +52,20 @@ static int dht_readSensor(uint8_t pin, uint8_t wakeupDelay);
 // PUBLIC
 //
 
+// return values:
+// Humidity
+double dht_getHumidity(void)
+{
+    return dht_humidity;
+}
+
+// return values:
+// Temperature
+double dht_getTemperature(void)
+{
+    return dht_temperature;
+}
+
 // return values:
 // DHTLIB_OK
 // DHTLIB_ERROR_CHECKSUM
@@ -111,6 +126,42 @@ int dht_read(uint8_t pin)
     return DHTLIB_OK;
 }
 
+// return values:
+// DHTLIB_OK
+// DHTLIB_ERROR_CHECKSUM
+// DHTLIB_ERROR_TIMEOUT
+inline int dht_read21(uint8_t pin)
+{
+    return dht_read(pin);
+}
+
+// return values:
+// DHTLIB_OK
+// DHTLIB_ERROR_CHECKSUM
+// DHTLIB_ERROR_TIMEOUT
+inline int dht_read22(uint8_t pin)
+{
+    return dht_read(pin);
+}
+
+// return values:
+// DHTLIB_OK
+// DHTLIB_ERROR_CHECKSUM
+// DHTLIB_ERROR_TIMEOUT
+inline int dht_read33(uint8_t pin)
+{
+    return dht_read(pin);
+}
+
+// return values:
+// DHTLIB_OK
+// DHTLIB_ERROR_CHECKSUM
+// DHTLIB_ERROR_TIMEOUT
+inline int dht_read44(uint8_t pin)
+{
+    return dht_read(pin);
+}
+
 /////////////////////////////////////////////////////
 //
 // PRIVATE
@@ -138,6 +189,7 @@ int dht_readSensor(uint8_t pin, uint8_t wakeupDelay)
 
     // REQUEST SAMPLE
     // pinMode(pin, OUTPUT);
+    platform_gpio_mode(pin, PLATFORM_GPIO_OUTPUT, PLATFORM_GPIO_PULLUP);
     DIRECT_MODE_OUTPUT(pin);
     // digitalWrite(pin, LOW); // T-be
     DIRECT_WRITE_LOW(pin);

+ 7 - 4
app/dhtlib/dht.h

@@ -52,10 +52,13 @@
 int dht_read11(uint8_t pin);
 int dht_read(uint8_t pin);
 
-inline int dht_read21(uint8_t pin) { return dht_read(pin); };
-inline int dht_read22(uint8_t pin) { return dht_read(pin); };
-inline int dht_read33(uint8_t pin) { return dht_read(pin); };
-inline int dht_read44(uint8_t pin) { return dht_read(pin); };
+inline int dht_read21(uint8_t pin);
+inline int dht_read22(uint8_t pin);
+inline int dht_read33(uint8_t pin);
+inline int dht_read44(uint8_t pin);
+
+double dht_getHumidity(void);
+double dht_getTemperature(void);
 
 #endif
 //

+ 1 - 0
app/include/user_modules.h

@@ -33,6 +33,7 @@
 #define LUA_USE_MODULES_CJSON
 #define LUA_USE_MODULES_CRYPTO
 #define LUA_USE_MODULES_RC
+#define LUA_USE_MODULES_DHT
 
 #endif /* LUA_USE_MODULES */
 

+ 1 - 0
app/modules/Makefile

@@ -48,6 +48,7 @@ INCLUDES += -I ../wofs
 INCLUDES += -I ../spiffs
 INCLUDES += -I ../smart
 INCLUDES += -I ../cjson
+INCLUDES += -I ../dhtlib
 PDIR := ../$(PDIR)
 sinclude $(PDIR)Makefile
 

+ 20 - 11
app/modules/auxmods.h

@@ -7,7 +7,7 @@
 
 #include "lua.h"
 
-#define AUXLIB_GPIO      "gpio"
+#define AUXLIB_GPIO     "gpio"
 LUALIB_API int ( luaopen_gpio )( lua_State *L );
 
 #define AUXLIB_SPI      "spi"
@@ -46,42 +46,51 @@ LUALIB_API int ( luaopen_cpu )( lua_State* L );
 #define AUXLIB_ADC      "adc"
 LUALIB_API int ( luaopen_adc )( lua_State *L );
 
-#define AUXLIB_RPC   "rpc"
+#define AUXLIB_RPC      "rpc"
 LUALIB_API int ( luaopen_rpc )( lua_State *L );
 
 #define AUXLIB_BITARRAY "bitarray"
 LUALIB_API int ( luaopen_bitarray )( lua_State *L );
 
-#define AUXLIB_ELUA "elua"
+#define AUXLIB_ELUA     "elua"
 LUALIB_API int ( luaopen_elua )( lua_State *L );
 
-#define AUXLIB_I2C  "i2c"
+#define AUXLIB_I2C      "i2c"
 LUALIB_API int ( luaopen_i2c )( lua_State *L );
 
-#define AUXLIB_WIFI      "wifi"
+#define AUXLIB_WIFI     "wifi"
 LUALIB_API int ( luaopen_wifi )( lua_State *L );
 
-#define AUXLIB_COAP      "coap"
+#define AUXLIB_COAP     "coap"
 LUALIB_API int ( luaopen_coap )( lua_State *L );
 
-#define AUXLIB_MQTT      "mqtt"
+#define AUXLIB_MQTT     "mqtt"
 LUALIB_API int ( luaopen_mqtt )( lua_State *L );
 
 #define AUXLIB_U8G      "u8g"
 LUALIB_API int ( luaopen_u8g )( lua_State *L );
 
-#define AUXLIB_NODE      "node"
+#define AUXLIB_NODE     "node"
 LUALIB_API int ( luaopen_node )( lua_State *L );
 
-#define AUXLIB_FILE      "file"
+#define AUXLIB_FILE     "file"
 LUALIB_API int ( luaopen_file )( lua_State *L );
 
-#define AUXLIB_OW      "ow"
+#define AUXLIB_OW       "ow"
 LUALIB_API int ( luaopen_ow )( lua_State *L );
 
-#define AUXLIB_CJSON      "cjson"
+#define AUXLIB_CJSON    "cjson"
 LUALIB_API int ( luaopen_cjson )( lua_State *L );
 
+#define AUXLIB_CRYPTO   "crypto"
+LUALIB_API int ( luaopen_crypto )( lua_State *L );
+
+#define AUXLIB_RC       "rc"
+LUALIB_API int ( luaopen_rc )( lua_State *L );
+
+#define AUXLIB_DHT      "dht"
+LUALIB_API int ( luaopen_dht )( lua_State *L );
+
 // Helper macros
 #define MOD_CHECK_ID( mod, id )\
   if( !platform_ ## mod ## _exists( id ) )\

+ 80 - 0
app/modules/dht.c

@@ -0,0 +1,80 @@
+// Module for interfacing with the DHTxx sensors (xx = 11-21-22-33-44).
+
+#include "lualib.h"
+#include "lauxlib.h"
+#include "auxmods.h"
+#include "lrotable.h"
+#include "cpu_esp8266.h"
+#include "dht.h"
+
+#define NUM_DHT GPIO_PIN_NUM
+
+// ****************************************************************************
+// DHT functions
+int platform_dht_exists( unsigned id )
+{
+  return ((id < NUM_DHT) && (id > 0));
+}
+
+// Lua: result = dht.read( id )
+static int dht_lapi_read( lua_State *L )
+{
+  unsigned id = luaL_checkinteger( L, 1 );
+  MOD_CHECK_ID( dht, id );
+  lua_pushinteger( L, dht_read(id) );
+  return 1;
+}
+
+// Lua: result = dht.read11( id )
+static int dht_lapi_read11( lua_State *L )
+{
+  unsigned id = luaL_checkinteger( L, 1 );
+  MOD_CHECK_ID( dht, id );
+  lua_pushinteger( L, dht_read11(id) );
+  return 1;
+}
+
+// Lua: result = dht.humidity()
+static int dht_lapi_humidity( lua_State *L )
+{
+  lua_pushinteger( L, dht_getHumidity() );
+  return 1;
+}
+
+// Lua: result = dht.temperature()
+static int dht_lapi_temperature( lua_State *L )
+{
+  lua_pushinteger( L, dht_getTemperature() );
+  return 1;
+}
+
+
+// Module function map
+#define MIN_OPT_LEVEL   2
+#include "lrodefs.h"
+const LUA_REG_TYPE dht_map[] =
+{
+  { LSTRKEY( "read" ),  LFUNCVAL( dht_lapi_read ) },
+  { LSTRKEY( "read11" ), LFUNCVAL( dht_lapi_read11 ) },
+  { LSTRKEY( "humidity" ),  LFUNCVAL( dht_lapi_humidity ) },
+  { LSTRKEY( "temperature" ), LFUNCVAL( dht_lapi_temperature ) },
+#if LUA_OPTIMIZE_MEMORY > 0
+  { LSTRKEY( "OK" ), LNUMVAL( DHTLIB_OK ) },
+  { LSTRKEY( "ERROR_CHECKSUM" ), LNUMVAL( DHTLIB_ERROR_CHECKSUM ) },
+  { LSTRKEY( "ERROR_TIMEOUT" ), LNUMVAL( DHTLIB_ERROR_TIMEOUT ) },
+#endif
+  { LNILKEY, LNILVAL }
+};
+
+LUALIB_API int luaopen_dht( lua_State *L )
+{
+#if LUA_OPTIMIZE_MEMORY > 0
+  return 0;
+#else // #if LUA_OPTIMIZE_MEMORY > 0
+  luaL_register( L, AUXLIB_DHT, dht_map );
+
+  // Add the constants
+
+  return 1;
+#endif // #if LUA_OPTIMIZE_MEMORY > 0
+}

+ 53 - 44
app/modules/modules.h

@@ -6,165 +6,173 @@
 #define __MODULES_H__
 
 #if defined(LUA_USE_MODULES_GPIO)
-#define MODULES_GPIO       "gpio"
-#define ROM_MODULES_GPIO   \
+#define MODULES_GPIO        "gpio"
+#define ROM_MODULES_GPIO    \
     _ROM(MODULES_GPIO, luaopen_gpio, gpio_map)
 #else
 #define ROM_MODULES_GPIO
 #endif
 
 #if defined(LUA_USE_MODULES_PWM)
-#define MODULES_PWM       "pwm"
-#define ROM_MODULES_PWM   \
+#define MODULES_PWM         "pwm"
+#define ROM_MODULES_PWM     \
     _ROM(MODULES_PWM, luaopen_pwm, pwm_map)
 #else
 #define ROM_MODULES_PWM
 #endif
 
 #if defined(LUA_USE_MODULES_WIFI)
-#define MODULES_WIFI       "wifi"
-#define ROM_MODULES_WIFI   \
+#define MODULES_WIFI        "wifi"
+#define ROM_MODULES_WIFI    \
     _ROM(MODULES_WIFI, luaopen_wifi, wifi_map)
 #else
 #define ROM_MODULES_WIFI
 #endif
 
 #if defined(LUA_USE_MODULES_NET)
-#define MODULES_NET       "net"
-#define ROM_MODULES_NET   \
+#define MODULES_NET         "net"
+#define ROM_MODULES_NET     \
     _ROM(MODULES_NET, luaopen_net, net_map)
 #else
 #define ROM_MODULES_NET
 #endif
 
 #if defined(LUA_USE_MODULES_COAP)
-#define MODULES_COAP       "coap"
-#define ROM_MODULES_COAP   \
+#define MODULES_COAP        "coap"
+#define ROM_MODULES_COAP    \
     _ROM(MODULES_COAP, luaopen_coap, coap_map)
 #else
 #define ROM_MODULES_COAP
 #endif
 
 #if defined(LUA_USE_MODULES_MQTT)
-#define MODULES_MQTT       "mqtt"
-#define ROM_MODULES_MQTT   \
+#define MODULES_MQTT        "mqtt"
+#define ROM_MODULES_MQTT    \
     _ROM(MODULES_MQTT, luaopen_mqtt, mqtt_map)
 #else
 #define ROM_MODULES_MQTT
 #endif
 
 #if defined(LUA_USE_MODULES_U8G)
-#define MODULES_U8G       "u8g"
-#define ROM_MODULES_U8G   \
+#define MODULES_U8G         "u8g"
+#define ROM_MODULES_U8G     \
     _ROM(MODULES_U8G, luaopen_u8g, lu8g_map)
 #else
 #define ROM_MODULES_U8G
 #endif
 
 #if defined(LUA_USE_MODULES_I2C)
-#define MODULES_I2C       "i2c"
-#define ROM_MODULES_I2C   \
+#define MODULES_I2C         "i2c"
+#define ROM_MODULES_I2C     \
     _ROM(MODULES_I2C, luaopen_i2c, i2c_map)
 #else
 #define ROM_MODULES_I2C
 #endif
 
 #if defined(LUA_USE_MODULES_SPI)
-#define MODULES_SPI       "spi"
-#define ROM_MODULES_SPI   \
+#define MODULES_SPI         "spi"
+#define ROM_MODULES_SPI     \
     _ROM(MODULES_SPI, luaopen_spi, spi_map)
 #else
 #define ROM_MODULES_SPI
 #endif
 
 #if defined(LUA_USE_MODULES_TMR)
-#define MODULES_TMR       "tmr"
-#define ROM_MODULES_TMR   \
+#define MODULES_TMR         "tmr"
+#define ROM_MODULES_TMR     \
     _ROM(MODULES_TMR, luaopen_tmr, tmr_map)
 #else
 #define ROM_MODULES_TMR
 #endif
 
 #if defined(LUA_USE_MODULES_NODE)
-#define MODULES_NODE       "node"
-#define ROM_MODULES_NODE   \
+#define MODULES_NODE        "node"
+#define ROM_MODULES_NODE    \
     _ROM(MODULES_NODE, luaopen_node, node_map)
 #else
 #define ROM_MODULES_NODE
 #endif
 
 #if defined(LUA_USE_MODULES_FILE)
-#define MODULES_FILE       "file"
-#define ROM_MODULES_FILE   \
+#define MODULES_FILE        "file"
+#define ROM_MODULES_FILE    \
     _ROM(MODULES_FILE, luaopen_file, file_map)
 #else
 #define ROM_MODULES_FILE
 #endif
 
 #if defined(LUA_USE_MODULES_ADC)
-#define MODULES_ADC       "adc"
-#define ROM_MODULES_ADC   \
+#define MODULES_ADC         "adc"
+#define ROM_MODULES_ADC     \
     _ROM(MODULES_ADC, luaopen_adc, adc_map)
 #else
 #define ROM_MODULES_ADC
 #endif
 
 #if defined(LUA_USE_MODULES_UART)
-#define MODULES_UART       "uart"
-#define ROM_MODULES_UART   \
+#define MODULES_UART        "uart"
+#define ROM_MODULES_UART    \
     _ROM(MODULES_UART, luaopen_uart, uart_map)
 #else
 #define ROM_MODULES_UART
 #endif
 
 #if defined(LUA_USE_MODULES_OW)
-#define MODULES_OW       "ow"
-#define ROM_MODULES_OW   \
+#define MODULES_OW          "ow"
+#define ROM_MODULES_OW      \
     _ROM(MODULES_OW, luaopen_ow, ow_map)
 #else
 #define ROM_MODULES_OW
 #endif
 
 #if defined(LUA_USE_MODULES_BIT)
-#define MODULES_BIT       "bit"
-#define ROM_MODULES_BIT   \
+#define MODULES_BIT         "bit"
+#define ROM_MODULES_BIT     \
     _ROM(MODULES_BIT, luaopen_bit, bit_map)
 #else
 #define ROM_MODULES_BIT
 #endif
 
 #if defined(LUA_USE_MODULES_WS2812)
-#define MODULES_WS2812 "ws2812"
-#define ROM_MODULES_WS2812 \
+#define MODULES_WS2812      "ws2812"
+#define ROM_MODULES_WS2812  \
     _ROM(MODULES_WS2812, luaopen_ws2812, ws2812_map)
 #else
 #define ROM_MODULES_WS2812
 #endif
 
 #if defined(LUA_USE_MODULES_CJSON)
-#define MODULES_CJSON "cjson"
-#define ROM_MODULES_CJSON \
+#define MODULES_CJSON       "cjson"
+#define ROM_MODULES_CJSON   \
     _ROM(MODULES_CJSON, luaopen_cjson, cjson_map)
 #else
 #define ROM_MODULES_CJSON
 #endif
 
 #if defined(LUA_USE_MODULES_CRYPTO)
-#define MODULES_CRYPTO       "crypto"
-#define ROM_MODULES_CRYPTO   \
+#define MODULES_CRYPTO      "crypto"
+#define ROM_MODULES_CRYPTO  \
     _ROM(MODULES_CRYPTO, luaopen_crypto, crypto_map)
 #else
 #define ROM_MODULES_CRYPTO
 #endif
 
 #if defined(LUA_USE_MODULES_RC)
-#define MODULES_RC "rc"
-#define ROM_MODULES_RC \
-_ROM(MODULES_RC, luaopen_rc, rc_map)
+#define MODULES_RC          "rc"
+#define ROM_MODULES_RC      \
+    _ROM(MODULES_RC, luaopen_rc, rc_map)
 #else
 #define ROM_MODULES_RC
 #endif
 
+#if defined(LUA_USE_MODULES_DHT)
+#define MODULES_DHT         "dht"
+#define ROM_MODULES_DHT     \
+    _ROM(MODULES_DHT, luaopen_dht, dht_map)
+#else
+#define ROM_MODULES_DHT
+#endif
+
 #define LUA_MODULES_ROM     \
         ROM_MODULES_GPIO    \
         ROM_MODULES_PWM		\
@@ -183,8 +191,9 @@ _ROM(MODULES_RC, luaopen_rc, rc_map)
         ROM_MODULES_OW      \
         ROM_MODULES_BIT     \
         ROM_MODULES_WS2812  \
-        ROM_MODULES_CJSON  \
-        ROM_MODULES_CRYPTO \
-        ROM_MODULES_RC
+        ROM_MODULES_CJSON   \
+        ROM_MODULES_CRYPTO  \
+        ROM_MODULES_RC      \
+        ROM_MODULES_DHT
 
 #endif

+ 1 - 0
app/platform/common.c

@@ -75,6 +75,7 @@ int platform_tmr_exists( unsigned id )
   return id < NUM_TMR;
 }
 
+// ****************************************************************************
 // I2C support
 int platform_i2c_exists( unsigned id )
 {