GSM/GPRS SIM900 Shield: AT-команды и SMS с Arduino

Плата расширения на модуле SIM900 даёт Arduino мобильную связь. Разбираем подключение, базовые AT-команды и два примера с SMS о температуре.
Возможности платы
GSM/GPRS Shield построен на модуле SIMCom SIM900 и позволяет Arduino принимать и передавать данные через сотовую сеть. Способов три: короткие текстовые сообщения (SMS), голосовые команды на основе технологий CSD и DTMF, а также пакетная передача данных по GPRS.

Помимо самого модуля на плате есть слот для SIM-карты, гнёзда 3,5 мм для аудиовхода и аудиовыхода и разъём внешней антенны. Включается шилд двумя способами: аппаратно, кнопкой PWRKEY, или программно.
Установка и выбор линий связи
Плата выполнена в формате шилда: её штыревые гребёнки вставляются в разъёмы Arduino, и получается двухэтажная конструкция.

Обмен идёт по последовательному интерфейсу набором AT-команд. Перемычки на плате определяют, какие контакты используются: аппаратные 0 и 1 либо 7 и 8 для работы через SoftwareSerial (на некоторых платах — 2 и 3). Если связи с Arduino по последовательному порту нет, проверяют питание платы и положение перемычек.
Работа с AT-командами из монитора порта
Чтобы вводить команды вручную, на Arduino загружают скетч-мост: он создаёт программный порт SoftwareSerial на пинах 7 и 8 со скоростью 9600 и пересылает строки из монитора порта в модуль, а ответы модуля — обратно на компьютер. Последовательность действий такая:
- AT+CREG=1 и AT+CREG? — установка режима и проверка регистрации в сети;
- AT+CGATT=1 и AT+CGATT? — подключение к GPRS; при ответе COMMAND NO RESPONSE команду повторяют;
- AT+CGDCONT=1,"IP","internet.beeline.ru" и AT+CSTT="internet.beeline.ru","","" — точка доступа оператора (пример для Билайн);
- AT+CGACT=1,1 — установка интернет-соединения;
- AT+CIPSTART с параметрами "TCP", адрес сайта и порт 80 — обращение к интернет-ресурсу.

SMS при падении температуры
Первый пример отправляет сообщение, когда в помещении становится слишком холодно. Нужны плата Arduino, шилд, SIM-карта с положительным балансом, датчик температуры и влажности семейства DHT и блок питания на 12 В.

Скетч использует библиотеки SoftwareSerial и DHT; датчик подключён к пину 2, модуль — к пинам 7 и 8. Раз в 30 секунд считываются влажность и температура. Если температура ниже порога (в примере 18 градусов), на номер из константы PHONE_NUMBER уходит SMS со значением температуры, после чего программа ждёт 10 минут. Отправка выглядит так: команда AT+CMGF=1 переводит модуль в текстовый режим, AT+CMGS с номером получателя открывает сообщение, затем передаётся текст и завершающий символ с кодом 26.
Если сообщения не уходят, стоит проверить внешнее питание шилда и баланс SIM-карты.
Температура по запросу
Второй скетч отвечает на входящие сообщения. При запуске он настраивает приём командами AT+CMGF=1, AT+IFC=1,1, AT+CPBS="SM" и AT+CNMI=1,2,2,1,0. Далее программа посимвольно читает ответы модуля и собирает их в строки. Строка, начинающаяся с +CMT, означает входящее SMS: из неё извлекается номер отправителя, а следующая строка считается текстом сообщения. Если текст равен tmp, считывается температура с датчика и отправляется ответным SMS на тот же номер.