Модуль для работы микроконтроллерных устройств Arduino и аналогичных в сетях сотовой связи по стандартам GSM и GPRS. Ориентирован на использование в системах автоматики и управления. Обмен данными с другими модулями происходит через интерфейс UART. Shield GPRS/GSM SIM900 с антенной может сопрягаться непосредственно с микроконтроллером через интерфейс UART или работать совместно с персональным компьютером при использовании преобразователя интерфейса портПК–UART. Это возможно благодаря программной совместимости на уровне класса команд используемых для управления модемами – АТ команды. Мониторинг объектов и управление ими происходит благодаря обмену данными в пределах досягаемости мобильной связи. Обеспечивается голосовая связь, отправка СМС, ММС и много других функций и сервисов. Работа модуля основана на компоненте SIM900.
Одно из применений устройства – система слежения за перемещениями транспорта совместно с ГЛОНАСС или 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, т. е. сразу после подачи питания. Для этого в программу МК следует добавить несколько команд.
Эту группу команд в программе можно использовать и для выключения модуля. Также выключить GSM модуль можно посылая AT команду.
AT+CPOWD=1
Перемычки
Возле антенного гнезда расположены перемычки J11 и J12. С их помощью задаются контакты используемые интерфейсом UART компонента SIM900: TX, RX или D7, D8. Контакты TX, RX предназначены для подключения к интерфейсу UART являющемуся периферией МК. Благодаря программной эмуляции средствами ардуино интерфейса UART через контакты D7, D8 может происходить обмен сигналами в соответствии с требованиями UART если аппаратный UART занят. Установку перемычек следует выполнять ориентируясь на надписи возле контактов перемычек.
Подготовка к включению
У подготовленной симкарты на счету должно быть некоторое количество денег. Для установки симкарты переведите фиксатор в положение OPEN и поднимите крышку. В нее установите симкарту как изображено на фото, закройте крышку и переведите ее в положение LOCK. Установите с помощью перемычек способ обмена данными UART. Подключите антенну. Соедините Shield GPRS/GSM SIM900 с основным прибором.
Несколько важных моментов работы и подключения модуля категории SIM900.
Первые эксперименты
Для начала наладим связь Shield GPRS/GSM SIM900 с персональным компьютером. На этом этапе не требуется Arduino и другие устройства содержащие МК. Потребуется преобразователь интерфейса USB–UART. Скачайте на ПК программу SSCOM32 отсюда и установите ее. Подготовьте модуль к включению как рассказано выше. Подключите антенну. Соедините ПК с модулем через преобразователь интерфейсов USB–UART.
Уровни сигналов интерфейса UART преобразователя должны соответствовать устройству питающемуся от напряжения 5 В. Соедините модуль с источником питания имеющим параметры для надежной работы модуля. Питание от преобразователя интерфейса возможно только в исключительном случае при обеспечении им большой мощности. Установите перемычки выбора контактов интерфейса модуля в положение выбирающее контакты RX и TX. Соедините интерфейс UART преобразователя с контактами модуля как изображено на фото по схеме RX–TX и TX–RX. Установите переключатель Power select в положение соответствующее используемому источнику питания. Включите источник питания. Нажмите и удерживайте кнопку Power key на плате Shield GPRS/GSM SIM900 в течение трех секунд. Ждите полминуты для подключения модуля к мобильной сети. Включите на ПК программу SSCOM32 или терминальную программу более привычную для вас. Программа терминал входит в стандартный набор утилит Windows.
Работа с АТ командами с помощью стандартной утилиты Windows.
Есть множество терминальных программ, которые можно скачать из сети. Терминал изначально предназначался для работы с модемами. С помощью терминальной программы отправляются команды в подключенный прибор и принимаются ответы на команды. Результатом выполнения команды будет изменение в работе прибора сопровождаемое комментариями наблюдаемые в окне терминальной программы. Этот класс команд управления называется AT команды. Они вводятся большими латинскими буквами в окне терминала. После набора текста команды и отправки ее в подключенный прибор в следующей строке должен появиться ответ прибора. Для взаимодействия с SIM900 существующий набор АТ команд расширен. Это описывается стандартами GSM 07.07, 07.05. Почти все команды имеют 3 режима: тестовый =? – модуль сообщит поддерживается команда или нет и ее параметры, чтение ? – текущие параметры команды, запись = записываем новые значения для команды. A/ – повтор предыдущей команды.
Окно программы SSCOM32.
В настройках программы терминала укажите параметры обмена данными 8-N-1 – 8 бит данных, без бита четности, длительность стоп бита 1 битовый временной интервал. Укажите скорость обмена данными 9600 бод, возможно подойдет скорость 19200 бод. Введем самую простую команду для проверки всех элементов связи модуля и ПК, а также убедимся в работоспособности модуля. В окне программы введите две буквы в латинской раскладке клавиатуры:
AT и нажмите Enter.
В ответ должно прийти сообщение:
ОК
Приводим некоторые АТ команды SIM900.
Команда
Ответ модуля
AT+GCAP
+GCAP: +FCLASS, +CGSM ОК
Поддерживаемые функции
AT+GMM
SIMCOM_SIM900 ОК
Тип компонента SIM900
AT+GMR
Revision: 2268B12SIM900M64_ST ОК
Версия
AT+GSN
12433711765YYY ОК
Международный идентификатор мобильного оборудования – IMEI
AT+COPS?
+COPS: (2, "MTSRU", ", "36002"), (1,"Tel","Tel","36140") ОК
Доступные мобильные операторы
AT+CPAS
+CPAS: 3 ОК
Состояние 0 – к работе готов 2 – неопределено 3 – входящий звонок 4 – голосовое соединение
AT+CREG?
+CREG: 0,1 ОК
Тип регистрации в сети Первый параметр: 0 – нет кода 1 – есть код 2 – есть код + дополнительные параметры Второй параметр: 0 – не зарегистрирован, нет поиска сети 1 – регистрация, домашняя сеть 2 – не зарегистрирован, идет поиск новой сети 3 – регистрация отклонена 4 – неизвестно 5 – роуминг
AT+CSQ
+CSQ: 17,1 ОК
Уровень сигнала: 0 – -115 dB и менее 1 – -112 dB 2…30 – -110…-54 dB 31 – -52 dB и более 99 – нет приема
Управление с помощью АТ команд.
Shield GPRS/GSM SIM900 с антенной и Arduino
Для знакомства с Shield GPRS/GSM SIM900 если у вас нет преобразователя интерфейса, то АТ команды можно отправлять через Arduino. В компьютере будет использоваться терминальная программа hyperterminal или SSCOM32. АТ команды должны сопровождаться символом возврата каретки. Для этого необходимо указать "+CR" в настройках порта терминальной программы. Загрузите в Ардуино следующую программу.
// программа связи ПК и GSM модуля на скорости 19200 бод, формат 8-N-1
#include
SoftwareSerial GPRS(7, 8); unsigned char buffer[64]; // массив данных поступает в буфер через последовательный порт int count=0; // счетчик массива буфера void setup() { GPRS.begin(19200); // скорость передачи GPRS Serial.begin(19200); // скорость передачи UART
}
void loop() { if (GPRS.available()) // если данные идут из softwareserial => данные поступают из модуля GSM { while(GPRS.available()) // чтение данных в массив символов { buffer[count++]=GPRS.read(); // записи данных в массив if(count == 64)break; } Serial.write(buffer,count); // если не заканчивается передача данных, // то записать в буфер аппаратного последовательного порта clearBufferArray(); // вызвать функцию clearBufferArray для очистки данных массива count = 0; // сброс счетчика цикла
} if (Serial.available()) // если данные есть в аппаратном UART => данные поступают от ПК GPRS.write(Serial.read()); // запись в модуль GSM } void clearBufferArray() // очистка буфера { for (int i=0; i { buffer[i]=NULL;} // очистка индексов массива }
Интерфейс UART микроконтроллера Arduino будет занят для связи с компьютером. Для связи с модулем программа будет эмулировать с помощью библиотеки SoftwareSerial второй порт UART на контактах Arduino D7 и D8. Перемычки UART модуля GSM установите в положение D7 и D8. Соедините контакты Arduino D7 и D8 с контактами GSM модуля Software serial предназначенными для программной эмуляции интерфейса UART. Подключите Arduino к компьютеру с помощью кабеля USB.
Соединение ПК, Ардуино и GSM модуля для управления с помощью АТ команд.
Данные из компьютера, подключенного к аппаратному UART Ардуино будут передаваться на GSM модуль, подключенный к программно эмулируемому на Ардуино интерфейсу UART. Мы сможем передавать АТ команды управления на GSM модуль. Другой способ соединения Shield GPRS/GSM SIM900 с антенной и Arduino через UART для других программ.
Еще один вариант соединения Shield GPRS/GSM SIM900 с Arduino UNO. Перемычки UART модуля GPRS установлены в положение D7 и D8.
Соединение Shield GPRS/GSM SIM900 с Arduino mega.
Соединение Shield GPRS/GSM SIM900 с internet
GPRS – надстройка над технологией мобильной связи GSM, позволяющая проводить передачу данных. GPRS позволяет пользователю сети сотовой связи производить обмен данными в GSM сети, а также с внешними сетями, например internet. Установка параметров GPRS подключения SIM900 и подключение к internet проходит с помощью команды AT+SAPBR с параметрами количеством до четырех.
1 параметр – тип выполняемой операции. 0 – отключиться 1 – соединиться 2 – запросить сведения о соединение 3 – передать параметры соединения 4 – запросить параметры соединения 5 – сохранить настройки в энергонезависимую память модуля 2 параметр – CID или идентификатор профиля. Оставшиеся 2 параметра могут применять различные значения в зависимости от запроса.
Команда
AT+SAPBR=1,1 ОК
Устанавливаем GPRS соединение
AT+SAPBR=2,1 +SAPBR: 1,1,"nnn.nnn.nnn.nnn" ОК
Сведения о соединении и IP-адрес Второй параметр ответа: 0 – соединение устанавливается 1 – соединение установлено 2 – соединение закрывается 3 – нет соединения Третий параметр ответа – IP-адрес
AT+SAPBR=0,1 ОК
Закрыть GPRS соединение
AT+SAPBR=3,1,"CONTYPE","GPRS" ОК AT+SAPBR=3,1,"APN","internet.mts.ru" ОК AT+SAPBR=3,1,"USER","mts" ОК AT+SAPBR=3,1,"PWD","mts" ОК
Установка настроек подключения CONTYPE – тип подключения GPRS или CSD APN – точка подключения USER – имя пользователя PWD – пароль PHONENUM – номер телефона (для CSD) RATE – скорость соединения (для CSD)
Настройки GPRS не сохраняются в памяти автоматически, но текущие настройки можно сохранить с помощью команды AT+SAPBR=5,1. GPRS соединение может использоваться не только для выхода в internet, но и для прямой передачи данных между модулями. Пример настройки GPRS соединения и подключения к internet:
AT+SAPBR=3,1,"CONTYPE","GPRS" ОК AT+SAPBR=3,1,"APN","internet.tel.ru" ОК AT+SAPBR=3,1,"USER","tel" ОК AT+SAPBR=3,1,"PWD","tel" ОК AT+SAPBR=1,1 ОК
Назначения строк по номерам. 1 указывание на использование GPRS соединения 2 точка доступа оператора 3 пользователь 4 пароль для соединения 5 подключение
При соединении с internet можно производить различные операции, вот некоторые из них: читать страницы – html запросы, посещать ftp, обмениваться TCP и UDP пакетами, проверять электронную почту, но для этого потребуется другая прошивка SIM900.
Прием звонков
Для приема звонков используем Arduino UNO. Перемычки Shield GPRS/GSM SIM900 устанавливаются в положение обеспечивающие работу интерфейса UART через контакты Software serial D7 и D8. Это необходимо для работы программной библиотеки эмуляции интерфейса. В программе приема звонков используется библиотека SoftwareSerial позволяющая создать интерфейс UART на большинстве цифровых выводах Ардуино. Соедините контакты D7 и D8 Shield GPRS/GSM SIM900 с соответствующими контактами Arduino UNO соблюдая правила интерфейса UART. В разъемы модуля установите штекеры наушников и микрофона. Работа программы основана на отправке в Shield GPRS/GSM SIM900 AT команд, приеме и анализе текстовых сообщений модуля. Программа использует команды:
AT – самая простая команда, применяется для проверки работоспособности прибора путем контроля получения ответа OK модуля на эту команду, ATA – принять входящий вызов, RING – сообщение модуля, поступающее при входящем звонке.
Кроме использованных в программе команд есть много других полезных, например:
Приводим группу команд приема звонков для включения в более сложную программу.
#include SoftwareSerial gprsSerial(7, 8); // установка контактов 7 и 8 для программной эмуляции UART
void setup() { // установка скорости обмена ардуино по UART. Предполагается что GSМ модуль имеет скорость обмена 19200 бод. Возможно эту величину придется изменить gprsSerial.begin(19200); }
// в строковой переменной currStr cохраняем строку, полученную от GSМ модуля String currStr = "; int updateTime = 0;
void loop() { touch();
if (!gprsSerial.available()) return;
// считываем новый символ от GSМ модуля char currSymb = gprsSerial.read();
if ("\r" == currSymb) { // принят символ перевода строки, значит сообщение от платы завершено // прием строки RING означает входящий звонок if (!currStr.compareTo("RING")) { delay(4000); // временная задержка 4 с, в течении задержки звонящий слышит гудки
gprsSerial.println("ATA"); // поднять трубку } currStr = "; } else if (currSymb != "\n") { // текущая команда дополняется новым символом // игнорируется второй символ в последовательности переноса строки \r\n currStr += String(currSymb); } }
// функция провоцирует поддержание связи с GSМ модулем // в случае самостоятельной перезагрузки без Arduino
После приема звонка можно общаться как по обычному телефону.
Отправка SMS с помощью Shield GPRS/GSM SIM900
Модуль GSМ позволяет создать систему оповещений о различных событиях контролируемых датчиками. В результате срабатывания датчика контролируемого события замыкаются контакты реле, подключенные к модулю микроконтроллера. Для знакомства с режимом отправки СМС подключите кнопку как изображено на фото, соедините ардуино и GSМ модуль как в предыдущем примере. При нажатии на кнопку по номеру указанному в программе отправляется текстовое сообщение. Как и в предыдущем примере работа программы основана на отправке из ардуино в GSМ модуль AT команд. Обращаем внимание: для завершения сообщения использован символ (char)26 или ctrl+z, также символ означает отправку сообщения.
В программе использованы AT команды:
AT+CMGF=1 – установка текстового режима для СМС сообщений, AT + CMGS =NNNNNN – установка номера NNNNNN получающего СМС.
Группа команд отправки СМС для включения в большую программу.
#include SoftwareSerial gprsSerial(7, 8); // установка контактов 7 и 8 для программной эмуляции UART int btnPin = 12; boolean prevBtn = LOW; void setup() { gprsSerial.begin(19200); delay(500); }
void loop() { boolean currBtn = digitalRead(btnPin); if (prevBtn != currBtn && currBtn == HIGH) { // нажатие кнопки вызывает отправку сообщения sendTextMessage(); } prevBtn = currBtn; }
// функция отправки СМС void sendTextMessage() { gprsSerial.print("AT+CMGF=1\r"); // установка текстового режима для СМС delay(100); // временная задержка для обработки команды // телефонный номер в международном формате gprsSerial.println("AT + CMGS = \"+79031034423\"); delay(100); gprsSerial.println("ALARM!"); // сообщение
delay(100); // отправка Ctrl+Z означает готовность сообщения gprsSerial.println((char)26); }
Управление с помощью Shield GPRS/GSM SIM900
Управление происходит с помощью отправки СМС. Сборка GSМ модуль и ардуино реагирует на заданный текст СМС и управляет логическим уровнем выходов. Для этого соберем схему с двумя светодиодами. Ориентируясь по тексту программы, определите контакты для подключения светодиодов к контактам ардуино. В приведенном тексте программы использованы команды ориентированные на использование контактов 2 и 3. Программа, текст которой приведен далее реагирует на следующие СМС:
Green on, Green off, Yellow on, Yellow off.
Программа использует следующие AT команды:
AT+CMGF=1 – установка текстового режима СМС сообщений, AT+IFC=1, 1 – установка программного контроля потоком передачи данных, AT+CPBS="SM" – открывает доступ к данным телефонной книги SIM карты, AT+CNMI=1,2,2,1,0 – включает оповещение о новых сообщениях. Они приходят в формате +CMT: "<номер телефона>", ", "<дата, время>", далее на следующей строке сообщение.
#include SoftwareSerial gprsSerial(7, 8); // установка контактов 7 и 8 для программной эмуляции UART int greenPin = 2; // для зеленого int yellowPin = 3; // для желтого светодиода
gprsSerial.print("AT+CMGF=1\r"); delay(300); // задержка на обработку команды gprsSerial.print("AT+IFC=1, 1\r"); delay(300); gprsSerial.print("AT+CPBS=\"SM\"\r"); delay(300); // задержка на обработку команды gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); delay(500); }
String currStr = "; // если эта строка сообщение, то переменная примет значение True boolean isStringMessage = false;
void loop() { if (!gprsSerial.available()) return;
char currSymb = gprsSerial.read(); if ("\r" == currSymb) { if (isStringMessage) { // если текущая строка – сообщение, то… if (!currStr.compareTo("Green on")) { digitalWrite(greenPin, HIGH); } else if (!currStr.compareTo("Green off")) { digitalWrite(greenPin, LOW); } else if (!currStr.compareTo("Yellow on")) { digitalWrite(yellowPin, HIGH); } else if (!currStr.compareTo("Yellow off")) { digitalWrite(yellowPin, LOW); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { // если текущая строка начинается с "+CMT", то следующая сообщение isStringMessage = true; } } currStr = "; } else if ("\n" != currSymb) { currStr += String(currSymb); } }