Отправка по смс температуры и влажности SIM800L + DHT11

Отправляете SMS с кодовым словом → получаете ответ с текущими показаниями DHT11. Проверка по номеру телефона и кодовому слову.

SIM800L + DHT11 SMS

Что понадобится

  • 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
}
Настраивает SIM800 на текстовый режим SMS;
Читает 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) { ... }
Определяет массив разрешённых номеров allowed[];
Проверяет, совпадает ли 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.

📁 Скачать примеры