با سلام.
مدار را به صورت زیر ببندید:
تغذیه DHT11 از روی 5 ولت آردوینو و تغذیه SIM800 از روی باتری لیتیومی 4.2 ولت تامین شد. البته GND این دو به هم وصل هستند.
پایه TX و RX ماژول SIM800 به ترتیب به پایه های 10 و 11 برد آردوینو وصل هستند.
پایه data سنسور DHT11 نیز به پایه 8 آردوینو وصل است.
سپس کد زیر را در آردوینو آپلود کردیم.
#include "DHT.h"
#include <SoftwareSerial.h>
#define RX 10
#define TX 11
SoftwareSerial MySerial(RX, TX);
#define DHTPIN 8 // Digital pin connected to DHT11
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
char* text;
char* number;
bool error; //to catch the response of sendSms
float h = 0;
float t = 0;
float f = 0;
void setup() {
Serial.begin(9600);
MySerial.begin(9600);
pinMode(8, INPUT);
dht.begin();
Serial.println("Initializing... Please wait.");
delay(2000);
MySerial.println("AT+CMGF=1");
delay(1500);
while (MySerial.available())
Serial.write(MySerial.read());
}
String value;
void loop() {
h = dht.readHumidity();
// Read temperature as Celsius (the default)
t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.println(f);
if (digitalRead(2) == HIGH)
{
delay(1000);
MySerial.println("AT+CMGS=\"+98 YOUR NUMBER WITHOUT FIRST 0\"");//MySerial.println(number);
while (true) {
value = MySerial.readStringUntil('\n');
value.trim();
if (value.startsWith(">")) {
break;
}
}
MySerial.print("Humidity:");
MySerial.print(h);
MySerial.print("% Temperature: ");
MySerial.print(t);
MySerial.print("°C ");
delay(100);
MySerial.write(26);
MySerial.println("");
// debug();
}
delay(2000);
}
void debug() {
while (true) {
if (Serial.available()) { // If anything comes in Serial (USB),
MySerial.write(Serial.read()); // read it and send it out Serial1 (pins 0 & 1)
}
if (MySerial.available()) { // If anything comes in Serial1 (pins 0 & 1)
Serial.write(MySerial.read()); // read it and send it out Serial (USB)
}
if (digitalRead(2) == HIGH)
{ Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.println(f);
}
}
}
فقط قسمت Enter your number without 0 را با شماره تلفن خود جایگزین کنید. فرمت شماره در نهایت باید به صورت 989121234567+ باشد.
در صورتی که پایه 2 آردوینو به GND وصل باشد، داده های دما و رطوبت سنسور در سریال مانیتور چاپ می شوند. اگر همین پایه را به 5 ولت وصل کنید، پیامک حاوی اطلاعات رطوبت و دما به شماره وارد شده ارسال می شود.
اگر این کد کار نکرد، احتمالا ایراد در اتصال سیم ها دارید یا قطعه ای از مدار شما معیوب است.