Довольно давно меня посетила идея устройства, которое будет присылать SMS сообщения о событиях происходящих дома. Это могут быть различные датчики, будь то температура или состояние входной двери и окон, наличия электроэнергии, или какой-нибудь датчик влаги в ванной. В определенной мере это устройство можно использовать как сигнализацию.
В моем случае требовалось отслеживать 3 события: отключение электричества, открытие входной двери и нажатие кнопки звонка.
Старые мобильники - довольно неплохие аппараты для различного рода устройств, в которых хочется сделать оповещение по GSM-сетям. Нынче их можно достать за копейки, при этом они имеют удобный интерфейс для подключения (можно достать даже ответную часть разъема), к которому не требуется дополнительных преобразователей. И в завершение их можно купить довольно дешево (а у большинства, подобные аппараты могут и вовсе найтись в закромах).
Все написанное далее актуально для телефона Siemens S35i (и некоторых других моделей серии.
Для общения с телефоном используется обыкновенный интерфейс UART, если контроллер питается от 3.3В, то не требуется никаких преобразователей уровней. Если напряжение 5В, то могут возникнуть проблемы: надо поставить преобразователь на 3.3В (достаточно простейшего резистивного делителя или цепочки резистор-стабилитрон).
На рисунке приведен внешний вид коннектора телефона (красной точкой обозначен 1ый контакт.
Распиновка данного разъема:
Pin | Name | Dir | Description |
1 | GND | - | Ground |
2 | SELF-SERVICE | - | Recognition/control battery charger |
3 | LOAD | in | Charging voltage |
4 | BATTERY | out | Battery (S25 only) |
5 | DATA OUT (TX) | out | Data sent |
6 | DATA IN (RX) | in | Data 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 |
10 | MIC | in | Microphone input |
11 | AUD | out | Loudspeaker |
12 | AUDG | - | 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, который можно использовать для отладки:
Микропрограмму управления можно взять здесь.