Освоение GSM на базе модуля SIM900D

Не так давно друг предложил мне работу, связанную с созданием прошивки для микроконтроллера, который должен был связываться с сервером при помощи GSM-модуля SIM900D . Ранее я с программированием микроконтроллеров дела не имел, да и на C программировал последний раз в студенческие времена, но любопытство перевесило и я принялся за работу. Документация по данной железке присутствует в интернете, однако хороших примеров работы с TCP/IP в коде найти не удалось. Ничего не оставалось, кроме как обложиться документацией, запастись сигаретами и чаем и приступить к лавированию между граблями. А граблей оказалось немало. Собственно, поэтому я и написал эту статью - чтобы другим было легче.

Что было нужно

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

Что получилось в итоге

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

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

И как оно выглядит?

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

Функции, которые требуются коду:

  • uint16_t init_serial_port(char *port_name) Эта функция настраивает указанный последовательный порт. Под Windows.
  • uint16_t puts_serial(uint8_t *buffer, uint16_t size) А эта пишет строку байт в этот порт.
  • gets_serial(uint8_t *buffer, uint16_t size) Эта, соответственно, читает строку байт из последовательного порта.
Функции, которые код предоставляет:
  • init_gprs() & stop_gprs() Соответственно инициализируют и вырубают GSM-модуль.
  • uint16_t connect_gprs(uint8_t index, uint8_t mode, char *address, char *port) Устанавливает подключение с сервером. Стоит отметить, что модуль умеет работать с протоколами TCP и UDP как в качестве клиента, так и будучи клиентом. Поддерживается максимум 8 одновременных подключений.
  • uint16_t close_gprs(uint8_t index) Закрывает указанное подключение.
  • uint16_t send_gprs(uint8_t index, uint8_t *buffer, uint16_t size) Отправка сообщения через указанное подключение.
  • uint16_t recv_gprs(uint8_t index, uint8_t *buffer, uint16_t size) Получение сообщения. Неблокирующая функция, что значит она не будет ждать появления данных в потоке, а вернет управление, если получать нечего. Стоит отметить, что такое поведение реализовать проще, чем блокирующее.

Как работать с последовательным портом

Это достаточно просто. Под целевой микроконтроллер есть макросы для отправки/получения данных через USART , но так как отлаживать такой код проще со стационарного компьютера, мне была предоставлена связка из переходника USB<->USART и GSM-модуля. Оставалось только научиться работать с последовательным портом под Windows. Это оказалось просто. Вкратце, последовательный порт представляется в ОС обычным файлом, передача информации осуществляется функциями ReadFile и WriteFile . Нужно только установить кое-какие параметры при помощи функций SetCommTimeouts и SetCommState .

Вот как выглядит функция инициализации порта:
uint16_t init_serial_port(char *port_name) { COMMTIMEOUTS timeouts; DCB parameters; int result; serial_port_handle = CreateFile(port_name, // "\\\\.\\COMx" GENERIC_READ | GENERIC_WRITE, 0, // Значения последующих параметров фиксированы при работе с портом NULL, OPEN_EXISTING, 0, NULL); if (serial_port_handle == INVALID_HANDLE_VALUE) { printf("Error opening a serial port!\n"); return 1; } // Максимальное время между чтением двух байт подряд timeouts.ReadIntervalTimeout = 100; // Следующее значение умножается на количество читаемых из порта символов timeouts.ReadTotalTimeoutMultiplier = 0; // и прибавляется к этому значению, получается максимальное время на выполнение // всей операции timeouts.ReadTotalTimeoutConstant = 1000; // Значение то же, что и у предыдущих двух параметров, однако таймаут считается на запись. timeouts.WriteTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = 1000; result = SetCommTimeouts(serial_port_handle, &timeouts); if (result == 0) { printf("Error setting timeouts for serial port!\n"); close_serial_port(); return 1; } // В параметры порта занесены самые простые настройки - без контроля // четности, без управления потоком, 1 стоп-бит. memset(¶meters,0,sizeof(parameters)); parameters.DCBlength = sizeof(DCB); GetCommState(serial_port_handle, &parameters); parameters.BaudRate = (DWORD)BAUD_RATE; parameters.ByteSize = 8; parameters.Parity = NOPARITY; parameters.StopBits = ONESTOPBIT; parameters.fAbortOnError = TRUE; parameters.fDtrControl = DTR_CONTROL_DISABLE; parameters.fRtsControl = RTS_CONTROL_DISABLE; parameters.fBinary = TRUE; parameters.fParity = FALSE; parameters.fOutX = FALSE; parameters.fInX = FALSE; parameters.XonChar = (uint8_t)0x00; parameters.XoffChar = (uint8_t)0xff; parameters.fErrorChar = FALSE; parameters.fNull = FALSE; parameters.fOutxCtsFlow = FALSE; parameters.fOutxDsrFlow = FALSE; parameters.XonLim = 128; parameters.XoffLim = 128; result = SetCommState(serial_port_handle, &parameters); if (result == 0) { printf("Error setting serial port parameters!\n"); close_serial_port(); return 1; } return 0; }

Как происходит общение с GSM-модулем

После того, как последовательный порт настроен, в него можно отправлять AT-команды. Первой командой должна быть последовательность "AT\r" , позволяющая модулю автоматически настроить скорость передачи по последовательному порту. Ответ, который можно получить после этого из порта, будет выглядеть как "AT\r\r\nOK\r\n" .

Команда является простой строкой из ASCII-символов. Чтобы команду воспринял модуль, в ее конце нужно поставить символ перевода каретки "\r" . В ответ модуль передаст строку символов, состоящую из двух частей - команды, на которую модуль отвечает и отделенным от нее символами "\r\r\n" ответом, заканчивающимся символами "\r\n" . Чтобы было удобнее разбирать ответы я создал макрос, который устанавливает указатель на начало ответа в принимающем буфере. Если хочется вывести ответ в консоль, нужно добавить нулевой символ в конец принятого сообщения.

Void at_send(char *cmd, uint16_t size) { uint16_t result; cmd = "\r"; result = puts_serial(cmd, size); return; } uint16_t at_recv(uint8_t *buffer, uint16_t size) { uint16_t result; result = gets_serial(buffer, size); return result; }
Примерно так и выглядят вспомогательные функции для отправки команды и получения ответа.

Инициализация модуля

Самая большая функция в коде отвечает за настройку модуля. При инициализации отправляется много AT-команд. Я опишу их в порядке посылки модулю. Специально не расписываю аргументы и варианты ответов подробно, ибо их можно найти в документации.
  • "AT+CPIN=pin-code" Как несложно догадаться, эта команда разблокирует SIM-карту путем ввода пин-кода. Чтобы проверить, требуется ли пин-код, можно использовать команду "AT+CPIN?" .
  • "AT+CREG?" Эта команда возвращает статус регистрации модуля в сети. Нужно выполнять ее, пока модуль не ответит, что в сети он зарегистрирован.
  • "AT+CGATT=1" Заставляет модуль подключиться к GPRS. Проверить, подключен ли он, можно командой "AT+CGATT?" .
  • "AT+CIPRXGET=1" Включает получение данных, переданных через соединение, вручную. По умолчанию этот параметр отключен и данные передаются в последовательный порт сразу после получения. Это не слишком удобно, хотя и не критично - можно настроить модуль так, чтобы вместе с данными он передавал и заголовки IP, по которым можно определить, от кого был получен пакет. Я решил, что вручную данные получать проще и не ошибся. Как я понял, данная команда воспринимается только GSM-модулями SIM.COM.
  • "AT+CIPMUX=1" По умолчанию модуль может устанавливать только одно подключение. Этот параметр включает возможность создавать несколько подключений. Отправка и прием данных будут отличаться только на один параметр - индекс подключения.
  • "AT+CSTT="internet"" APN - Access Point Name, имя точки доступа для GPRS. Для моего провайдера выглядит именно так.
  • "AT+CIICR" Устанавливает беспроводное подключение GPRS. Может занять некоторое время, так что ее нужно выполнять в цикле и проверять ответ.
  • "AT+CIFSR" Возвращает IP-адрес модуля. Я использую ее чтобы проверить, подключен ли модуль к интернету.
  • "AT+CDNSCFG="8.8.8.8","8.8.4.4"" Этой командой устанавливаются сервера DNS, которые будет использовать модуль.
  • "AT+CIPSTATUS" Помимо данных о состоянии подключений эта команда дает информацию о том, готов ли модуль к установке соединений. Так что нужно проверить ее ответ.
После выполнения этих команд модуль будет готов к работе. Ну или не будет. Тут уж как повезет.

Установка и разрыв подключений

Создание подключения производится командой "AT+CIPSTART=index,"mode","address","port"" .
  • index указывает порядковый номер подключения, может принимать значения от 0 до 7.
  • mode определяет протокол, который будет использоваться соединением. Может быть «TCP» или «UDP».
  • address задает адрес сервера. Если при настройке были указаны DNS-сервера, то можно использовать как IP-адрес, так и доменное имя.
  • port задает порт сервера, с которым будет устанавливаться соединение.
Замечу, что при использовании протокола UDP по умолчанию датаграммы будут отсылаться и приниматься только с одного адреса. Для того, чтобы использовать UDP на полную катушку и отсылать/принимать данные с любых адресов, можно использовать так называемый расширенный режим UDP, настраиваемый командой "AT+CIPUDPMODE" . За подробностями отсылаю к документации.

В ответ на команду можно получить несколько вариантов ответов. Если все хорошо, то после стандартного "OK" через небольшой промежуток времени можно получить один из трех ответов:

  • "index,ALREADY CONNECT" это значит, что подключение с заданным индексом уже установлено и стоит его поискать.
  • "index,CONNECT OK" тут все очевидно.
  • "index,CONNECT FAIL" означает, что возникли проблемы с установкой соединения.
Разорвать соединение можно командой "AT+CIPCLOSE=index" . Разорвать все соединения и деактивировать интерфейс GPRS можно командой "AT+CIPSHUT" .

Передача данных

Данные передаются командой "AT+CIPSEND=index,length" , где index указывает подключение, по которому нужно передать данные, а length задает длину пакета данных. Кстати, узнать MTU для каждого подключения можно при помощи команды "AT+CIPSEND=?" .

Если все хорошо, то модуль в ответ на команду выдаст приглашение ">" , после которого нужно переслать в последовательный порт данные. Как только модуль получит количество байт, равное length , он скажет что-то типа "index,SEND OK" . Вообще, можно не использовать параметр length , однако в таком случае окончание пакета данных должно быть указано явно при помощи символа 0x1A , в терминале сочетание Ctrl+Z. Для передачи произвольных данных такой вариант, очевидно, не подходит.

Как видите, передача данных - процесс не слишком сложный. Поэтому переходим к самому интересному - приему данных.

Прием данных

Как только GSM-модуль принимает данные, он сигнализирует об этом, посылая в последовательный порт строку вида "+CIPRXGET:1,index\r\n" . Я честно не знаю, что означает единица, ибо данная функция модуля документирована достаточно слабо, но у меня она фигурирует во всех сообщениях о приеме пакета.

Мне не доставляла радости мысль о том, что придется тем или иным образом отслеживать сообщения модуля. Однако, немного поигравшись с дебаггером, я выяснил, что никаких других асинхронных сообщений модуль не посылает, а также то, что после выполнения любой AT-команды это сообщение оказывается в начале буфера. Так как я составил макрос для отделения ответа от команды путем поиска подстроки "\r\r\n" , меня это никоим образом не задевало. Так что функция приема данных была реализована достаточно просто.

Так вот, принимать данные можно командой "AT+CIPRXGET=2,index,length" . Двойка означает режим приема, в данном случае байты просто высыпаются в последовательный порт. Можно также задать получение данных в виде HEX-текста, видимо, ради предотвращения конфликтов с программным управлением потоком . Мне это не потребовалось, ибо управление потоком я вообще не использую. Параметр length задает размер пакета данных, который мы желаем получить за один раз.

В ответ мы получим нечто вида "+CIPRXGET:2,index,received,excess\r\n__DATA__\r\nOK\r\n" . В поле received будет находиться количество байт, находящихся в пакете данных __DATA__ , а поле excess будет содержать количество байт, ожидающих своей очереди в буфере модуля. Так что если поле received равно нулю, можно с чистой совестью заявлять, что получать нечего. Собственно, пользуясь этим, я и реализовал неблокирующую функцию для приема данных.

В заключение

Настоятельно рекомендую перед написанием кода освоиться в AT-командах при помощи PuTTY , который прекрасно работает с последовательным портом.

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

Теги:

  • микроконтроллеры
  • программирование
  • gsm
  • gprs
Добавить метки

Важной составляющей автоматизации любого объекта является система мониторинга и контроля. Если управлять объектом на небольших расстояниях (до нескольких сот метров) не вызывает больших проблем - можно использовать индивидуальные маломощные приемо-передатчики. То с мониторингом удаленных объектов такой прием не прокатит, организовать собственный радиоканал, скажем на 100 км, так просто не выйдет. Но тут есть один выход - можно использовать развернутые повсеместно сети сотовых операторов. Для этого есть даже специализированные GSM-модули, прикидывающиеся в сети опсоса простым мобильником. Один из таких GSM-модулей SIM900D попал ко мне в руки (за что спасибо товарищу RD3AVJ), о нем и пойдет речь.

SIM900D по сути является законченным устройством, который способен задействовать большинство услуг сотовой связи: совершать и принимать звонки, слать и получать SMS и MMS, использовать GPRS и заходить на FTP. Плюс такие плюшки как встроенный контроллер заряда Li-Ion батарей, часы реального времени, выход ШИМ интерфейс для подключения дисплея и аналогово-цифровой преобразователь (АЦП).

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


ПИТАНИЕ


Модуль необходимо запитывать постоянноым напряжением в диапазоне 3,2-4,5 вольта. Плюс питания подводится к выводам 38-39 (VBAT). Земля подводится ко всем выводам GND.

Потребление в режиме ожидания составляет всего 1мА, но следует учитывать что во время регистрации сети или при плохом сигнале модуль задирает мощность и потребление кратковременно может подниматься до 2 А. Источник питания должен быть готов к этому и электролиты на пару тысяч микрофарад здесь лишними не будут.


В случае автономной работы рекомендуется использовать Li-Ion аккумуляторы, которые модуль может сам и подзаряжать. Для этого имеется встроенный контроллер заряда. Чтобы модуль мог контроллировать процесс заряда, имеется вход TEMP_BAT (27 вывод). К этому выводу подключается третий вывод аккумулятора (это вывод встроенного в аккумулятор термистра) и в случае перегрева акка, зарядка будет прекращена.



Источник питания для заряда аккумулятора подключается к выводу VCHG (28 вывод). Напряжение источника может находиться в диапазоне 5-6 Вольт с возможностью тянуть ток до 750 мА.

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

ПОДКЛЮЧЕНИЕ SIM-КАРТЫ

Следующим основным элементом является сим карта. Это ключ ко входу в сеть опсоса:) Для работы с модулем необходимы сим карты с напряжением питания 3 или 1,8 вольт (старые пяти вольтовые симки работать не будут). Общая схема подключения ниже.


Подключается она к выводам SIM_x (выводы 6-9). Для того чтобы на выводе SIM_VDD появилось питающее напряжение необходимо прижать вывод KBR0 (вывод 10) к земле.

Для защиты линий от статики рекомендуют использовать специальные TVS диоды типа SMF05С. Но их фиг где найдешь, поэтому можно оставить без них, главное поменьше трогать руками эти выводы. А при запайке, если нет паяльной станции, паять отключенным паяльником.

АНТЕННА

Тут вроде все просто, она подключается к выводу 33 (ANT). Желательно использовать специальную антенну GSM диапазона, от ее качества будет зависеть потребляемая мощность передатчика, и как итог - время автономной работы модуля. У меня на отрезок дорожки на плате длиной 7 мм уровень сигнала был 4 из 31, тоесть ловится но очень слабо. Но это при условии что репитер GSM находился на соседнем здании.

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

ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ

В модуле имеется собственный RTC, способный вести время даже при отсутствии основного питания. Для этого к выводу VRTC (вывод 15) должен быть подключен источник резервного питания, например 3-х вольтовая батарейка CR2032 или ионистр. В случае подключения незаряжаемого источника (как простая батарейка) необходимо использовать диод Шоттки, для ограничения обратного тока. Ниже приведены две схемы, слева подключение ионистра; справа - батарейки.

ИНДИКАЦИЯ

Для индикации собственного состояния в процессе работы, у модуля есть несколько выводов для подключения светодиодов. Первый из них вывод NETLIGHT (вывод 41). На этом выводе при работающем модуле появляется меандр, с частотой зависящей от состояния подключения к сотовой сети: во время поиска и регистрации высокий уровень на этом выводе появляется с периодом 800мс, после регистрации сети - с периодом 3 сек. Подключать светодиод к этому выводу можно только через транзисторный ключ:



Для индикации работы модуля есть еще один вывод - STATUS (5 вывод). На нем появляется высокий уровень когда модуль находится в рабочем режиме. Светодиод к этой ноге подключается также как и к выводу NETLIGHT (через NPN транзистор).

Вывод RING (вывод 11) служит для индикации входящих звонков и текстовых сообщений. Этот вывод удобно использовать с внешним прерыванием контроллера, для оперативного реагирования на события. В отличии от двух предыдущих на выводе RING активным уровнем явлется низкий, поэтому если сюда цеплять светодиод, то в качестве ключа нужно использовать PNP транзистор:



ЗАПУСК МОДУЛЯ

Модуль запускается при отрицательном импульсе длинной не менее 1 сек. на ноге PWRKEY (вывод 12). Для подачи импульса рекомендуется использовать следующую схему:


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

АУДИО

У модуля SIM900D имеется по два входа для микрофона и выхода на динамик. Для подключения используются выводы с 18 по 26. Схема согласования ниже.

Подключение микрофона:

В последнее время появилось много различных вариантов схем устройств сигнализаций GSM. Если в данной схеме применяется модуль GSM, то в большинстве случаев – широко распространенный модуль производства китайской фирмы SimCom SIM300. Данный модуль показал себя с хорошей стороны, как в плане надежности, так и низкой стоимости.
В представлено описание устройства сигнализации GSM на основе модуля SIM300, разработанное автором. Там же приводятся чертежи печатных плат и полнофункциональная версия прошивки микроконтроллера. Так же под данную систему сигнализации разработаны различные модули расширения, пульты ДУ, клавиатурные блоки управления, блоки питания…
Но фирмой-производителем было заявлено , что с конца 2010 года производство модулей GSM линейки SIM3xx будет прекращено. Вместо него рекомендуется использовать новый модуль, выпускающийся этим же производителем – SIM900. Причем, как было заявлено, SIM900 будет намного функциональнее своего «предка», и, что для нас является одним из самых важных критериев, дешевле.

Кое-что о SIM900…

Так что же представляет собой модуль SIM900? Возьмем в руки datasheet и попробуем его прочитать.
Модуль SIM900 представляет собой четырехдиапазонный GSM/GPRS прибор, работающий на частотах 850/900/950/1900 МГц, предназначен для передачи голоса, данных, SMS сообщений и пр.
Основные технические характеристики модуля:
Диапазон частот:
GSM850, EGSM900, DCS1800, PCS1900
совместимость с GSM phase 2/2+.
Излучаемая мощность:
class 4 (2W/900 MHz)
class 1 (1W/1800 MHz)

Управление: AT commands (GSM 07.10)
Напряжение питания модуля: 3,4 – 4,5 В
Ток потребления:
в спящем режиме – 1,5 мА
в режиме передачи – до 500 мА
максимальный – 1,8 А
Рабочая температура: -30 … +80 С
Размеры: 24х24х3 мм
Масса: 3,4 г
Как можно увидеть, данный модуль по габаритам отличается от своего предшественника, модуля SIM3xx, примерно в полтора раза. Но и по параметрам и функциональности тоже превосходит на порядок.


Рисунок 1 – Внешний вид модуля GSM SIM900



Рисунок 2 – Назначение выводов модуля SIM900

Внешний вид модуля представлен на рис. 1, а назначение выводов – на рис. 2. По рисункам можно определить, что помимо стандартного интерфейсного набора, присущего предыдущим моделям (порты UART для обмена данными, вывод статуса модуля STATUS, выводы интерфейса SIM-карточки, и пр.), добавлено несколько новых (выводы подключения клавиатуры KBR/KBC, ШИМ-выход PWM, вывод сброса модуля NRESET).
Ввиду того, что данный модуль на момент написания данной статьи еще не прошел полной «обкатки» на просторах Украины, постоянно производятся доработки программного обеспечения, в описании возможны изменения, не ухудшающие работу в целом.

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

Данное устройство является продолжением линейки приборов сигнализации GSM, разработанных автором . Поэтому параметры во многом идентичны.
Наблюдение за состоянием четырёх шлейфов сигнализации (ШС) во всех режимах работы, кроме режима «Программирование», и отображения состояния шлейфов при помощи светодиодных индикаторов, расположенных на передней панели прибора (свечение индикатора – «шлейф в нормальном состоянии», в другом случае – присутствует обрыв или замыкание шлейфа сигнализации).
В шлейфы сигнализации могут быть включены:
> сигнализаторы магнитоконтактные (герконы СМК, СОМК);
> извещатели типа «Фольга», «Окно»;
> извещатели пожарные (ИП-104, ИП-105);
> датчики движения, объема, бития;
> прочие датчики, имеющие замкнутый выход в нормальном состоянии, и размыкающие контакты при нарушении.
Поддержка прибором следующих типов зон (шлейфов) сигнализации:
«нормальная» (сигнал «Тревога» формируется сразу при поступлении сигнала нарушения целостности шлейфа сигнализации, шлейф после срабатывания не восстанавливается);
«с задержкой» (пользователю предоставляется время на выход и на вход, чтобы можно было успеть включить прибор и покинуть объект или вскрыть объект и отключить прибор);
«коридор» (при срабатывании зоны и дальнейшем её возвращении в нормальное состоянии данный тип зоны снова берется под охрану);
«круглосуточная, пожарная» (шлейф сигнализации постоянно под охраной, снятие и взятие производится при помощи специальной SMS-команды);
«круглосуточная, тревожная кнопка» (шлейф сигнализации постоянно под охраной, снятие и взятие производится при помощи специальной SMS-команды, при срабатывании шлейфа производится только дозвон, отправка SMS-сообщения о саботаже, сирена при этом не включается);
«отключена» (система не реагирует ни на какие изменения на входе ШС).
Включение режима «Охрана» при помощи «скрытой», или «секретной» кнопки, «секретного» переключателя (вместо которого может быть использованная клавиатура с замыкающими контактами, типа «Satel»), пульта дистанционного управления, ключа TouchMemory (Dallas) или дополнительной клавиатуры, в зависимости от прошивки контроллера. Описываемая здесь прошивка использует только «секретный» переключатель, остальные версии будут рассмотрены позже.
Поддерживается два режима работы прибора:
сигнализация GSM (GSM-терминал подключен и с ним осуществляется обмен данными);
автономная сигнализация (GSM-терминал не участвует в работе системы, устройство работает как автономная сигнализация).
Снятие с охраны и постановка под охрану при помощи звонка с определенного телефона (может быть отключено) с передачей соответствующего SMS о состоянии системы.
Передача подтверждающего sms-сообщения при взятии объекта под охрану (может быть отключено).
Формирование сигнала «Тревога» (включение сирены, передача данных «тревоги» на мобильный телефон) при нарушении целостности («обрыв» или «замыкание») хотя бы одного из шлейфов сигнализации.
Отправка SMS-сообщений и автодозвон на три мобильных или стационарных (если обеспечивается поддержка SMS-функций оператором связи) номера телефонов.
Перевод прибора в режим «Снят с охраны» при помощи только пульта дистанционного управления, клавиатуры, путем приема SMS-сообщения с мобильного номера 1 и(или) дозвона с этого номера (может быть отключено), а также «секретного» переключателя, в зависимости от прошивки контроллера.
Возможность дистанционного управления устройством путем передачи SMS-сообщений определенного содержания (может быть отключена).
Программирование основных функций и параметров прибора (номера телефонов, время задержки, время работы сирены и т.д.) при помощи компьютерной программы Lite Programmer в режиме «Программирование» прибора. При этом выход СОМ-порта компьютера (выводы RxD и TxD) подключаются к соответствующему разъёму прибора сигнализации с помощью специального кабеля.
Подача прибором определенного сигнала пользователю о недостатке средств на счету мобильной карты.
Подача прибором определенного сигнала пользователю об отсутствии сигнала связи с мобильной станцией.
Передача сигнала SMS при пропадании питающего напряжения сети (220В) в режиме "Охрана" (может быть отключено).
Применение встроенного модема GSM позволяет обойтись без лишних блоков и подключений, а также повысить совместимость и стабильность связи GSM-канала.
Программированная реакция силового выхода: включение выхода только в режиме "Тревога" на установленное пользователем время (от 60 до 240 секунд).
Использование оригинального протокола передачи данных ИК-излучения пультом дистанционного управления для управления устройством и пультом радиоизлучения, а также оригинальная кодировка данных, поступающих с клавиатуры.
Имеется возможность контроля прибором напряжения питания сети и напряжения аккумуляторной батареи, при этом при пропадании и появлении напряжения сети отсылаются соответствующие SMS-сообщения. Также при понижении напряжения питания резервного источника (аккумулятора) ниже заданного уровня (8-9В) отсылается сообщение, после чего прибор переходит в «спящий» режим, выход из которого возможен только при возобновлении питания (сетевого или аккумуляторного).
Отправка SMS-сообщения на мобильный номер 1 при поступлении входящих звонков с указанием входящего номера (может быть отключена).
Прибор позволяет осуществить коммутацию внешних звуковых или световых оповещателей (звонок, сирена, лампа) с рабочим напряжением 12В и потребляемым током до 1,25А.
Прошивка микроконтроллера, описанная в данной статье, предназначена для работы устройства совместно с «секретным» переключателем, а также включения-отключения прибора при помощи дозвона и отсылки SMS-сообщений. Остальные варианты исполнения устройства будут описаны в следующих материалах, при наличии, естественно, читательского интереса.

Технические характеристики

Количество шлейфов сигнализации – 4.
Сопротивление выносного элемента (оконечного), кОм – 2,7.
Максимальное сопротивление шлейфа охраны без учета сопротивления выносного элемента, Ом – 750.
Потребляемый ток от источника постоянного тока (без подключенных активных датчиков сигнализации), при напряжении 12,6 В, в следующих режимах работы, не более:
- «дежурный», без использования GSM-модуля – 0,16 А;
- «дежурный», при использовании GSM-модуля – 0,23 А;
- «охрана», при использовании GSM-модуля – 0,28 А;
- «тревога», при использовании GSM-модуля и отключенной сирене – 0,34 А;
- пиковое (импульсное) потребление – 1,8 А.
Поддерживаемые стандарты GSM: 850/900/1800/1900 MHz.
Пределы установок времени:
- Время задержки на вход – 0…150 секунд;
- Время задержки на выход – 0…250 секунд;
- Время работы сирены – 30…250 секунд.

Описание схемы

Схема электрическая принципиальная основного блока приведена на рис. 3. Я уточняю – «основного блока», ведь к данным системам сигнализации дополнительно разработан большой набор периферии: здесь и разнообразные пульты управления, блоки расширения и пр. .
По сравнению с предыдущим вариантом схема претерпела качественные изменения: кроме, как уже говорилось выше, применения другого модуля GSM, также исключено реле (вместо него применена ИМС – набор мощных транзисторных ключей), а также исключен блок преобразователя RS232-UART (как показала практика, программирование производится не очень часто, и для этого используют, в основном, ноутбук, в котором порт RS232 зачастую просто отсутствует).



Рисунок 3 – Схема электрическая принципиальная

Главным управляющим элементом устройства является микроконтроллер ATmega168 производства компании Atmel . Микроконтроллер контролирует состояния шлейфов сигнализации, подключенных к входам АЦП, и, в зависимости от режима работы, осуществляет дальнейшие действия, как то: дозвон и отсылку SMS-сообщений, включение сирены, и т.д.
Входы АЦП PC0-PC3 предназначены для контроля состояния шлейфов сигнализации, МК производит измерение напряжения на этих выводах, и, в зависимости от напряжения, формирует сигнал «обрыв», «норма» или «замыкание». На PC5, PC6 подаются напряжения с выхода блока питания для контроля их значений. Кстати, если эти вывода не будут подключены, устройство не запустится!
В схеме используются контрольные светодиоды: LED1 – контроль работы модуля GSM (при наличии связи и работы модуля моргает с частотой 1 вспышка в течении 2-3 секунд, в остальных случаях имеются проблемы со связью или с самим модулем), LED2 – контроль работы системы (в рабочих режимах моргает с частотой 3-5 раз в секунду, в режиме программирования горит постоянным светом). Кроме этого, к выводам IND1…IND4 подключаются светодиоды контроля состояния шлейфов сигнализации LED4…LED7. KEY_S – собственно, сама «секретная» кнопка или переключатель. SPEAKER – разъем для подключения динамика, он может быть на любое сопротивление, мощность не менее 0,25 Вт.

О питании прибора. Данное устройство требует напряжения питания в пределах 10 – 18 В, при токе до 2 А. Блок питания целесообразно построить таким образом, чтобы напряжение питания не пропадало даже при пропадании сети, то есть предусмотреть аккумуляторную батарею. Рекомендуется использовать блок питания, применяемый в предыдущих версиях описываемого устройства . Там же описано и подключение блока питания к прибору сигнализации.

Программирование основных функций устройства

Программирование основных функций прибора осуществляется при помощи специальной программы – Lite Programmer. Последнюю версию программы всегда можно скачать на сайте автора. В принципе, вместо компьютера для программирования прибора возможно использовать мобильный телефон, подключенный к устройству через data-порт, или ИК-порт, но для этого нужно написать хотя бы java-мидлет, а за неимением свободного времени автору просто некогда этим заняться, да и программирование при помощи ноутбука пока устраивает. Если есть желающие заняться решением этого вопроса – пишите автору на электронную почту , вся документация будет представлена.
Подключение устройства производится к свободному СОМ-порту компьютера через специальный преобразователь RS232-UART, или к USB-порту через переходник USB-UART. Только не вздумайте подключать напрямую, без переходника (есть сейчас и такие умельцы)! Это грозит смертью микроконтроллеру или порту компьютера!
Порядок переключения в режим программирования:
1. Нажать на кнопку S1 на время не менее 2 секунд и дождаться прекращения мигания индикатора состояния работы модуля 2HL1 (обычно не более 10 секунд)
2. Обесточить устройство.
3. Установить джампер J1, переведя прибор в режим «Программирование».
4. Подключить кабель для связи устройства с компьютером.
5. Произвести установку связи с устройством и программирование (описано ниже).
6. Обесточить устройство.
7. Отключить кабель для связи с ПК и убрать джампер J1.
8. Программирование завершено, можно подать питание и пользоваться прибором.
Главная форма программы является стандартной, никаких излишеств и «наворотов». В правой части формы устанавливается номер СОМ-порта, а также скорость приема-передачи данных (для нашего случая – 115200 бод), для перевода устройства в режим программирования выбрать во фрейме «Действие» (в правом нижнем углу) – «установить связь», при этом светодиод 1LED1 загорится постоянным светом. Можно программировать!



Рисунок 4 – Главная форма программы Lite Programmer

Особых трудностей работа с программой для пользователя, хотя бы раз в жизни включающего компьютер не представляет. Кроме того, всё подробно описано в упоминаемой не раз Инструкции по эксплуатации и программированию. Если коротко: устанавливаете нужные вам параметры, убеждаетесь, что в третьей колонке красным цветом появилась надпись «Изменить», во фрейме «Действие» выбираете пункт «Программирование», нажимаете кнопку «Выполнить», и всё. Если параметр запрограммирован, то в пятой колонке появится надпись «Запрограммировано», при ошибках программа также выдаст соответствующее сообщение.

Некоторые нюансы программирования.

Следует особое внимание уделить процессу программирования, так как от этого зависит работа устройства в целом. Как показала практика, основная ошибка допускается при установке номера SMS-центра мобильного оператора. Если Вы этот номер не знаете, или не уверены, то лучше его совсем не программировать. Программное обеспечение модуля GSM в этом случае самостоятельно определит номер.
Также внимательно отнеситесь к установке номера USSD-запроса об остатке средств, если планируется его использовать. Первоначально устройство разрабатывалось для украинских пользователей, поэтому минимальная сумма остатка средств равна одному-девяти гривням-рублям. Возможны два варианта выбора установки. Первый – выбрать нужного оператора, и программа сама выставит требуемый номер и сумму минимального остатка, равную двум гривням. Второй вариант – выбрать из ниспадающего меню выбора оператора USSD-запроса пункт TUNE USSD, и затем в появившейся форме заполнить требуемые параметры: минимальная сумма (от одного до девяти рублей), разделитель рубли-копейки (некоторые операторы применяют различные знаки разделения, например, точка, запятая, двоеточие).
Программа пока поддерживает только латиницу при вводе текстов SMS-сообщений, так как данная функция поддерживается и программой микроконтроллера. В настоящее время ведутся работы по включению и кириллицы.

Краткое Руководство по эксплуатации.

Перед установкой в прибор сигнализации следует некоторым образом «подготовить» SIM-карточку, а именно: отключить пароль. Рекомендуется использовать в устройстве SIM-карточку того же мобильного оператора, что и телефоны дозвона. По крайней мере, вероятность доставки SMS-сообщений неоднократно возрастет.
После подачи питания и запуска прибор издаст один длинный звуковой сигнал внутренним динамиком, затем производится установка связи с модулем, по завершению которой звучат три коротких звуковых сигнала. Прибор готов к работе.
Далее пойдет речь об использовании прибора в качестве устройства охранной сигнализации помещений домов и пр. Для использования устройства в качестве автомобильной сигнализации или прочих функциях требуется в первую очередь другая прошивка микроконтроллера, а это выходит за рамки настоящей статьи. Это тема последующих публикаций.
Для того, чтобы поставить прибор под охрану, нужно замкнуть переключатель KEY_S. Кстати, вместо данного переключателя можно использовать любую клавиатуру с замыкающими контактами, например Satel SW02. После этого прибор начнет отсчитывать время на выход (время устанавливается при программировании), в течении которого необходимо покинуть охраняемый объект. Если по истечении времени на выход все шлейфы находятся в собранном состоянии, прибор переходит в режим охраны. В том случае, если по истечении времени на вход хотя бы один из шлейфов будет в обрыве или замыкании, прибор издает прерывистый звук в течении 100-140 секунд, отправляется сообщение о невзятии объекта под охрану на номер 1 (если запрограммировано), после чего переходит в режим тревоги с отправкой всех сообщений и дозвоном. Также можно поставить прибор под охрану дозвоном с номера, запрограммированного первым, или отправленным SMS-сообщением с текстом «START» с этого же номера. Следует помнить, что в данной версии прошивки не рекомендуется совместное использование при постановке под охрану «секретного» переключателя и функций GSM для исключения их взаимного влияния. При совместном использовании приоритет будет на стороне переключателя, GSM-функции работать не будут!
В режиме охраны прибор постоянно контролирует состояние всех шлейфов сигнализации, а также состояние модуля GSM. При этом, если происходит срабатывание шлейфа, отправляются SMS-сообщения и производится дозвон, в соответствии с картой программирования. Дозвон осуществляется до снятия абонентом трубки, но не более восьми раз. Также в режиме охраны контролируется питание сети 220В, и аккумуляторной батареи резервного источника. При этом, при каждом пропадании 220В и последующем его появлении происходит передача соответствующего SMS-сообщения (эту функцию можно отключить при программировании).
Для снятия прибора с охраны необходимо вскрыть объект, и в течении времени на выход разомкнуть контакты переключателя. Если этого не сделать, прибор переходит в режим тревоги. Или снять объект с охраны до вскрытия, позвонив по телефону, или отправив с первого номера SMS-сообщение «STOP».
В дежурном режиме устройство также контролирует состояние шлейфов сигнализации, а также модуль GSM. При потере связи с модулем или потере сети через каждые 2-4 минуты раздается пять кратковременных зуммера. Также каждые 30-40 минут идет опрос состояния счета мобильного номера. При этом раздаются десять кратковременных звуковых сигнала («трель»), и отсылается одно SMS-сообщение (“NO MONEY!!”) на номер 1.
В таблице приведены служебные сообщения, которые может отправлять устройство при появлении тех или иных событий (при отключенной функции отправки, при программировании, данные сообщения не отправляются!):

Текст SMS

Описание

Примечание

Stop guard!

Подтверждение снятия системы с охраны

Дежурный режим

POWER OFF!!!

Неисправность или отсутствие напряжения сети 220В

Только в режиме охраны

Power ON

Появление напряжения сети 220В (после отсутствия)

ALL POWERS OFF!!!

Все питающие напряжения ниже нормы. Через некоторое время устройство перейдет в спящий режим.

Во всех режимах работы

Start after sleeping

Возобновление работы устройства после пропадания питания

NO MONEY!!!

Минимальная сумма средств на счете. Необходимо пополнить счет!

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

Заключение

Описываемое устройство прошло первоначальное тестирование в лаборатории автора и показало неплохие результаты. Модуль SIM900 показал стабильную работу при управлении стандартными AT-командами, особых жалоб не наблюдается. В скором времени будут разработаны печатные платы данного прибора и подготовлена соответствующая документация. Демо-версия прошивки микроконтроллера прилагается к данной статье. Полнофункциональная версия прошивки микроконтроллера устройства предоставляется любому желающему бесплатно. Для этого следует направить соответствующий запрос на электронный ящик автора или по ICQ . Также рассматриваются любые предложения по организации производства описываемого прибора сигнализации и периферийных устройств.
В дальнейшем планируется обеспечить совместимость прибора со всеми периферийными устройствами, предназначенными для предыдущей версии устройства сигнализации GSM авторства Д. Дмитренко . Здесь собраны дополнения к статье для различных частных применений

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

1. Использование для управления устройством ключа TouchMemory

В настоящее время разработана прошивка микроконтроллера для работы с ключами TouchMemory . Для этого необходимо устройство дополнить несложным устройством, состоящим из двух резисторов, емкости и стабилитрона. И, естественно, использовать прошивку для этого типа устройств.
Пример использования такого устройства наглядно описывается в статье Сигнализация GSM с применением ключей iButton . Там же, на схеме электрической принципиальной, показано подключение дополнительного устройства, приведены чертежи печатной платы.
Прошивку можно скачать [ищем для устройства DDN Research HG45Q]

Наконец-то мне удалось заняться изучением, пожалуй самого популярного в DIY среде GSM модуля — GSM900. Что такое GSM модуль? Это устройство, которое реализует функции сотового телефона. Другими словами, GSM900 позволяет звонить другим абонентам сотовой сети, принимать звонки, отправлять и принимать SMS-сообщения. А еще, разумеется, передавать данные по протоколу GPRS.

Мне этот модуль понадобился для вполне конкретной цели: появился проект системы освещения, управляемой дистанционно. Проще всего эта задача решается SMS-сообщениями: отправил одну sms — свет включился, отправил другую — выключился. Никаких пультов не надо, а телефон есть у всех (даже у бомжей). Собственно, в этой статье я рассмотрю именно этот вариант использования модуля GSM900.

1. Прошивка

Волею судеб, у меня в руках оказался модуль GSM900A. Прочитав первый попавшийся форум про оживление этой штуки, выяснилось, что буква A в названии означает принадлежность модуля к азиатскому региону. А следовательно, работать с нашими операторами он не станет. Уныние 🙁

Благо, в следующих постах на том же форуме содержалась успокаивающая информация:) Оказалось, что не всё так плохо, и чтобы модуль заработал в нашем регионе, его нужно попросту перепрошить. Этот процесс хорошо описан в блоге нашего соратника Alex-EXE: прошивка «all in one» sim900
Попробую сделать то же самое, но еще более подробно, и с учетом особенностей моего модуля.

Если у вас правильный модуль и прошивка не требуется, можно сразу прыгать на раздел №2.

Инструменты

Итак, для начала подготовим все необходимые инструменты. Во-первых, непосредственно для прошивки потребуется приложение SIM900 Series download Tools Develop, которое можно легко найти в интернете ().

Во-вторых, пригодится и сам файл прошивки 1137B02SIM900M64_ST_ENHANCE, который тоже легко добывается ().

Наконец, в-третьих, нам нужен будет хороший терминал для экспериментов с модулем. Обычно я использую TeraTerm, но в этот раз его возможностей нехватило (или я не разобрался). Пришлось установить монстра с гениальным названием .

Подключение к USB-UART мосту

Теперь подключаем линии RX и TX к мосту. В качестве последнего я использовал CP2102. В моем случае, вопреки логике, RX и TX моста соединялись с RX и TX GSM-модуля симметрично (а не крест-накрест, как принято).

Также следует запитать модуль от стабильного и мощного источника, так как пиковый ток на модуле может достигать 2А (якобы). Подойдут 4 аккумулятора типоразмера AA. Полная схема включения выглядит так:

SIM900
CP2102 Gnd Gnd
CP2102 +5V VCC_MCU
CP2102 RX SIMR
CP2102 TX SIMT
Внешний источник +5В VCC5
Внешний источник Gnd Gnd
RST

У данной модели нет кнопки сброса, так что для прошивки нам потребуется на пару секунд кинуть контакт RST на землю. Для этого мы пока оставим его висеть в воздухе.

Предварительная настройка модуля

Перед тем, как приступить к прошивке, мы соединимся с модулем, и изменим ему скорость UART. Для этого запустим терминал Terminal, выберем правильный порт, и установим скорость обмена — 9600. После этого жмем «Connect».

Всё общение с модулем происходит посредством AT-команд.

Первое что мы скажем модулю будет самая примитивная AT-команда: «AT». Это такой своеобразный ping, на который модуль должен ответить словом «OK».

Если все прошло успешно, и модуль действительно ответил нам «OK», отправляем команду настройки скорости:

AT+IPR=115200

В конце команды должен стоять служебный символ возврата каретки — CR. В ASCII таблице он имеет код 13 (или 0x0D в шестнадцатеричной системе). Символ подставится автоматически, если вы поставите галку «+CR» напротив строки ввода в нашем терминале. В других терминалах тоже есть подобные настройки.

В ответ на введенную команду снова получим — «OK».

Данная настройка понадобится нам для ускорения процедуры прошивки. В противном случае, как указал в своем блоге Alex-EXE, прошивка займет около часа.

Настройка программы

После того, как все провода воткнуты в нужные места, и модуль подготовлен к прошивке, запускаем приложение SIM900 Series download Tools Develop. Настройка программы состоит всего из нескольких пунктов:

  • в поле Target указываем целевой чип. Почему-то у меня не вышло залить прошивку на SIM900A, так что я выбрал «SIM900»;
  • выбираем правильный порт в поле Port;
  • Baud Rate ставим в 115200;
  • наконец, указываем файл прошивки в поле Core File (файл с расширением cla).

С настройкой всё.

Прошивка

Теперь выполняем строго и последовательно шесть важных шагов.

  • Подключаем к модулю питание (наши 4 аккумулятора). Должна загореться красная лампа питания, а лампа статуса должна начать мигать.
  • Подключаем USB-UART к компьютеру.
  • Замыкаем провод RST на землю (помним, что все это время он болтался в воздухе).
  • Нажимаем в программе кнопку Start Download.
  • Считаем в уме до трех, и отрываем RST от земли.

Ждем 6 минут до завершения прошивки.

Что мы имеем после прошивки

Во-первых, модуль теперь умеет работать с нашими операторами. Во-вторых, мы поставили расширенную прошивку, среди особенностей которой, к примеру, получение координат модуля по сотовым вышкам, работа с электронной почтой и доступ к дополнительным 2.5 Мб памяти.

2. Эксперименты с GSM модулем

Попробуем теперь выполнить разные полезные операции с модулем. Для начала, введем ПИН-код (если он есть):

AT+CPIN=8899

Ответ модуля будет таким:

CPIN: READY.

После этого получим от модуля немного информации.

AT+GMR - идентификатор прошивки. AT+GSN - IMEI. AT+CPAS - состояние (0 – готов к работе, 2 – неизвестно, 3 – входящий звонок, 4 – голосовое соединение). AT+COPS? - информация об операторе.

Телефонные вызовы

Теперь наберем какой-нибудь номер. Делается это с помощью команды:

ATD+790XXXXXXXX;

Точка с запятой в конце команды очень важна, на забудьте про неё!

Если во время UART сеанса на устройство кто-нибудь позвонит, вернется сообщение:

Ответить на звонок (взять трубку) можно командой:

Если к модулю подключены наушники и микрофон, то можно пообщаться с удаленным абонентом как по обычному сотовому телефону.

Завершает вызов команда:

Отправка SMS

Сначала включим текстовый режим сообщений:

AT+CMGF=1

и установим кодировку:

AT+CSCS= "GSM"

Модуль поддерживает и другие кодировки, более удобные для автоматических систем. Но нам для экспериментов удобнее всего использовать именно GSM режим, в котором телефон задается цифрами, а текст сообщений пишется в ASCII кодировке. Теперь отправим кому-нибудь сообщение:

AT+CMGS="+79123456789"

А конце команды необходимо добавить сразу два служебных символа: CR и LF. В Terminal это можно сделать галочкой CR=CR+LF, либо вручную добавив в конце строки: AT+CMGS=»+79123456789″&0D&0A

После ввода этой команды, в ответ будет получен символ «>», означающий начало ввода сообщения. Пишем какой-нибудь текст:

Hello World!

В конце сообщения нам нужно будет передать один из двух специальных символов. Чтобы отправить сообщение введем символ из ASCII таблицы с номером 26. Чтобы отменить отправку — символ с номером 27.

В используемом нами терминале для отправки символа по коду можно использовать одно из двух выражений: в шестнадцатеричном формате: $1A, и в десятеричном: #026

Прием SMS

Если во время сеанса на устройство придет SMS, вернется сообщение формата:

CMTI: "SM",4

здесь 4 — это номер входящего непрочитанного сообщения.

AT+CMGR=4

В ответ получим:

CMGR: "REC READ","+790XXXXXXXX","","13/09/21,11:57:46+24" Hello World! OK

В общем, все просто. Этого нам вполне достаточно для реализации задуманного. Для более глубокого изучения возможностей GFM900 рекомендую почитать еще одну статью Alex-EXE: at-команды gsm модема sim900

3. Взаимодействие с микроконтроллерами

Вообще, чтобы управлять внешними устройствами вовсе не обязательно спаривать модуль GSM900 с другим микроконтроллером. В этот модуль можно зашить свою программу, которая будет делать всё что угодно со свободными GPIO выводами. Однако, в большинстве готовых плат GPIO не разведены, поэтому для создания прототипа задуманного устройства воспользуемся самой простой Arduino Uno/Nano.

Общаться Arduino и GSM900 будут всё по тому же UART интерфейсу. Для этого соединим эти два устройства по следующей схеме:

GSM900 GND VCC_MCU SIMT SIMR
Ардуино Уно GND +5V RX TX

Теперь составим программу, которая будет ловить СМС-ки, и зажигать светодиод на ноге №13 на пару секунд. Этим мы имитируем управление неким внешним устройством.

Const String spin = "1234"; const int rel_pin = 13; String ss = ""; // Отправка пин-кода void sendPin(){ String cmd = "AT+CPIN="+spin+char(0x0D); Serial.print(cmd); } // Включение светодиода на 2 секунды void receiveSMS(String s){ digitalWrite(rel_pin, HIGH); delay(2000); digitalWrite(rel_pin, LOW); } // Разбор строки, пришедшей из модуля void parseString(String src){ bool collect = false; String s = ""; for(byte i=0; i

Загружаем программу на Arduino, и тестируем систему. Если всё сделано правильно, отправка SMS сообщения на устройство приведет к включению светодиода на 2 секунды. Разумеется, вместо светодиода можно включать/выключать мощное реле, к которому подключен котел отопления в загородном доме.

Shield GPRS/GSM SIM900 с антенной
SIM900 GPRS/GSM Shield Development Board Quad-Band Kit For Arduino Compatible

Модуль для работы микроконтроллерных устройств Arduino и аналогичных в сетях сотовой связи по стандартам GSM и GPRS. Ориентирован на использование в системах автоматики и управления. Обмен данными с другими модулями происходит через интерфейс UART. Shield GPRS/GSM SIM900 с антенной может сопрягаться непосредственно с микроконтроллером через интерфейс UART или работать совместно с персональным компьютером при использовании преобразователя интерфейса портПК-UART. Это возможно благодаря программной совместимости на уровне класса команд используемых для управления модемами - АТ команды.
Мониторинг объектов и управление ими происходит благодаря обмену данными в пределах досягаемости мобильной связи. Обеспечивается голосовая связь, отправка СМС, ММС и много других функций и сервисов. Работа модуля основана на компоненте SIM900.

Статья на русском из журнала о компоненте SIM900 . Компонент разработан компанией SIMCom Wireless Solutions. Сайт SIMCom имеет русскоязычную версию . Плата GSM модуля на стороне компонентов содержит соединители для подключения антенны, наушников и микрофона. На стороне пайки платы размещены держатель батареи CR1220 3 вольта поддерживающей работу часов модуля и контейнер для установки симкарты.
Одно из применений устройства - система слежения за перемещениями транспорта совместно с ГЛОНАСС или GPS прибором. Отправка СМС сообщений позволяет использовать модуль в диспетчеризации, беспроводной сигнализации и в охранных системах. В результате происходящих событий могут отправляться различные СМС: “Аварийный стоп лифта 2 дома №34”, “Дверь автомобиля открыта”, “Подвал открыт”, “Напряжение 220 В выключено”, “Входная дверь дачи открыта”, “Включено освещение”, “Температура в теплице ниже критической”. Модуль незаменим для контроля и управления подвижными объектами, перемещающимися на большие расстояния. Или в случае удаления оператора на большое расстояние от стационарного объекта.

Shield GPRS/GSM SIM900 с антенной дает широкие возможности изучения работы компонента SIM900. Монтаж компонента SIM900 выполняется по самым современным технологиям из-за чего припаять к печатной плате SIM900 в лабораторных условиях весьма затруднительно. Имея модуль с установленным SIM900 можно проводить эксперименты по применению компонента SIM900. При использовании в собственных разработках компонента SIM900 появляется возможность отладки программного обеспечения и проверки схемотехнических решений.

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

Питание
напряжение, В
номинальное 5
диапазон 4,8-5,2
ток
обычный режим 50-450 мА
в спящем режиме 1,5 мА
предельный импульсный 2 А
Поддерживает симкарты питанием 1,8 и 3 В
Диапазоны связи 850, 900, 1800, 1900 МГц
Поддерживает сеть 2G
Мощность передачи в различных диапазонах
1 Вт 1800 и 1900 МГц
2 Вт 850 и 900 МГц
Соответствует стандарту GSM фазы 2/2+
Встроенные протоколы TCP и UDP
Класс передачи данных GPRS multi-slot class 10/8
Аудиокодеки HR, FR, EFR, AMR, подавление эха
CSD до 14,4кбит/сек
PPP стек
MUX (07.10)
Протоколы HTTP и FTP
Есть возможность отправлять сигналы DTMF и проигрывать записи как на автоответчике
Поддержка часов реального времени RTC
Температура, ℃
воздуха при работе -30...75
хранения -45...90
размеры 86 х 58 х 19 мм

Компоненты управления

Переключателем Power select устанавливается источник питания: внешний, подключенный к коаксиальному соединителю или источник питания микроконтроллерного модуля Arduino.

Кнопкой Power key включается или выключается питание при нажатии и удерживании в течение 2 с.

Индикация

О состоянии модуля сообщают 3 светодиода:
PWR (зеленый) - индикатор питания модуля,
Status (красный) - индикатор питания компонента SIM900,
Net Light (зеленый) - соединение с сетью.
Сообщения светодиода Net Light.
Выключен - SIM900 не работает.
Мигает с интервалами, указано в секундах:
0,064 включен и 0,8 выключен - сеть не обнаружена,
0,064 включен и 0,3 выключен - сеть обнаружена,
0,064 включен, 0,03 выключен - GPRS подключен.

Контакты

Компонент SIM900 содержит порт UART, его сигналы выведены на выводы компонента и соединены с перемычками, устанавливающими с какими контактами модуля Shield GPRS/GSM SIM900 будет соединен порт UART компонента SIM900 с D0, D1 или D7, D8.
UART Shield GPRS/GSM можно подключнить: к аппаратному интерфейсу МК через контакты TXD и RXD модуля Shield GPRS/GSM, для этого используются D0, D1. Или к программно эмулируемому средствами ардуино, для этого используются контакты D7 и D8 модуля Shield GPRS/GSM. Полный интерфейс UART имеет 10 сигналов выведенных на контакты в углу платы: R1, DCD, DSR, CTS, RTS, GND, 2V8, TX, RX, DTR.
12 подписанных контактов цифровых линий ввода-вывода GPIO расположены в углу платы. Имеется 2 контакта выходных сигналов с широтно-импульсной модуляцией PWM1, PWM2. Вход АЦП контакт ADC. Интерфейс встроенного счетчика времени имеет 4 контакта. Обозначение контактов: DISP_CLK, DISP_DATA, DISP_D/C, DISP_CS.
Контакт D9 используется для программного контроля включения или выключения SIM900.
На плате установлен соединитель для подключения антенны.

Назначение выводов компонента SIM900.

Внешнее включение и выключение питания

Включить или выключить питание модуля можно с помощью сигнала на управляющем входе D9. Для изменения состояния на D9 подается импульс продолжительностью 1 с. Изменение состояния происходит спустя 3,2 с после начала импульса.

Включение модуля. Графики напряжения питания модуля, внешнего управляющего импульса и индикатора питания STATUS.

При управлении модулем руководящим устройством включение должно происходить без применения кнопки Power key, т. е. сразу после подачи питания. Для этого в программу МК следует добавить несколько команд.

Void powerUpOrDown()
{
pinMode(9, OUTPUT);
digitalWrite(9,LOW);
delay(1000);
digitalWrite(9,HIGH);
delay(2000);
digitalWrite(9,LOW);
delay(3000);
}

Эту группу команд в программе можно использовать и для выключения модуля. Также выключить GSM модуль можно посылая AT команду.




Top