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

This commit is contained in:
vowstar 2015-06-18 16:31:40 +08:00
parent 515a7bf1ab
commit 899935e60b
8 changed files with 215 additions and 59 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

80
app/modules/dht.c Normal file
View File

@ -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
}

View File

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

View File

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