Resposta de temperatura por SMS
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Sobre este projeto
Olá. Este projeto é parte de um projeto muito maior. Como tive muitos problemas com essa parte e acabei encontrando uma solução, decidi compartilhar com a comunidade e espero que possa ajudá-los em seus projetos.
Descrição do Projeto
Envie SMS para o Arduino e verifique a temperatura em casa.
Software
Para o módulo SIM800L, usei a biblioteca “Seeeduino_GPRS-master”. Tive que alterar as seguintes linhas na Biblioteca “sim800.h” para habilitá-lo a funcionar em um MEGA:
#define SIM800_TX_PIN 8 # define SIM800_RX_PIN 7
... para TX_PIN 10 e RX_PIN 11. Alterar a Biblioteca de “SoftwareSerial” para uma das portas Mega Serial, ou seja, Serial3, foi muito difícil, então escolhi o caminho mais fácil.
O problema
Basicamente, meu código é copiar e colar exemplos de duas bibliotecas:“DHT.h“ e “Seeeduino_GPRS-master”. O problema que tive foi que o exemplo “gprs.h” mostrava apenas como enviar uma mensagem predeterminada entre aspas. Eu não conseguia descobrir como enviar o valor flutuante variável do meu sensor de temperatura. Isso também aconteceu com outras bibliotecas que experimentei:“GPRS_SIM900-master” e “SIM800L-master”.
Passei semanas procurando na WEB exemplos para resolver meu problema e não encontrei nenhum. Eu tinha encontrado postagens de fórum sobre o mesmo assunto, e para aquelas pobres almas perdidas que não obtiveram respostas, espero que vocês encontrem esta postagem.
A resposta
Converta o valor flutuante em uma String e então a String em um Char Array - simples!
Snippet de código
MyString =String (temp, 0); // Converter float em StringMyString =(MyString + "Degrees C"); // converter string em char começa aqui // Comprimento (com um caractere extra para o terminador nulo) int str_len =MyString.length () + 1; // Prepare o array de caracteres (o buffer) char char_array [str_len]; // Copie-o sobre MyString.toCharArray (char_array, str_len); // converte string para char termina heregprs.sendSMS ("04 +++++++ + ", char_array); // define o número do telefone e texto.
Fiação
Usei uma bateria ULTRAFIRE 18650 para fornecer energia ao módulo sim. Posteriormente, adicionarei um regulador de tensão ao circuito. Veja este tutorial.
Material de referência
- http://www.ayomaonline.com/programming/quickstart-sim800-sim800l-with-arduino/
- https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf
Bibliotecas
- https://github.com/Seeed-Studio/Seeeduino_GPRS
- https://github.com/adafruit/DHT-sensor-library
Código
- DHT_SIMPosting.ino
DHT_SIMPosting.ino Arduino
Enviar SMS "InTemp" solicita a temperatura e a resposta do Arduino em graus C.// Exemplo de esboço de teste para vários sensores de umidade / temperatura DHT // Escrito por ladyada, domínio público # include "DHT.h" #define DHTPIN 2 // a qual pino digital estamos conectados # define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // # define DHTTYPE DHT21 // DHT 21 (AM2301) // Conecte o pino 1 (à esquerda) do sensor a + 5V // Conecte o pino 2 do sensor a qualquer que seja o seu DHTPIN // Conecte o pino 4 (à direita) do sensor ao TERRA // Conecte um resistor de 10K do pino 2 (dados) ao pino 1 (potência) do sensor // Inicializar o sensor DHT.DHT dht (DHTPIN, DHTTYPE); # include#include #define TIMEOUT 5000GPRS gprs; bool ITemp =false; float temp; String MyString; #define LED_PIN 13bool ledStatus; // Variável para manter a última linha de saída serial de SIM800char currentLine [500] =""; int currentLineIndex =0; // Booleano a ser definido como verdadeiro se a notificação de mensagem foi encontrada e a próxima // linha de saída serial é o conteúdo da mensagem SMS real nextLineIsMessage =false; void Reply () // A função começa aqui {Serial.println ("GPRS - Send SMS Test ..."); gprs.preInit (); atraso (1000); enquanto (0! =gprs.init ()) {atraso (1000); Serial.print ("erro de inicialização \ r \ n"); } Serial.println ("Inicialização bem-sucedida, comece a enviar mensagem SMS ..."); if (ITemp ==true) {float t =dht.readTemperature (); temp =t; ITemp =falso; } MyString =String (temp, 0); // Converte float para String MyString =(MyString + "Degrees C"); // converter string em char começa aqui // Comprimento (com um caractere extra para o terminador nulo) int str_len =MyString.length () + 1; // Prepare o array de caracteres (o buffer) char char_array [str_len]; // Copie sobre MyString.toCharArray (char_array, str_len); // converter string para char termina aqui gprs.sendSMS ("04 ++++++++", char_array); // define o número do telefone e o texto // A função termina aqui} void setup () {Serial.begin (9600); Serial.println ("Teste DHTxx!"); dht.begin (); gprs.preInit (); atraso (1000); enquanto (0! =gprs.init ()) {atraso (1000); Serial.print ("erro de inicialização \ r \ n"); // exibe mais tarde SIM ERROR na Nextion HMI Home Page} // Defina o modo SMS para ASCII if (0! =gprs.sendCmdAndWaitForResp ("AT + CMGF =1 \ r \ n", "OK", TIMEOUT)) {ERROR ( "ERROR:CNMI"); Retorna; } // Comece a ouvir novas indicações de mensagem SMS if (0! =Gprs.sendCmdAndWaitForResp ("AT + CNMI =1,2,0,0,0 \ r \ n", "OK", TIMEOUT)) {ERROR (" ERRO:CNMI "); Retorna; } Serial.println ("Init success");} void loop () {// Aguarde alguns segundos entre as medições. atraso (2000); // A leitura da temperatura ou umidade leva cerca de 250 milissegundos! // As leituras do sensor também podem ser até 2 segundos 'antigas' (é um sensor muito lento) float h =dht.readHumidity (); // Lê a temperatura como Celsius (o padrão) float t =dht.readTemperature (); Serial.print ("Umidade:"); Serial.print (h); Serial.println ("% \ t"); Serial.print ("Temperatura:"); Serial.print (t); Serial.println ("* C"); SIM ();} void SIM () {// Grava o status atual no pino do LED digitalWrite (LED_PIN, ledStatus); Serial.println ("Procurando SMS"); // Se houver saída serial do SIM800 if (gprs.serialSIM800.available ()) {char lastCharRead =gprs.serialSIM800.read (); // Lê cada caractere da saída serial até que \ r ou \ n seja alcançado (o que denota o fim da linha) if (lastCharRead =='\ r' || lastCharRead =='\ n') {String lastLine =String (currentLine); // Se a última linha for + CMT, novas indicações de mensagem SMS foram recebidas. // Portanto, a próxima linha é o conteúdo da mensagem. if (lastLine.startsWith ("+ CMT:")) {Serial.println (lastLine); nextLineIsMessage =true; } else if (lastLine.length ()> 0) {if (nextLineIsMessage) {Serial.println (lastLine); // Lê o conteúdo da mensagem e define o status de acordo com o conteúdo do SMS if (lastLine.indexOf ("InTemp")> =0) {Serial.println ("InTemp"); ITemp =verdadeiro; Responder (); // ledStatus =1; // Serial.println ("Ligue a luz"); //} else if (lastLine.indexOf ("LED OFF")> =0) {// ledStatus =0; // Serial.println ("Desligue a luz"); } nextLineIsMessage =false; }} // Limpa a matriz de caracteres para a próxima linha de leitura para (int i =0; i
Esquemas

Processo de manufatura
- Ventilador com temperatura controlada
- Registrador de temperatura Raspberry Pi
- Ler a temperatura com DS18B20 | Raspberry Pi 2
- Monitoramento de temperatura no Raspberry Pi
- Medindo a temperatura com RASPBERRY PI
- Monitorando a temperatura com Raspberry Pi
- Projeto IoT 101:Temperatura do Fluxo do Raspberry Pi
- Laboratório ‘Estação meteorológica’
- Sensor de temperatura Raspberry Pi
- Rover