Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Réponse SMS de température

Composants et fournitures

Arduino Mega 2560
× 1
Capteur de température DHT22
× 1
SIM800L
× 1
Résistance 10k ohm
× 1
Planche à pain (générique)
× 1
Câbles de raccordement (générique)
× 1

À propos de ce projet

Bonjour. Ce projet fait partie d'un projet beaucoup plus vaste. Parce que j'ai eu beaucoup de problèmes avec cette partie et que j'ai finalement trouvé une solution, j'ai décidé de la partager avec la communauté et j'espère que cela pourra les aider dans leurs projets.

Description du projet

Envoyez des SMS à Arduino et obtenez la température à la maison.

Logiciel

Pour le module SIM800L, j'ai utilisé la bibliothèque "Seeeduino_GPRS-master". J'ai dû modifier les lignes suivantes dans la bibliothèque « sim800.h » pour lui permettre de fonctionner sur un MEGA :

#define SIM800_TX_PIN 8#define SIM800_RX_PIN 7 

...vers TX_PIN 10 et RX_PIN 11. Changer la bibliothèque de "SoftwareSerial" à l'un des ports Mega Serial, c'est-à-dire Serial3, était trop difficile, j'ai donc choisi la solution de facilité.

Le problème

Fondamentalement, mon code est composé d'exemples de copier-coller provenant de deux bibliothèques :« DHT.h » et « Seeeduino_GPRS-master ». Le problème que j'avais était que l'exemple "gprs.h" ne montrait que comment envoyer un message prédéterminé entre guillemets. Je ne pouvais pas comprendre comment envoyer la valeur flottante variable de mon capteur de température. C'était également vrai avec d'autres bibliothèques que j'ai essayées :"GPRS_SIM900-master" et "SIM800L-master" .

J'avais passé des semaines à chercher sur le WEB des exemples pour résoudre mon problème et n'en ai trouvé aucun. J'avais trouvé des messages sur le forum sur le même sujet, et pour ces pauvres âmes perdues qui n'ont pas obtenu de réponses, j'espère que vous trouverez ce message.

La réponse

Convertissez la valeur flottante en une chaîne, puis la chaîne en un tableau de caractères - simple !

Extrait de code

 MyString =String(temp,0) ; //Convertir float en StringMyString =(MyString + "Degrés C"); // convertir la chaîne en char commence ici// Length (avec un caractère supplémentaire pour le terminateur null)int str_len =MyString.length() + 1; // Préparez le tableau de caractères (le tampon) char char_array[str_len];// Copiez-le sur MyString.toCharArray(char_array, str_len);// convertissez la chaîne en char se termine heregprs.sendSMS("04++++++++ +",char_array); //définir le numéro de téléphone et le texte. 

Câblage

J'ai utilisé une batterie ULTRAFIRE 18650 pour alimenter le module sim. Plus tard, j'ajouterai un régulateur de tension au circuit. Voir ce tutoriel.

Matériel de référence

  • http://www.ayomaonline.com/programming/quickstart-sim800-sim800l-with-arduino/
  • https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

Bibliothèques

  • https://github.com/Seeed-Studio/Seeeduino_GPRS
  • https://github.com/adafruit/DHT-sensor-library

Code

  • DHT_SIMPosting.ino
DHT_SIMPosting.inoArduino
Envoyer un SMS "InTemp" demande la température et la réponse Arduino en degrés C.
// Exemple de croquis de test pour divers capteurs d'humidité/température DHT// Écrit par ladyada, domaine public#include "DHT.h"#define DHTPIN 2 // à quelle broche numérique nous sommes connectés#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321//#define DHTTYPE DHT21 // DHT 21 (AM2301)// Connectez la broche 1 (à gauche) du capteur à +5V// Connectez la broche 2 du capteur à quel que soit votre DHTPIN // Connectez la broche 4 (à droite) du capteur à la TERRE // Connectez une résistance de 10K de la broche 2 (données) à la broche 1 (alimentation) du sensor// Initialize DHT sensor.DHT dht(DHTPIN, DHTTYPE);#include #include #define TIMEOUT 5000GPRS gprs;bool ITemp =false;float temp;String MyString;#define LED_PIN 13bool ledStatus;//Variable pour conserver la dernière ligne de la sortie série de SIM800char currentLine[500] ="";int currentLineIndex =0;//Boolean à définir sur true si la notification de message a été trouvée et que la prochaine//ligne de sortie série est la contenu du message SMS actuel nextLineIsMessage =false;void Reply ()// La fonction commence ici{ Serial.println("GPRS - Send SMS Test ..."); gprs.preInit(); retard(1000); while(0 !=gprs.init()) { delay(1000); Serial.print("erreur d'initialisation\r\n"); } Serial.println("Init success, start to send SMS message..."); if (ITemp ==true){ float t =dht.readTemperature(); temp=t; ITemp =faux ; } MaChaîne =Chaîne(temp,0) ; //Convertir float en String MyString =(MyString + " Degrés C"); // convertir la chaîne en char commence ici // Longueur (avec un caractère supplémentaire pour le terminateur nul) int str_len =MyString.length() + 1; // Préparer le tableau de caractères (le tampon) char char_array[str_len]; // Copiez-le sur MyString.toCharArray(char_array, str_len); // convertir la chaîne en char se termine ici gprs.sendSMS("04++++++++",char_array); //définir le numéro de téléphone et le texte // La fonction se termine ici}void setup() { Serial.begin(9600); Serial.println("Test DHTxx !"); dht.begin(); gprs.preInit(); retard(1000); while(0 !=gprs.init()) { delay(1000); Serial.print("erreur d'initialisation\r\n"); //Afficher plus tard SIM ERROR sur la page d'accueil Nextion HMI } //Définir le mode SMS sur ASCII if(0 !=gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) { ERROR( "ERREUR : CNMI" ); retourner; } //Commencer à écouter les nouvelles indications de message SMS if(0 !=gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) { ERROR(" ERREUR:CNMI"); retourner; } Serial.println("Init success");}void loop() { // Attendre quelques secondes entre les mesures. retard (2000); // La lecture de la température ou de l'humidité prend environ 250 millisecondes ! // Les lectures du capteur peuvent également être "anciennes" jusqu'à 2 secondes (c'est un capteur très lent) float h =dht.readHumidity(); // Lecture de la température en Celsius (valeur par défaut) float t =dht.readTemperature(); Serial.print("Humidité:"); Serial.print(h); Serial.println(" %\t"); Serial.print("Température :"); Serial.print(t); Serial.println(" *C "); SIM();}void SIM(){ //Écrire l'état actuel sur la broche LED digitalWrite(LED_PIN, ledStatus); Serial.println("Recherche SMS"); // S'il y a une sortie série de SIM800 if(gprs.serialSIM800.available()){ char lastCharRead =gprs.serialSIM800.read(); //Lire chaque caractère de la sortie série jusqu'à ce que \r ou \n soit atteint (ce qui indique la fin de la ligne) if(lastCharRead =='\r' || lastCharRead =='\n'){ String lastLine =String(currentLine); //Si la dernière ligne lisait +CMT, de nouvelles indications de message SMS ont été reçues. // Par conséquent, la ligne suivante est le contenu du message. if(lastLine.startsWith("+CMT:")){ Serial.println(lastLine); nextLineIsMessage =true; } else if (lastLine.length()> 0) { if(nextLineIsMessage) { Serial.println(lastLine); //Lire le contenu du message et définir le statut en fonction du contenu du SMS if(lastLine.indexOf("InTemp")>=0){ Serial.println("InTemp"); ITemp =vrai ; Répondre (); // ledStatus =1; // Serial.println("Allumer la lumière"); // } else if(lastLine.indexOf("LED OFF")>=0) { // ledStatus =0; // Serial.println("Éteignez la lumière"); } nextLineIsMessage =false; } } //Effacer le tableau de caractères pour la ligne suivante de lecture for( int i =0; i  

Schémas


Processus de fabrication

  1. Ventilateur à température contrôlée
  2. Enregistreur de température Raspberry Pi
  3. Lire la température avec DS18B20 | Raspberry Pi 2
  4. Surveillance de la température sur le Raspberry Pi
  5. Mesure de la température avec RASPBERRY PI
  6. Contrôle de la température avec Raspberry Pi
  7. Projet IoT 101 :Diffuser la température de votre Raspberry Pi
  8. Laboratoire « Station météorologique »
  9. Capteur de température Raspberry Pi