commit aa19772d4f433e69c545649a950f53293cc030be Author: matzman666 Date: Fri Mar 16 22:18:22 2018 +0100 Initial Commit. diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..8d2ac43 --- /dev/null +++ b/.cproject @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..3725fb0 --- /dev/null +++ b/.project @@ -0,0 +1,95 @@ + + + MySmartHomeBase + + + + + + io.sloeber.core.inoToCpp + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + io.sloeber.arduinonature + + + + core/core + 2 + ECLIPSE_HOME/arduinoPlugin/packages/arduino/hardware/avr/1.6.18/cores/arduino + + + core/variant + 2 + ECLIPSE_HOME/arduinoPlugin/packages/arduino/hardware/avr/1.6.18/variants/eightanaloginputs + + + libraries/Adafruit_ADS1X15 + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/Adafruit_ADS1X15/1.0.0 + + + libraries/Adafruit_BME280_Library + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/Adafruit_BME280_Library/1.0.5 + + + libraries/Adafruit_BMP280_Library + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/Adafruit_BMP280_Library/1.0.2 + + + libraries/Adafruit_Unified_Sensor + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/Adafruit_Unified_Sensor/1.0.2 + + + libraries/DHT_sensor_library + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/DHT_sensor_library/1.3.0 + + + libraries/EEPROM + 2 + ECLIPSE_HOME/arduinoPlugin/packages/arduino/hardware/avr/1.6.18/libraries/EEPROM + + + libraries/MyNodeManager + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/MyNodeManager/1.0.0 + + + libraries/MySensors + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/MySensors/2.2.0 + + + libraries/SPI + 2 + ECLIPSE_HOME/arduinoPlugin/packages/arduino/hardware/avr/1.6.18/libraries/SPI + + + libraries/Wire + 2 + ECLIPSE_HOME/arduinoPlugin/packages/arduino/hardware/avr/1.6.18/libraries/Wire + + + diff --git a/MySmartHomeBase.ino b/MySmartHomeBase.ino new file mode 100644 index 0000000..bd360ed --- /dev/null +++ b/MySmartHomeBase.ino @@ -0,0 +1,149 @@ + +#include +#include +#include + + +#define SENSOR_CHECK_INTERVAL 4000 +#define MSG_SEND_CYCLES 15 +#define MSG_SEND_INTERVAL 60000 + +#define PIN_DHT 8 +#define PIN_LDR A7 +#define PIN_MOTION 2 +#define PIN_DOOR0 7 +#define PIN_DOOR1 6 +#define PIN_DOOR2 5 +#define PIN_DOOR3 4 +#define PIN_BACKLIGHT A0 + +#define SENSOR_ID_DHT_TEMP 0 +#define SENSOR_ID_DHT_HUM 1 +#define SENSOR_ID_BMP_TEMP 2 +#define SENSOR_ID_BMP_BARO 3 +#define SENSOR_ID_LDR 4 +#define SENSOR_ID_MQ 5 +//#define SENSOR_ID_SOUND 6 +#define SENSOR_ID_MOTION 7 +#define SENSOR_ID_DOOR0 8 +#define SENSOR_ID_DOOR1 9 +#define SENSOR_ID_DOOR2 10 +#define SENSOR_ID_DOOR3 11 +#define SENSOR_ID_BACKLIGHT 100 +#define SENSOR_ID_VCC 210 + +#define ADS_CHANNEL_MQ 0 +#define ADS_CHANNEL_SOUND 1 + +#define I2C_ADDR_ADS 0x48 +#define I2C_ADDR_BMP 0x76 + +#define DIN_DEBOUNCE 6 + +#define MQ_RL 1000 +#define MQ_EEPROM_BASE 0 + + + +// We need to subclass here to enable temperature/humidity compensation +template< + uint8_t _tchannel, + uint8_t _tsensorId, + unsigned _trl = 1000, + unsigned _teepromBase = 0, + unsigned long _checkInterval = 2000, + unsigned long _msgSendTimeout = 30 +> class CustomADS1115ChannelMQ135Module : public ADS1115ChannelMQ135Module<_tchannel, _tsensorId, _trl, _teepromBase, _checkInterval, _msgSendTimeout> { +public: + virtual bool getTempAndHum(float& temp, float& hum) override; +}; + + +// For convenience + +typedef SensorDHT MySensorDHT; + +typedef SensorADS1115< + Tuple< + CustomADS1115ChannelMQ135Module + >, I2C_ADDR_ADS +> MySensorADS1115; + + + +// create a NodeManager instance +typedef NodeManager< + Tuple< + MySensorDHT, + SensorBMP280, + SensorLDR, + MySensorADS1115, + SensorMotion, + SensorDoor, + SensorDoor, + SensorDoor, + SensorDoor, + SwitchBacklight, + SensorVcc + > +> MyNodeManagerBase; + + +class MyNodeManager : public MyNodeManagerBase { +protected: + virtual void processCommand(const char * message) override { + if (strcmp_P(message, PSTR("MQ_CAL")) == 0) { + getSensor<3, MySensorADS1115>().calibrateSubmodule<0>(); + } else { + MyNodeManagerBase::processCommand(message); + } + } +} nodeManager; + + + +template< + uint8_t _tchannel, + uint8_t _tsensorId, + unsigned _trl, + unsigned _teepromBase, + unsigned long _checkInterval, + unsigned long _msgSendTimeout +> bool CustomADS1115ChannelMQ135Module<_tchannel, _tsensorId, _trl, _teepromBase, _checkInterval, _msgSendTimeout>::getTempAndHum(float& temp, float& hum) { + auto& dht = nodeManager.getSensor<0, MySensorDHT>(); + temp = dht.getTemperature(); + hum = dht.getHumidity(); + return true; +} + + + +void before() { + //nodeManager.setSleep(ALWAYS_ON, 2, SECONDS); + nodeManager.before(); +} + + +void setup() { + nodeManager.setup(); +} + + +void presentation() { + nodeManager.presentation(); +} + + +void receive(const MyMessage &message) { + nodeManager.receive(message); +} + + +void receiveTime(unsigned long ts) { + nodeManager.receiveTime(ts); +} + + +void loop() { + nodeManager.loop(); +} diff --git a/nodemanager_config.h b/nodemanager_config.h new file mode 100644 index 0000000..5584f02 --- /dev/null +++ b/nodemanager_config.h @@ -0,0 +1,74 @@ +#ifndef config_h +#define config_h + +/********************************** + * Sketch configuration + */ + +#define SKETCH_NAME "Gateway" +#define SKETCH_VERSION "1.1" + +/********************************** + * MySensors node configuration + */ + + + +#define MY_MSG_ACK 1 +#define MY_MSG_RETRIES 3 +#define MY_MSG_RETRY_DELAY 1 + + +// Enable debug prints to serial monitor +//#define MY_DEBUG +//#define MY_DEBUG_VERBOSE_RF24 +//#define MY_SPECIAL_DEBUG +#define MY_SPLASH_SCREEN_DISABLED + + +// Enable and select radio type attached +#define MY_RADIO_NRF24 + +#define MY_RF24_PA_LEVEL RF24_PA_MAX +#define MY_RF24_DATARATE RF24_250KBPS +#define MY_RF24_CHANNEL 82 +#define MY_RF24_BASE_RADIO_ID 0x00,0x30,0x08,0x19,0x82 +#define MY_RF24_ENABLE_XTEA +#define MY_RF24_XTEA_KEY { 0xF0, 0xE1, 0xD2, 0xC3, 0xB4, 0xA5, 0x96, 0x87, 0x78, 0x69, 0x5A, 0x4B, 0x3C, 0x2D, 0x1E, 0x0F } +#define MY_MESSAGE_ENABLE_NONCE +#define MY_MESSAGE_ENABLE_HASH + + +// Enable serial gateway +#define MY_GATEWAY_SERIAL +#define MY_BAUD_RATE 115200 + + + +/*********************************** + * NodeManager configuration + */ + +#define DEBUG 0 + +// if enabled, enable the capability to power on sensors with the arduino's pins to save battery while sleeping +#define POWER_MANAGER 0 +// if enabled, will load the battery manager library to allow the battery level to be reported automatically or on demand +#define BATTERY_MANAGER 0 +// if enabled, allow modifying the configuration remotely by interacting with the configuration child id +#define REMOTE_CONFIGURATION 0 +// if enabled, persist the remote configuration settings on EEPROM +#define PERSIST 0 +// if enabled, a battery sensor will be created at BATTERY_CHILD_ID and will report vcc voltage together with the battery level percentage +#define BATTERY_SENSOR 0 +// if enabled, send a SLEEPING and AWAKE service messages just before entering and just after leaving a sleep cycle and STARTED when starting/rebooting +#define SERVICE_MESSAGES 0 + +#define MODULE_BMP280 1 +#define MODULE_DHT 1 +#define MODULE_ADS1115 1 + +#define DISABLE_SLEEP_MODE + +#endif +