Запрос показаний датчика по SMS с использованием Arduino и SIM800L
Запрос показаний датчика по SMS с использованием Arduino и SIM800L

В этом проекте рассмотрим как запрашивать данные датчика через SMS с использованием Arduino. В качестве примера запросим температуру, влажность и атмосферное давление с датчика BME280. Для отправки и получения SMS будем использовать модуль SIM800L и плату Arduino.

Запрос показаний датчика по SMS с использованием Arduino и SIM800L

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Модуль GSM, GPRS на чипе SIM800L x 1 шт.
► Датчик атмосферного давления, влажности и температуры BME280 x 1 шт. 
► Преобразователь напряжения LM2596, DC 3.2-40B на DC 1.38-35B, 3А, Step-Down x 1 шт. 
► Провод DuPont 10x, 2.54 мм, 20 см, F-M, Female — Male x 1 шт.

Алгоритм программы прост, при отправки SMS-сообщение «DATA» плата Arduino отвечает последними показаниями температуры, влажности и атмосферного давления, при необходимости код можно изменить, для отправки показаний в заданном интервале.

Подключение:
Для стабильно работы модуля SIM800L необходим источник питания с рабочим током 2А, подойдет преобразователь напряжения LM2596 с настроенным выходным напряжением 4.3 В (можно воспользоваться модулем MINI360). 

Запрос показаний датчика по SMS с использованием Arduino и SIM800L

Первым делом подготавливаем модуль SIM800L, припаиваем контакты и антенну, затем устанавливаем SIM карту любого оператора. Теперь подключаем вывод Tx на модуле к выводу 3 на Arduino. Вывод Rx нельзя подключать напрямую, так как цифровой вывод Arduino UNO использует 5В, а модуль SIM800L использует 3,3В. Необходимо сигнал Tx, поступающий от Arduino UNO, понизить до 3,3В, чтобы не спалить модуль SIM800L. Самый простой способ, это воспользоватся делителем напряжения на резисторах. Подключаем резистор на 10 кОм между выводом Rx (SIM800L) и выводом 2 (Arduino) и второй резистор на 10 кОм между выводом Rx (SIM800L) и GND. Теперь осталось подключить питание модуля, в примере используется стабилизатор напряжения на LM2596. 
Осталось подключить датчик BME280, SCL и SDA подключаем к выводам A5 и A4, затем необходимо подключить питание VCC и GND к плате ARDUINO.

Скачать скетч

Открываем окно «Мониторинг порта», устанавливаем скорость «9600 и «NL»(Новая строка)». При отправки SMS с любого телефона DATA в ответ приходит SMS с температурой, влажностью и атмосферном давлением. состоянии.

Запрос показаний датчика по SMS с использованием Arduino и SIM800L

Описание скетча:
Скетч начинается с включения библиотеки «SoftwareSerial.h», «Wire.h», «Adafruit_Sensor.h», «Adafruit_BME280.h» последние две библиотеки не входят в среду разработки Arduino IDE, необходимо скачать их и установить.

Далее, указываем вывода к которым подключены Tx и Rx модуля SIM800L, указываем что BME280 работает по шине I2C и создаем переменные для хранения данных incomingByte, inputString, t, p, h

В функции void setup(), инициализируем последовательный связь между Arduino и модулем SIM800L на скорости 9600 бод и указываем адрес модуля BME280

Командой while зацикливаем программу до связи с SIM800L. Если модуль обнаружен, отправляем команду «AT+CMGF=1» для установки текстового режим и отправляем команду «AT+CMGL=\»REC UNREAD\».

В основной части программы, проверяем нет ли сообщений « if(mySerial.available())», если сообщение есть, считываем данные пока полностью не закончиться сообщение.

Меняем все буквы на заглавные

Сравниваем получено сообщение и если оно совпадает отправляем показания.

Последняя функция просто отправляем сообщение об состоянии.

Ссылки
 Библиотека Adafruit BME280 Library
 Библиотека Adafruit Unified Sensor

Купить на Aliexpress
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Провода DuPont, 2,54 мм, 20 см
  Модуль GSM, GPRS на чипе SIM800L
  Преобразователь напряжения LM2596, DC 3.2-40B на DC 1.38-35B, 3А, Step-Down
  Преобразователь напряжения LM2596 с вольтметром, DC 4-40B на DC 1.38-35B, 3А, Step-Down
 BME280 — датчик атмосферного давления, влажности и температуры

Купить в Самаре и области
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Провода DuPont, 2,54 мм, 20 см
  Модуль GSM, GPRS на чипе SIM800L
  Понижающий преобразователь напряжения LM2596, DC 3.2-40B на DC 1.38-35B, 3А
  Понижающий преобразователь напряжения LM2596 с вольтметром, DC 4-40B на DC 1.25-37B, 3А
 BME280 — датчик атмосферного давления, влажности и температуры

10 комментариев для “Запрос показаний датчика по SMS с использованием Arduino и SIM800L”
  1. После перезагрузки питания не отправляет смс с температурой, как только подключишь в компу откроешь монитор порта, все начинает работать, что может быть?

  2. mySerial.println(«AT+CNMI=1,2,0,0,0»); // Отправка команды AT+CNMI=1,2,0,0,0

    Пожалуйста напишите более информативные комментарии к коду

  3. После включения метеостанции (arduino nano+sim800l+bme280+oled0.96+lm2596) дисплей на ней работает нормально, но сама на смс-запрос не отвечает. Начинает отвечать только после перезагрузки ардуино без отключения питания. В чем может быть проблема? Ардуино и lm2596 питаются от блока питания 9В, 1А, на sim800l подается 4В.

    1. Решил эту проблему. Оказалось, что при подаче питания на метеостанцию, модуль sim800l начинает работать с некоторой задержкой. Поэтому после инициализации дисплея и датчика нужна пауза. Перед отправкой команды АТ (перед строкой 30) на sim800l добавил команду delay(5000); и метеостанция заработала как нужно.

  4. Как можно усовершенствовать программу так, чтобы модуль sim800l отправляла смс-ку не только на указанный в программе телефонный номер, но и на любой номер, с которого получил запрос?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *