- #include <EEPROM.h>
- #include <SPI.h>
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #define MY_DEBUG
- #define MY_BAUD_RATE 9600
- // Enables and select radio type (if attached)
- //#define MY_RADIO_NRF24
- //#define MY_RADIO_RFM69
- #define MY_GATEWAY_ESP8266
- #define MY_ESP8266_SSID "XXXX XXXXX XXXXX"
- #define MY_ESP8266_PASSWORD "XXXXXXX"
- #define MY_ESP8266_HOSTNAME "sensor-gateway"
- #define MY_IP_GATEWAY_ADDRESS 192,168,1,157
- #define MY_IP_SUBNET_ADDRESS 255,255,255,0
- #define MY_PORT 5003
- #define MY_GATEWAY_MAX_CLIENTS 10
- #define MY_INCLUSION_MODE_FEATURE
- #define MY_INCLUSION_MODE_DURATION 60
- #define MY_INCLUSION_MODE_BUTTON_PIN 3
- #define MY_DEFAULT_ERR_LED_PIN 16 // Error led
- #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>
- #else
- #include <ESP8266WiFi.h>
- #endif
- #define MY_NODE_ID 5
- #include <MySensors.h>
- #define CHILD_D4 2 // Temperature D4 is Internal GPIO2
- #define TEMP_D4 2
- #define RELAY_1 4 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
- #define RELAY_2 5
- //#define RELAY_3
- #define NUMBER_OF_RELAYS 2 // Total number of attached relays
- #define RELAY_ON 1 // GPIO value to write to turn on attached relay
- #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
- OneWire ourWire(TEMP_D4);
- DallasTemperature sensors(&ourWire);
- MyMessage msgTemperature1(CHILD_D4, V_TEMP);
- void before()
- {
- for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
- // Then set relay pins in output mode
- pinMode(pin, OUTPUT);
- // Set relay to last known state (using eeprom storage)
- digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
- }
- }
- void setup() {
- present(255, 18); //The number 18 signifies S_ARDUINO_REPEATER_NODE. This is suggested in some forums.
- delay(100);
- Serial.begin(9600);
- sensors.begin(); //Se inician los sensore
- }
- void presentation() {
- // Present locally attached sensors here
- sendSketchInfo("Cuartito", "1.0");
- present(CHILD_D4, S_TEMP); //Temperature
- sleep(100);
- // Send the sketch version information to the gateway and Controller
- sendSketchInfo("Relay", "1.0");
- for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
- // Register all sensors to gw (they will be created as child devices)
- present(sensor, S_BINARY);
- }
- }
- void loop() {
- sensors.requestTemperatures();
- Serial.print(sensors.getTempCByIndex(0));
- Serial.println(" grados Centigrados");
- float temperature = static_cast<float>(static_cast<int>(sensors.getTempCByIndex(0) * 10.)) / 10.;
- send(msgTemperature1.set(temperature,1));
- delay(100); //Se provoca un lapso de 1 segundo antes de la próxima lectura
- }
- void receive(const MyMessage &message)
- {
- // We only expect one type of message from controller. But we better check anyway.
- if (message.type==V_STATUS) {
- // Change relay state
- digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
- // Store state in eeprom
- saveState(message.sensor, message.getBool());
- // Write some debug info
- Serial.print("Incoming change for sensor:");
- Serial.print(message.sensor);
- Serial.print(", New status: ");
- Serial.println(message.getBool());
- }
- }