commit e9127d8de1a501de43dff549d30852c21e285076 Author: matzman666 Date: Fri Mar 16 22:21:29 2018 +0100 Initial Commit. diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..c173b58 --- /dev/null +++ b/.cproject @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..c17cf9b --- /dev/null +++ b/.project @@ -0,0 +1,75 @@ + + + MyOutdoorSensor01 + + + + + + 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_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/MyNodeManager + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/MyNodeManager/1.0.0 + + + libraries/MySensors + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/MySensors/2.2.0 + + + libraries/RF24 + 2 + ECLIPSE_HOME/arduinoPlugin/libraries/RF24/1.2.0 + + + libraries/SPI + 2 + ECLIPSE_HOME/arduinoPlugin/packages/arduino/hardware/avr/1.6.18/libraries/SPI + + + diff --git a/MyOutdoorSensor01.ino b/MyOutdoorSensor01.ino new file mode 100644 index 0000000..daeab49 --- /dev/null +++ b/MyOutdoorSensor01.ino @@ -0,0 +1,124 @@ + +#include +#include +#include + + +#define SENSOR_CHECK_INTERVAL 2000 +#define MSG_SEND_CYCLES 0 + +#define PIN_DHT 4 +#define PIN_LDR A0 +#define PIN_BAT A1 +#define PIN_MOSFET 8 + +#define SENSOR_ID_DHT_TEMP 0 +#define SENSOR_ID_DHT_HUM 1 +#define SENSOR_ID_LDR 2 +#define SENSOR_ID_VCC 210 + + +// For convenience +typedef SensorDHT MySensorDHT; + + +// create a NodeManager instance +typedef NodeManager< + Tuple< + MySensorDHT, + SensorLDR, + SensorVcc + > +> MyNodeManagerBase; + +class MyNodeManager : public MyNodeManagerBase { +protected: + virtual void _power_on_before() override { + if (pin_backup_valid) { + // Restore pin state + DDRB = ddrb_backup; + PORTB = portb_backup; + DDRC = ddrc_backup; + PORTC = portc_backup; + DDRD = ddrd_backup; + PORTD = portd_backup; + } + } + virtual void _power_on_after() override { + // Enable NRF24 + power_spi_enable(); + transportInit(); + } + virtual void _power_off_after() override { + power_spi_disable(); + // Set all pins as INPUTS and disable pull-ups to avoid current leakage + ddrb_backup = DDRB; + portb_backup = PORTB; + DDRB = 0x00; + PORTB = 0x00; + ddrc_backup = DDRC; + portc_backup = PORTC; + DDRC = 0x00; + PORTC = 0x00; + ddrd_backup = DDRD; + portd_backup = PORTD; + DDRD = 0x00; + PORTD = 0x00; + pin_backup_valid = true; + } + virtual void _sleep_before() override { + powerOff(); + } + virtual void _sleep_after() override { + powerOn(); + wdt_enable(WDTO_2S); + WDTCSR &= ~_BV(WDIE); /* Disable the WD interrupt. */ + } + + uint8_t ddrb_backup, ddrc_backup, ddrd_backup; + uint8_t portb_backup, portc_backup, portd_backup; + bool pin_backup_valid = false; +} nodeManager; + + +void before() { + nodeManager.setSleep(POWER_DOWN_WDT, 5, MINUTES); + nodeManager.setPowerPins(PIN_MOSFET, -1, 0); + nodeManager.setAutoPowerPins(false); + nodeManager.setBatteryInternalVcc(false); + nodeManager.setBatteryPin(PIN_BAT); + nodeManager.setBatteryVoltsPerBit(5.0 / 1023.0); + nodeManager.setBatteryReportCycles(0); + nodeManager.setBatteryMax(4.1); + nodeManager.setBatteryMin(3.4); + nodeManager.before(); +} + + +void presentation() { + nodeManager.presentation(); +} + + +void receive(const MyMessage &message) { + nodeManager.receive(message); +} + + +void receiveTime(unsigned long ts) { + nodeManager.receiveTime(ts); +} + + +void setup() { + ACSR &= (1<<7); // Disable the AC + DIDR0 = 0xFF; // We don't use need digital input from the analog pins, so disable the digital input buffer + //DIDR1 = 0x3; // The same for the AC pins? + nodeManager.setup(); +} + + +void loop() { + nodeManager.loop(); +} + diff --git a/nodemanager_config.h b/nodemanager_config.h new file mode 100644 index 0000000..49f0e87 --- /dev/null +++ b/nodemanager_config.h @@ -0,0 +1,72 @@ +#ifndef config_h +#define config_h + +/********************************** + * Sketch configuration + */ + +#define SKETCH_NAME "Outdoor01" +#define SKETCH_VERSION "1.0" + +/********************************** + * MySensors node configuration + */ + +#define MY_NODE_ID 2 + +#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 +#define MY_SMART_SLEEP_WAIT_DURATION_MS 60 + +#define MY_RF24_CE_PIN 9 +#define MY_RF24_CS_PIN 10 + + +/*********************************** + * 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 1 +// if enabled, will load the battery manager library to allow the battery level to be reported automatically or on demand +#define BATTERY_MANAGER 1 +// if enabled, allow modifying the configuration remotely by interacting with the configuration child id +#define REMOTE_CONFIGURATION 1 +// if enabled, persist the remote configuration settings on EEPROM +#define PERSIST 1 +// 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 1 +// 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 NODE_SMART_SLEEP_ENABLE + +#define MODULE_DHT 1 + +#define ENABLE_SLEEP_HOOKS + +#endif +