Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

SMS-temperatuur beantwoorden

Componenten en benodigdheden

Arduino Mega 2560
× 1
DHT22-temperatuursensor
× 1
SIM800L
× 1
Weerstand 10k ohm
× 1
Broodplank (algemeen)
× 1
Jumperdraden (algemeen)
× 1

Over dit project

Hallo. Dit project maakt deel uit van een veel groter project. Omdat ik veel problemen had met dit onderdeel en uiteindelijk een oplossing vond, besloot ik het met de gemeenschap te delen en te hopen dat het hen zou kunnen helpen bij hun projecten.

Projectbeschrijving

Stuur een sms naar Arduino en ontvang de temperatuur thuis.

Software

Voor de SIM800L-module heb ik de bibliotheek "Seeeduino_GPRS-master" gebruikt. Ik moest de volgende regels in de "sim800.h"-bibliotheek wijzigen om het op een MEGA te laten werken:

#define SIM800_TX_PIN 8#define SIM800_RX_PIN 7 

...naar TX_PIN 10 en RX_PIN 11. De bibliotheek wijzigen van "SoftwareSerial" naar een van de Mega Serial-poorten, d.w.z. Serial3, was te moeilijk, dus koos ik de gemakkelijke weg.

Het probleem

Kortom, mijn code is knip- en plakvoorbeelden uit twee bibliotheken:"DHT.h" en "Seeeduino_GPRS-master". Het probleem dat ik had was dat het voorbeeld "gprs.h" alleen liet zien hoe een vooraf bepaald bericht tussen aanhalingstekens moet worden verzonden. Ik kon er niet achter komen hoe ik de variabele float-waarde van mijn temperatuursensor moest verzenden. Dit gold ook voor andere bibliotheken die ik probeerde:"GPRS_SIM900-master" en "SIM800L-master".

Ik had wekenlang op het WEB gezocht naar voorbeelden om mijn probleem op te lossen en vond er geen. Ik had forumberichten over hetzelfde onderwerp gevonden, en voor die arme verloren zielen die geen antwoorden kregen, hoop ik dat u dit bericht vindt.

Het antwoord

Converteer de float-waarde naar een String en vervolgens de String naar een Char Array - eenvoudig!

Codefragment

 MijnString =String(temp,0); //Converteer float naar StringMyString =(MyString + "Graden C");// convert string naar char begint hier// Lengte (met één extra teken voor de null-terminator)int str_len =MyString.length() + 1; // Bereid de tekenreeks (de buffer) voor char char_array[str_len];// Kopieer het over MyString.toCharArray(char_array, str_len);// convert string naar char ends heregprs.sendSMS("04++++++++ +",char_array); //definieer telefoonnummer en tekst. 

Bedrading

Ik heb een ULTRAFIRE 18650-batterij gebruikt om de simmodule van stroom te voorzien. Later zal ik een spanningsregelaar aan het circuit toevoegen. Bekijk deze tutorial.

Referentiemateriaal

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

Bibliotheken

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

Code

  • DHT_SIMPosting.ino
DHT_SIMPosting.inoArduino
Stuur sms "InTemp" vraagt ​​om de temperatuur en de Arduino-antwoorden in graden C.
// Voorbeeldtestschets voor verschillende DHT-vochtigheids-/temperatuursensoren// Geschreven door ladyada, publiek domein#include "DHT.h"#define DHTPIN 2 // met welke digitale pin we zijn verbonden #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321//#define DHTTYPE DHT21 // DHT 21 (AM2301)// Sluit pin 1 (aan de linkerkant) van de sensor aan +5V// Sluit pin 2 van de sensor aan op wat je DHTPIN ook is// Sluit pin 4 (aan de rechterkant) van de sensor aan op GROUND// Sluit een 10K weerstand aan van pin 2 (data) naar pin 1 (voeding) van de sensor// Initialiseer DHT-sensor.DHT dht(DHTPIN, DHTTYPE);#include #include #define TIMEOUT 5000GPRS gprs;bool ITemp =false;float temp;String MyString;#define LED_PIN 13bool ledStatus;//Variabele om de laatste regel van seriële uitvoer van SIM800char currentLine[500] ="";int currentLineIndex =0;//Boolean in te stellen op waar als berichtmelding is gevonden en volgende//regel van seriële uitvoer is de daadwerkelijke SMS-bericht contentbool nextLineIsMessage =false;void Reply ()// Functie begint hier{ Serial.println("GPRS - Send SMS Test ..."); gprs.preInit(); vertraging (1000); while(0!=gprs.init()) {vertraging(1000); Serial.print("beginfout\r\n"); } Serial.println("Init succesvol, begin met het verzenden van SMS-bericht..."); if (ITemp ==true){ float t =dht.readTemperature(); temp=t; ITem =onwaar; } MijnString =String(temp,0); // Converteer float naar String MyString =(MyString + "Graden C"); // convert string naar char begint hier // Length (met één extra teken voor de null-terminator) int str_len =MyString.length() + 1; // Bereid de tekenreeks (de buffer) voor char char_array [str_len]; // Kopieer het over MyString.toCharArray (char_array, str_len); // convert string naar char eindigt hier gprs.sendSMS("04++++++++",char_array); // definieer telefoonnummer en tekst // Functie eindigt hier} void setup () { Serial.begin (9600); Serial.println ("DHTxx-test!"); dht.begin(); gprs.preInit(); vertraging (1000); while(0!=gprs.init()) {vertraging(1000); Serial.print("beginfout\r\n"); //later SIM-ERROR weergeven op Nextion HMI-startpagina } //Sms-modus instellen op ASCII if(0!=gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) { ERROR( "FOUT:CNMI"); opbrengst; } //Begin met het beluisteren van nieuwe SMS-berichtindicaties if(0 !=gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) { ERROR(" FOUT:CNMI"); opbrengst; } Serial.println("Init success");}void loop() { // Wacht een paar seconden tussen metingen. vertraging (2000); // Het lezen van temperatuur of vochtigheid duurt ongeveer 250 milliseconden! // Sensormetingen kunnen ook tot 2 seconden 'oud' zijn (het is een zeer trage sensor) float h =dht.readHumidity(); // Lees temperatuur als Celsius (de standaard) float t =dht.readTemperature (); Serial.print("Vochtigheid:"); Seriële.print(h); Serial.println(" %\t"); Serial.print("Temperatuur:"); Serial.print(t); Serieel.println(" *C "); SIM();}void SIM(){ //Schrijf huidige status naar LED-pin digitalWrite (LED_PIN, ledStatus); Serial.println("Op zoek naar SMS"); //Als er seriële uitvoer is van SIM800 if(gprs.serialSIM800.available()){ char lastCharRead =gprs.serialSIM800.read(); //Lees elk teken van seriële uitvoer totdat \r of \n is bereikt (wat het einde van de regel aangeeft) if(lastCharRead =='\r' || lastCharRead =='\n'){ String lastLine =String (currentLine); // Als de laatste regel +CMT leest, zijn er nieuwe sms-berichtindicaties ontvangen. //Daarom is de volgende regel de inhoud van het bericht. if(lastLine.startsWith("+CMT:")){ Serial.println(lastLine); nextLineIsMessage =waar; } else if (lastLine.length()> 0) { if(nextLineIsMessage) { Serial.println(lastLine); // Lees de inhoud van het bericht en stel de status in op basis van sms-inhoud if(lastLine.indexOf("InTemp")>=0){ Serial.println("InTemp"); ITem =waar; Antwoord (); // ledStatus =1; // Serial.println ("Schakel het licht in"); // } else if (lastLine.indexOf ("LED UIT")>=0) {// ledStatus =0; // Serial.println ("Zet het licht UIT"); } nextLineIsMessage =false; } } //Clear char array voor volgende regel gelezen voor (int i =0; i   

Schema's


Productieproces

  1. Temperatuurgestuurde ventilator
  2. Raspberry Pi Temperature Logger
  3. Temperatuur aflezen met DS18B20 | Raspberry Pi 2
  4. Temperatuurbewaking op de Raspberry Pi
  5. Temperatuur meten met RASPBERRY PI
  6. Temperatuur bewaken met Raspberry Pi
  7. IoT 101-project:stream de temperatuur van je Raspberry Pi
  8. Laboratorium 'Weerstation'
  9. Raspberry Pi-temperatuursensor
  10. Rover
  11. AugGe12