что такое гсм модуль
Что означает GSM и для чего он нужен
Подбирая новый телефон или изучая новинки, пользователь регулярно видит в характеристиках строчку GSM 800/900/1800/1900. У него закономерно могут возникнуть вопросы «GSM: что это такое в телефоне?» и «Что означают эти цифры?». Эта статья постарается ответить на них, а также расскажет о том, как работает эта технология и какие привычные функции поддерживает.
Что значит GSM
GSM (Global System for Mobile Communications) или 2G – международный стандарт цифровой мобильной связи. Разработан сотрудниками Европейского института стандартизации электросвязи в 80-х годах 20 века.
Использует для передачи информации радиоканалы частотой 800/900/1800/1900 МГц. Мобильные телефоны, выпущенные после 2000 года, поддерживают этот стандарт.
Скорость передачи информации – до 19,5 кбит/сек. Максимальное расстоянием между телефоном и базовой станцией – 35 километров. При необходимости его можно увеличить с помощью репитеров, усилителей до 120 километров.
Эволюция GSM или что такое 2.5G и 2.75G
GPRS (General Packet Radio Service) или 2.5G – надстройка над стандартом GSM. Информация в ней передается в виде пакетов – сообщений, содержащих информацию об отправителе, получателе и передаваемые данные. Фрагмент фотографии, например.
EDGE (Enhanced Data rates for GSM Evolution ) или 2,75G – улучшенный вариант GPRS, использующий модуляцию 8PSK. Технология повышает скорость передачи до 270 кбит/сек.
Возможности GSM связи
Стандарт и надстройки поддерживают следующие функции:
Как это работает
В передаче сигнала между абонентами участвуют 2 элемента:
Работает GSM связь следующим образом:
По окончании обмена соединение разрывается, а устройство продолжает прослушивать радиоэфир.
Преимущества и недостатки GSM
Согласно Википедии, стандарт обладает следующими достоинствами:
К недостаткам относятся:
Подводя итог, можно сказать о GSM связи, то что этот стандарт позволил уменьшить телефоны, увеличить время автономной работы, улучшить качество связи и защищенность передаваемой информации.
Что такое GSM модуль
Простыми словами устройство сравнимо с радиоприёмником, в который встроена сим-карта, способная принимать и отправлять сигналы.
GSM модули отличаются низкой стоимостью, встраиваются в контрольные и охранные системы, управляются на расстоянии с простого смартфона. Чаще всего, располагаются на вертикальной поверхности.
Владелец GSM системы удалённо регулирует охранные, климатические осветительные, поливочные системы. Может перезагружать модемы/роутеры/серверы.
На рынке представлены сотни видом модулей, которые различаются по типу решаемых задач.
Принцип работы любого модуля
В результате, оборудование работает в заданных пользователем условиях, автоматизирует процессы, экономит владельцам время и деньги.
Типы GSM-модулей на основе их применения
Кроме перечисленных типов, GSM-модули применяются для автоматизации более узких задач — работы бензогенераторов, фотоловушек, медицинского мониторинга пациентов и в других областях.
GSM-модули управления климатом
Климатические GSM-модули автоматически поддерживают температуру в доме, гараже, теплице, сауне, взаимодействуя с отопительным котлом — повышают или понижают температуру.
Гарантийный срок зависит от производителя, составляет 12-24 месяца. За содержание устройств не нужно платить — затраты владельца автоматического оборудования ограничиваются платой за сотовую связь.
Рейтинг GSM-модулей управления климатом
На рынке множество устройств, которые управляют климатом посредством GSM-сигнала. Мы проанализировали отзывы от таких устройствах и составили рейтинг из трех самых популярных моделей.
3 место: КСИТАЛ GSM-4T
GSM-4T производится фирмой Кситал. К устройству на 4 входа подключаются термопередатчики в количестве 5 проводных и 25 радио.
Кроме контроля и регуляции климатических процессов, модуль регистрирует неисправности и оповещает владельца через СМС. Дистанционно мониторит подключение системы к сети с помощью опции антиглушителя.
Может управляться через мобильное приложение iKsytal. Легко программируется с телефона. Комплектуется набором ключей Touch Memory
2 место: ZONT H1 GSM-Climate
Модель ZONT H1 GSM-Climate от российской компании Микро Лайн работает с одной сим-картой, передаёт данные по GPRS-каналу. Шлейф для подключения — 100 метров. Число проводных и беспроводных передатчиков — 10 штук.
Кроме ввода индивидуальных настроек, владелец модуля может использовать готовые режимы Комфорт/Эконом/Антизаморозка, подключать радио-датчики, контролирующие утечку газа, потерю воды, задымление
1 место: Телеметрика Т3
Гарантия на Телеметрику Т3 производства КНР 24 месяца. Устройство соответствует стандартам Евразийской декларации и требованиям таможенного союза на предмет электромагнитной совместимости с бытовыми отопительными приборами. Имеет 8 проводных и беспроводных датчиков и блок бесперебойного питания на 12 часов.
В устройство встроена мини сим-карта, подача данных осуществляется на 5 номеров. Канал обмена информацией — GSM.
Устройство адаптировано к некоторым моделям котлов фирмы OpenTherm. Обновления прошивки скачиваются и устанавливаются онлайн. Управлять Телеметрикой можно через приложения IOS и Android.
GSM-модули управления Контролем доступа
Задача GSM модуля для управления контроля — дистанционно регулировать вход/выход людей и транспортных средств на территорию.
Датчики устанавливаются на двери, окна, ворота, шлагбаумы.
ТОП-3 лучших GSM-модулей управления контроля доступа
3 место: ELANG PowerControl v2.0S
Модель GSM предназначена для управления доступом ограниченного числа пользователей. Объем БД зависит от ёмкости SIM-карты, максимальное количество номеров 250.
Устройство настраивается на промежуток срабатывания от 1 до 120 сек.
2 место: GSM/GPRS(WEB) модуль управления шлагбаумом и воротами RTU5025
GSM RTU5025 работает на мини-симкарте. Настраивается через приложения для Android и iOS, звонок и СМС.
Функционирует до 20 часов на БП. Обслуживает базу из 999 номеров.
1 место: DoorHan GSM-3.0 GSM модуль
Модуль DoorHan GSM-3.0 принимает мобильные сигналы, преобразуя в команду для шлагбаума/ворот. Работает с картой nano-SIM.
Связывается с пользователем только через канал 2G. После приёма звонка, соединение с абонентом не осуществляется, поэтому, расходов по связи нет.
GSM-сигнализации
GSM-модули охранной сигнализации относятся к защите пассивного типа, бывают проводные и беспроводные. Регистрируют события, связанные с угрозой имуществу или безопасности людей.
Делятся на типы — автономный и пультовый. В первом случае о форс-мажоре оповещается пользователь с помощью смс/дозвона. Во втором — централизованный пульт наблюдения.
Работа строится на функциях аудио прослушивания, видеотрансляции, оборудование оснащается защитой от помех, но такая функция интегрируется редко.
GSM-охрана приобретает популярность за счёт доступной стоимости, дешёвого содержания, лёгкой настройки.
ТОП-3 GSM-сигнализаций
3 место: ATIS ATIS Kit-GSM100
GSM-модуль ATIS Kit-GSM100 поддерживает 2 проводных и 99 беспроводных зон. Комплект включает беспроводных 8 пультов для управления. Система может дополняться другими дистанционными устройствами. Пользователь управляет настройками зон в независимом друг от друга режиме — 24 часа/мгновенно/с задержкой/обход, присваивает зонам имена.
Устройство поддерживает беспроводную сирену, частотой 315 МГц с регулируемым звуком, записывает 10-секундное сообщение в случае тревоги
2 место:Охранная сигнализация ALFA G50 со встроенным GSM модулем
ALFA G50 реагирует на нежелательную ситуацию в диапазоне 0,1-90 секунд с мощностью сирены в 120 дБ. Поддерживает беспроводные и проводные зоны в соотношении 99/4. Оповещает пользователя звонком на 4 номера и СМС-сообщением на 3.
Гарантия устройства составляет 12 месяцев. Управляется модуль через GSM и телефонное PSTN подключение.
1 место: Сигнализация GSM «Shield Touch 2»
Модуль Shield Touch 2 оповещает о тревоге сиреной, мощностью 80 дБ. Имеет опцию прослушивания, покрывает 99 беспроводных и 20 проводных зон. Связывается с мобильным устройством звонком и смс на 8 номеров.
Каналы управления — Wi-Fi, GSM, телефон. Устройство адаптировано к поддержке умных розеток — до 20 штук. Координирует электроприборы удалённо — включает и выключает в автоматическом режиме согласно расписанию.
GSM-модули для автомобилей
Популярные модели — СтарЛайн, ТК102В, DYTECH GTO2, XEXUN TK-102, Bilarm GPS/GSM universal, ZONT ZTC-110.
GSM-модули мультифункциональные для Arduino
Arduino — бесплатная программная платформа с возможностью компилировать собственные коды для создания роботов и систем автоматизаций. Представляет собой комплект печатных плат, память и процессор. Подключение автоматизированных объектов производится проводным/беспроводным способом.
Успех Arduino обусловлен простотой — пользователь, будучи непрофессионалом в программировании, может подключить к контактам платформы любые электроприборы, а затем удалённо управлять объектами по заданному алгоритму. Очевидно, что вариативность возможных автосистем практически бесконечна. Arduino взаимодействует с модулями GSM и GPRS посредством сотовой связи.
ТОП-3 самых популярных GSM-модулей для Arduino
3 место: GSM модуль NEOWAY M590
Модель фирмы NeoWay с приёмопередатчиком M590E востребована, главным образом, в любительских системах. Хотя, до недавнего времени выпускалась для нужд финансовых учреждений. На базе модуля разработаны схемы регистраторов автосигнализаций, охранных устройств, генераторов.
Управляется NEOWAY M590 командами АТ через компьютер или планшет, Arduino-платформу или микроконтроллер.
2 место: Шильд GSM/GPRS SIM900 для Arduino
GSM/GPRS на чипе SIM900 полностью поддерживает GSM и GPRS связь. К микроконтроллеру подсоединяется через UART-интерфейс. По pin 0,1 подключается к системе Serial, по pin 7,8 к SoftwareSerial.
Для питания можно выбрать внешний блок или 5 В от Arduino. В последнем случае мощности для сложных комбинаций не хватит.
Модель SIM900 взаимодействует с контроллером командами AT. Сетевое соединение отображает Net light индикатор. В модуле есть разъёмы для связи после вызова — для микрофона и динамика.
1 место: Arduino MKR GSM 1400 с Global GSM
Модель Ардуин на микроконтроллере MKR GSM 1400 с двумя типами памяти — FLASH на 256 Кб и SRAM на 32 Кб разработана для мастеров, которые хотят свои проекты Интернета вещей снабдить GSM-связью, но имеют слабую компетенцию работы в сети и нуждаются в простых интуитивных решениях.
Питание платы осуществляется батареей Li-Po или через внешний источник мощностью 5 В, может подаваться через USB разъем.
Тактовая и несущая частота модуля 32.768 кГц/48 МГц и 433/868/915 МГц соответственно. Габариты всего 6,8х2,5 см при весе 32 г.
Перечисленные в обзоре GSM модули — малая часть ассортимента, представленного на рынке. Установку оборудования в массовом порядке начали предлагать операторы связи. Абонентская плата 10-15 рублей в день с учётом выкупа оборудования даёт представление о доступности систем и возможности для любого потребителя купить устройство.
Принцип работы и правила выбора GSM-модуля
Строитель 4 разряда
Для организации дистанционного управления любой автоматикой с телефона, работающего в режиме GSM, часто используется ДЖСМ-модуль. С помощью этого устройства можно открывать ворота в гараже, удаленно управлять системой полива и т.д. Так как соединение для разговора во время работы с модулем не устанавливается, то не нужно беспокоиться об оплате услуг связи.
Существует несколько критериев выбора модуля
Принцип работы
Устройство представляет собой приемник радиоволн, в который установлена сим-карта любого оператора сотовой связи. Получаемую информацию ДЖСМ-модуль обрабатывает с помощью специального контроллера. Кроме этого, в девайсе есть база телефонных номеров пользователей, имеющих право входить на закрытую территорию. В момент звонка контроллер сравнивает входящий номер с записанной информацией, и если абонент находится в списке, отдает команду на приведение в действие привода.
В противном случае GSM-модуль сбросит звонок, не выполняя при этом никаких действий. Некоторые модели позволяют отключить процесс идентификации пользователя, и контроллер активирует исполнительный механизм при любом звонке. В зависимости от девайса блок управления может быть настроен с помощью веб-интерфейса, ПК, подключенного через интерфейс USB, смс-команд и т.д.
В этом видео вы узнаете, как выбрать GSM модуль:
Преимущества и недостатки
Главным минусом систем, основанных на GSM-module, является то, что исполнительный привод не будет активирован при разряженном аккумуляторе телефона. Впрочем, аналогичный недостаток присущ всем системам дистанционного управления. Преимуществ у GSM-систем значительно больше:
Особенности выбора и область применения
Беспроводные технологии постоянно совершенствуются и становятся все более доступными для широкого круга потребителей. Чтобы устройство нормально функционировало, необходимо продумать место его установки. Выбор конкретной модели будет сложно сделать, если не разбираться в особенностях работы системы.
Одним из важнейших моментов является тип объекта. Именно от этого зависят технические характеристики, по которым и предстоит выбирать девайс. Если это квартира, то устройство должно обеспечить надежную защиту от проникновения посторонних лиц. В такой ситуации стоит отдать предпочтение GSM-системе с датчиком движения.
Не менее важным параметром является и диапазон рабочих температур. Не все импортные модели смогут нормально функционировать в условиях зимней погоды. Современные отечественные модули практически не уступают западным аналогам и становятся все более популярными среди пользователей.
Сначала эти устройства активно применялись в системах сигнализации и видеокамерах. Однако сегодня сфера их использования значительно расширилась. Модули GSM можно устанавливать на различное оборудование, оснащенное электрическим приводом. В качестве примера можно привести:
Довольно часто они используются на въездах в крупные жилые комплексы или коттеджные поселки. Если сравнивать модули GSM с другими типами охранных сигнализаций, то можно легко заметить существенную экономию, так как достаточно приобрести только автоматический шлагбаум и GMS-систему, управление которой будет осуществляться с телефона.
Популярные модели
В продаже сегодня можно найти большое количество модулей GSM. Они отличаются техническими характеристиками и стоимостью. Знакомство с особенностями популярных моделей позволит сделать правильный выбор.
Устройство DoorHan
Устройство комплектуется антенной на магните и кабелем для ее подсоединения. Она может быть установлена на любой металлической поверхности. Кроме этого, девайс оснащен кабелем USB для подключения к ПК и последующей тонкой настройки системы. Соответствующий софт можно быстро скачать с официального сайта производителя. Также настроить систему можно с помощью смс-команд.
Модуль Teltonika VRT012
Также довольно высокой популярностью пользуются устройства компаний Excellent и Кситал. Некоторые модели при установке в автомобили позволяют дистанционно активировать силовую установку. Это может быть весьма полезно зимой.
Сегодня подобрать модуль в соответствии с решаемой задачей не составит труда. Все эти устройства позволяют обеспечить надежную охрану объекта.
Опыт применения GSM модуля в домашней автоматизации
На даче холодно, и вы хотите за несколько часов до своего приезда туда включить обогреватель, или вас беспокоит возможность аварийного отключения системы отопления загородного дома в ваше отсутствие. Все эти проблемы можно решить с помощью GSM модуля, который умеет отправлять и получать SMS сообщения и реагировать на них, включая и выключая нужную нагрузку. В теории все просто, на практике же на пути реализации подобного устройства есть множество подводных камней.
Мой план заключался в том, чтобы создать простое и дешевое устройство, оснащенное двумя датчиками температуры, датчиком влажности, GSM модулем, а также твердотельным реле и розеткой для подключения нагрузки. То, что получилось в итоге, можно увидеть на фото. В качестве датчика температуры и влажности был выбран климатический сенсор BME280, его канал давления не используется. На фото его можно увидеть под прозрачным колпачком слева от основного модуля. Такое расположение уменьшает влияние тепловыделения внутри корпуса на показания датчика. В качестве колпачка используется китайская пластиковая пробирка с двумя отверстиями для вентиляции. Второй датчик температуры выносной, сделан на DS18B20. Он расположен внутри металлического зонда, с корпусом соединен кабелем через обычный аудио разъем для наушников. Зонд предназначен для измерения температуры непосредственно отопительной системы. Основной объем корпуса занимает твердотельное реле (я выбрал помощнее) и преобразователь из 220В в 5В для питания схемы. Розетка для подключения нагрузки смонтирована на задней стороне корпуса, на фото она не видна. OLED дисплей на базе контроллера SH1106 отображает показания датчиков, а также показывает, включена ли нагрузка. Для управления всей системой используется модуль Arduino Pro Mini в версии 3.3В 8МГц. Я не большой фанат этой платформы, но обилие библиотек, в том числе заботливо выпиленных автором, делает ее оптимальным выбором, когда нужно быстро сделать что то простое.
GSM модуль SIM800L размещен в отдельном металлическом корпусе для уменьшения создаваемых им помех на остальные части схемы. Как показала практика, помехи от этого уменьшаются не сильно. А радикально их уменьшает выносная антенна, подключенная экранированным кабелем к коаксиальному разъему, на фото выше она на переднем плане. Но об этом подробнее мы поговорим позже.
Про использование GSM модулей написано немало статей, в том числе на хабре, поэтому я буду избегать повторений и расскажу о том, что не встречалось мне в публикациях на эту тему, а именно о том, как сделать на базе этого модуля надежно работающее устройство.
В гаражах, где я частенько бываю, недавно поставили на въезде шлагбаум, который открывается, если позвонить на определенный номер. Судя по всему, он сделан на похожем GSM модуле. Меня удивило, как сложно бывает дозвониться по этому номеру, чтобы он открылся. Теперь я знаю множество причин для этого. Это знание стоило мне нескольких месяцев экспериментов и внушительного количества потраченных на них денег. Я надеюсь, что теперь это знание послужит кому то еще. Рассмотрим, на что важно обратить внимание, продвигаясь от очевидных аппаратных проблем к менее очевидным программным.
Первое, что важно сделать правильно, — вставить сим-карту
Мне казалось очевидным, что сим-карта вставляется скошенным уголком вперед. С неделю я пытался понять, почему модуль не желает регистрироваться в сети, попутно осваивая команды в терминале. В итоге на каком то англоязычном форуме я нашел упоминание о том, что вставлять ее нужно скошенным уголком назад. Странно, что она вообще вставляется и так и эдак.
Чтобы хорошо работать, нужно хорошо питаться
Требования к питанию у GSM модуля достаточно специфические. Он сделан на базе микросхемы, разработанной для кнопочных мобильных телефонов, и рассчитан на питание непосредственно от литиевого аккумулятора. Поэтому, 5В для него много, а 3.3В — мало. К тому же, в режиме передачи на максимальной мощности он способен потреблять ток до 2А. Если источник питания не способен обеспечить нужный ток, GSM модуль может перезагрузиться при попытке регистрации в сети и продолжить перезагружаться в бесконечном цикле. Периоды пикового потребления обычно длятся меньше секунды, поэтому есть соблазн применить слаботочный стабилизатор с накопителем энергии для периодов пиковой нагрузки. В качестве такого накопителя можно применить литиевый аккумулятор. При этом важно обеспечить возможность его отключения и важно не забыть ей воспользоваться, иначе отключение устройства от сети закончится глубоким разрядом аккумулятора и его необратимым повреждением. Другой вариант — это поставить вместо аккумулятора ионистор (суперконденсатор). Он не боится глубокого разряда. Но у него тоже есть проблемы с надежностью. Одна ячейка ионистора обычно рассчитана на напряжение от 2.5 до 3В. Ионисторы, рассчитанные на большее напряжение, состоят из нескольких ячеек (обычно из 2-х). При этом, однако, дисбаланс напряжения на ячейках может закончится пробоем ячейки. Такой дисбаланс легко получить за счет разницы в емкости ячеек или разницы в токе утечки. Следует также учитывать параметр внутреннего сопротивления ионистора. Ионисторы с большим внутренним сопротивлением на больших токах бесполезны, а ионисторы с малым сопротивлением стоят не дешевле аккумулятора. После того, как у меня ионистор скоропостижно скончался из-за дисбаланса ячеек, я просто применил преобразователь из 220В в 5В достаточной мощности. Чтобы понизить напряжение до нужного GSM модулю, я поставил между преобразователем и модулем обычный кремниевый диод. На таком диоде обычно падает 0.7В, так что модулю достаются необходимые 4.3В. После диода полезно поставить электролитический конденсатор большой емкости. Он сгладит провалы напряжения при внезапном включении передатчика.
От передающей антенны лучше держаться подальше
Даже после того, как я обеспечил GSM модулю требуемое питание, симптом перезагрузки периодически проявлялся, но на этот раз перезагружалась Arduino. Наблюдение за ее питанием при помощи осциллографа показало, что питание тут непричем. Судя по всему помеху создавал передатчик модуля, поскольку проблема возникала тем чаще, чем хуже были условия приема сигнала базовой станции. Столь радикальный эффект помех от передающей антенны вполне объясним, если вспомнить, что передатчик модуля способен выдать в антенну 2 ватта. Такая мощность может за 5 минут вскипятить миллилитр воды или нагреть ваше ухо на несколько градусов. Для борьбы с этой проблемой были опробованы разные методы. Для начала я подключил внешнюю антенну, которая располагалась снаружи корпуса и соединялась с модулем коротким коаксиальным кабелем. Однако, ожидаемого эффекта это не дало. Тогда я расположил модуль в отдельном металлическом корпусе, к которому снаружи крепилась антенна. Стало лучше, но не сильно. Радикально улучшил ситуацию только вынос антенны на некоторое расстояние от устройства за счет ее подключение коаксиальным кабелем достаточной длины.
Почему так происходит, легко понять из физических соображений. Типичная антенна — это ‘четвертьволновой штырь’, то есть половинка от дипольной антенны. Но, чтобы создать электрическое поле, половинки диполя недостаточно, нужна вторая половинка, тогда между отрицательно и положительно заряженными элементами антенны возникнет электрическое поле. У правильной штыревой антенны второй половиной является либо поверхность земли, либо корпус прибора, либо специальные проводящие ‘противовесы’. Но для маркетологов все это слишком сложно, поэтому нам обычно продают только половинку от нормальной антенны. Как же она работает? Очень просто — второй половинкой является кабель, которым подключена антенна. То, что он экранирован, ничего не меняет. Внешняя поверхность его оплетки играет роль второй половинки дипольной антенны. При этом помеха легко наводится на проходящие по соседству провода несмотря на то, что кабель казалось бы экранирован. Ну а если кабеля нет, например мы спрятали модуль в металлический экран, из которого торчит антенна? Если экран большой (по сравнению с длиной волны), то он работает, как вторая половина излучателя, а если маленький, то излучают прочие провода, которые подведены к этому модулю, совершенно не важно, какие. Следующий рисунок иллюстрирует вышесказанное (плюсы и минусы показаны для наглядности, в реальности заряд элементов антенны меняет знак с частотой несущей).
Слева показана ‘правильная’ антенна, ее подводящий кабель не излучает помех. На среднем рисунке показана антенна, которую вы обычно покупаете. Здесь подводящий кабель является частью излучателя и создает помехи проходящим поблизости проводам. Справа показана ситуация, когда источник сигнала спрятан в компактный экранированный корпус. Здесь любые провода, подведенные к такому корпусу, являются частью излучателя.
Мораль заключается в том, что единственный надежный способ защититься от помех, создаваемых передающей антенной, — унести ее подальше от остальной электроники, подключив коаксиальным кабелем достаточной длины. Какая длина является достаточной? Расстояние естественно соизмерять с длиной волны, в данном случае это максимум 30 см. Это и есть минимальное расстояние на которое следует отнести антенну, но чем дальше, тем лучше.
Не все последовательные порты одинаково полезны
В простых AVR микроконтроллерах, которые все обычно и используют, аппаратный последовательный порт всего один, и он используется для загрузки программы. Поэтому, программная реализация последовательного порта является очень популярным решением. Я собираюсь доказать утверждение, которое многим покажется неожиданным, — для управления GSM модулем программная реализация последовательного порта непригодна вообще.
Суть проблемы в том, что программная реализация последовательного порта запрещает прерывания на все время передачи или приема очередного символа. Казалось бы, что в этом плохого, так многие делают. Например, реализация протокола 1-Wire для чтения термометров Dallas Semiconductor тоже запрещает прерывания на время передачи одного бита, то есть на 65 микросекунд. Это конечно тоже не слишком хорошо. Если в системе есть другие обработчики прерываний, они не смогут обеспечить время реакции на прерывание меньше этих 65 микросекунд. Если запрос на прерывание приходит, когда они запрещены, он будет обработан только после того, как прерывания разрешат снова. Например, аппаратный последовательный порт использует прерывания для того, чтобы положить в буфер приемника очередной принятый символ. Если следующий символ придет, пока не обработано прерывание от предыдущего, тот будет потерян. Это значит, что работать со скоростью больше 115200 бит в секунду аппаратный последовательный порт не сможет. В случае программной реализации последовательного порта все хуже. Для его работы нужно, чтобы время реакции на прерывание было меньше времени передачи одного бита. Это ограничивает нас скоростью 9600 бит в секунду.
Более серьезная проблема заключается в том, что программная реализация последовательного порта сама запрещает прерывания. Причем время, на которое она их запрещает (время передачи или приема одного символа) всегда примерно в 10 раз больше, чем максимальное время обработки прерывания, требуемое для корректной работы приемника того же программного последовательного порта. То есть, он всегда мешает сам себе до такой степени, что одновременно не может принимать и отправлять данные. Конечно, в большинстве случаев это и не требуется. В большинстве, но не в нашем случае с GSM модулем. Он таки может неожиданно для нас по собственной инициативе начать передавать данные (например при получении SMS сообщения). И в случае применения программной реализации последовательного порта это легко может привести к сбою протокола обмена с модулем. Поэтому, я просто применил один и тот же аппаратный последовательный порт и для программирования Arduino и для общения с GSM модулем. Неудобно конечно, но это единственный способ сделать надежно работающее устройство.
Асинхронному протоколу — асинхронный обработчик
Асинхронный протокол — это такой протокол, при котором одна сторона обмена может начать передавать информацию неожиданно для другой стороны, то есть без всякой синхронизации с ее сообщениями. Именно таков протокол обмена с GSM модулем. Он исправно отвечает на запросы со стороны Arduino, но может и начать передавать что то свое, например сообщить о принятом SMS сообщении. И это создает реальную проблему, поскольку ни одна из известных мне библиотек для работы с модулем под Arduino асинхронность протокола не учитывает вообще никак. Представим себе, что Arduino передала модулю команду, а модуль в тот же самый момент передал информацию о принятом SMS сообщении. Эта информация будет принята вместо ответа на команду. В результате в качестве ответа на команду библиотека вернет ошибку (в лучшем случае, в худшем все ‘повиснет’), а сообщение о принятом SMS будет потеряно.
Починить это легко — нужно просто написать свой, асинхронный обработчик протокола. Асинхронный обработчик предъявляет только необходимый минимум требований к ответам модуля на его команды. На каждую команду модуль в итоге отвечает либо OK, либо ERROR. И это все, что нужно для того, чтобы зафиксировать ответ. Все остальные строки, которые приходят от модуля, обрабатываются независимо от того, пришли они в ответ на команду или сами по себе. Смысл этих строк всегда можно определить по их началу. Если строка начинается с +CSQ, то она содержит информацию о качестве сигнала. Если она начинается +CMT, то это информация о полученном SMS, и в ней содержится адрес отправителя. Первая строчка посылается в составе ответа на команду AT+CSQ, а вторую модуль присылает по собственной инициативе, но для нас это различие абсолютно несущественно. Принятые SMS сообщения модуль направляет непосредственно в последовательный порт. Это позволяет избежать чтения их из памяти и последующего удаления. Чтобы мы могли распознать SMS сообщения в общем потоке сообщений от модуля, они должны начинаться с символа #, в противном случае сообщение игнорируется.
Созданная автором библиотека, реализующая вышеописанный подход, находится здесь.
Чтобы получать строки, начинающиеся с определенной последовательности символов, клиент создает специальный объект — ловушку. Таких ловушек он может создать любое количество. Полученные от модуля строки, отличные от OK, ERROR, которые не попали ни в одну из ловушек, просто игнорируются. Поскольку такая архитектура не требует полного анализа ответов модуля на множество различных типов команд, код библиотеки в разы компактнее любой из известных мне библиотек.
Что в итоге?
В итоге получилось устройство, которое надежно работает в зоне со слабым покрытием, даже лучше, чем среднестатистический телефон. Ниже приведена его полная схема.
Для заинтересовавшихся — ссылка на гитхаб, где вы найдете исходники проекта и описание команд, которые можно посылать устройству в SMS сообщениях.