با سلام.
مدار را به صورت زیر ببندید:
تغذیه 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
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
char* text;
char* number;
bool error;
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();
t = dht.readTemperature();
f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
float hif = dht.computeHeatIndex(f, h);
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\"");
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("");
}
delay(2000);
}
void debug() {
while (true) {
if (Serial.available()) {
MySerial.write(Serial.read());
}
if (MySerial.available()) {
Serial.write(MySerial.read());
}
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 ولت وصل کنید، پیامک حاوی اطلاعات رطوبت و دما به شماره وارد شده ارسال می شود.
اگر این کد کار نکرد، احتمالا ایراد در اتصال سیم ها دارید یا قطعه ای از مدار شما معیوب است.