Advertisement
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 <henrik.ekblad@mysensors.org>
- * 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.
- *
- *******************************
- *
- * REVISION HISTORY
- * Version 1.0 - Henrik EKblad
- * Contribution by a-lurker and Anticimex,
- * Contribution by Norbert Truchsess <norbert.truchsess@t-online.de>
- * Contribution by Ivo Pullens (ESP8266 support)
- *
- * DESCRIPTION
- * The EthernetGateway sends data received from sensors to the WiFi link.
- * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
- *
- * VERA CONFIGURATION:
- * Enter "ip-number:port" in the ip-field of the Arduino GW device. This will temporarily override any serial configuration for the Vera plugin.
- * E.g. If you want to use the default values in this sketch enter: 192.168.178.66:5003
- *
- * LED purposes:
- * - To use the feature, uncomment any of the MY_DEFAULT_xx_LED_PINs in your sketch, only the LEDs that is defined is used.
- * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
- * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
- * - ERR (red) - fast blink on error during transmission error or receive crc error
- *
- * See https://www.mysensors.org/build/connect_radio for wiring instructions.
- *
- * If you are using a "barebone" ESP8266, see
- * https://www.mysensors.org/build/esp8266_gateway#wiring-for-barebone-esp8266
- *
- * Inclusion mode button:
- * - Connect GPIO5 (=D1) via switch to GND ('inclusion switch')
- *
- * Hardware SHA204 signing is currently not supported!
- *
- * Make sure to fill in your ssid and WiFi password below for ssid & pass.
- */
- // Enable debug prints to serial monitor
- #define MY_DEBUG
- // Use a bit lower baudrate for serial prints on ESP8266 than default in MyConfig.h
- #define MY_BAUD_RATE 9600
- // Enables and select radio type (if attached)
- #define MY_RADIO_NRF24
- //#define MY_RADIO_RFM69
- //#define MY_RADIO_RFM95
- #define MY_GATEWAY_ESP8266
- #define MY_WIFI_SSID "WIFI1612"
- #define MY_WIFI_PASSWORD "********"
- // Enable UDP communication
- //#define MY_USE_UDP // If using UDP you need to set MY_CONTROLLER_IP_ADDRESS below
- // Set the hostname for the WiFi Client. This is the hostname
- // it will pass to the DHCP server if not static.
- #define MY_HOSTNAME "sensor-gateway"
- // Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
- //#define MY_IP_ADDRESS 192,168,178,87
- // If using static ip you can define Gateway and Subnet address as well
- //#define MY_IP_GATEWAY_ADDRESS 192,168,178,1
- //#define MY_IP_SUBNET_ADDRESS 255,255,255,0
- // The port to keep open on node server mode
- #define MY_PORT 5003
- // How many clients should be able to connect to this gateway (default 1)
- #define MY_GATEWAY_MAX_CLIENTS 5
- // Controller ip address. Enables client mode (default is "server" mode).
- // Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere.
- //#define MY_CONTROLLER_IP_ADDRESS 192, 168, 178, 68
- // Enable inclusion mode
- //#define MY_INCLUSION_MODE_FEATURE
- // Enable Inclusion mode button on gateway
- //#define MY_INCLUSION_BUTTON_FEATURE
- // 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 D1
- // Set blinking period
- //#define MY_DEFAULT_LED_BLINK_PERIOD 300
- // Flash leds on rx/tx/err
- // Led pins used if blinking feature is enabled above
- //#define MY_DEFAULT_ERR_LED_PIN 16 // Error led pin
- //#define MY_DEFAULT_RX_LED_PIN 16 // Receive led pin
- //#define MY_DEFAULT_TX_LED_PIN 16 // the PCB, on board LED
- #if defined(MY_USE_UDP)
- #include <WiFiUdp.h>
- #endif
- #include <SPI.h>
- #include <ESP8266WiFi.h>
- #include <MySensors.h>
- // BLOCCO DHT //
- #include <DHT.h>
- // Set this to the pin you connected the DHT's data pin to
- #define DHT_DATA_PIN 3
- // Set this offset if the sensor has a permanent small offset to the real temperatures.
- // In Celsius degrees (as measured by the device)
- #define SENSOR_TEMP_OFFSET 0
- // Sleep time between sensor updates (in milliseconds)
- // Must be >1000ms for DHT22 and >2000ms for DHT11
- static const uint64_t UPDATE_INTERVAL = 60000;
- // Force sending an update of the temperature after n sensor reads, so a controller showing the
- // timestamp of the last update doesn't show something like 3 hours in the unlikely case, that
- // the value didn't change since;
- // i.e. the sensor would force sending an update every UPDATE_INTERVAL*FORCE_UPDATE_N_READS [ms]
- 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);
- DHT dht;
- // FINE BLOCCO DHT
- void setup()
- {
- // Setup locally attached sensors
- // *** BLOCCO DHT ***
- dht.setup(DHT_DATA_PIN); // 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());
- // *** FINE BLOCCO DHT ***
- }
- void presentation()
- {
- // Present locally attached sensors here
- // *** BLOCCO DHT **
- // Send the sketch version information to the gateway DHT
- 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;
- // *** FINE BLOCCO DHT **
- }
- void loop()
- {
- // *** BLOCCO DHT ***
- // Send locally attached sensors data here
- // Force reading sensor, so it works also after sleep()
- dht.readSensor(true);
- // Get temperature from DHT library
- float temperature = dht.getTemperature();
- if (isnan(temperature)) {
- // Serial.println("Failed reading temperature from DHT!");
- Serial.println(dht.getTemperature());
- } 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;
- // apply the offset before converting to something different than Celsius degrees
- temperature += SENSOR_TEMP_OFFSET;
- if (!metric) {
- temperature = dht.toFahrenheit(temperature);
- }
- // Reset no updates counter
- nNoUpdatesTemp = 0;
- 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.getHumidity();
- 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++;
- }
- // *** FINE BLOCCO DHT ***
- // Sleep for a while to save energy
- sleep(UPDATE_INTERVAL);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement