А.В.Пахомов
Простое охранное GSM устройство
Статья была написана и отправлена в журнал "Радио" в январе 2009 года, но... никакой реакции (и, естественно, публикации) от редакции журнала не последовало... В то время выбранная тема была достаточно интересной, предложение подобных систем еще не было "огромным" и цены на них были довольно высокими.
В предлагаемой статье рассмотрены вопросы использования GSM телефонов для организации канала связи для дистанционного управления различными электронными устройствами. В статье дается описание наиболее удобных АТ команд управления. В качестве примера описан действующий прообраз системы охранной сигнализации, выполненной на микроконтроллере MCS-51 и GSM телефоне Siemens.
В предлагаемой статье рассмотрены вопросы использования GSM телефонов для организации канала связи для дистанционного управления различными электронными устройствами. В статье дается описание наиболее удобных АТ команд управления. В качестве примера описан действующий прообраз системы охранной сигнализации, выполненной на микроконтроллере MCS-51 и GSM телефоне Siemens.
Введение
На практике очень часто возникает задача реализации удаленного управления каким-либо объектом, дистанционного опроса различных датчиков. Например, задача контроля состояния удаленного объекта (гаража, дачи, машины и т.п). Для реализации подобной задачи удобно использовать в качестве канала связи, широко распространенные сети сотовых GSM операторов: в самом деле - доступ к контролируемому объекту можно получить из любой точки планеты. Существуют реальные, успешно используемые решения, например набор ВМ8038 [1].
Мне было интересно разобраться в данном вопросе и реализовать собственную подобную конструкцию. Некоторый опыт построения "охранного" устройства (далее просто Устройство) на базе микроконтроллера и GSM телефона описан ниже.
Мне было интересно разобраться в данном вопросе и реализовать собственную подобную конструкцию. Некоторый опыт построения "охранного" устройства (далее просто Устройство) на базе микроконтроллера и GSM телефона описан ниже.
Принцип построения системы
Разрабатываемое Устройство должно проводить периодический анализ нескольких датчиков (линий охраны) и, в случае изменения их состояния, формировать сигнал "тревоги" и передавать сообщение об этом "хозяину". В качестве линий охраны используются простейшие датчики цифрового типа (работа либо "на обрыв", либо "на замыкание"). Никаких "специальных" средств по защите этих линий не предусматривается. В качестве питания Устройства используется штатное сетевое зарядное устройство сотового телефона, резервное питание не предусмотрено.
В качестве «интеллектуального центра» Устройства выбран известный, до сих пор используемый, микроконтроллер семейства MCS-51.
Канал связи Устройства с "хозяином" организуется с использованием GSM телефона Siemens C60 (опробованы также CF62 и AX75).
Устройство работает следующим образом. После подачи питания программа микроконтроллера осуществляет настройку (инициализацию) последовательного приемопередатчика, настраивает параметры таймеров, очищает буфер приема последовательного интерфейса и "очередь событий" куда будет помещаться информация об изменении состояния датчиков.
После этого начинается основной цикл программы, в котором анализируется "очередь событий" и, при наличии "события" (т.е. информации об изменении в состоянии датчиков), отсылается команда передачи СМС в телефон.
В цикле также производится опрос наличия в телефоне новых (не прочитанных) СМС и, при наличии таковых, производится анализ их содержимого и исполнение команды (если таковая имеется в принятом сообщении).
По прерываниям от таймера сравниваются новое и прежнее состояния датчиков и, при их не совпадении, информация об этом ("событие") записывается в "очередь событий" для последующей отработки в основном цикле программы.
В качестве средства доставки сообщения о "событии" "хозяину" выбраны короткие текстовые сообщения (СМС). Преимущества такого способа: цифровой интерфейс (аналоговый канал не используется), легкость передачи информации сразу по нескольким датчикам, не обязательное наличие "хозяина" у телефона (СМС будет принята и сохранена).
Альтернативный способ: набор номера "хозяина", установка связи, передача аналоговой (или, что более сложно, цифровой информации), завершение сеанса связи - имеет преимущество в возможности организации "гарантированной" доставки сообщения, но представляется существенно более сложным, поэтому не рассматривается. Недостатком СМС можно считать высокую вероятность "потери" сообщения по разным причинам.
В качестве «интеллектуального центра» Устройства выбран известный, до сих пор используемый, микроконтроллер семейства MCS-51.
Канал связи Устройства с "хозяином" организуется с использованием GSM телефона Siemens C60 (опробованы также CF62 и AX75).
Устройство работает следующим образом. После подачи питания программа микроконтроллера осуществляет настройку (инициализацию) последовательного приемопередатчика, настраивает параметры таймеров, очищает буфер приема последовательного интерфейса и "очередь событий" куда будет помещаться информация об изменении состояния датчиков.
После этого начинается основной цикл программы, в котором анализируется "очередь событий" и, при наличии "события" (т.е. информации об изменении в состоянии датчиков), отсылается команда передачи СМС в телефон.
В цикле также производится опрос наличия в телефоне новых (не прочитанных) СМС и, при наличии таковых, производится анализ их содержимого и исполнение команды (если таковая имеется в принятом сообщении).
По прерываниям от таймера сравниваются новое и прежнее состояния датчиков и, при их не совпадении, информация об этом ("событие") записывается в "очередь событий" для последующей отработки в основном цикле программы.
В качестве средства доставки сообщения о "событии" "хозяину" выбраны короткие текстовые сообщения (СМС). Преимущества такого способа: цифровой интерфейс (аналоговый канал не используется), легкость передачи информации сразу по нескольким датчикам, не обязательное наличие "хозяина" у телефона (СМС будет принята и сохранена).
Альтернативный способ: набор номера "хозяина", установка связи, передача аналоговой (или, что более сложно, цифровой информации), завершение сеанса связи - имеет преимущество в возможности организации "гарантированной" доставки сообщения, но представляется существенно более сложным, поэтому не рассматривается. Недостатком СМС можно считать высокую вероятность "потери" сообщения по разным причинам.
Аппаратный интерфейс
Устройство предполагает использование GSM телефонов с COM интерфейсом (использовались телефоны Siemens C60, CF62, AX75). Аппаратное подключение телефона к микроконтроллеру не вызывает трудностей (разве что поиск интерфейсного разъема). Используются только линии передачи данных (Tx, Rx): контакт 3 телефона (Tx) соединяется с входом последовательного приемопередатчика микроконтроллера (P3.0), а контакт 4 (Rx) - с выходом P3.1. Никаких согласований по уровню (питание телефона 3,3В) не требуется, т.к. микросборка на входе телефона имеет и защитные диоды, и привязку уровня, и фильтрующие конденсаторы.
Скорость связи по последовательному интерфейсу телефон выбирает автоматически (с целью более точного соответствия стандартному значению, при частоте кварцевого резонатора микроконтроллера 8 МГц, была выбрана скорость связи 2400 бит/с). Параметры посылки - длина 8 бит, без контроля, 1 стоп бит.
Скорость связи по последовательному интерфейсу телефон выбирает автоматически (с целью более точного соответствия стандартному значению, при частоте кварцевого резонатора микроконтроллера 8 МГц, была выбрана скорость связи 2400 бит/с). Параметры посылки - длина 8 бит, без контроля, 1 стоп бит.
АТ команды (общий обзор)
Подключенный к СОМ порту компьютера (в нашем случае микроконтроллера) GSM телефон можно рассматривать как обычный внешний модем. Для управления модемами через СОМ порт применяются АТ (от Attention – внимание) команды. Такая команда представляет из себя текстовую строку, начинающуюся символами "АТ", далее следуют символы собственно команды и ее аргументов и заканчивается строка символом <CR> (0Dh, "Возврат каретки" - по-русски). Существуют общепринятые рекомендации (ITU-T Recommendation V.25 ter: Serial asynchronous automatic dialling and control) по реализации АТ команд. Естественно, не каждый модем (в нашем случае GSM телефон) поддерживает весь перечень команд, кроме того, для GSM, существуют свои рекомендации по реализации дополнительных АТ (часто называют АТ+С) команд, специфичных для сотовой связи (рекомендации ETSI GSM, либо более удобный русскоязычный труд "Компэл" [2]).
Перед реализацией практической задачи, решаемой с помощью GSM телефона, целесообразно изучить поддерживаемый им набор АТ комманд. Для этого (конечно, кроме руководства, которого часто нет под рукой) удобно использовать DATA кабель (COM или USB), которым телефон подключается к компьютеру и стандартную программу Windows: HyperTerminal. В настройках программы указывается СОМ порт, к которому подключен телефон. При необходимости, можно выставить параметры связи, указанные выше.
Первой исследуемой командой рекомендую выбрать ATZ (сброс настроек), поддерживаемую всеми модемами (телефонами). На примере выполнения этой команды видно, что телефон (по умолчанию) отправляет обратно все получаемые им символы команды, а, в случае ее успешного исполнения, завершает команду строкой "ОК" и символами <CR><LF> (0Dh,0Ah) до и после этой строки. Это необходимо учитывать при разработке программы микроконтроллера в части анализа правильности выполнения команды. Для решаемой Устройством задачи другие общепринятые команды бесполезны. Возможно, для иных реализаций интересными могут оказаться команды: ATE0 (отключение повтора получаемых символов) - для исключения "ненужной" информации в буфере приема микроконтроллера, ATD.. (набор номера) и др.
Перед реализацией практической задачи, решаемой с помощью GSM телефона, целесообразно изучить поддерживаемый им набор АТ комманд. Для этого (конечно, кроме руководства, которого часто нет под рукой) удобно использовать DATA кабель (COM или USB), которым телефон подключается к компьютеру и стандартную программу Windows: HyperTerminal. В настройках программы указывается СОМ порт, к которому подключен телефон. При необходимости, можно выставить параметры связи, указанные выше.
Первой исследуемой командой рекомендую выбрать ATZ (сброс настроек), поддерживаемую всеми модемами (телефонами). На примере выполнения этой команды видно, что телефон (по умолчанию) отправляет обратно все получаемые им символы команды, а, в случае ее успешного исполнения, завершает команду строкой "ОК" и символами <CR><LF> (0Dh,0Ah) до и после этой строки. Это необходимо учитывать при разработке программы микроконтроллера в части анализа правильности выполнения команды. Для решаемой Устройством задачи другие общепринятые команды бесполезны. Возможно, для иных реализаций интересными могут оказаться команды: ATE0 (отключение повтора получаемых символов) - для исключения "ненужной" информации в буфере приема микроконтроллера, ATD.. (набор номера) и др.
АТ команды управления СМС
Устройство реализует функцию информирования "хозяина" о произошедшем "событии" с помощью службы коротких сообщений. Поэтому необходимо остановиться на некоторых специфических GSM командах, относящихся к отправке/приему СМС. Приведенная ниже информация взята из [2, глава 9] и собственных наблюдений. Из всего списка, в Устройстве используются только следующие АТ+С команды:
Возможны два режима (формата) работы с СМС: текстовый и PDU (Protocol Data Unit). В текстовом режиме все команды и ответы представлены в символах ASCII (простая текстовая строка). В режиме PDU текст сообщения представляется в шестнадцатиричном формате. Предпочитаемый формат сообщения определяется командой AT+CMGF. Siemens C60 может работать с СМС только в формате PDU. Проверить поддерживаемые телефоном форматы СМС можно командой AT+CMGF=? (ответы: 0 - PDU, 1 - TEXT).
- AT+CPMS - команда выбора места хранения СМС,
- AT+CMGL - команда чтения СМС (с параметрами),
- AT+CMGS - команда отсылки СМС через телефон,
- AT+CMGW - команда записи СМС в память.
Возможны два режима (формата) работы с СМС: текстовый и PDU (Protocol Data Unit). В текстовом режиме все команды и ответы представлены в символах ASCII (простая текстовая строка). В режиме PDU текст сообщения представляется в шестнадцатиричном формате. Предпочитаемый формат сообщения определяется командой AT+CMGF. Siemens C60 может работать с СМС только в формате PDU. Проверить поддерживаемые телефоном форматы СМС можно командой AT+CMGF=? (ответы: 0 - PDU, 1 - TEXT).
Подробнее об используемых в Устройстве АТ командах работы с СМС
- место хранения (CPMS)
Команда выбора места хранения СМС (AT+CPMS=<mem1>,[<mem2>]) оказалась необходимой для начальной настройки телефона. Для определения доступных мест хранения для СМС используется команда "AT+CPMS=?". По умолчанию, телефоны Siemens определяют (для АТ команд) место хранения как полученных (<mem1>), так и отправляемых СМС (<mem2>) как "SM", т.е. на SIM карте. С другой стороны, телефон сохраняет полученные СМС в основной памяти телефона "MT". Поэтому для корректной работы описываемой ниже команды считывания принятых СМС (AT+CMGL) в программу инициализации Устройства добавлена команда смены области памяти для принятых СМС (AT+CPMS="MT").
- отправка СМС (CMGW, CMGS)
Для отсылки сообщений в Устройстве использована команда: AT+CMGS= <length> <CR> ввод PDU <ctrl-Z / ESC > (рассматриваем только режим PDU). В тестовом режиме (на этапе отладки) используется сходная по синтаксису команда записи СМС в память телефона (AT+CMGW). В данной команде <length> - это длина сообщения PDU, десятичное число, методика определения длины сообщения будет понятна ниже из описания PDU. После завершения ввода длины сообщения символом <CR>, телефон выдает символ приглашения к вводу: "> ". Далее необходимо передать в телефон сообщение PDU и завершить его символом <ctrl-Z> (1Ah) - сообщение будет отослано (либо записано в память, если используется команда AT+CMGW). Если сообщение завершается символом <Esc> (1Bh), то команда игнорируется телефоном. Результатом успешного выполнения команды является строка:
"+CMGS: <mr> (перевод строки) OK", где <mr> - условный (для AT+CMGW - реальный) номер сообщения. В действительности сообщение в памяти не сохраняется. Для команды AT+CMGW номер сообщения соответствует номеру ячейки памяти и это сообщение можно впоследствии отослать командой AT+CMSS, используя полученный индекс.
Напомню, что в единственно возможном в Siemens C60 режиме PDU всё СМС, включая информацию о заголовке, дается в виде двоичной строки (в шестнадцатеричном формате, т.е. используются символы цифр и латинских букв A - F). Разберем пример сообщения PDU: 0011000B819851214365F700F4A8055453543931<Ctrl-Z>, где
- прием СМС (CMGL, CMGR)
Чтение получаемых сообщений из памяти телефона производится командой AT+CMGL=<stat>, где <stat> определяет статус считываемых СМС. Для нас важны новые, еще не прочитанные, СМС, т.е. <stat>=0. После такой команды все полученные СМС меняют свой статус на "прочитанные" и более командой AT+CMGL=0 быть прочитаны, не могут. Для отладки в Устройстве используется <stat>=4 - читаются все СМС из телефона. Результатом выполнения команды является список СМС (в нашем случае в формате PDU). Вид сообщения PDU совпадает с вышеописанным, отличие заключается в наличии дополнительной информации о дате и времени получения СМС (расположена после байта формата кодировки сообщения), подробнее в [2]. В описываемом Устройстве анализируется окончание сообщения PDU - сам принятый текст.
Команда выбора места хранения СМС (AT+CPMS=<mem1>,[<mem2>]) оказалась необходимой для начальной настройки телефона. Для определения доступных мест хранения для СМС используется команда "AT+CPMS=?". По умолчанию, телефоны Siemens определяют (для АТ команд) место хранения как полученных (<mem1>), так и отправляемых СМС (<mem2>) как "SM", т.е. на SIM карте. С другой стороны, телефон сохраняет полученные СМС в основной памяти телефона "MT". Поэтому для корректной работы описываемой ниже команды считывания принятых СМС (AT+CMGL) в программу инициализации Устройства добавлена команда смены области памяти для принятых СМС (AT+CPMS="MT").
- отправка СМС (CMGW, CMGS)
Для отсылки сообщений в Устройстве использована команда: AT+CMGS= <length> <CR> ввод PDU <ctrl-Z / ESC > (рассматриваем только режим PDU). В тестовом режиме (на этапе отладки) используется сходная по синтаксису команда записи СМС в память телефона (AT+CMGW). В данной команде <length> - это длина сообщения PDU, десятичное число, методика определения длины сообщения будет понятна ниже из описания PDU. После завершения ввода длины сообщения символом <CR>, телефон выдает символ приглашения к вводу: "> ". Далее необходимо передать в телефон сообщение PDU и завершить его символом <ctrl-Z> (1Ah) - сообщение будет отослано (либо записано в память, если используется команда AT+CMGW). Если сообщение завершается символом <Esc> (1Bh), то команда игнорируется телефоном. Результатом успешного выполнения команды является строка:
"+CMGS: <mr> (перевод строки) OK", где <mr> - условный (для AT+CMGW - реальный) номер сообщения. В действительности сообщение в памяти не сохраняется. Для команды AT+CMGW номер сообщения соответствует номеру ячейки памяти и это сообщение можно впоследствии отослать командой AT+CMSS, используя полученный индекс.
Напомню, что в единственно возможном в Siemens C60 режиме PDU всё СМС, включая информацию о заголовке, дается в виде двоичной строки (в шестнадцатеричном формате, т.е. используются символы цифр и латинских букв A - F). Разберем пример сообщения PDU: 0011000B819851214365F700F4A8055453543931<Ctrl-Z>, где
- 00 - первый байт: признак того, что номер SMS центра берется из настроек телефона (иначе тут передается длина номера центра и сам номер), подробнее в [2];
- 11 - основные параметры PDU, для нашего случая в [2] рекомендуется ставить 11;
- 000B - служебная информация, предшествующая номеру получателя СМС;
- 819851214365F7 - "изображение" номера получателя СМС (8-915-123-45-67) цифры в байте переставляются местами, 81 и F - дополнения "спереди" и "сзади";
- 00F4A8 - служебная информация (идентификатор протокола, схема кодировки и период достоверности), для нас важен байт (в рассматриваемой теме принято использовать слово «октет») F4 - формат кодировки текста сообщения, "старшая тетрада" 0 - обычный прием СМС в память телефона, F - прямое отображение текста принятой СМС на экране телефона, в памяти такое сообщение не сохраняется; "младшая тетрада": 0 - 7-ми битная кодировка, 4 - 8-ми битная кодировка, 8 - 16-ти битная кодировка (применяется для передачи символов иных (в т.ч. кириллица) алфавитов. Учитывая небольшую длину применяемых в Устройстве сообщений и использование только латинских символов, применяем для кодировки наиболее понятную 8-ми битную кодировку (8 бит на символ);
- 05 - собственно длина текстового сообщения СМС (того, что идет далее до Ctrl-Z) - шестнадцатеричное число;
- 5453543931 - "TST91" - само передаваемое сообщение (пример).
- прием СМС (CMGL, CMGR)
Чтение получаемых сообщений из памяти телефона производится командой AT+CMGL=<stat>, где <stat> определяет статус считываемых СМС. Для нас важны новые, еще не прочитанные, СМС, т.е. <stat>=0. После такой команды все полученные СМС меняют свой статус на "прочитанные" и более командой AT+CMGL=0 быть прочитаны, не могут. Для отладки в Устройстве используется <stat>=4 - читаются все СМС из телефона. Результатом выполнения команды является список СМС (в нашем случае в формате PDU). Вид сообщения PDU совпадает с вышеописанным, отличие заключается в наличии дополнительной информации о дате и времени получения СМС (расположена после байта формата кодировки сообщения), подробнее в [2]. В описываемом Устройстве анализируется окончание сообщения PDU - сам принятый текст.
Пример охранного устройства
-принципиальная схема
Принципиальная схема Устройства показана на рисунке справа. В качестве микроконтроллера MCS-51 (DD1) используется Atmel AT89C51 (хотя в данном случае возможно применение любой "однокристалки 51-ого семейства" с внутренней памятью и последовательным портом). Цепи подключения кварцевого резонатора (Q1 8 МГц) и "сброса" - стандартные. Светодиод VD1 (любой светодиод до 10 мА) с ключом VT1 (любой маломощный n-p-n транзистор) нужен для контроля состояния устройства (частое мигание - инициализация, ошибка; медленное мигание - дежурный режим; непрерывное свечение - отработка "события") и не является необходимой деталью. Кнопка сброса S1 также необязательна. Переключатели S2 и S3 могут понадобиться на этапе отладки Устройства. Программно S2 отрабатывается при опросе СМС, сохраненных в телефоне: при отсутствии S2 анализируются только новые (не прочитанные) СМС (команда AT+CMGL=0), при замкнутом S2 считываются все СМС (команда AT+CMGL=4). S3 введен в схему для "экономии денежных средств" на этапе отладки: при отсутствии S3 вместо команды AT+CMGS... (непосредственная отправка СМС), выдается аналогичная по синтаксису команда AT+CMGW... (запись СМС в память телефона (папка "Черновики")). В рабочем режиме S3 должен быть замкнут (при этом будет формироваться команда AT+CMGS...).
Сотовый телефон подключается к разъему X1 (из 12 используются только первые четыре контакта: питание и данные).
Линии охраны подключаются к старшим четырем разрядам порта P3 микроконтроллера, на выводах микросхемы DD1 должны формироваться стандартные уровни логических нуля и единицы (в простейшем случае - замыкание контактов на общий провод - условно показано кнопками S4..S7).
Питается Устройство от штатного зарядного устройства сотового телефона (на схеме не показано), оно подключается к линиям VCC (+) и GND (-).
Отдельно надо сказать о назначении стабилитрона VD2. В случае, если приобретенное Вами зарядное устройство для телефона формирует на выходе напряжение не превышающее 6В, необходимости в VD2 нет. В моем случае напряжение холостого хода составило более 7В, что превышает предельно допустимое значение для AT89C51 (6,6В), поэтому пришлось как-то защищаться. Выбранное решение простое, хотя и "не бесспорное": на "холостом ходе", когда телефон не подключен, через ограничительный стабилитрон протекает ток до 50 мА (для КС168А, в случае КС156А - до 200 мА, что "уж слишком"). При максимальной нагрузке напряжение падает до 4,6В (для разных моделей телефонов, зарядных устройств и ИС АТ89С51 - от 4,6В до 5,5В), т.е. стабилитрон "отключен".
- общий алгоритм программы
Алгоритм работы программы микроконтроллера Устройства совпадает с ранее описанным принципом работы охранного устройства.
При инициализации производится настройка таймера Т0 на формирование прерываний с периодом 30 мс. Таймер Т1 программируется на работу с последовательным портом и настраивается для получения скорости работы приемопередатчика 2400 бод. Последовательный порт настраивается на работу в режиме 1 (8 бит, без контроля четности, 1 стоп бит). Очищаются буфер приема последовательного порта и очередь событий (где впоследствии будут накапливаться события - факты смены состояния линий охраны). Устанавливается "пассивный" режим работы Устройства. В отличие от "активного", в этом режиме при наступлении события, СМС автоматом не отправляется - узнать о состоянии "охраняемого объекта" можно только по команде опроса состояния Устройства (входящая СМС с текстом «#*RD»). В телефон отправляются команды ATZ и AT+CPMS="MT" (об их назначении написано выше). Индикация режима инициализации производится частым (2-3 раза в секунду) миганием светодиода.
Начинается основной цикл программы, состояние индицируется медленным (примерно раз в секунду) миганием светодиода. В цикле анализируется состояние очереди событий. При наличии в очереди события, в "активном" режиме отправляется СМС, далее событие удаляется из очереди и на время включается контрольный светодиод. После анализа очереди событий, производится считывание новых СМС из телефона (командой AT+CMGL=0). При наличии сообщения, в тексте которого есть команды - последовательности символов #*RD (опрос состояния), #*ON (включение "активного" режима) или #*FF ("пассивный" режим), отрабатывается соответствующая команда. Любая команда подтверждается отправкой СМС с отображением состояния Устройства.
Отсылаемое Устройством сообщение имеет следующий вид: SIG=xxxx=yyyy=z. Где xxxx – состояние линий охраны в предыдущем прерывании (30 мс назад), yyyy - текущее их состояние. Четыре символа состояния могут принимать значение: 0 - линия в состоянии "1" (не замкнута на общий провод), 1 - 4 соответствующая линия в состоянии "0" (замкнута на общий провод). Z в конце сообщения может быть "ON" - "активное" состояние Устройства, "OFF" - "пассивное" состояние Устройства. Например, при кратковременном замыкании на общий провод третьей линии охраны (на схеме условно обозначенной кнопкой S6 (P3.6), в "активном" режиме последовательно будет отправлено два сообщения: SIG=0000=0030=ON и, через несколько секунд, SIG=0030=0000=ON.
В случае обнаружения ошибки при приеме результата выполнения АТ команды, программа сбрасывается к процедуре инициализации.
Подпрограмма обработки прерывания от таймера "следит" за состоянием линий охраны и, при изменении их состояния, помещает информацию об этом в очередь событий.
Подпрограмма обработки прерывания от последовательного порта помещает принятый байт в буфер приема. Буфер имеет размер 32 байта и зациклен, т.е. для анализа сообщения в буфере остаются последние 32 байта. Для повышения надежности обнаружения команды в тексте сообщения рекомендуется в посылаемой СМС повторять команду дважды через пробел.
Как было сказано выше, для отправки СМС используется команда AT+CMGS. Это понижает гибкость системы: приходится жестко программировать номер приемника сообщения (в тексте программы указан абстрактный номер, на который отсылается СМС: 8-999-999-99-99) и сам текст СМС.
В программе не предусмотрены команды включения телефона и ввода PIN кода, поэтому к Устройству телефон подключается во включенном состоянии и, лишь затем подается питание на Устройство. В программе также нет специальных команд на удаление прочитанных сообщений, поэтому необходимо вручную периодически вычищать память принятых СМС (отправляемые сообщения, как было отмечено выше, в памяти телефона не сохраняются).
-коды программы
Коды программы представлены в таблице 1 (файл GSM107.HEX). Текст программы на ассемблере – в таблице 2 (файл gsm107.asm). Детально работу программы можно понять из ее текста, снабженного комментариями. Огромную помощь в изучении программы может оказать старинная классическая книжка [3].
При практическом применении программы, необходимо внести номер абонента, на который Устройство будет отсылать СМС либо в текст программы перед трансляцией, либо в двоичный файл перед программированием. С адреса 78h по адрес 83h - вместо «девяток» необходимо прописать нужный номер (см пример сообщения PDU выше), например для номера 8-915-123-45-67, с адреса 78h коды (текст) будут следующими (HEX цифры): 39 38 35 31 32 31 34 33 36 35 46 37 ("9851214365F7").
Принципиальная схема Устройства показана на рисунке справа. В качестве микроконтроллера MCS-51 (DD1) используется Atmel AT89C51 (хотя в данном случае возможно применение любой "однокристалки 51-ого семейства" с внутренней памятью и последовательным портом). Цепи подключения кварцевого резонатора (Q1 8 МГц) и "сброса" - стандартные. Светодиод VD1 (любой светодиод до 10 мА) с ключом VT1 (любой маломощный n-p-n транзистор) нужен для контроля состояния устройства (частое мигание - инициализация, ошибка; медленное мигание - дежурный режим; непрерывное свечение - отработка "события") и не является необходимой деталью. Кнопка сброса S1 также необязательна. Переключатели S2 и S3 могут понадобиться на этапе отладки Устройства. Программно S2 отрабатывается при опросе СМС, сохраненных в телефоне: при отсутствии S2 анализируются только новые (не прочитанные) СМС (команда AT+CMGL=0), при замкнутом S2 считываются все СМС (команда AT+CMGL=4). S3 введен в схему для "экономии денежных средств" на этапе отладки: при отсутствии S3 вместо команды AT+CMGS... (непосредственная отправка СМС), выдается аналогичная по синтаксису команда AT+CMGW... (запись СМС в память телефона (папка "Черновики")). В рабочем режиме S3 должен быть замкнут (при этом будет формироваться команда AT+CMGS...).
Сотовый телефон подключается к разъему X1 (из 12 используются только первые четыре контакта: питание и данные).
Линии охраны подключаются к старшим четырем разрядам порта P3 микроконтроллера, на выводах микросхемы DD1 должны формироваться стандартные уровни логических нуля и единицы (в простейшем случае - замыкание контактов на общий провод - условно показано кнопками S4..S7).
Питается Устройство от штатного зарядного устройства сотового телефона (на схеме не показано), оно подключается к линиям VCC (+) и GND (-).
Отдельно надо сказать о назначении стабилитрона VD2. В случае, если приобретенное Вами зарядное устройство для телефона формирует на выходе напряжение не превышающее 6В, необходимости в VD2 нет. В моем случае напряжение холостого хода составило более 7В, что превышает предельно допустимое значение для AT89C51 (6,6В), поэтому пришлось как-то защищаться. Выбранное решение простое, хотя и "не бесспорное": на "холостом ходе", когда телефон не подключен, через ограничительный стабилитрон протекает ток до 50 мА (для КС168А, в случае КС156А - до 200 мА, что "уж слишком"). При максимальной нагрузке напряжение падает до 4,6В (для разных моделей телефонов, зарядных устройств и ИС АТ89С51 - от 4,6В до 5,5В), т.е. стабилитрон "отключен".
- общий алгоритм программы
Алгоритм работы программы микроконтроллера Устройства совпадает с ранее описанным принципом работы охранного устройства.
При инициализации производится настройка таймера Т0 на формирование прерываний с периодом 30 мс. Таймер Т1 программируется на работу с последовательным портом и настраивается для получения скорости работы приемопередатчика 2400 бод. Последовательный порт настраивается на работу в режиме 1 (8 бит, без контроля четности, 1 стоп бит). Очищаются буфер приема последовательного порта и очередь событий (где впоследствии будут накапливаться события - факты смены состояния линий охраны). Устанавливается "пассивный" режим работы Устройства. В отличие от "активного", в этом режиме при наступлении события, СМС автоматом не отправляется - узнать о состоянии "охраняемого объекта" можно только по команде опроса состояния Устройства (входящая СМС с текстом «#*RD»). В телефон отправляются команды ATZ и AT+CPMS="MT" (об их назначении написано выше). Индикация режима инициализации производится частым (2-3 раза в секунду) миганием светодиода.
Начинается основной цикл программы, состояние индицируется медленным (примерно раз в секунду) миганием светодиода. В цикле анализируется состояние очереди событий. При наличии в очереди события, в "активном" режиме отправляется СМС, далее событие удаляется из очереди и на время включается контрольный светодиод. После анализа очереди событий, производится считывание новых СМС из телефона (командой AT+CMGL=0). При наличии сообщения, в тексте которого есть команды - последовательности символов #*RD (опрос состояния), #*ON (включение "активного" режима) или #*FF ("пассивный" режим), отрабатывается соответствующая команда. Любая команда подтверждается отправкой СМС с отображением состояния Устройства.
Отсылаемое Устройством сообщение имеет следующий вид: SIG=xxxx=yyyy=z. Где xxxx – состояние линий охраны в предыдущем прерывании (30 мс назад), yyyy - текущее их состояние. Четыре символа состояния могут принимать значение: 0 - линия в состоянии "1" (не замкнута на общий провод), 1 - 4 соответствующая линия в состоянии "0" (замкнута на общий провод). Z в конце сообщения может быть "ON" - "активное" состояние Устройства, "OFF" - "пассивное" состояние Устройства. Например, при кратковременном замыкании на общий провод третьей линии охраны (на схеме условно обозначенной кнопкой S6 (P3.6), в "активном" режиме последовательно будет отправлено два сообщения: SIG=0000=0030=ON и, через несколько секунд, SIG=0030=0000=ON.
В случае обнаружения ошибки при приеме результата выполнения АТ команды, программа сбрасывается к процедуре инициализации.
Подпрограмма обработки прерывания от таймера "следит" за состоянием линий охраны и, при изменении их состояния, помещает информацию об этом в очередь событий.
Подпрограмма обработки прерывания от последовательного порта помещает принятый байт в буфер приема. Буфер имеет размер 32 байта и зациклен, т.е. для анализа сообщения в буфере остаются последние 32 байта. Для повышения надежности обнаружения команды в тексте сообщения рекомендуется в посылаемой СМС повторять команду дважды через пробел.
Как было сказано выше, для отправки СМС используется команда AT+CMGS. Это понижает гибкость системы: приходится жестко программировать номер приемника сообщения (в тексте программы указан абстрактный номер, на который отсылается СМС: 8-999-999-99-99) и сам текст СМС.
В программе не предусмотрены команды включения телефона и ввода PIN кода, поэтому к Устройству телефон подключается во включенном состоянии и, лишь затем подается питание на Устройство. В программе также нет специальных команд на удаление прочитанных сообщений, поэтому необходимо вручную периодически вычищать память принятых СМС (отправляемые сообщения, как было отмечено выше, в памяти телефона не сохраняются).
-коды программы
Коды программы представлены в таблице 1 (файл GSM107.HEX). Текст программы на ассемблере – в таблице 2 (файл gsm107.asm). Детально работу программы можно понять из ее текста, снабженного комментариями. Огромную помощь в изучении программы может оказать старинная классическая книжка [3].
При практическом применении программы, необходимо внести номер абонента, на который Устройство будет отсылать СМС либо в текст программы перед трансляцией, либо в двоичный файл перед программированием. С адреса 78h по адрес 83h - вместо «девяток» необходимо прописать нужный номер (см пример сообщения PDU выше), например для номера 8-915-123-45-67, с адреса 78h коды (текст) будут следующими (HEX цифры): 39 38 35 31 32 31 34 33 36 35 46 37 ("9851214365F7").
- практическая реализация (плата, монтаж)
Печатная плата для Устройства специально не разрабатывалась. Немногочисленные детали схемы распаяны на "случайно найденной" плате небольших размеров с имевшейся разводкой под 40-pin сокет, фотография платы показана на рисунке справа [в варианте на фото вместо стабилитрона VD2 установлен стабилизатор напряжения 7805, но проверка схемы на разных экземплярах АТ89С51 показала не достаточную стабильность работы (не все микросхемы устойчиво работали при напряжении 3,2В, которое иногда получалось на выходе стабилизатора)].
Кабель с разъемом X1, идущий к телефону, выполнен из четырехжильного телефонного провода, подпаян к соответствующим контактам на плате и закреплен стяжкой на плате. Двухжильный провод от зарядного устройства также закреплен стяжкой и подпаян к контактным площадкам (VCC и GND) на плате.
К старшим четырем разрядам порта P3 микроконтроллера подключаются линии охраны. Конструкция датчиков не является предметом статьи, они должны обеспечивать достаточные для распознавания МК уровни нуля и единицы. Событием (иными словами "тревогой") является смена состояния линии охраны, а не ее абсолютное значение.
- Отладка, проверка функционирования.
Как правило, правильно спаянные цифровые устройства не нуждаются в отладке. Рекомендуется перед подачей питания на устройство проверить правильность соединений и отсутствие короткого замыкания по цепям питания. Далее при установленном процессоре, отключенном телефоне и включенном питании проверяют наличие "быстрого" (2-3 раза в секунду) мигания светодиода. Далее подключаем телефон, оставляем S2 и S3 разомкнутыми, подаем питание. В течение примерно 9 сек должно быть наличие "быстрого" (2-3 раза в секунду) мигания светодиода - стадия инициализации, далее программа должна перейти к основному циклу - "медленное" (раз в секунду) мигание светодиода. Если этого не наблюдаем, то необходимо проверить и, возможно, "разобраться" с питанием.
Далее можно проверять функционирование Устройства.
Проверяем отработку входящих СМС: посылаем на номер телефона нашего Устройства СМС вида "#*ON #*ON" (команда повторяется два раза через пробел - включение "активного" режима), на телефоне отображается "Принято новое сообщение", в списке СМС папки "Черновики" должна появиться СМС: "SIG=0000=0000=ON " (подтверждение выполнения команды).
Коротко замыкаем какую-либо из "линий охраны" на общий провод – имитируем «Событие». Отмечаем двойное непрерывное включение светодиода (на несколько секунд с таким же перерывом на "медленное" мигание) - это запись СМС в папку "Черновики" телефона. Можно проверить наличие сохраненных СМС в телефоне (одна на событие "замкнуто", например, для второй линии "SIG=0000=0200=ON ", другая - "разомкнуто" "SIG=0200=0000=ON ").
Посылаем на телефон Устройства СМС: "#*FF #*FF" (перевод в "пассивный" режим).
На телефоне отображается "Принято новое сообщение", гаснет экран, в списке СМС папки "Черновики" должна появиться СМС: "SIG=0000=0000=OFF" (подтверждение выполнения команды).
Выше описанные действия можно повторить с замкнутым S3 (это рабочее состояние переключателя). При этом сформированные Устройством СМС будут сразу отправляться на номер "хозяина" без сохранения в памяти телефона Устройства.
Печатная плата для Устройства специально не разрабатывалась. Немногочисленные детали схемы распаяны на "случайно найденной" плате небольших размеров с имевшейся разводкой под 40-pin сокет, фотография платы показана на рисунке справа [в варианте на фото вместо стабилитрона VD2 установлен стабилизатор напряжения 7805, но проверка схемы на разных экземплярах АТ89С51 показала не достаточную стабильность работы (не все микросхемы устойчиво работали при напряжении 3,2В, которое иногда получалось на выходе стабилизатора)].
Кабель с разъемом X1, идущий к телефону, выполнен из четырехжильного телефонного провода, подпаян к соответствующим контактам на плате и закреплен стяжкой на плате. Двухжильный провод от зарядного устройства также закреплен стяжкой и подпаян к контактным площадкам (VCC и GND) на плате.
К старшим четырем разрядам порта P3 микроконтроллера подключаются линии охраны. Конструкция датчиков не является предметом статьи, они должны обеспечивать достаточные для распознавания МК уровни нуля и единицы. Событием (иными словами "тревогой") является смена состояния линии охраны, а не ее абсолютное значение.
- Отладка, проверка функционирования.
Как правило, правильно спаянные цифровые устройства не нуждаются в отладке. Рекомендуется перед подачей питания на устройство проверить правильность соединений и отсутствие короткого замыкания по цепям питания. Далее при установленном процессоре, отключенном телефоне и включенном питании проверяют наличие "быстрого" (2-3 раза в секунду) мигания светодиода. Далее подключаем телефон, оставляем S2 и S3 разомкнутыми, подаем питание. В течение примерно 9 сек должно быть наличие "быстрого" (2-3 раза в секунду) мигания светодиода - стадия инициализации, далее программа должна перейти к основному циклу - "медленное" (раз в секунду) мигание светодиода. Если этого не наблюдаем, то необходимо проверить и, возможно, "разобраться" с питанием.
Далее можно проверять функционирование Устройства.
Проверяем отработку входящих СМС: посылаем на номер телефона нашего Устройства СМС вида "#*ON #*ON" (команда повторяется два раза через пробел - включение "активного" режима), на телефоне отображается "Принято новое сообщение", в списке СМС папки "Черновики" должна появиться СМС: "SIG=0000=0000=ON " (подтверждение выполнения команды).
Коротко замыкаем какую-либо из "линий охраны" на общий провод – имитируем «Событие». Отмечаем двойное непрерывное включение светодиода (на несколько секунд с таким же перерывом на "медленное" мигание) - это запись СМС в папку "Черновики" телефона. Можно проверить наличие сохраненных СМС в телефоне (одна на событие "замкнуто", например, для второй линии "SIG=0000=0200=ON ", другая - "разомкнуто" "SIG=0200=0000=ON ").
Посылаем на телефон Устройства СМС: "#*FF #*FF" (перевод в "пассивный" режим).
На телефоне отображается "Принято новое сообщение", гаснет экран, в списке СМС папки "Черновики" должна появиться СМС: "SIG=0000=0000=OFF" (подтверждение выполнения команды).
Выше описанные действия можно повторить с замкнутым S3 (это рабочее состояние переключателя). При этом сформированные Устройством СМС будут сразу отправляться на номер "хозяина" без сохранения в памяти телефона Устройства.
Заключение
Описанное устройство не претендует на серьезное название "Система охранной сигнализации" и предназначено для иллюстрации применения АТ команд управления GSM телефоном. Устройство может стать базой для разработки практической системы. Вместе с тем, данная конструкция реально работает и выполняет заложенные в ней функции. Для "будущих конструкторов" необходимо указать на явные недостатки описанного примера: проблема питания (низкое качество блока питания можно компенсировать менее прихотливым микроконтроллером), возможные "зависания" опять же из-за проблем с питанием (надо доработать схему сброса, либо использовать современный микроконтроллер со встроенной схемой watch-dog). В части алгоритма работы - бескрайнее поле деятельности, например, кажется удобным фиксация событий с привязкой к времени и дате и просмотр такого журнала.
Данной статьей мне хотелось показать простоту и удобство использования GSM телефонов в решении ряда часто возникающих задач дистанционного управления.
Данной статьей мне хотелось показать простоту и удобство использования GSM телефонов в решении ряда часто возникающих задач дистанционного управления.
Литература
1. Мастер-КИТ: BM8038 - Устройство охранное GSM-автономное <http://www.masterkit.ru/main/set.php?num=1033>
2. AT-команды. Руководство по использованию АТ-команд для GSM/GPRS модемов.: Пер. с англ. – М.: Серия «Библиотека Компэла». ЗАО «Компэл», 2005. – 432 с.
3. Сташин В. В., Урусов А. В, Мологонцева О. Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах. - М.: Энергоатомиздат, 1990.
2. AT-команды. Руководство по использованию АТ-команд для GSM/GPRS модемов.: Пер. с англ. – М.: Серия «Библиотека Компэла». ЗАО «Компэл», 2005. – 432 с.
3. Сташин В. В., Урусов А. В, Мологонцева О. Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах. - М.: Энергоатомиздат, 1990.