Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * The MySensors Arduino library handles the wireless radio link and protocol
- * between your home built sensors/actuators and HA controller of choice.
- * The sensors forms a self healing radio network with optional repeaters. Each
- * repeater and gateway builds a routing tables in EEPROM which keeps track of the
- * network topology allowing messages to be routed to nodes.
- *
- * Created by Henrik Ekblad <[email protected]>
- * Copyright (C) 2013-2015 Sensnology AB
- * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
- *
- * Documentation: http://www.mysensors.org
- * Support Forum: http://forum.mysensors.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- *******************************
- *
- * DESCRIPTION
- * The ArduinoGateway prints data received from sensors on the serial link.
- * The gateway accepts input on seral which will be sent out on radio network.
- *
- * The GW code is designed for Arduino Nano 328p / 16MHz
- *
- * Wire connections (OPTIONAL):
- * - Inclusion button should be connected between digital pin 3 and GND
- * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
- *
- * LEDs (OPTIONAL):
- * - To use the feature, uncomment any of the MY_DEFAULT_xx_LED_PINs
- * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
- * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
- * - ERR (red) - fast blink on error during transmission error or recieve crc error
- *
- */
- // Enable debug prints to serial monitor
- #define MY_DEBUG
- // Enable and select radio type attached
- //#define MY_RADIO_NRF24
- //#define MY_RADIO_RFM69
- // Set LOW transmit power level as default, if you have an amplified NRF-module and
- // power your radio separately with a good regulator you can turn up PA level.
- //#define MY_RF24_PA_LEVEL RF24_PA_LOW
- // Enable serial gateway
- #define MY_GATEWAY_SERIAL
- // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
- #if F_CPU == 8000000L
- #define MY_BAUD_RATE 38400
- #endif
- // Enable inclusion mode
- #define MY_INCLUSION_MODE_FEATURE
- // Enable Inclusion mode button on gateway
- //#define MY_INCLUSION_BUTTON_FEATURE
- // Inverses behavior of inclusion button (if using external pullup)
- //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
- // Set inclusion mode duration (in seconds)
- #define MY_INCLUSION_MODE_DURATION 60
- // Digital pin used for inclusion mode button
- //#define MY_INCLUSION_MODE_BUTTON_PIN 3
- // Set blinking period
- #define MY_DEFAULT_LED_BLINK_PERIOD 300
- // Inverses the behavior of leds
- //#define MY_WITH_LEDS_BLINKING_INVERSE
- // Flash leds on rx/tx/err
- // Uncomment to override default HW configurations
- //#define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin
- //#define MY_DEFAULT_RX_LED_PIN 6 // Receive led pin
- //#define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED
- #include <MySensors.h>
- #include <Arduino.h>
- #include <SPI.h>
- #include <DHT.h>
- #include "DHT.h"
- #define DHTPIN 5
- // Set this offset if the sensor has a permanent small offset to the real temperatures
- #define SENSOR_TEMP_OFFSET 0
- static const uint64_t UPDATE_INTERVAL = 60000;
- static const uint8_t FORCE_UPDATE_N_READS = 10;
- #define CHILD_ID_HUM 0
- #define CHILD_ID_TEMP 1
- float lastTemp;
- float lastHum;
- uint8_t nNoUpdatesTemp;
- uint8_t nNoUpdatesHum;
- bool metric = true;
- MyMessage msgHum(CHILD_ID_HUM, V_HUM);
- MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
- #define DHTTYPE DHT11
- DHT dht(DHTPIN, DHTTYPE);
- void setup()
- {
- // Setup locally attached sensors
- Serial.begin(115200);
- dht.begin();
- // dht.setup(DHTPIN); // set data pin of DHT sensor
- // if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
- // Serial.println("Warning: UPDATE_INTERVAL is smaller than supported by the sensor!");
- // }
- // // Sleep for the time of the minimum sampling period to give the sensor time to power up
- // // (otherwise, timeout errors might occure for the first reading)
- // sleep(dht.getMinimumSamplingPeriod());
- }
- void presentation()
- {
- // Present locally attached sensors
- // Send the sketch version information to the gateway and Controller
- sendSketchInfo("TemperatureAndHumidity", "1.1");
- // Register all sensors to gw (they will be created as child devices)
- present(CHILD_ID_HUM, S_HUM);
- present(CHILD_ID_TEMP, S_TEMP);
- metric = getControllerConfig().isMetric;
- }
- void loop()
- {
- // Force reading sensor, so it works also after sleep()
- dht.begin();
- // Get temperature from DHT library
- float temperature = dht.readTemperature();
- if (isnan(temperature)) {
- Serial.println("Failed reading temperature from DHT!");
- } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
- // Only send temperature if it changed since the last measurement or if we didn't send an update for n times
- lastTemp = temperature;
- // if (!metric) {
- // temperature = dht.toFahrenheit(temperature);
- // }
- // Reset no updates counter
- nNoUpdatesTemp = 0;
- temperature += SENSOR_TEMP_OFFSET;
- send(msgTemp.set(temperature, 1));
- #ifdef MY_DEBUG
- Serial.print("T: ");
- Serial.println(temperature);
- #endif
- } else {
- // Increase no update counter if the temperature stayed the same
- nNoUpdatesTemp++;
- }
- // Get humidity from DHT library
- float humidity = dht.readHumidity();
- if (isnan(humidity)) {
- Serial.println("Failed reading humidity from DHT");
- } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
- // Only send humidity if it changed since the last measurement or if we didn't send an update for n times
- lastHum = humidity;
- // Reset no updates counter
- nNoUpdatesHum = 0;
- send(msgHum.set(humidity, 1));
- #ifdef MY_DEBUG
- Serial.print("H: ");
- Serial.println(humidity);
- #endif
- } else {
- // Increase no update counter if the humidity stayed the same
- nNoUpdatesHum++;
- }
- // Sleep for a while to save energy
- sleep(UPDATE_INTERVAL);
- }
Advertisement
Add Comment
Please, Sign In to add comment