Квартирный маячок

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

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

GSM-часть

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

Все написанное далее актуально для телефона Siemens S35i (и некоторых других моделей серии.

Для общения с телефоном используется обыкновенный интерфейс UART, если контроллер питается от 3.3В, то не требуется никаких преобразователей уровней. Если напряжение 5В, то могут возникнуть проблемы: надо поставить преобразователь на 3.3В (достаточно простейшего резистивного делителя или цепочки резистор-стабилитрон).

На рисунке приведен внешний вид коннектора телефона (красной точкой обозначен 1ый контакт.

Распиновка данного разъема:

PinNameDirDescription
1 GND-Ground
2 SELF-SERVICE-Recognition/control battery charger
3 LOADinCharging voltage
4 BATTERYoutBattery (S25 only)
5 DATA OUT (TX)outData sent
6 DATA IN (RX)inData received
7 Z_CLK-Clock line for accessory bus. Use as DCD In data operation
8 Z_DATA-Data line for accessory bus. Use as CTS in data operation
9 MICG-Ground for microphone
10MICinMicrophone input
11AUDoutLoudspeaker
12AUDG-Ground for external speaker

Формирование и отправка сообщения

Для того, чтобы отправить SMS-сообщение посредством AT-команды требуется сформировать данную посылку. Далее представлено готовое минимальное API для осуществления данной операции.

Предварительно надо задать номер SMS-центра:

SetSMSCenter("79168999100");

Для отправки SMS, используется функция SendSMS:

SendSMS("79169282320", "Test2. String 2.");

При вызове она формирует и отправляет по UART-интерфейсу следующие данные:

AT+CMGS=32\x0d
07919761989901F001000C919761214365F700082000540065007
300740032002E00200053007400720069006E006700200032002E\x1a

Проект с кодом для формирования посылки представлен здесь.

Прочие функции

Звонок на номер:

ATD+79161234567;

Вывести непрочтенные сообщения:

AT+CMGL

Удаление сообщения:

AT+CMGD

Полный список и описание работы команд можно найти в AT Command Set Reference Manual .

Описание конечной конструкции:

Если посмотреть на разъем телефона, нас интересуют контакты GND, DATA IN, DATA OUT, LOAD. Это контакты питания и передачи данных. Для внешней схемы так же требуется найти источник 3.3В внутри телефона, чтобы в случае пропадания внешнего питания продолжать работать.

Вид тестового устройства:

Серая коробочка фактически является конвертором USB-COM, однако в ее основе лежит микроконтроллер LPC1343 (и вообще изначально она создавалась для работы с CAN-шиной в автомобиле, но об этом как-нибудь потом расскажу).

В конечном устройстве все размещается в едином корпусе, выводятся контакты для подключения Для управления телефоном использовал маленькую плату с контроллером LPC1343. Аккумулятор из запасов Li-Ion типоразмера 18650, который, несмотря на плачевное состояние, имеет большую чем родная батарея телефона емкость.

А вот сообщения на экране мобильного телефона:

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

Единственный момент, на котором можно заострить внимание - это абстрактность приложения, его можно собрать как в варианте для LPC134x, так и в варианте консольного приложения WIN32, который можно использовать для отладки:

Микропрограмму управления можно взять здесь.

Original: http://igorkov.org/attest,
Author: igorkov