Отправка по смс температуры и влажности SIM800L + DHT11
Отправляете SMS с кодовым словом → получаете ответ с текущими показаниями DHT11. Проверка по номеру телефона и кодовому слову.
Что понадобится
- Arduino (Uno/Nano)
- SIM800L (или SIM800C)
- DHT11 или DHT22
- Источник питания 4 В / ≥2 А + конденсатор 1000 мкФ
Подключение
- DHT11 → пин 4
- SIM800L TX → пин 10 (SoftwareSerial)
- SIM800L RX → пин 11 (через делитель 5 В → 2.5 В)
Готовый скетч (полностью рабочий)
#include <SoftwareSerial.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial sim800(10, 11); // RX, TX
String allowedNumber = "+79123456789"; // ← ваш номер
String codeWord = "temp"; // ← кодовое слово (можно любое)
void setup() {
Serial.begin(9600);
sim800.begin(9600);
dht.begin();
delay(1000);
sim800.println("AT");
delay(1000);
sim800.println("AT+CMGF=1"); // текстовый режим SMS
delay(1000);
}
void loop() {
if (sim800.available()) {
String incoming = sim800.readString();
Serial.println(incoming);
if (incoming.indexOf("+CMT:") != -1) {
parseSMS(incoming);
}
}
}
void parseSMS(String msg) {
int quote1 = msg.indexOf('"') + 1;
int quote2 = msg.indexOf('"', quote1);
String sender = msg.substring(quote1, quote2);
int textStart = msg.indexOf("\n", quote2) + 1;
String text = msg.substring(textStart);
text.trim();
text.toLowerCase();
if (sender == allowedNumber && text == codeWord) {
float h = dht.readHumidity();
float t = dht.readTemperature();
String reply = "Температура: " + String(t) + " C\n";
reply += "Влажность: " + String(h) + " %";
sendSMS(sender, reply);
}
}
void sendSMS(String number, String message) {
sim800.println("AT+CMGF=1");
delay(100);
sim800.println("AT+CMGS=\"" + number + "\"");
delay(100);
sim800.print(message);
delay(100);
sim800.write(26); // Ctrl+Z
}
Читает DHT11 с пина 4;
Постоянно проверяет входящие SMS;
Если приходит SMS с кодовым словом temp от разрешённого номера:
Считывает температуру и влажность с DHT11;
Отправляет обратно SMS с показаниями.
Важно:
SIM800 должен быть корректно подключён к питанию и UART (пины 10/11).
Возможны задержки при отправке и приёме SMS (нужен небольшой запас времени).
Код чувствителен к формату входящей строки, на некоторых SIM800 может потребоваться подстройка parseSMS().
Как добавить несколько номеров
Замените проверку на:
String allowed[] = {"+7912...", "+7923..."};
bool ok = false;
for (int i = 0; i < 2; i++) if (sender == allowed[i]) ok = true;
if (ok && text == codeWord) { ... }
Проверяет, совпадает ли sender с одним из разрешённых номеров;
Если номер разрешён и текст SMS совпадает с codeWord, выполняется нужное действие (например, отправка температуры и влажности).
Это позволяет принимать команды от нескольких номеров, вместо одного.
Что легко добавить
- Кириллица в SMS (кодировка UCS2)
- Запрос статуса дверей, освещения и т.д.
- Отправка данных по расписанию
- Переход на бесплатные Telegram-уведомления (следующее видео)
Итог
Надёжный и полностью рабочий SMS-термометр с авторизацией по номеру и кодовому слову. Минимум деталей, ноль платных сервисов.
FAQ — SMS-запрос температуры и влажности через SIM800L + DHT11
Как работает система SMS-запроса температуры и влажности?
Пользователь отправляет SMS с кодовым словом. Модуль SIM800L принимает сообщение, проверяет номер отправителя и при соответствии отправляет ответ с текущими показаниями датчика DHT11 или DHT22. Все проверки выполняются на стороне Arduino.
Какое оборудование используется в проекте?
Для реализации проекта нужны Arduino Uno или Nano, модуль SIM800L (или SIM800C), датчик DHT11 или DHT22 и стабильный источник питания на 4 В с током не менее 2 А, дополненный конденсатором на 1000 мкФ.
Как подключены SIM800L и DHT11 к Arduino?
Датчик DHT11 подключается к пину 4. Пин TX модуля SIM800L подключается к пину 10 Arduino, а RX — к пину 11 через делитель напряжения 5 В → 2.5 В. Работа с SIM800 осуществляется через SoftwareSerial.
Как выполняется проверка номера отправителя и кодового слова?
В скетче задаётся разрешённый номер телефона и кодовое слово. При получении SMS Arduino извлекает номер отправителя и текст сообщения. Ответ отправляется только в том случае, если они полностью совпадают с указанными значениями.
Можно ли добавить несколько разрешённых номеров?
Да. В статье представлен пример расширения через массив строк и проверку в цикле. Такой подход позволяет легко добавить любое количество разрешённых номеров, сохранив защиту от неизвестных отправителей.
Какие дополнительные функции можно реализовать в проекте?
Проект можно расширить поддержкой кириллицы (режим UCS2), запросами состояния различных датчиков, отправкой данных по расписанию или переходом на бесплатные уведомления через Telegram.