Gsm и gprs модули для arduino

Функции, реализованные в проекте

  • Комплексное управление городской квартирой
  • Управление системой из веб-интерфейса
  • Адаптивный дизайн для использования на планшетах и смартфонах
  • Отсылка тревожных и информационных SMS сообщений
  • Сохранение настроек в энергонезависимой памяти системы

Режимы присутствия людей в доме

  • Режимы «присутствие» и «отсутствие» людей в доме
  • Смена режима в веб-интерфейсе
  • Возможность отложенной смены режима с регулируемой задержкой срабатывания

Отопление

  • Управление отоплением 5-и помещений и зон в квартире
  • Управление работой тёплых полов в 5-и помещениях
  • Автоматическое поддержание заданной температуры
  • Установка параметров отопления в веб-интерфейсе
  • Регулировка температуры в зависимости от режима присутствия людей
  • Дополнительное разбиение режимов на 2 поддиапазона «высокий» и «низкий»
  • Задание матрицы целевых температур в веб-интерфейсе
  • Задание матрицы «высоких» и «низких» режимов для каждого времени суток
  • Регулировка температуры с учётом матрицы высоких и низких подрежимов
  • Контроль текущей и целевой температуры в реальном времени на веб-странице
  • Задание допустимых лимитов отклонения температуры в веб-интерфейсе
  • Индикация текущих нарушений температурных лимитов на веб-странице
  • Отсылка тревожных SMS при нарушении лимитов отклонения температур

nRF24 сеть

  • Поддержка работы nRF24 сети
  • Использование нативного AMS nRF24 беспроводного стека и протокола
  • Использование беспроводных батарейных AMS nRF24 датчиков
  • Удалённый контроль «здоровья» беспроводных датчиков
  • Отслеживание активности и ошибок беспроводных датчиков
  • Использование беспроводных AMS nRF24 контроллеров

Управление двумя санузлами

  • Защита от протечек
  • Автоматическое перекрытие клапана при протечках воды
  • SMS оповещение при аварийных ситуациях с протечками воды
  • Управление вентиляцией санузлов
  • Автоматический и ручной режимы вентиляции
  • Задание задержки отключения вентиляции в веб-интерфейсе
  • Задание критической влажности для включения вентиляции в веб-интерфейсе
  • Управление освещением санузлов
  • Автоматический и ручной режимы работы освещения
  • Задание задержки отключения освещения в веб-интерфейсе

Управление зимним садом на балконе

  • Определение температуры и влажности на улице
  • Поддержание заданной температуры на балконе
  • Алгоритм обогрева, учитывающий множество параметров

Работа со временем

  • Получение и синхронизация времени через интернет
  • Отслеживание временных интервалов
  • Отслеживание времени суток
  • Отслеживание времени восхода и захода солнца
  • Задание часов и минут наступления каждого времени суток в веб-интерфейсе

СМС сообщения и команды

  • Интеграция с AMS СМС сервером
  • Отсылка информационных и тревожных СМС на мобильный телефон
  • Приём управляющих команд от СМС сервера

Сетевая работа

  • Интеграция с другими контроллерами сети
  • Приём управляющих команд по сети от других контроллеров
  • Отсылка управляющих команд другим контроллерам сети

Обзор

Инфракрасные (ИК, IR) датчики обычно используются для измерения расстояний, но их также можно использовать и для обнаружения объектов. ИК-датчики состоят из инфракрасного передатчика и инфракрасного приемника. Передатчик выдает импульсы инфракрасного излучения в то время, как приемник детектирует любые отражения. Если приемник обнаруживает отражение, это означает, что перед датчиком на некотором расстоянии есть какой-то объект. Если отражения нет, нет и объекта.

IR-датчик, который мы будем использовать в данном проекте, обнаруживает отражение в определенном диапазоне. Эти датчики имеют небольшое линейное устройство с зарядовой связью (CCD), которое детектирует угол, с которым ИК-излучение возвращается к датчику. Как показано на рисунке ниже, датчик передает инфракрасный импульс в пространство, а когда перед датчиком появляется объект, импульс отражается обратно к датчику под углом, пропорциональным расстоянию между объектом и датчиком. Приемник датчика детектирует и выводит угол, и, используя это значение, вы можете рассчитать расстояние.

Подключив пару ИК-датчиков к Arduino, мы можем сделать простую охранную сигнализацию. Мы установим датчики на дверной косяк, и, правильно выровняв датчики, мы сможем обнаружить, когда кто-то проходит через дверь. Когда это произойдет, сигнал на выходе ИК-датчика изменится, а мы обнаружим это изменение, постоянно считывая выходной сигнал датчиков с помощью Arduino. В данном примере мы знаем, что объект проходит через дверь, когда показание на выходе ИК-датчика превышает 400. Когда это произойдет, Arduino включит сигнал тревоги. Чтобы сбросить срабатывание сигнализации, пользователь может нажать на кнопку.

Совмещение плат

Позже пришлось делать ещё одно отверстие, в моём случае на букве «I», где написано «Мade In China», с краю платы.
Получилось так, что добавленный контакт, который по сути является GND, стал находится рядом c GND платы Pro Mini, и тем самым появилась возможность объединить землю GSM-модуля и Pro Mini каплей припоя (длинный вывод посередине и справа от него вывод Pro Mini) — стрелочками их отметил. Кривовато конечно вышло, зато надёжно теперь держится:

Между платами осталось некоторое пространство — в него я поместил плату контроля заряда разряда лития с предварительно выпаянным microUSB-разъёмом и припаянными проводами.

Платка входит туда очень плотно, при этом свечение светодиодов сбоку будет хорошо заметно через небольшое отверстие в корпусе.

Полевые испытания

Прошу прощения за эстетику монтажа.

Установка на входную дверь. Часть конструкции справа (непосредственно на самой двери) — магнит для срабатывания геркона

На место постоянного использования (гараж) устройство было установлено 4 месяца назад. Для целей усиленного тестирования, функция расписания не используется (по каждому событию отправляется SMS). В среднем получается 5 SMS в день: два при входе в гараж (срабатывает датчик открытия двери и датчик освещения), два при выходе и один «ежедневный отчет». На текущий момент батареи (3x AA) держат напряжение 4.1в при включенном модеме.

Другие идеи проектов

Проекты умного дома на Ардуино

Проекты умного дома являются одним из примеров того, как перейти от «игрушек» и тренажеров к реальным системам, помогающими и облегчающим жизнь. Как правило, с помощью ардуино невозможно создать полноценные автономные решения, но отдельные компоненты сделать вполне реально.

При этом нужно понимать, что сталкиваясь с реальными инфраструктурными объектами, мы должны соблюдать особую предусмотрительность при работе с электричеством, отоплением, водопроводом под давлением, канализацией. Любые эксперименты здесь нужно проводить обязательно под контролем профессионала.

Что может являться прототипом умного дома на ардуино:

  • Системы освещения с автоматическим включением и отключением в зависимости от показателей датчиков. Наиболее популярнее варианты – использовать датчик освещенности, PIR датчик движения или датчик звука.
  • Дистанционно управляемые электрические приборы. Например, включение или выключение системы отопления в зависимости от температуры или умное управление освещением в помещениях. Здесь вам понадобятся различные виды реле и один из механизмов обеспечения беспроводной связи: WiFi, GPRS, Bluetooth или радиоканал. Управлять устройствами можно через Web-интерфейс (через браузер) или с использованием соответствующего мобильного приложения (можно написать самому или выбрать одну из готовых платформ).
  • Всевозможные системы учета: воды, тепла, электроэнергии. Начинающим доступны любительские датчики напора воды, температуры, влажности, силы тока. Можно использовать и профессиональные приборы, взаимодействуя с ними по одному из промышленных протоколов. Полученные данные можно собирать локально или отправлять в облако для последующего анализа.
  • Охранные системы и контролирование внештатных ситуаций. Здесь понадобится различные датчики присутствия, движения, звука, магнитные датчики Холла и другие. Естественно, не обойтись без коммуникаций и возможности быстрой передачи информации владельцу через интернет.

Каждое из этих направлений может содержать в себе десятки разных проектов. Вы можете без труда найти себе подходящий вариант в интернете или в одной из наших статей.

Проекты «Зеленой робототехники»

Юные ардуинщики, живущие в небольших городах и сельской местности, где много природы и не очень много «цивилизации», могут с успехом использовать ардуино для исследования и охраны природы, а также автоматизации сельского хозяйства. Вот некоторые из идей проектов, которые можно реализовывать своими силами на уровне прототипов и готовых решений:

  • Умная теплица
  • Полив растений
  • Умный инкубатор
  • Умный улей
  • Антигрызуны
  • Умный агроном
  • Умный ошейник для животных
  • Расширенная метеостанция
  • Робот – сеяльщик
  • Счетчик муравьев

Проекты с дронами: аэрофотосъемка, внесение удобрений.

Подключение внешего источника питания к ESP32 и SIM800

Как подключить внешний мощный источник питания 5V к ESP32, чтобы запитать SIM800, потребляющий до 2A в пике? Рассмотрим, сделано ли что-то схематике ESP32/ESP8266, чтобы не сжечь USB порт ПК при подключении внешнего источника питания.

На схеме от производителя виден диод Шоттки BAT-760 в цепи питания +5V. Этот диод присутствует не на всех платах, поэтому прежде чем подключить USB от ПК к плате запитанной от внешнего источника +5V нужно убедится, что на плате диод распаян. Даже если нет схемы платы, то проверить несложно. Черный планарный диод относительно большого размера хорошо выделяется на плате. Катод диода идет на PIN +5V, а анод на вывод +5V питания USB разъема. Если диода нет, то его нужно добавить в схему питания.

Зачем это нужно

Аббревиатура GSM расшифровывается как Global System for Mobile (Communications). Технология эксплуатирует сети связи сотовых операторов, обеспечивая трансляцию голосовой, текстовой и служебной информации между подключенными устройствами.

Через сеть GSM передаются не только данные, но и СМС-сообщения, и голос. С подключенной к Arduino GSM платой компьютер способен:

  • сообщать о состоянии датчиков периферийного оборудования;
  • передавать информацию о срабатывании тревожной сигнализации;
  • управлять подсоединенной системой, и выполнять любые другие действия по заданному сценарию;
  • осуществлять звонки.

Поскольку GSM обеспечивает и доступ в интернет, устройства с его поддержкой также могут управляться через глобальную сеть, принимать команды, отдавать статусы и так далее.

Простейший пример применения Ардуино с GSM — автономная сигнализация. Периферийные датчики фиксируют свое состояние и передают на центральную плату, которая через модуль отправляет данные на смартфон владельца. Такое решение можно считать базой для «умного дома»: если добавить дополнительные подключаемые блоки, датчики и программные оболочки, Arduino превращается в полноценный комплекс Smart Home.

Любой GSM/GPRS блок соединяется с основной платой. Для реализации простых проектов, как правило, используют Arduino Uno, но есть возможность построения и на базе минималистичного Nano, и более богато оснащенного Mega. Соединенный с Arduino GSM модуль обеспечивает все возможности технологии передачи данных по сотовой сети.

Модулей связи на рынке представлено достаточно много. Далее мы рассмотрим характеристики наиболее популярных и приведем пример типового проекта.

Топ 6 самых популярных модулей

Представленные ниже модули – популярный продукт для монтажа систем автономной сигнализации и иных проектов, для передачи управляющего сигнала через сети мобильных операторов.

Под модулем понимается изделие, состоящие из платы и элементов на ней (включая компонент, состоящий из чипсета и приемопередатчика). Компонент находятся под крышкой в едином форм-факторе (напоминает процессор для материнской платы компьютера). Распайка на плате расширения происходит через торцевые контактные ножки. Такая полноценная плата и называется модулем. Если на ней есть множество других элементов, ее иногда именуют шилд.

Ниже будут приведены модули, такие как Neoway M590, A6 и A7, и прочие, представлены их характеристики.

SIM900

Разработанный компанией SIMCom Wireless Solution модуль SIM900 подключается и обменивается данными через распространенный физический протокол передачи данных UART. Подключение к ПК осуществляется через USB-UART преобразователь.

Плата позволяет в двухстороннем режиме работать с сообщениями и звонками адресата.

Спецификация:

  1. Диапазон частот EGSM900, DCS1800, GSM850, PCS1900.
  2. Напряжение 3,2-4,8 В.
  3. Сила тока в режиме простоя – 450 мА.
  4. Максимальный ток – 2 А.
  5. Канал связи до 14.4 кбит/с.
  6. Диапазон температур от -30 °C до +80 °C без искажения, и от -40 °C до +85 °C, с незначительным отклонением радиочастотных характеристик, с сохранением работоспособности.
  7. Вес 6,2 г.
  8. Размеры 24 x 24 x 3 мм.

У компонента есть модификации: 900B, 900D, 900TE-C, 900R 900X. У каждой модификации своя специфика. SIM900D дополнен блоком заряда аккумулятора, а в SIM900X введены новые режимы энергосбережения, что позволяет использовать модули в современных системах трекинга автомобилей, охранной и промышленной автоматики. Все модификации компонентов можно найти в едином форм-факторе SMT, с торцевыми контактами под пайку. Но, не исключены варианты нахождения в других форм факторах.

SIM800L

Основа модуля – компонент SIM800L с реализацией обмена данными по каналам GSM и GPRS с помощью дуплексного режима. В модуль устанавливается SIM-карта, есть встроенная антенна и выход под еще одну антенну. Питание на плату подается через преобразователь напряжения DC-DC. Еще, есть возможность подключиться к другому источнику питания. Интерфейс подключения – UART.

Спецификация:

  1. Четырехдиапазонный сотовый терминал.
  2. Напряжение 3,8-4,2В.
  3. Ток в режиме ожидания – 0,7 мА. Предельный ток – 500 мА.
  4. Слот
  5. Поддержка 2G сети.
  6. Диапазон температур от -30 °C до +75 °C.

A6

Шилд A6 работает в сетях мобильной связи и позволяет принимать и передавать сигналы с помощью GSM и GPRS. Модуль, созданный компанией AI-THINKER несколько лет назад, успешно показал себя и пользуется популярностью в системах автоматики.

ТТХ А6:

  1. Четырехдиапазонный сотовый терминал.
  2. Напряжение питания 5 В.
  3. Ток в спящем режиме – 3 мА.
  4. Ток режима ожидания – 100 мА.
  5. Ток режима соединения – 500 мА.
  6. Ток пиковой нагрузки – 2А.
  7. Разъем
  8. Скорость GPRS во время передачи сигнала 42,8 Кбит/сек.
  9. Температура от -30 °C до +80 °C.

A7

Новый модуль А7 отличается от предшественника тем, что в него встроен GPS. Это решение позволило упростить конструкцию платы.

Основные параметры:

  1. Четырехдиапазонный сотовый терминал.
  2. Напряжение 3,3-4,6 В.
  3. Напряжение питания 5В.
  4. 10 Класс GPRS: канал передачи данных 85,6 кбит/с.
  5. Jammer эха и шумов.

Neoway M590

Модуль на основе компонента Neoway M590 позволяет принимать звонки, обмениваться данными и сообщениями. Имеет интерфейс подключения UART.

Характеристики:

  1. Диапазон частот EGSM900, DCS1800.
  2. 10 Класс
  3. Напряжение 3,3-5 В.
  4. Пиковый ток 2 А.
  5. Рабочий ток 210 мА.
  6. Коммуникационный сигнал 3,3 В.
  7. Температура от -40 °C до +80 °C.

Подключая модуль к контроллеру, потребуется преобразователь 3,3 В -> 5 В.

GSM GPRS модуль SIM900

На базе модуля SIM900 разработали и успешно используют SIM900 GSM GPRS Shield, в качестве модуля для подключения к Arduino UNO. По сравнению с остальными платами, стоимость этой на порядок дороже, и она укомплектована множеством разъемов и контактов. Среди основных параметров:

  1. Подключается плата к Arduino Mega и UNO.
  2. Четыре рабочих частоты, как и в остальных платах.
  3. Низкое энергопотребление 1.5 А в спящем режиме.
  4. GPRS мульти-слот класса 10/8.
  5. Рабочие температуры от -40°C до +85 °C.

Сборка «умного дома»: пошаговая инструкция

Вот в какой последовательности необходимо действовать.

Подключение исполнительных и сенсорных устройств

Подключаем все компоненты согласно схеме.

Сборка системы в основном сводится к подключению исполнительных устройств к соответствующим контактам процессорной платы

Разработка программного кода

Пользователь пишет всю программу целиком в оболочке Arduino IDE, для чего последняя оснащена текстовым редактором, менеджером проектов, компилятором, препроцессором и средствами для заливки программного кода в микропроцессор платы Arduino. Разработаны версии IDE для операционных систем Mac OS X, Windows и Linux. Язык программирования — С++ с некоторыми упрощениями. Пользовательские программы для Arduino принято называть скетчами (sketch) или набросками, программа IDE сохраняет их в файлы с расширением «.ino».

Функцию main(), которая в С++ является обязательной, оболочка IDE создаёт автоматически, прописывая в ней ряд стандартных действий. Пользователь должен написать функции setup() (выполняется единоразово во время старта) и loop() (выполняется в бесконечном цикле). Обе эти функции для Arduino являются обязательными.

Заголовочные файлы стандартных библиотек вставлять в программу не нужно — IDE делает это автоматически. К пользовательским библиотекам это не относится — они должны быть указаны.

В IDE предусмотрен минимум настроек, а возможность настройки компилятора отсутствует вовсе. Таким образом, начинающий программист застрахован от ошибок.

Вот пример самой простой программы, заставляющей каждые 2 секунды мигать подключённый к 13-му выводу платы светодиод:

Однако в настоящий момент перед пользователем далеко не всегда встаёт необходимость лично писать программу: в сети выложено множество готовых библиотек и скетчей (загляните сюда: http://arduino.ru/Reference). Имеется готовая программа и для системы, рассматриваемой в этом примере. Её нужно загрузить, распаковать и импортировать в IDE. Текст программы снабжён комментариями, поясняющими принцип её работы.

Все программы на Arduino работают по одному принципу: пользователь посылает запрос процессору, а тот загружает необходимый код на экран компьютера или смартфона

Когда пользователь нажимает в браузере или установленном на смартфоне приложении кнопку «Refresh» (Обновление), микроконтроллер Arduino осуществляет отсылку данных этому клиенту. С каждой из страниц, обозначенных как «/tempin», «/tempout», «/rain», «/window», «/alarm», поступает программный код, который и отображается на экране.

Установка клиентского приложения на смартфон (для ОС Android)

Для получения данных от системы «умный дом» в сети можно скачать готовое приложение.

Вот что необходимо сделать владельцу гаджета:

  1. Скачайте файл SmartHome.apk.
  2. Отправьте его на телефон.
  3. Открыв «Менеджер файлов», разместите этот файл.
  4. Щёлкните на нём и выберите «Установить» (должна быть отмечена «галочка», позволяющая осуществлять установку программ вне сервиса Google Play).
  5. Когда установка будет завершена, активируйте приложение.
  6. Выполните его настройку.

С помощью этого приложения можно не только получать информацию от системы «умный дом», но и управлять ею — включать и отключать сигнализацию. Если она включена, то при срабатывании датчика движения приложению будет отправлено уведомление. Опрос системы Arduino на предмет срабатывания датчика движения приложение выполняет с периодичностью раз в минуту.

Активировав иконку «Настройки», можно отредактировать свой IP-адрес.

Настройка браузера на работу с «умным домом»

В адресной строке браузера следует ввести XXX.XXX.XXX.XXX/all, где «XXX.XXX.XXX.XXX» — ваш IP-адрес. После этого появится возможность получать данные от системы и осуществлять управление ею.

Представленный здесь программный код позволяет через браузер включать и выключать свет, тогда как в приложении для Android-смартфона такая функция не реализована.

Работа с роутером

Далее на маршрутизаторе необходимо открыть порт:

  • открываем настройки маршрутизатора;
  • прописываем адрес Arduino IP;
  • открываем порт 80.

Настройка учётной записи на noip.com

Этот этап не является обязательным, но он необходим, если вы хотите присвоить адресу доменное имя. Для этого надо зарегистрироваться на сайте https://www.noip.com/, перейти в раздел «Add host» и ввести IP-адрес системы.

После регистрации на сайте noip.com доступ к системе можно получать не только по IP-адресу, но и по полному доменному имени

Создание проекта завершено, можно проверять работоспособность системы.

Типовые схемы

Рассмотрим примеры подключения указанных модулей к контроллерам Arduino.

Принцип дальнейших действий во всех случаях общий: GPRS модуль сопрягается с материнской платой главного контроллера. Для правильного выполнения подключения следует изучить инструкцию к используемой модели Arduino, выяснить распиновку на ней и на компоненте сотовой связи. Далее на собранную систему заводится питание. Когда устройство включено, его переходником USB-UART подключают к ПК и создают программу в среде Arduino IDE или другом удобном пакете ПО разработчика.

Рассмотрим несколько примеров сборки аппаратной части.

Arduino Uno и контроллер SIM800L

Поскольку напряжение SIM800L невелико, понадобится преобразователь.

Изучим распиновку устройства:

Последовательность действий:

  • подключаем плату UТO к компьютеру;
  • к ней подводится питание 12 В через конвертер;
  • минус источника выводится на контакт GND Ардуино, а GND — на контакт минуса конвертера;
  • плюс ИП идет к плюсу преобразователя;
  • плюс конвертера — к плюсу блока GSM;
  • минус с «земли» преобразователя на GND сотового блока;
  • RXT и TXD блока на 2, 3 пины микроконтроллера UNO соответственно.

К цифровым выводам можно подключать и другие устройства, объединяя, при необходимости, несколько дополнительных модулей и плат.

UNO и A6

Здесь напряжение питания стандартное, и конвертер в схему не включается. Платы соединяются напрямую.

Общая схема распиновки:

Принцип соединения контактов:

  • UART_RXD выводится на TX 1 UNO;
  • UART_TXD — на RX 0;
  • GND соединяется с GND на GSM-блоке;
  • пин электропитания VCC0 c кнопкой включения PWR-KEY.

Шилд GSM SIM900 и контроллер Arduino Mega

Пиковая сила тока при активации устройства может достигать 2 А, в связи с чем напрямую питание подключать нежелательно. Перед соединением плат нужно поставить SIM-карту в предназначенный для нее слот и установить TX и RX джамперы:

Последовательность дальнейших действий:

  • желтый провод (TX) объединяется с TX Arduino;
  • зеленым соединяются контакты RX;
  • GND выводится на «землю» микроконтроллера.

Проверить собранный гаджет можно следующим экспериментом:

  • соединить GND и RESET главного микроконтроллера;
  • вставить в разъем сим-карту;
  • подать питание на модуль GSM;
  • подключить центральную плату Arduino к ПК через порт USB, нажать кнопку ON;
  • Если все собрано верно, красный светодиод загорится, а зеленый станет мигать.

Передача данных из Arduino на веб-сервер

Для передачи данных на веб-сервер напишем функцию SEND_GPRS с указанием адреса «adress_php», в который будет записываться значение int типа «out_messeng_Server». Для записи значения  типа String нужно вызывать функцию SEND_string_GPRS. В Листинге 9 показана функция отправки данных на сервер.

Листинг 9. Функция отправки данных на сервер.

В корневом каталоге веб-сервера создаем папку in, внутри ее располагаем другие папки со скриптами для обработки приема данных  GSM модуля. Внутренние папки содержат файл index.php и log.txt.

На Листинге 10 показано содержание файла index.php.

Листинг 10. PHP листинг файла index.php.

Как видно, с приходом новых данных происходит перезапись файла log.txt.

Рисунок 13. Собранная схема на макетной плате.

Все компоненты собраны на макетной плате (Рисунок 13). Устройство не требует настроек, после сборки и прошивки сразу готово к работе.

Работа с AT-командами

Данный раздел рассказывает о том, как работать с GPRS Shield на более низком уровне, без дополнительных библиотек. Если вам достаточно тех методов, которые предоставляет штатная библиотека, можете пропустить этот раздел.

Введение

С внешним миром модуль общается посредством AT-команд. Все команды делятся на базовые, так называемые S-команды, и расширенные, добавленные в стандартах GSM07.05–07.07. Практически все команды работают в 3 режимах — тестовом, чтения и записи.

  • В тестовом режиме возвращается , если команда поддерживается или возможные значения данных в параметре команды. Тестовый режим определяется окончанием команды в виде

  • В режиме чтения возвращаются текущие значения параметра, отличается от тестового наличием в конце просто символа

  • В режиме записи после идут новые значения параметров.

Настройки порта

По умолчанию модуль настроен на 9600 8N1:

  • 9600 – скорость;
  • 8 – бит в посылки;
  • N – нет контроля чётности;
  • 1 – стоп бит.

Для проверки поддерживаются AT-команды:

Команда Ответ Описание
AT+IPR? +IPR: 0
OK
Скорость порта:
0 – автоматически
1200
2400
4800
9600
19200
38400
57600
115200
AT+ICF? +ICF: 3,3
OK
Настройки передачи.
Первый параметр:
Бит в посылке
чётность/стоп бит
1 – 8/0/2
2 – 8/1/1
3 – 8/0/1
4 – 7/0/2
5 – 7/1/1
6 – 7/0/1
Второй параметр – чётность:
0 – нечётный
1 – чётный
3 – нет
AT+IFC? +IFC: 0,0
OK
Контроль передачи данных.
Первый параметр – терминалом от модуля
Второй параметр – модулем от терминала
0 – нет контроля
1 – программный
2 – аппаратный

Если вы хотите изменить их, введите AT-команду, замените знак на и введите нужные вам параметры из таблицы.
Все настройки этих команд сохраняются в энергонезависимой памяти.

Информация о модуле и состояние

Команда Ответ Описание
AT+GCAP +GCAP: +CGSM
OK
Возможности модуля
AT+GMM SIMCOM_SIM800C
OK
Идентификатор модуля
AT+GMR Revision:1418B08SIM800C32_BT_EAT
OK
Ревизия
AT+GSN 8683450321ХХХХХ
OK
IMEI

В документе с перечнем AT-команд можно найти документацию на все поддерживаемые команды.

Пример скетча для работы с использованием AT-команд

GPRSATСommands.ino
// библиотека для работы с GPRS устройством
#include <GPRS_Shield_Arduino.h>
 
// создаём объект класса GPRS и передаём в него объект Serial1 
GPRS gprs(Serial1);
// можно указать дополнительные параметры — пины PK и ST
// по умолчанию: PK = 2, ST = 3
// GPRS gprs(Serial1, 2, 3);
 
void setup()
{ 
  // открываем последовательный порт для мониторинга действий в программе
  Serial.begin(9600);
  // ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  while (!Serial) {
  }
  Serial.print("Serial init OK\r\n");
  // открываем Serial-соединение с GPRS Shield
  Serial1.begin(9600);
  // включаем GPRS шилд
  gprs.powerOn();
  // проверяем есть ли связь с GPRS устройством
  while (!gprs.init()) {
    // если связи нет, ждём 1 секунду
    // и выводим сообщение об ошибке
    // процесс повторяется в цикле
    // пока не появится ответ от GPRS устройства
    Serial.print("GPRS Init error\r\n");
    delay(3000);
  }
  // выводим сообщение об удачной инициализации GPRS Shield
  Serial.println("GPRS init success");
}
 
void loop()
{
  // считываем данные с компьютера и записываем их в GPRS Shield
  serialPCread();
  // считываем данные с GPRS Shield и выводим их в Serial-порт
  serialGPRSread();
}
 
void serialPCread()
{
  if (Serial.available() > ) {
    // если приходят данные по USB
    while (Serial.available() > ) {
      // записываем их в GPRS Shield
      Serial1.write(Serial.read());
    }
  }
}
 
void serialGPRSread()
{
    if (Serial1.available() > ) {
      // если приходят данные с GPRS Shield
      while (Serial1.available() > ) {
        // передаём их в USB
        Serial.write(Serial1.read());
    }
  }
}

Отправка SMS

При использовании указанной выше команды AT+CNMI=1,0 при приходе SMS строчек

09:33:19.153 -> +CMT: "+79601XXXXX","","19/05/05,09:33:15+12"
09:33:19.187 -> Test the SMS send

индициирующих о приходе сообщения не будет. Нужно вычитывать сообщения. Чтобы вычитать все SMS сообщения я написал функцию:

enum ReadSMSMode
{
  ReceivedUnread,
  ReceivedRead,
  StoredUnsent,
  StoredSent,
  All
};

void readAllSMSs(ReadSMSMode mode = ReadSMSMode::AllSMS)
{
  smsInit();
  String readMode = "ALL"; 
  switch (mode)
  {
    case ReadSMSMode::ReceivedUnread:
      readMode = "REC UNREAD";
      break;
    case ReadSMSMode::ReceivedRead:
      readMode = "REC READ";
      break;
    case ReadSMSMode::StoredUnsent:
      readMode = "STO UNSENT";
      break;
    case ReadSMSMode::StoredSent:
      readMode = "STO SENT";
      break;
    case ReadSMSMode::AllSMS:
      readMode = "ALL";
      break;
  }
  
  modemGSM.sendAT(GF("+CMGL=\"" + readMode + "\"")); 
  Serial.println("Read all SMSs.");
  while (true)
  {
    if (modemGSM.waitResponse(10000L, GF(GSM_NL "+CMGL:"), GFP(GSM_OK), GFP(GSM_ERROR))) 
    {
      String data = modemGSM.stream.readStringUntil('\n');
      data.trim();
      if (data.length() == 0)
        break;
      Serial.println("Data: " + data);
      String msg = modemGSM.stream.readStringUntil('\n');
      Serial.println("Message: " + msg);
    }
    else
    {
      break;
    }
  }
}

Чтобы прочитать SMS с определенным id функция:

void readSMS(uint8_t i)
{
  char message;
  
  modemGSM.sendAT(GF("+CMGF=1"));
  modemGSM.waitResponse();
  modemGSM.sendAT(GF("+CNMI=1,2,0,0,0"));
  modemGSM.waitResponse();
  
  modemGSM.sendAT(GF("+CMGR="), i);
  if (modemGSM.waitResponse(10000L, GF(GSM_NL "+CMGR:"))) 
  {

    String header = modemGSM.stream.readStringUntil('\n');
    String body = modemGSM.stream.readStringUntil('\n');

    Serial.println("Header: " + header);
    Serial.println("Body: " + body);
  }
}

После того как SMS сообщение получено, распарсено и команда отработана, сообщение его лучше удалить. Для удаления SMS сообщения с определенным id используется функция:

bool deleteSmsMessage(const uint8_t index) 
{
    modemGSM.sendAT(GF("+CMGD="), index, GF(","), 0); // Delete SMS Message from &lt;mem1> location
    return modemGSM.waitResponse(5000L) == 1;
}

Для удаления сообщений определенного типа использую функцию:

enum DeleteSmsMode
{
  Read     = 1,
  Unread   = 2,
  Sent     = 3,
  Unsent   = 4,
  Received = 5,
  All      = 6
};

bool deleteAllSmsMessages(DeleteSmsMode method);
bool deleteAllSmsMessages(DeleteSmsMode method) 
{
    // Select SMS Message Format: PDU mode. Spares us space now
    modemGSM.sendAT(GF("+CMGF=0"));
    
    if (modemGSM.waitResponse() != 1) {
        return false;
    }

    modemGSM.sendAT(GF("+CMGDA="), static_cast&lt;const uint8_t>(method)); 
    const bool ok = modemGSM.waitResponse(25000L) == 1;

    modemGSM.sendAT(GF("+CMGF=1"));
    modemGSM.waitResponse();

    return ok;
}

Проблемы

За время эксплуатации температура в помещении понизилась с +10°С до -15°С и обнаружилась две проблемы.

  1. Используемый PIR датчик начинает давать ложные срабатывания при низких температурах. При +5°С использование стало совсем невозможным: число ложных срабатываний превысило одно в день. Попытка замены датчика на другой проблему не решило, поэтому сейчас этот датчик временно отключен. Что с этим делать пока не понятно.
  2. Датчик температуры, встроенный в DS3231 при -10°С и ниже начал сходить с ума: периодически выдает случайные значения, например, «-84°С» или «+115°С». Интересно, что RTC работает нормально. На текущий момент не понятно, проблема ли это конкретно моего экземпляра или нет. Жду для проверки второй идентичный модуль, при повторении с ним проблемы в устройство будет добавлен DS18B20.

В остальном полет нормальный.

В заключение

Хотелось бы отметить, что настоящий GSM информер безопасности на Arduino, годится не только для охраны квартиры, хозяйственного помещения или каких-либо иных неподвижных объектов. Его прекрасно можно применять и в транспорте, выполнив самодельную автосигнализацию на тех же принципах работы, и используя перечисленные ранее компоненты. Бонусом служит возможность ее расширения, которая позволяет возложить на микроконтроллер дополнительные функции. К примеру, GPS навигатор, который пользуясь возможностями GSM связи, будет информировать владельца о текущем нахождении автомобиля.