// Tomar datos y enviarlos por WiFi a Ubidots /////////////////////////////////////////////////////////// WIFI // Librerias requeridas #include #include // Variables para la conexión WiFi char ssid[] = "rayido.com"; // Network SSID (name) char pass[] = "isa20232"; // Network password int status = WL_IDLE_STATUS; // Network status void printWifiStatus() { // Muestra el nombre de la red WiFi Serial.print("[WIFI]\tConectado a SSID: "); Serial.println(WiFi.SSID()); // Muestra la dirección IP IPAddress ip = WiFi.localIP(); Serial.print("[WIFI]\tDirección IP: "); Serial.println(ip); // Muestra la intensidad de señal: long rssi = WiFi.RSSI(); Serial.print("[WIFI]\tIntensidad de señal (RSSI): "); Serial.print(rssi); Serial.println(" dBm"); } void WiFiInit() { // Le damos tiempo al shield WiFi de iniciar: delay(1000); // Verificamos la presencia del shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println("[WIFI]\tShield not present"); while (true); // No continuamos } String fv = WiFi.firmwareVersion(); if (fv <= "1.1.0" ) Serial.println("[WIFI]\tPor favor actualizar el firmware"); // Intentando conectarse al WiFi: while (status != WL_CONNECTED) { Serial.print("[WIFI]\tIntento de connexión al SSID: "); Serial.println(ssid); // Conexión a una red por WPA/WPA2. // Cambiar la siguiente linea si usa un WIFI abierto o red WEP: status = WiFi.begin(ssid, pass); // Esperando 1 segundo para conexión: delay(1000); } // Estamos conectados, mostramos la información de la conexión: printWifiStatus(); } /////////////////////////////////////////////////// SENDING DATA #include // Constantes const unsigned long postingInterval = 2 * 1000; // Intervalo mínmo para el envio de datos 2*1000 ms const unsigned int sensorCount = 3; // Numero de datos a enviar // Variables //char* host = "isa.requestcatcher.com"; // No incluir el https:// char* host = "api.datacake.co"; // No incluir el https:// char* path = "/integrations/api/1ecc132d-124b-4a74-b00a-b9176302b04c/"; // Path int port = 80; // Puerto char* deviceId = "4116862b-262d-407b-8cee-2708e7f8c7c6"; // deviceId WiFiClient wifi; HttpClient client = HttpClient(wifi, host, port); String response; int statusCode = 0; void POST_send(int sensorCount, char* sensorNames[], float values[]) { // https://github.com/arduino-libraries/ArduinoHttpClient/blob/master/examples/CustomHeader/CustomHeader.ino String postData = "{\"device\":\""; postData += deviceId; postData += "\",\""; for (int idx = 0; idx < sensorCount; idx++) { if (idx != 0) postData += ",\""; postData += sensorNames[idx]; postData += "\":"; postData += values[idx]; } postData += "}"; client.beginRequest(); client.post(path); client.sendHeader(HTTP_HEADER_CONTENT_TYPE, "application/json"); client.sendHeader(HTTP_HEADER_CONTENT_LENGTH, postData.length()); client.endRequest(); client.write((const byte*)postData.c_str(), postData.length()); statusCode = client.responseStatusCode(); response = client.responseBody(); Serial.print("status-code: "); Serial.println(statusCode); } char* nameArray[] = {"temperature", "humidity", "battery"}; // Nombres de las variables en la nube float sensorValues[sensorCount]; // Vector de valores unsigned long lastConnectionTime = 0; // Marca temporal para el ultimo envio de datos void POST(float T, float H, float B) { sensorValues[0] = T; sensorValues[1] = H; sensorValues[2] = B; if ((millis() - lastConnectionTime) > postingInterval) { Serial.print("[SEND]\tEnviando datos > "); POST_send(sensorCount, nameArray, sensorValues); // REST call lastConnectionTime = millis(); // Actualizamos la marca temporal } } ///////////////////////////////////////////////////////// SENSOR #include "DHT.h" #define DHTTYPE DHT11 //Use DHT11 sensor variant #define SBAT 0 //Battery sensor connected to Arduino analog pin 0 #define DHTPIN 9 //DHT sensor connected to Arduino digital pin 2 const unsigned long tDHTmeas = 200; //Time to measure DHT11 (200 ms) DHT dht(DHTPIN, DHTTYPE); //DHT object var float T = 0, H = 0, B = 0; //Var Environment Temperature (t) as float unsigned long tiniDHT = 0; //Timing for DHT11 measurements void readDHT() { //Function that reads DHT sensor and also battery level if ((millis() - tiniDHT) > tDHTmeas) { B = analogRead(SBAT) * 9.2 / 1023.0; //Acquire current battery level voltage Serial.print("[DATA]\tMedidas : {Battery Voltage: "); Serial.print(B); T = dht.readTemperature(); Serial.print(", Temperature: "); Serial.print(T); H = dht.readHumidity(); Serial.print(", Humidity: "); Serial.print(H); Serial.println(" }"); tiniDHT = millis(); //Reset the timing for measuring DHT11 } } /////////////////////////////////////////////////////// ACTUADOR #define COOLER 8 // Ventilador en el pin 8 #define LR 6 // LED Rojo en el pin 6 #define LG 3 // LED Verde en el pin 3 #define LB 2 // LED Azul en el pin 2 void verificarActuadores(){ pinMode(COOLER,OUTPUT); digitalWrite(COOLER,HIGH); delay(1000); digitalWrite(COOLER,LOW); pinMode(LR,OUTPUT); digitalWrite(LR,HIGH); delay(1000); digitalWrite(LR,LOW); pinMode(LG,OUTPUT); digitalWrite(LG,HIGH); delay(1000); digitalWrite(LG,LOW); pinMode(LB,OUTPUT); digitalWrite(LB,HIGH); delay(1000); digitalWrite(LB,LOW); } //////////////////////////////////////////////////////// ARDUINO void setup() { // Comunicación Serial.begin(115200); verificarActuadores(); WiFiInit(); // Iniciando la conexión WIFI } void loop() { readDHT(); POST(T, H, B); }