Paso 1: DHT22 + ESP8266 + ThingSpeak = cosas!
He conectado el módulo de DHT22 con los tres pernos. Un cable a + 5V, uno a tierra y el otro al pin 6 en el Arduino MEGA que estoy usando.
Que no sea el monitor serial hay no hay manera de ver la temperatura. Prefiero visuales, así que voy a enlazar el ESP8266 módulo (WiFi) y enviar mis resultados a ThingSpeak. El ESP8266 utiliza cinco de los ocho pines que tiene. Uno para el + 3, 3V (no + 5V o a freír) se muestra como un cable amarillo en el diagrama, uno de tierra (cable negro), uno para RX y TX (verde y azul) y un pin de reset (cable blanco) que también va a + 3, 3V.
El código para el DHT22 es bastante sencillo, así que vamos a ver en siguiente. El ESP8266 es más complicado y a menudo es propensa a no responder. Si crees que tu código es correcto, y el ESP8266 no responde, intente desenchufar/enchufar los cables dos 3.3V de la protoboard. Me parece que da un buen reset en el módulo. Cuando el código está funcionando que usted verá las luces de RX/TX flash en el Arduino y en ese mismo momento usted debe ver una luz azul en el flash ESP8266.
El código se une aquí.
Para la DHT22 estoy usando las dos bibliotecas de aquí: http://playground.arduino.cc/Main/DHTLib
Usted necesitará copiar/pegar el texto de los dos archivos para nuevos archivos y nombre por consiguiente. Todas las instrucciones para hacerlo están en este enlace.
Comenzar incluyendo la biblioteca DHT y definir el pin para el DHT22. Luego defino mi wifi SSID y la contraseña.
Ahora estamos en la configuración principal. Utilizo dos serie iniciar comandos:
Serial.begin(115200); Serial2.begin(9600);
El Serial.begin es para el DHT22, por lo que podría conseguir resultados en el monitor serial antes de el módulo de wifi. El Serial2.begin es para el módulo de wifi. Si está utilizando un Arduino que no sea el Mega entonces puede sólo tiene un serial RX/TX y necesita modificar el código en consecuencia. Ahora instalé el ESP8266.
//WiFi setup Serial2.println("AT"); Serial.println("AT sent - checking..."); delay(5000); char okcheck[]="OK"; if(Serial2.find(okcheck)){ Serial.println("OK, found. Connecting"); connectWiFi(); Serial.println("Yay! Should be connected now.");} else{ Serial.println("NOT CONNECTED TO WIFI"); }
Cuando se utiliza Serial2 me refiero a la ESP8266. Cuando se utiliza sólo serie estoy hablando (o impresión a) el monitor serie. Estoy enviando el comando en a la ESP8266 y texto en el monitor serial para mostrarme lo que está sucediendo en el fondo de la impresión. Yo espere cinco segundos y luego ejecute un Serial2.find para ver si tengo una respuesta de OK. Si lo hice voy a probar y conectar (saltando a connectWiFi()). Si no mostrará el texto que dice no conectado.
Conectar a un router wifi necesita el SSID, contraseña y varios comandos.
boolean connectWiFi(){ Serial2.println("AT+CWMODE=1"); delay(2000); String cmd="AT+CWJAP=\""; // add SSID and password cmd+=SSID; cmd+="\",\""; cmd+=PASS; cmd+="\""; // send string Serial2.println(cmd); delay(5000); // was the login accepted? char okcheck[]="OK"; if(Serial2.find(okcheck)){ Serial.println("Login accepted"); return true; }else{ Serial.println("Login not accepted."); return false; } }
Por lo tanto, enviar el comando AT + CWMODE = 1 para el ESP8266. Espere dos segundos, crear una cadena llamada cmd y empezar con AT + CWJAP = \ "entonces añadir a la cadena con el SSID, contraseña, luego enviar la cadena completa a la ESP8266. Otra vez, yo busque una respuesta de OK (o no) con un mensaje apropiado para el monitor serie.
Para el bucle principal primer salto para TempHum() obtener mi información de la temperatura de la DHT22.
Serial.print("DHT22, \t"); int chk = DHT.read22(DHT22_PIN); switch (chk) { case DHTLIB_OK: Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); break; default: Serial.print("Unknown error,\t"); break; } // DISPLAY DATA Serial.print(DHT.humidity, 1); Serial.print(",\t\t"); Serial.println(DHT.temperature, 1);
Esto es simplemente creando un entero llamado chk y leer el pin DHT22. Verificar el estado de la DHT22 (el interruptor, que he picado ese código aquí para ahorrar espacio) y la temperatura y humedad en el serial monitor de impresión.
String SendTempLevel = String((float)DHT.temperature, 0);String SendHumLevel = String((float)DHT.humidity, 0);
Las dos cadenas son soportes para la temperatura y humedad y es lo que te mandaré a ThingSpeak.
Me salta a updateTemp() tomando esas dos cadenas conmigo. Ahora es tiempo de mandar a ThingSpeak. Obviamente necesitarás crear una cuenta gratuita con ThingSpeak, crear un canal, tiene dos campos (para temperatura y humedad) y obtener su clave de API.
String cmd = "AT+CIPSTART=\"TCP\",\"";cmd += "184.106.153.149"; // api.thingspeak.com cmd += "\",80"; Serial2.println(cmd);
Como la última vez crear una cadena llamada cmd y enviar códigos, añadir la ThingSpeak IP y el puerto y enviarlo a la ESP8266.
Una vez más, hacer una comprobación para ver si estoy enviar error o no.
String getStr = "GET /update?api_key="; getStr += "8KS0CVMQ12A7D817"; getStr += "&field1="; getStr += String(SendTempLevel); getStr += "&field2="; getStr += String(SendHumLevel); getStr += "\r\n\r\n";
Se crea una nueva cadena, getStr, con un comando GET (con mi ThingSpeak API key) y la temperatura y la humedad.
Cadena cmd se crea otra vez con un comando AT y el getStr.length nos diga ahora larga el getStr. Esto es necesario para enviar a ThingSpeak y enviar a la ESP8266.
Como anterior envía que busque una respuesta. Más que carácter (>) significa bien. Nada es malo y la enviamos al + CIPCLOSE para cerrar la conexión. Una vez más, información es enviada al serial monitor para decirnos lo que está sucediendo.
Carga el código esencial para el MEGA debe estar libre de errores y, cuando se ejecuta, el monitor serial le dirá lo que está sucediendo.