Étape 1: DHT22 + ESP8266 + ThingSpeak = trucs !
J’ai connecté le module DHT22 en utilisant les trois broches. Un fil à + 5V, une à la terre et l’autre à broche 6 sur l’Arduino MEGA que j’utilise.
Part le moniteur série il n’y a aucun moyen de voir la température. Je préfère des effets visuels, alors je vais raccorder l’ESP8266 module (WiFi) et envoyer mes résultats à ThingSpeak. La ESP8266 utilise cinq des huit broches dont elle dispose. Un pour les + 3, 3V (pas + 5V ou vous va faire frire) montré comme un fil jaune dans le diagramme, un pour la terre (fil noir), une pour le RX et TX (vert et bleu) et une broche de remise à zéro (fil blanc) qui va aussi à + 3, 3V.
Le code pour le DHT22 est assez simple, donc nous allons voir que le prochain. Le ESP8266 est plus délicat et a souvent tendance à ne répond ne pas. Si vous pensez que votre code est correct, et le ESP8266 ne répond pas, essayez de débrancher/brancher les fils de deux 3.3V de la maquette. Je trouve que cela donne un bon reset au module. Lorsque le code s’exécute que vous verrez les RX/TX clignotent sur l’Arduino et à ce moment-là, vous devriez voir une lumière bleue sur le flash ESP8266.
Le code est fixé ici.
Pour la DHT22 j’utilise les deux bibliothèques d’ici : http://playground.arduino.cc/Main/DHTLib
Vous devrez copier/coller le texte pour les deux fichiers de nouveaux fichiers et nommez-les en conséquence. Toutes les instructions pour y parvenir sont à ce lien.
Je commence par y compris la bibliothèque DHT et définir la broche pour le DHT22. Je définis ensuite mon wifi SSID et le mot de passe.
Nous sommes maintenant à la configuration principale. J’ai utiliser deux série commencer commandes :
Serial.begin(115200); Serial2.begin(9600);
Le Serial.begin est pour les DHT22, pour que je puisse obtenir des résultats au moniteur série avant que j’ai ajouté le module wifi. Le Serial2.begin est pour le module wifi. Si vous utilisez un Arduino autres que le méga puis vous pouvez seulement avoir une série RX/TX et devez modifier le code en conséquence. Maintenant, j’ai mis en place le 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"); }
Lorsque vous utilisez Serial2, je parle de la ESP8266. Lorsque vous utilisez juste série je suis parler (ou imprimer) le moniteur de la série. Je suis la commande à l’envoi à l’ESP8266 et l’impression le serial monitor pour me montrer ce qui se passe dans l’arrière-plan du texte. J’ai attendre cinq secondes, puis exécuter une Serial2.find pour voir si j’ai obtenu une réponse de OK. Si je l’ai fait alors je vais pour essayer de se connecter (en sautant à connectWiFi()). Si ce n’est pas le cas, alors j’ai afficher le texte à dire non connecté.
Se connecter à un routeur wifi doit le SSID, le mot de passe et plusieurs commandes.
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; } }
Donc, j’ai envoyer la commande AT + CWMODE = 1 à la ESP8266. Attendez deux secondes, créez une chaîne nommée cmd et démarrer avec AT + CWJAP = \ "puis ajouter à la chaîne avec le SSID, le mot de passe, puis envoyer la chaîne dûment remplie à l’ESP8266. Encore une fois, j’ai vérifier une réponse OK (ou pas) avec un message approprié pour le moniteur de la série.
Pour la boucle principale j’ai tout d’abord aller à TempHum() pour obtenir mes infos de température 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);
Cela crée tout simplement un entier appelé chk et la broche de DHT22 de lecture. J’ai vérifier l’état de la DHT22 (l’interrupteur, qui j’ai ciselée ce code ici pour économiser de l’espace) et imprimer la température et l’humidité au moniteur série.
String SendTempLevel = String((float)DHT.temperature, 0);String SendHumLevel = String((float)DHT.humidity, 0);
Les deux chaînes sont titulaires pour la température et l’humidité et est ce que je vais envoyer à ThingSpeak.
Je saute à updateTemp() prendre ces deux chaînes avec moi. Il est maintenant temps d’envoyer à ThingSpeak. Évidemment, vous aurez besoin créer un compte gratuit avec ThingSpeak, création d’un canal, avoir deux champs (pour la température et l’humidité) et obtenir votre clé API.
String cmd = "AT+CIPSTART=\"TCP\",\"";cmd += "184.106.153.149"; // api.thingspeak.com cmd += "\",80"; Serial2.println(cmd);
Comme la dernière fois j’ai créer une chaîne nommée cmd et envoyez-le à codes, ajouter la ThingSpeak IP et le port, puis envoyez-le à la ESP8266.
Encore une fois, j’ai faire une vérification pour voir si je suis envoyer une erreur ou non.
String getStr = "GET /update?api_key="; getStr += "8KS0CVMQ12A7D817"; getStr += "&field1="; getStr += String(SendTempLevel); getStr += "&field2="; getStr += String(SendHumLevel); getStr += "\r\n\r\n";
Une nouvelle chaîne, getStr, est créée avec une commande GET (avec ma clé API ThingSpeak) et la température et l’humidité.
String cmd est recréé avec une commande AT et le getStr.length nous dira maintenant depuis longtemps est la getStr. Ceci est nécessaire pour l’envoi à ThingSpeak et envoyer à la ESP8266.
Comme le précédent envoie que nous consulter pour une réponse. Plus de caractères (>) c’est bien. Autre chose est mauvaise et nous envoyons AT + CIPCLOSE pour fermer la connexion. Encore une fois, info est envoyé au moniteur série pour nous dire ce qui se passe.
Télécharger le code essentiel pour le méga devrait être sans erreur et, lors de l’exécution, le serial monitor vous dira ce qui se passe.