Begär sensordata via SMS med Arduino och SIM900 GSM

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
NisseL66
Inlägg: 4
Blev medlem: 5 januari 2022, 20:30:30

Begär sensordata via SMS med Arduino och SIM900 GSM

Inlägg av NisseL66 »

Hej!
Jag håller på ett projekt som ska visa sensordata via SMS som ska användas till att hålla koll på temperaturen i mina fiskevatten
Dessa komponenter ska jag använda i projektet Arduino UNO - SIM900 GSM Modul - Vattentät tempgivare DS18B20

Problemet är att jag har en sketch men den fungerar bara med DHT sensor som inte är vattentät.
Har även sketch till sensor DS18B20 men i den ingår inte SIM900 GSM Modul.
Så nu håller jag på att försöka kombinera dessa 2 sketcher men får det inte att fungera, så min undrar är om det finns någon i detta forumet som kan hjälpa mig?
Janson1
Inlägg: 1351
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Begär sensordata via SMS med Arduino och SIM900 GSM

Inlägg av Janson1 »

Hej och välkommen! Tja, börja med att lägga ut din sketch eller bägge två så får du säkert många svar och lösningar...
NisseL66
Inlägg: 4
Blev medlem: 5 januari 2022, 20:30:30

Re: Begär sensordata via SMS med Arduino och SIM900 GSM

Inlägg av NisseL66 »

Här är sketchen som jag vill använda men med Sensor DS18b20

// Include DHT library and Adafruit Sensor Library
#include "DHT.h"
#include <Adafruit_Sensor.h>
//Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

// Pin DHT is connected to
#define DHTPIN 2

// Uncomment whatever type of sensor you're using
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);

// Create global varibales to store temperature and humidity
float t; // temperature in celcius
float f; // temperature in fahrenheit
float h; // humidity

// Configure software serial port
SoftwareSerial SIM900(7, 8);

// Create variable to store incoming SMS characters
char incomingChar;

void setup() {
dht.begin();

Serial.begin(19200);
SIM900.begin(19200);

// Give time to your GSM shield log on to network
delay(20000);
Serial.print("SIM900 ready...");

// AT command to set SIM900 to SMS mode
SIM900.print("AT+CMGF=1\r");
delay(100);
// Set module to send SMS data to serial out upon receipt
SIM900.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
}

void loop(){
if (SMSRequest()){
if(readData()){
delay(10);
// REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
// USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
SIM900.println("AT + CMGS = \"+XXXXXXXXXX\"");
delay(100);
// REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
String dataMessage = ("Temperature: " + String(t) + "*C " + " Humidity: " + String(h) + "%");
// Uncomment to change message with farenheit temperature
// String dataMessage = ("Temperature: " + String(f) + "*F " + " Humidity: " + String(h) + "%");

// Send the SMS text message
SIM900.print(dataMessage);
delay(100);
// End AT command with a ^Z, ASCII code 26
SIM900.println((char)26);
delay(100);
SIM900.println();
// Give module time to send SMS
delay(5000);
}
}
delay(10);
}

boolean readData() {
//Read humidity
h = dht.readHumidity();
// Read temperature as Celsius
t = dht.readTemperature();
// Read temperature as Fahrenheit
f = dht.readTemperature(true);

// Compute temperature values in Celcius
t = dht.computeHeatIndex(t,h,false);

// Uncomment to compute temperature values in Fahrenheit
//f = dht.computeHeatIndex(f,h,false);

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return false;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
//Uncomment to print temperature in Farenheit
//Serial.print(f);
//Serial.print(" *F\t");
return true;
}

boolean SMSRequest() {
if(SIM900.available() >0) {
incomingChar=SIM900.read();
if(incomingChar=='S') {
delay(10);
Serial.print(incomingChar);
incomingChar=SIM900.read();
if(incomingChar =='T') {
delay(10);
Serial.print(incomingChar);
incomingChar=SIM900.read();
if(incomingChar=='A') {
delay(10);
Serial.print(incomingChar);
incomingChar=SIM900.read();
if(incomingChar=='T') {
delay(10);
Serial.print(incomingChar);
incomingChar=SIM900.read();
if(incomingChar=='E') {
delay(10);
Serial.print(incomingChar);
Serial.print("...Request Received \n");
return true;
}
}
}
}
}
}
return false;
}

Och här är sketchen med sensor DS18b20

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is conntec to the Arduino digital pin 4
#define ONE_WIRE_BUS 4

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);

void setup(void)
{
// Start serial communication for debugging purposes
Serial.begin(9600);
// Start up the library
sensors.begin();
}

void loop(void){
// Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
sensors.requestTemperatures();

Serial.print("Celsius temperature: ");
// Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
Serial.print(sensors.getTempCByIndex(0));
Serial.print(" - Fahrenheit temperature: ");
Serial.println(sensors.getTempFByIndex(0));
delay(1000);
}
Användarvisningsbild
Melkutt
Inlägg: 1151
Blev medlem: 3 september 2007, 02:02:39
Ort: Gotland/Stånga
Kontakt:

Re: Begär sensordata via SMS med Arduino och SIM900 GSM

Inlägg av Melkutt »

Hejsan

Skulle rekommendera att lägga in kod med kodtaggar, ringade in knappen du behöver trycka på för att få fram ”taggarna”
AA057753-CA79-4A6A-8534-E8CA38444E39.jpeg
Gjorde jobbet åt dig nu :)


————

NisseL66
Här är sketchen som jag vill använda men med Sensor DS18b20

Kod: Markera allt

// Include DHT library and Adafruit Sensor Library
#include "DHT.h"
#include <Adafruit_Sensor.h>
//Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

// Pin DHT is connected to
#define DHTPIN 2

// Uncomment whatever type of sensor you're using
#define DHTTYPE DHT11 // DHT 11 
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);

// Create global varibales to store temperature and humidity
float t; // temperature in celcius
float f; // temperature in fahrenheit
float h; // humidity

// Configure software serial port
SoftwareSerial SIM900(7, 8);

// Create variable to store incoming SMS characters
char incomingChar;

void setup() {
dht.begin();

Serial.begin(19200); 
SIM900.begin(19200);

// Give time to your GSM shield log on to network
delay(20000);
Serial.print("SIM900 ready...");

// AT command to set SIM900 to SMS mode
SIM900.print("AT+CMGF=1\r"); 
delay(100);
// Set module to send SMS data to serial out upon receipt 
SIM900.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
}

void loop(){
if (SMSRequest()){
if(readData()){
delay(10);
// REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
// USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
SIM900.println("AT + CMGS = \"+XXXXXXXXXX\"");
delay(100);
// REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
String dataMessage = ("Temperature: " + String(t) + "*C " + " Humidity: " + String(h) + "%");
// Uncomment to change message with farenheit temperature
// String dataMessage = ("Temperature: " + String(f) + "*F " + " Humidity: " + String(h) + "%"); 

// Send the SMS text message
SIM900.print(dataMessage);
delay(100);
// End AT command with a ^Z, ASCII code 26
SIM900.println((char)26); 
delay(100);
SIM900.println();
// Give module time to send SMS
delay(5000); 
}
}
delay(10); 
}

boolean readData() {
//Read humidity
h = dht.readHumidity();
// Read temperature as Celsius
t = dht.readTemperature();
// Read temperature as Fahrenheit
f = dht.readTemperature(true);

// Compute temperature values in Celcius
t = dht.computeHeatIndex(t,h,false);

// Uncomment to compute temperature values in Fahrenheit
//f = dht.computeHeatIndex(f,h,false);

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return false;
}
Serial.print("Humidity: "); 
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: "); 
Serial.print(t);
Serial.print(" *C ");
//Uncomment to print temperature in Farenheit
//Serial.print(f);
//Serial.print(" *F\t");
return true;
}

boolean SMSRequest() {
if(SIM900.available() >0) {
incomingChar=SIM900.read();
if(incomingChar=='S') {
delay(10);
Serial.print(incomingChar);
incomingChar=SIM900.read();
if(incomingChar =='T') {
delay(10);
Serial.print(incomingChar);
incomingChar=SIM900.read();
if(incomingChar=='A') {
delay(10);
Serial.print(incomingChar);
incomingChar=SIM900.read();
if(incomingChar=='T') {
delay(10);
Serial.print(incomingChar);
incomingChar=SIM900.read();
if(incomingChar=='E') {
delay(10);
Serial.print(incomingChar);
Serial.print("...Request Received \n");
return true;
}
}
}
}
}
}
return false;
}
Och här är sketchen med sensor DS18b20

Kod: Markera allt


#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is conntec to the Arduino digital pin 4
#define ONE_WIRE_BUS 4

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

void setup(void)
{
// Start serial communication for debugging purposes
Serial.begin(9600);
// Start up the library
sensors.begin();
}

void loop(void){ 
// Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
sensors.requestTemperatures(); 

Serial.print("Celsius temperature: ");
// Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
Serial.print(sensors.getTempCByIndex(0)); 
Serial.print(" - Fahrenheit temperature: ");
Serial.println(sensors.getTempFByIndex(0));
delay(1000);
}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
rvl
Inlägg: 5780
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Begär sensordata via SMS med Arduino och SIM900 GSM

Inlägg av rvl »

> "Gjorde jobbet åt dig nu :)"

Men tappade indententeringen, så det är bättre att göra jobbet själv.
Janson1
Inlägg: 1351
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Begär sensordata via SMS med Arduino och SIM900 GSM

Inlägg av Janson1 »

Ja det är nog en del pilla... Men gör en tredje sketch där man tex utgår från den som har GSM-modulen och ta bort allt som har med den sensorn att göra som du inte vill ha. Sedan ange dom #include, #define och variabler som du behöver istället.
NisseL66
Inlägg: 4
Blev medlem: 5 januari 2022, 20:30:30

Re: Begär sensordata via SMS med Arduino och SIM900 GSM

Inlägg av NisseL66 »

Har börjat med en 3:e sketch som borde se ut något i den här stilen en del jobb kvar.

Kod: Markera allt

#include <OneWire.h>
#include <SoftwareSerial.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
SoftwareSerial SIM900(7, 8);
char incomingChar;

void setup(){
  
  Serial.begin(9600);
  sensors.begin();
  Serial.begin(19200); 
  SIM900.begin(19200);
  delay(20000);
  Serial.print("SIM900 ready...");
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop(){

  sensors.requestTemperatures();
  Serial.print("Celsius temperature: ");
  Serial.print(sensors.getTempCByIndex(0));
    Serial.print(" - Fahrenheit temperature: ");
  Serial.println(sensors.getTempFByIndex(0));
  delay(10000);
   if (SMSRequest()){
    if(readData()){
      delay(10);
      SIM900.println("AT + CMGS = \"+XXXXXXXXXX\"");
      delay(100);
       SIM900.print(dataMessage);
      delay(100);
       SIM900.println((char)26); 
      delay(100);
      SIM900.println();
            delay(5000);  
    }
  }
  delay(10); 

  
}

boolean readData() {
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Begär sensordata via SMS med Arduino och SIM900 GSM

Inlägg av Lennart Aspenryd »

Varför växlar du baudrate?
NisseL66
Inlägg: 4
Blev medlem: 5 januari 2022, 20:30:30

Re: Begär sensordata via SMS med Arduino och SIM900 GSM

Inlägg av NisseL66 »

Blev ett misstag :? som nu är ändrat till 19200 :D
Skriv svar