#include #include #include #include #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 #else #include #endif #define MY_NODE_ID 5 #include #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(static_cast(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()); } }