Подключение gsm модуля sim800c к esp8266/esp32/arduino

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

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

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

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

Отопление

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

nRF24 сеть

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

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

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

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

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

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

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

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

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

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

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

GSM модуль SIM900

Этот модуль нашел свое применение в различных автоматизированных системах. Обмен данным с устройствами происходит по интерфейсу UART. Также при его помощи можно делать звонки и обмениваться текстовыми сообщениями. Отправка SMS может использоваться в охранных системах. Также на нем можно отслеживать маршрут совместно с Глонасс или GPS устройством.

Модуль работает на микросхеме SIM900 производимой SIMCom Wireless Solution.

Характеристики модуля SIM900

  • напряжение питания 4,8-5,2 В;
  • потребляемы ток в рабочем режиме 450 мА, максимальный ток в импульсном режиме 2 А;
  • поддержка 2G;
  • мощность передачи: 1 Вт 1800 и 1900 МГц, 2 Вт 850 и 900 МГц;
  • имеются встроенные протоколы TCP и UDP;
  • GPRS multi-slot class 10/8;
  • рабочая температура от -30 С до 75 С.

Таблица подключения к Arduino UNO R3 элементов схемы

Сведем все соединения между Ардуино и внешними устройствами в единую таблицу, которая поможет в деле сборки готовой схемы.

Куда Пин Arduino UNO R3 Пин устройства/контакт
Модуль на 4 реле D0 общее освещение, D1 отопление, D2 свет в кладовке, D3 на улице. D0 D0
D1 D1
D2 D2
D3 D3
Кнопка постановки на сигнализацию/снятия D4
Клавиша включения режима экономии/люди дома D5
D6
Коммуникация с модемом D7 RX
D8 TX
Светодиод охрана отключена(кр) D9
Охрана активирована (зел) D10
Хозяева дома (кр) D11
Режим экономии (зел) D12
Включение модема D13 D9
Геркон кладовка A1
Геркон дверь/калитка A2
Термометр A3
Определение наличия сети 220 В A4

Планируемая система полностью не заняла все пины микроконтроллера. Еще есть место для добавления аналогового датчика и одной линии управления. Вариант — использовать свободные контакты для сенсора дыма и сигнализатора. Если планируется расширять конструкцию дальше, — придется брать микроконтроллер Arduino Mega. В нем больше портов ввода/вывода и памяти, при полной программной совместимости.

Скетчи для работы с модулем GSM

Отправка СМС на примере SIM900

Перед тем, как отправить сообщение, нужно настроить модуль. В первую очередь нужно перевести в текстовый формат передаваемое сообщение. Для этого существует команда AT+CMGF=1. Нужно перевести кодировку на GSM командой AT+CSCS=»GSM». Эта кодировка наиболее удобная, так как там символы представлены в ASCII коде, который легко понимает компилятор.

Затем нужно набрать смс-сообщение. Для этого посылается команда с номером абонента AT+CMGS=»+79XXXXXXXXX» r, в ответ предлагается набрать текст смс. Нужно выполнить отправку сообщения. По окончании требуется отправить код комбинации  Ctrl+Z, модуль позволит отправку текста адресату. Когда сообщение будет отправлено, вернется OK.

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

Получение смс. Для чтения смс-сообщения используется команда AT + CNMI = 2,2,0,0,0. Когда на модуль придет текстовое сообщение, он отправит в последовательный порт +CMTI: «SM»,2 (в данном случае 2 – порядковый номер сообщения). Чтобы его прочитать, нужно отправить команду AT+CMGR=2.

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

#include <GSM.h>

Если сим-карта заблокирована, нужно ввести ее пин-код. Если пин-код не требуется, это поле нужно оставить пустым.

#define PINNUMBER “”

В setup() должна быть произведена инициализация передачи данных на компьютер. Следующим шагом будет создание локальной переменной, чтобы отследить статус подключения к сети. Скетч не будет запущен, пока сим-карта не подключена к сети.

boolean notConnected = true;

С помощью функции gsmAccess.begin() происходит подключение к сети. При установлении соединения вернется значение GSM_READY.

vcs.hangCall(); – функция, показывающая, что модем готов принимать звонки.

getvoiceCallStatus() – определяет статус скетча. Если кто-то звонит, она возвращает значение RECEIVINGCALL. Для записи номера нужно воспользоваться функцией retrieveCallingNumber(). Когда будет совершен ответ на звонок, вернется TALKING. Затем скетч будет ждать символа новой строки, чтобы прервать разговор.

Установить GPRS-соединение и отправить данные на удаленный сервер

Сначала нужно установить библиотеку SoftwareSerial, которая позволяет обеспечивать последовательную передачу информации и связать GSM-модуль и микроконтроллер Ардуино.

Для отправки данных на сервер нужно отправить следующие команды:

AT+SAPBR=1,1 – открытие Carrier.

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

AT+SAPBR=3,1,\”APN\”,\”internet.mts.ru\” – выбор оператора mts, имя точки доступа.

AT+SAPBR=3,1,\”USER\”,\” mts \” – выбор пользователя mts.

AT+SAPBR=3,1,\”PWD\”,\” mts \”

AT+SAPBR=1,1 – установка соединения.

AT+HTTPINIT – инициализация http.

AT+HTTPPARA=”URL”, – URL адрес.

AT+HTTPREAD – ожидание ответа.

AT+HTTPTERM – остановка http.

Если все выполнено правильно, в мониторе порта будут появляться строчки с АТ командами. Если отсутствует связь с модемом, то будет показывать по одной строке. При успешной установке GPRS-соединения  на модуле начнет мигать светодиод.

Элементы платы

Микроконтроллер ATSAMD21G18

Мозгом платформы Arduino MKR GSM 1400 является 32-разрядный микроконтроллер фирмы Microchip (Atmel) — ATSAMD21G18 с вычислительном ядром ARM Cortex M0.
Контроллер работает на тактовой частоте 48 МГц, а также предоставляет 256 КБ Flash-памяти для хранения прошивки и 32 КБ SRAM-памяти для работы с переменными в программе.

Беспроводной модуль SARA-U201

Модуль U-blox SARA-U201 обеспечивает сотовую связь 3G/2G с поддержкой UMTS/HSPA и GSM/GPRS. Поддержка стандарта 3G обеспечивает входящую скорость передачи данных до 7,2 Мбит/с и исходящую до 5,76 Мбит/с. Для пользования сотовой связью вам понадобится SIM-карта формата Micro-SIM, которая устанавливается с обратной стороны платформы.

Разъём подключения GSM-антенны

В зоне слабого приёма воспользуйтесь дополнительной антенной усиления GSM-сигнала, которая подключается через разъём U.FL.

Светодиодная индикация

Имя светодиода Назначение
ON Индикатор питания платформы.
CHRG Индикатор зарядки внешнего аккумулятора.
L Пользовательский светодиод на пине микроконтроллера, в отличии от пина на других платформах Arduino. Используйте определение для работы со светодиодом. При задании значения светодиод включается, при – выключается.

Разъём подключения аккумулятора

На плате расположен JST PH-разъём (2 pin) для подключения внешних Li-Pol и Li-Ion аккумуляторов.

При одновременном питании платформы от USB и аккумулятора:

  • батарея заряжается через контролер заряда BQ24195L до 4,2 вольта.
  • светодиод горит об индикации питания
  • светодиод горит об индикации заряда батареи

При питании платформы только от аккумулятора:

  • батарея не заряжается
  • светодиод горит об индикации питания

Разъём I²C интерфейса

На платформе предусмотрен JST SH-разъём (5 pin) для подключения дополнительных модулей по интерфейсу «I²C». Коннектор включает в себя:

  • пины питания — и

  • пины шины I²C — и

  • дополнительный цифровой пин

Регулятор напряжения

Линейный понижающий регулятор напряжение AP7215-33 с выходом 3,3 вольта обеспечивает питание микроконтроллера. Максимальный выходной ток составляет 600 мА.

Работа схемы

Схема устройства представлена на следующем рисунке.

Контакты RS, EN, D4, D5, D6 и D7 ЖК дисплея 16×2 подключены к контактам Arduino 14, 15, 16, 17, 18 и 19. Контакты Rx и Tx GSM модуля подключены к контактам D3 и D2 платы Arduino соответственно. Земля (Ground) GSM модуля и платы Arduino должны быть соединены вместе.

Контакты строк клавишной панели 4×4 подключены R1, R2, R3, R4 непосредственно соединены с контактами 11,10, 9, 8 платы Arduino, а контакты ее столбцов C1, C2, C3, C4 соединены с контактами Arduino 7, 6, 5, 4. Микрофон (MIC) подключен к контактам mic+ и mic- GSM модуля, а динамик (Speaker) подключен к контактам SP+ и SP- GSM модуля.

Класс излучения и антенны

К выбору Bluetooth-антенны для разрабатываемого устройства стоит подойти столь же серьезно, как и к выбору GSM-антенны. Прежде всего, следует определиться с максимальным расстоянием, на котором предполагается связываться посредством этой технологии с другими устройствами. Класс мощности передатчиков Bluetooth модулей SIM800x соответствует приблизительно значению 1,5, при этом их максимальная выходная мощность составляет 10 дБм (номинальное значение — 7,5 дБм). То есть максимальная дальность бесперебойной связи, при отсутствии препятствий в зоне прямой видимости и использовании антенн с круговой диаграммой направленности, составит около 25 м. Если установление связи на предельных значениях этой дистанции не предусматривается, можно использовать решение, в котором антенна разведена непосредственно на плате. Если же требуется связь на расстоянии более 25 м, рекомендуется использовать направленные антенны, имеющие заметно более высокие коэффициенты усиления излучаемого сигнала.

Постановка задачи

Первый этап проекта при возникновении желания создать простую сигналку на Ардуино своими руками — постановка задачи. Речь идет о том, что она должна „уметь” и какими функциями обладать. Именно настоящие действия определят конечную ее стоимость и компоненты, необходимые для получения нужного результата.

Итак, сигнализация должна «уметь»:

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

Сигнализация в сборе с питанием от аккумулятора:

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

Работа проекта

Подайте питание на все элементы проекта. Нажмите кнопку REC на голосовом модуле и запишите сообщение – оно может быть длительностью максимум 10 секунд.

Теперь загрузите в плату Arduino код программы, приведенный в конце статьи и вставьте SIM карту в GSM модуль. После этого необходимо подождать около 2 минут чтобы GSM модуль установил соединение с сетью вашего сотового оператора. Как только он сделает это красный светодиод будет мигать каждые 3 секунды, что будет свидетельствовать о том, что ваша SIM карта готова к приему вызовов. Теперь вы можете позвонить на эту SIM карту с любого номера и в ответ вы должны услышать записанное вами сообщение после трех продолжительных гудков. Более подробно весь этот процесс можно посмотреть на видео, приведенном в конце статьи.

Код Arduino – отправка SMS

Давайте перейдем к более интересным вещам. Запрограммируем нашу Arduino для отправки SMS на любой телефонный номер, который вы пожелаете. Прежде чем попробовать скетч, вам нужно ввести номер телефона. Найдите строку ZZxxxxxxxxxx и замените ZZ кодом страны, а xxxxxxxxxx – 10-значным номером телефона.

Скетч почти такой же, как и предыдущий, за исключением фрагмента кода, приведенного ниже. Как только соединение установлено, мы отправляем показанные ниже AT команды:

– выбирает формат SMS сообщения в виде текста. По умолчанию используется формат PDU (Protocol Data Unit).

– отправляет SMS на указанный номер телефона. Введенное текстовое сообщение, за которым следует символ Ctrl + z, рассматривается как SMS. Ctrl + z на самом деле является 26-м непечатным символом, описанным как «заменитель» в таблице ASCII. Итак, нам нужно отправить 26dec (1Ahex) сразу после отправим текста сообщения.

Основной цикл программы остается пустым, так как мы хотим отправить SMS только один раз. Если вы хотите отправить SMS еще раз, просто нажмите клавишу RESET на вашей Arduino. На скриншоте ниже показано SMS сообщение, отправленное с платы расширения SIM900 GSM/GPRS Shield.

Рисунок 18 – AT команды SIM900 GSM Shield для отправки SMS на ArduinoРисунок 19 – Отправка SMS через SIM900 GSM Shield

Обработка исключительных случаев

Все команды GSM/GPRS-модулей серии SIM800 имеют время исполнения

Разработчику ПО хоста важно знать время исполнения отдельно для каждой команды, чтобы исключить бесконечное ожидание реакции на команду (открытие соединения, к примеру). Значения максимального времени исполнения задокументированы, их можно найти в системе команд GSM/GPRS-модуля

В таблице 2 указаны значения максимального времени исполнения основных команд встроенного TCP/IP-стека. Как видно, некоторые команды исполняются десятки секунд. Это объясняется зависимостью этих команд от быстродействия сети и сервера.

Таблица 2. Максимальное время исполнения команд встроенного стека TCP/IP

Команда

Максимальное время исполнения, с

CIICR

85

CIPSTART

160

CIPSEND

645

CIPCLOSE

120

CIPSHUT

65

Рис. 6. Нормальная процедура закрытия соединения с сервером

Получается, некоторые команды могут исполняться несколько минут, прежде чем можно будет понять, что что-то пошло не так. В М2М такие задержки, конечно, недопустимы. Как же обрабатывать случаи, когда время исполнения команды затянулось, а реакции так и не последовало? Все зависит от того, на каком этапе установления соединения произошел сбой (ошибка или вышел таймаут) и в каком состоянии находится стек (рис. 6). Причин сбоя может быть несколько, и реакция может быть разная, но главное вернуть встроенный стек в исходное состояние IP INITIAL или IP STATUS. Рассмотрим на примере несколько случаев:

  1. Сервер вышел из строя или доступ в Интернет ограничен (потеря пакетов, высокий пинг и проч.). В этом случае все команды из таблицы 1 приведут к длительному времени исполнения. Чтобы повторить попытку соединения с этим или другим сервером, следует перед этим закрыть сокет командой AT+CIPCLOSE=1. При этом деактивировать контекст командой AT+CIPSHUT не обязательно.
  2. Потеря связи с GSM-сетью. Такое возможно в местах плохого покрытия сети, из-за ухудшения условий приема сигнала или внезапной выемки SIM-карты из прибора. Здесь следует проверить готовность SIM-карты (AT+CPIN? или чтение ячейки памяти командой AT+CMGR), уровень сигнала (AT+CSQ), наличие регистрации в сети (AT+CREG?) и доступ к услугам GPRS (AT+CGATT?). Если физический доступ к GSM-сети пропадет после или во время открытия сессии командой AT+CIPSTART, то придется закрыть соединение (AT+CIPCLOSE=1), деактивировать контекст и восстанавливать соединение с начала, сразу после того как будут успешно проверены SIM-карта, уровень сигнала, регистрация в сети и доступ к услугам GPRS.
  3. Истек срок жизни контекста. Когда открывается контекст, сеть выделяет определенные ресурсы на его поддержание. Операторы сотовой связи не допускают мертвые контексты, когда ресурс занят, а обмена данными в этом контексте нет. Если обмена данных нет, то через некоторое время оператор деактивирует контекст. У разных операторов это время разное примерно от трех до семи минут. Модуль при этом в порт UART выдаст уведомление: +PDP DEACT. Его нужно обработать и сбросить встроенный стек в исходное состояние командой CIPSHUT. Однако иногда в некоторых приложениях требуется поддерживать контекст в активном состоянии. Для этого можно периодически обмениваться с сервером пустыми данными, типа эха. Но это неудобно в реализации. Взамен можно воспользоваться функцией поддержания соединения командой AT+CIPTKA .
  4. Нагрузка на сеть GSM. Всем известно, что GPRS-услуги и голосовая связь делят общие ресурсы. GPRS всегда выделяется оператором по остаточному принципу, а у голосовых соединений наивысший приоритет. Контекст может быть деактивирован оператором принудительно. Внешне данный случай выглядит как предыдущий (п. 3), и обрабатывать его следует аналогично.

Следует предусмотреть случай, когда переинициализация соединения не дает желаемого эффекта. В этом случае рекомендуются штатное выключение/включение модуля и повторная попытка восстановить соединение с самого начала.

Использование

  • После сборки и прошивки устройство требует загрузки конфигурации (с помощью утилиты).
  • При подключении к USB нормальная работа устройства приостанавливается, очередь неотправленных сообщений очищается.
  • При неудачной отправке SMS, устройство произведет повторную попытку через 2 минуты, затем через 5, 10, 20, дважды через 40 и затем каждые 12 часов.
  • После принятого звонка, он будет завершен через 3 минуты.
  • Звуковая сигнализация включается на 30 секунд.
  • События «открытие двери», «движение» и «изменения освещения» срабатывают не чаще, чем раз в 20 мин.
  • Если питание устройства отсутствует более 3 часов, то записанная история измерения температуры сбрасывается.

Программное обеспечение для разработки EAT-приложений

Определившись с аппаратной частью, можно приступать к установке и настройке ПО для разработки EAT-приложений, которое можно запросить у локального дистрибьютора или у службы технической поддержки SIMCom Wireless Solutions .

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

  • RealView Development Suite v3. 1 сосредойразработкиEclipse ;
  • SIM800H_EAT_140516_ECLIPSE, пример проекта под среду Eclipse ;
  • 01, программа для записи ПО в память программ модуля ;
  • 1032, USB-драйвервиртуальногоCOM-порта.

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

Рис. 8. Импорт примера проекта

После нажатия кнопки Finish (рис. 8д) нужно очистить проект (рис. 9).

Рис. 9. Очистка проекта

После всего проделанного вы увидите окно проекта (рис. 10). Теперь код примера проекта можно модифицировать и компилировать при помощи интерфейса среды разработки.

Рис. 10. Окно среды разработки Eclipse с загруженным примером проекта

Окно среды разработки имеет несколько внутренних окон, имеющих различное назначение. Основным является окно текстового редактора, в котором собственно и пишется Си-код программы. Кстати, надо отметить, что редактор умеет классифицировать текст по содержанию и окрашивать его участки в различные цвета, автоматически выделять начало и конец функций и т. д. Это значительно упрощает процесс написания кода и анализ его текста.

Левее от текстового редактора расположен навигатор по проекту, в котором «под рукой» у программиста структура всех файлов, причастных к проекту, включая исходные файлы, бинарный файл ядра, документация, результаты компиляции и проч. Здесь же можно найти руководство программиста с подробным описанием архитектуры EAT и доступных API-функций модуля.

Подробнее о работе Eclipse можно ознакомиться на сайте www.eclipse.org/platform, а мы покажем, как создать свое ПО и записать его в модуль.

Для компиляции кода нужно пройти по меню Project->Build All, при этом в нижнем консольном окне не должно быть ошибок компиляции, иначе компилятор не создаст результат проекта — бинарный файл EAT, который можно записать в модуль.

Инициализация

Первым делом необходимо провести инициализацию и первичную настройку модуля SIM800L. Для этого в теле setup() вызываем подпрограмму init_GSM(), которая перезагружает модуль и последовательно отправляет команды:

AT
ATE0
AT+GSMBUSY=0
AT+CPAS
AT+CREG?
AT+CSQ
AT+CBC
AT+CUSD=1,»*111#»

Разберем назначение каждой команды:

  • AT – проверяем готовность модуля в приему команд.
  • ATE0 – отключаем режим ЭХО.
  • AT+GSMBUSY=0 – запрещаем входящие звонки.
  • AT+CPAS – проверяем готовностью и текущее состояние модуля.
  • AT+CREG? – проверка регистрации в сети.
  • AT+CSQ – проверка уровня сигнала.
  • AT+CBC – проверяем питание.
  • AT+CUSD=1,»*111#» – проверяем баланс SIM-карты.

Каждую команду необходимо проверять на наличие положительного ответа «ОК», в противном случае нужно заново отправить команду и дождаться нужного ответа. Как правило, при первом включении команда AT+CPAS с первого раза не дает ответ «ОК», обычно готовность появляется после 2-3 попыток.

На Рисунке 5 показан процесс выполнения подпрограммы init_GSM.

Рисунок 5. Процесс выполнения подпрограммы init_GSM.

На Листинге 1 показан пример обработки команды AT+CPAS.

Листинг 1. Программа обработки команды AT+CPAS.

Во время ответа от модуля в cycle_for() происходит сравнение и установка значения в bit_ok. Если значение равняется 1, то модуль вернул «ОК», при ответе 2 – модуль возвращает «Error». Если положительно ответа нет, то через 1 секунду повторяем отправку i раз.