diff --git a/app/dhtlib/dht.c b/app/dhtlib/dht.c index f1f59784..323ef805 100644 --- a/app/dhtlib/dht.c +++ b/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); diff --git a/app/dhtlib/dht.h b/app/dhtlib/dht.h index de31bd69..1a210ebb 100644 --- a/app/dhtlib/dht.h +++ b/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 // diff --git a/app/include/user_modules.h b/app/include/user_modules.h index 7e2564f7..9f10f8f3 100644 --- a/app/include/user_modules.h +++ b/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 */ diff --git a/app/modules/Makefile b/app/modules/Makefile index 499b9314..646a375e 100644 --- a/app/modules/Makefile +++ b/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 diff --git a/app/modules/auxmods.h b/app/modules/auxmods.h index ece3ff56..98e8277c 100644 --- a/app/modules/auxmods.h +++ b/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 ) )\ diff --git a/app/modules/dht.c b/app/modules/dht.c new file mode 100644 index 00000000..91b0afd3 --- /dev/null +++ b/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 +} diff --git a/app/modules/modules.h b/app/modules/modules.h index 76a357a8..c9e55193 100644 --- a/app/modules/modules.h +++ b/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 diff --git a/app/platform/common.c b/app/platform/common.c index fed7b89b..711a8a4a 100644 --- a/app/platform/common.c +++ b/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 ) {