GSM модуль SIM900A. Прошивка и использование

Arduino представляет собой аппаратную платформу, используемую для быстрого создания различных электронных устройств, включая и охранные . Благодаря несложной конструкции, простоте языка программирования, а также использования открытых кодов даже непрофессионал сможет самостоятельно сделать многофункциональную сигнализацию для охраны своего дома, дачи, квартиры или гаража. Arduino GSM модуль станет оптимальным вариантном для создания бюджетной охранной системы, которую оптимально можно настроить под конкретный объект.

Область применения

Аппаратная платформа Arduino широко применяется в процессе создания различных электронных систем и устройств, которые могут принимать и обрабатывать сигналы от разно функциональных аналоговых либо цифровых сенсоров и датчиков. За результатами обработки получаемых сигналов может осуществляться управление внешними исполнительными механизмами и системами, подключаемыми к Arduino.

Пример использования данных модулей на видео:

Назначение

Аппаратная платформа Arduino обеспечивает возможным эффективно взаимодействовать с контролируемой средой через широкий спектр функциональных датчиков, которые могут контролировать различные параметры. Благодаря этому на базе такого рода платформ можно формировать охранные комплексы, которые будут следить за перемещениями по охраняемому периметру, за вскрытием окон и дверей, за повреждением стекол. Кроме датчиков охранного типа можно применять также и температурные сенсоры, датчики контроля за утечкой воды или газа.

Используя с платформой Ардуино GSM модуль информацию об опасности или внештатной ситуации на объекте можно предать владельцу максимально быстро. Для этой цели используется одна из сетей мобильных операторов.

Отличительной особенностью устройств Arduino является то, что их микроконтроллер может программироваться самим пользователем, используя язык Arduino, основанный на Wiring. Благодаря этому каждый может программировать алгоритм работы создаваемой охранной сигнализации так, как это требуется для конкретного охраняемого объекта и особенностей его применения.

Преимущества использования

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

  1. Небольшая стоимость. Платформы являются достаточно дешевыми устройствами по сравнению с аналогами, что никоим образом не отражается на их функциональности.
  2. Кросс-платформенность. Софт Arduino эффективно работает под такими операционными платформами, как Windows, Linux, Macintosh-OSX.
  3. Простота программирования. Для настройки микроконтроллеров используется среда программирования Processing. Она оптимально подойдет как профессиональным, так и малоопытным пользователям, которые работают с устройствами Arduino.
  4. Возможность усовершенствования. Специализированный софт Arduino отличается открытым кодом, что позволяет опытным пользователям его адаптировать под конкретные требования.

Высокая надежность аппаратной платформы. Платы Arduino выпускаются с микроконтроллерами ATMEGA8 и ATMEGA168 (более ранние модели) и с контроллерами ATmega32u4, Atmel ATmega328 (новые модели), которые отличаются высокой функциональностью и надежностью.

Принцип работы

Чтобы обеспечить полнофункциональную работу охранных систем или других устройств, построенных с применением платформ Arduino нужно иметь GSM модуль для Ардуино. С его помощью может осуществляться выход в Интернет, совершаться голосовой дозвон или отправка СМС-собщений.

В GSM-плате применяется специальный радиомодем M10, взаимодействие с которым обеспечивается за счет специальных AT-команд. Обмен информацией с модемом реализован с помощью программного последовательного интерфейса, владеющего цифровыми кодами.

Используемый в Ардуино GSM модем является 4-диапазонным, который может функционировать на следующих частотах: GSM 850MHz и 900MHz, PCS1900MHz и DCS1800MHz. В модеме реализована поддержка таких протоколов, как TCP/UDP и HTTP, обеспечивающих соединения через GPRS. Скорость передачи информационных пакетов в таком режиме будет составлять около 90 кбит/сек.

Отправка СМС через Arduino и GSM модуль реализуется при наличии установленной SIM-карты одного из сотовых операторов.»

Кроме этого появится возможность осуществлять передачу голосовых сообщений, совершать звонки – для этого дополнительно нужен микрофон и внешний динамик. Установка SIM-карты позволит использовать Arduino в режиме сотовой связи или GPRS.

Как подключать модули к ардуино

Перед тем, как подключить GSM модуль к Ардуино в его слот для следует установить подходящего типоразмера «симку» одного из операторов сотовой связи. После этого модуль подсоединяется к аппаратной платформе Arduino в соответствии с инструкцией и производится ее прошивка. Для этой цели используется ПК, который подключается к устройству с помощью USB-кабеля. После загрузки среды Arduino следует нажать клавишу Upload, что запустит процесс загрузки софта. По завершению этого процесса платформа может отсоединяться от компьютера и питаться от внешней системы питания.

Сравнительные характеристики GSM модулей

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

Neoway M590

Ардуино GSM модуль M590 является беспроводным коммуникационным устройством, используемым в целях приема и передачи информации в сетях мобильной связи. Модуль этой серии создан на плате с минимальной обвязкой и позиционируется как GSM-модуль для аппаратной платформы Arduino.

С помощью этого устройства можно устанавливать мобильную связь с внешним телефоном, отправлять СМС-сообщения, производить обмен информацией по стандарту GPRS Class-10. В модуле этой конструкции нет микрофонного входа, что ограничивает возможность осуществления приема голосовой связи – соединение может устанавливаться, но звук передаваться не будет.

Для управления M590 используются АТ-команды, которые подаются посредством последовательной связи. В качестве рабочих радиочастот применяются частоты от 900 МГц до 1800 МГц. Величина питающего напряжения составляет в пределах 3,3…5 В. Поэтому GSM модуль Neoway M590 подключение к Ардуино осуществляет через специальный преобразователь напряжений 5 В « 3,3 В.

GSM-модуль SIM800L

Компактный Sim800l GPRS GSM модуль относится к устройствам, которые применяются для поддержки мобильной связи. Модуль построен на безе SIM-800L, созданного SIMCom Wireless Solutions и рассчитан для предоставления услуг к сервисам информационных сетей GPRS\GSM, используя для этого частоты от 850 МГц до 1900 МГц. С его помощью может осуществляться отправка SMS-сообщений, реализация звонков, а также обмен информацией по GPRS-каналам.

GSM-модуль комплектуется антенной, при потребности улучшения уровня сигнала можно использовать дополнительные антенны. Для управления модулем может использоваться ПК, подключаемый посредством специальной платы преобразования интерфейсов USB-UART либо же непосредственно через сам UART. Если используется Sim800l GPRS GSM модуль, подключение к Ардуино должно реализовываться через преобразователь логических уровней. Это обусловлено тем, что у SIM800L величина напряжения на логическом высоком уровне составляет 2,8 В, а в Arduino – 3,3…5 В.

GPRS Shield от Seeed Studio

Подключение GSM модуля к Arduino обеспечит возможность использования технологий обмена данными GSM/GPRS, а также совершать звонки и посылать СМС-сообщения. Устройства этого типа построены с использованием модуля SIMCom SIM900. Они имеют слот для установки SIM-карты, разъем для подключения внешней антенны, набор 3,5-миллиметровых джеков для аудио входа и выхода. Управление и работа с Arduino GSM Shield осуществляется посредством Serial-соединений и набора специализированных AT-команд.

Этот модуль представляет собой специальную плату, используемую для управления цифровыми устройствами удаленно, а также для обмена информацией. Применение SIM900 позволяет Arduino работать по технологиям GSM/GPRS, обеспечивая голосовую связь, отправку СМС и обмен данными с помощью сотовых и мобильных сетей.

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


По просьбе трудящихся продолжаю тему GSM девайсов, а именно подключение модуля SIM900D к ATmega. Какая модель это не важно. В этой статье я буду использовать ATmega8515. Этот контроллер я использовал исключительно по фен-шую))) Вся нужная информация будет выводится на ЖК дисплей 20х4 фирмы МЭЛТ. Его тоже выбирал по фен-шую))) И также потому что он понимает кодировку Windows-1251 что сильно упрощает вывод русских буковок.

А теперь собственно поставим задачу.

  • 1. Требуется включать и выключать 8 светодиодов(реле, вентиляторов и т.д.)
  • 2. Включат и выключать по переданному коду по средством SMS.
  • 3. Выводить на дисплей уровень приема GSM сигнала.
  • 4. Вывод на экран последнюю команду переданную по средством SMS.
Задача поставлена. GSM-модуль общается с МК по UART. Схема включения GSM-модуля можно посмотреть . МК будет работать на частоте 3,6864 МГц. Это нужно для снижения ошибок в UART. Скорость обмена 19200. За все время тестирования ошибок с передачей не было. Правда помер один МК, что дало головомойки на пару дней, но потом с заменой на новый МК все пошло как по маслу. ЖК дисплей подключен к порту А. Порт С отдан на включение и выключение светодиодов. Ах да. тут есть один нюанс. GSM-модуль может получать данные на ногу RxD только 3 вольта и не более!!! Это важно!!! Отсюда было принято решение подавать данные через резисторный делитель. Расчет плечей оставляю за вами так как МК может работать в разных диапазонах от 2,8 до 5 вольт. Лично я питаю GSM-модуль 4 вольтами, а МК 5. Так, с железом вроде разобрались. Теперь поехали по коду. Первое что необходимо это способ принятия данных от GSM-модуля. Модуль пуляет ответы на запросы такого вида:
Запрос:
AT+CSQ\r\r\n
Ответ:
\r\n+CSQ: 17,0\r\n\r\nOK\r\n
Отсюда видно что запросы и ответы перемешаны кучей \r и \n ерундой. Ну для запроса это не проблема, так как мы сами его пишем, а вот ответ... Разгребать весь этот зоопарк каждым пришедшим байтом в UDR не комельфо, поэтому будем использовать кольцевой буфер. Кто не знает что это, идем сюда . При использовании кольцевого буфера добавим в обработчик прерывания по приходу данных в UDR проверку для игнорирования \r и \n. ISR(USART_RX_vect) { char temp = UDR; if(!(temp == 0x0A || temp == 0x0D)) InBuffer(temp); } То есть мы записываем в буфер все кроме \r и \n. Как только мы получили данные начинаем их обрабатывать. Первое что нужно посмотреть, SMS это или ответ на команду. Так как GSM-модуль всегда возвращает фиксированный ответ, а меняет только данные, то отследить можно по названию ответа. Например запрос на уровень приема GSM.
if(time == 30) { time = 0; USART_STR("AT+CSQ"); USART_END(); _delay_ms(200); } if(GetData()) { _delay_ms(70); num = IndexNumber(); OutBufferStr(temp,num); } Теперь в массиве temp лежит ответ от GSM-модуля. Теперь давайте его распознаем.
if((temp == "C") & (temp == "S") & (temp == "Q")) { } Если в массиве лежит ответ на запрос уровня GSM, то условие выполнится и его можно обрабатывать по своему усмотрению. А если условие не выполнилось? То скорее всего пришло SMS. Как его вычислить? Как только приходит SMS сообщение, модуль возвращает строку вида.
+CMTI: "SM",1 Все что здесь меняется, так это последний символ, а точнее цифра. Это номер SMS. А вот буквы SM не меняются никогда. Значит нам требуется проверить есть ли в сообщении эти буквы.
if((temp == "S") & (temp == "M")) { } Конечно еще бы было не плохо проверить название самой команды для более точного убеждения, но я этим пренебрег так как это пока просто объяснения работы МК с GSM-модулем. Поле того как распознали принятие SMS не плохо бы было его прочитать. Кидаем GSM-модулю запрос вида.
USART_STR("AT+CMGR="); USART_TXD(temp); USART_STR(",0"); USART_END(); _delay_ms(200); В ячейке массива temp лежит номер SMS. Данная команда будет адекватна при SMS сообщениях меньше 9. Ну это понятно почему. А вообще чтобы не забивать память SIM карты SMSками я после прочтения SMS сразу удаляю ее, поэтому больше 1 SMS в памяти не бывает. Но все же я использовал не жестко число 1, а именно выдрал его из массива. Я не знаю почему, но иногда SMS не всегда приходят сразу, а с неким опозданием. Если такое произошло, то возможен такой косяк, SMSка еще не пришла, мы думаем что не прошла и шлем за ней еще одну. Тут проходит время и они приходят две подряд одна за одной. Первую мы читаем как 1, а вторая пришла как 2. Вот от таких косяков и защищает ячейка массива. Теперь запросив текст SMS GSM-модуль вернет нам ответ вида.
+CMGR: "REC UNREAD","+71234567890","","14/07/06,13:04:38+16" сообщение OK После этого можно читать сообщение. Так как ответы всегда фиксированы, то можно смело начинать читать с temp... и может возникнуть косяк))) Я на него нарвался. Пока я разбирался с GSM-модулем мне тихим сапом Beeline прислал SMSку. Все бы ничего да подстава засела в месте где прописывается номер отправляющего SMS абонента. Вместо "+71234567890" мне пришло "My Beeline". Ну понятно чем это пахнет. Короче МК ни фига не понял и вошел в ступор. Поэтому я решил все таки проверять номер. Да и для безопасности это не помешает. А то вдруг зависливый сосед прознает про управление котлом по SMS и пошлет команду зимой выключит котел))).
for(uint8_t i=0; i Смысл прост. В цикле сравниваем ячейки массива буфера отвечающие за номер с массивом в который заранее положили требуемый номер. Пока цифры совпадают флаг равен 1, но как только цифра не совпадет, обнуляем флаг и выходим из цикла. Если флаг в нуле, то не читаем SMSку, а если в единице, то SMSка наша. Если все проверки прошли, то читаем команду. Команды я сделал такие. Заглавния буква V значит включить, O значит отключить. Для того чтобы узнать какой светодиод включить или выключить, после буквы пишем его номер от 1 до 8. Пример, нужно включить 4-й светодиод. Шлем SMS с текстом V4 , а для отключения O4 .
if(flag) { if(temp == "V") { lcd_xy(0,2); lcd_putsf("LED-"); lcd_putchar(temp); lcd_putsf(" Bключен "); switch (temp) { case 0x31: PORTC |= (1 Собственно вот весь код. Сначала проверяем буковку и по ней выполняем ту или иную команду и параллельно выводим сообщение на ЖК. А после того как закончили работу с SMS скидываем флаг и удаляем все SMS.
USART_STR("AT+CMGD=1,4"); USART_END(); _delay_ms(100); flag=0;
Вот и все. Ниже видео всего этого безобразия и архив с проектом.
Проект

SIM900 — это четырехдиапазонный GSM/GPRS модуль, входящий в семейство модулей для поверхностного монтажа SMT (Surface Mount Technology), который позволяет использовать все преимущества миниатюрных и эффективных решений. Благодаря малым габаритным размерам SIM900 прекрасно подходит для M2M приложений.

Основные характеристики GSM модуля SIM900:

  • GSM: 850/900/1800/1900 МГц
  • GPRS multi-slot class 10/8
  • Соответствие стандарту GSM фазы 2/2+
    • Класс мощности 4 (2 Вт в диапазонах 850/900 МГц)
    • Класс мощности 1 (1 Вт в диапазонах 1800/1900 MГц)
  • Управление AT командами (GSM 07.07 ,07.05 и фирменные AT команды SIMCOM)
  • Embedded AT — работа с приложениями пользователя*
  • Аудиокодеки HR, FR, EFR, AMR, подавление эха
  • CSD до 14.4кбит/с
  • PPP-стек
  • Встроенный стек TCP/IP, UDP/IP
  • MUX (07.10)
  • Протоколы HTTP и FTP*
  • Декодирование DTMF-тонов*
  • FOTA*
  • Напряжение питания 3,2 ... 4,8 В
  • Рабочий температурный диапазон: −40 °C ... +85 °C
  • Размеры: 24* 24 * 3 мм
  • Масса: 6,2 г

* - специальная версия ПО

SIM900 — новое решение от компании SIMCom, одна из моделей нового поколения недорогих модулей GSM/GPRS. SIM900 был разработан с учетом замечаний пользователей предыдущих версий модулей. Особое внимание разработчики SIM900 уделили вопросу увеличения надежности ПО, добавлены режимы работы с минимальным энергопотреблением, значительно уменьшены и размеры SIM900.

Одновременно с этим разработчики SIM900 сохранили основные преимущества предыдущих версий:

  • бюджетная стоимость;
  • удобный встроенный стек с TCP/IP;
  • популярный дизайн с торцевыми контактами, что даёт возможность использовать для SIM900 доступные технологии пайки и монтажа.

Всё это позволяет использовать SIM900 в различных изделиях, в т. ч. в системах безопасности, персональных и автомобильных навигаторах, в системах промышленной автоматики и другом оборудовании. Следует отметить и расширенный функционал SIM900, доступный в прошивке ENHANCE — декодирование DTMF, создание и отправка писем на eMail благодаря АТ-командам, исполнение команд полученных по SMS и т. д. SIM900 имеет и прошивку с поддержкой технологии Embedded AT, дающую возможность записи в память модуля пользовательского кода на языке С. Это позволяет (в определенных случаях) отказаться от применения внешнего микроконтроллера.

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

Основные функции GSM-модуля:

  • Контроль за состоянием внешней сети.
  • Контроль за подключением потребителей к источнику напряжения.
  • Дистанционное включение и отключение системы автозапуска с помощью SMS-запроса.
  • Дистанционное управление пуском генератора.
  • Контроль за состоянием встроенного реле.
  • Контроль за температурой (датчик внутри GSM-модуля).
  • Контроль за балансом SIM-карты.

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

GSM-модуль оповещает администраторов системы SMS сообщением, состоящим из 4-х информационных полей, следующего вида:

Сеть подключена;
Реле выкл.;
Темп. 27С;
Баланс: 51р.

SMS сообщение отправляется автоматически на телефон 1 администратора каждый раз при изменении режима питания потребителей (1 информационное поле). Если это изменение произошло на время менее 10 сек, SMS сообщение отправляться не будет.

1 информационное поле «Сеть подключена».

GSM-модуль контролирует сигналы наличия напряжения во входной сети и у потребителей, и в зависимости от наличия напряжения формирует информационное поле следующего вида:

2 информационное поле «Реле выкл».

Информационное поле, показывающее состояние реле, встроенного в GSM-модуль. Для включения реле необходимо с телефона 1 или 2 администратора отправить SMS с текстом «1» .

Для выключения реле - SMS с текстом «0» . Красный светодиод отображает состояние реле. То есть не горит когда реле выключено и горит когда включено.

3 информационное поле «Темп. 27С».

Температура, встроенного в GSM-модуль термодатчика.

4 информационное поле «Баланс: 51р.».

Баланс СИМ-карты GSM-модуля.

Администраторы могут запросить у GSM-модуля состояние системы. Для этого нужно отправить пустую СМС с номера 1 или 2 администратора или просто сделать дозвон (модуль автоматом разорвёт соединение - т. е. будет занято). GSM-модуль, приняв пустую SMS/входящий дозвон, опросит состояние своих входов, запросит баланс, состояние реле и считает температуру и пришлёт SMS на номер администратора, который делал запрос.

Подключайте GSM-модуль при обесточенной системе.

Установка GSM-модуля.

Выходы и входы GSM-модуля показаны на рисунке:

GSM-модуль необходимо размещать вне металлических конструкций. Если Вас интересует контроль за температурой в определенном помещении, то модуль можно разместить в нем (проверьте наличие в помещении достаточного уровня сети сотового оператора!) Модуль соединяется с автозапуском 5-ю проводами. Провода могут быть любые (модуль потребляет около 500 мА).

Настройка GSM-модуля.

Необходимо приобрести SIM-карту сотового оператора и выбрать тариф. Так как общение с модулем происходит только посредством SMS сообщений, тариф выбирайте по их минимальной стоимости и отсутствию абонентской платы.

Во избежание неоправданных затрат, необходимо с помощью меню телефона отключить информационные службы и рекламные каналы. Если возникли сложности с отключением рекламных или информационных каналов – обратитесь в абонентскую службу сотовой компании. По Вашей просьбе оператор, как правило, может проделать это дистанционно.

Вставьте SIM-карту в телефон и ПОЛНОСТЬЮ ОЧИСТИТЕ телефонную книгу SIM-карты. Далее Вам необходимо заполнить телефонную книгу следующим образом (это лучше делать на телефоне, который показывает номера ячеек сим-карты, т. к. крайне важен именно такой порядок заполнения ячеек):

В 1-ю ячейку SIM-карты необходимо ввести номер телефона 1 администратора. В поле «Имя» вводим слово «Админ 1» (или любое другое слово). В поле «Номер» вводим номер телефона администратора в формате: 89991234567 или +79991234567 (значения не имеет).

Во 2-ю ячейку SIM-карты необходимо ввести номер телефона 2 администратора. В поле «Имя» вводим слово «Админ 2» (или любое другое слово). В поле «Номер» вводим номер телефона администратора в формате: 89991234567 или +79991234567 (значения не имеет). Если планируется работа с одним администратором, то в эту ячейку необходимо ввести номер 1 администратора.

В 3-ю ячейку SIM-карты необходимо ввести команду запроса баланса сотового оператора. В поле «Имя» вводим слово «Баланс» (или любое другое слово). В поле «Номер» вводим команду запроса баланса (обычно это *100# или *102# ).

При подаче питания загораются оба светодиода на 1 сек., затем гаснут на 1 сек. и зажигается красный светодиод в пол накала. Через некоторое время красный светодиод загорается в полный накал.

Далее красный гаснет и зажигается в пол накала зелёный (как правило на очень короткое время что можно не заметить), затем светодиоды вместе мигнут 2 или 3 раза. 2 раза в случае если указаны только номера администраторов а номер баланса не указан, 3 раза - если все три ячейки прописаны и прошло успешное их чтение. Далее контроллер сохраняет текущее состояние системы. Реле выключено (всегда после подачи питания). Рабочий режим - красный потушен, зелёный мигает. Если зелёный мигает равномерно - сеть не найдена. Если редко кратковременная вспышка - то сеть найдена и может происходить обмен по сети GSM.

Использование GSM-модуля для дистанционного управления пуском генератора.

GSM-модуль можно использовать для дистанционного пуска генератора. Режим «Управляемый пуск» активируется в настройках системы. Позволяет в отсутствие внешней сети пускать генератор с подключением нагрузки и останавливать при необходимости.

Использование GSM-модуля для дистанционного управления нагрузкой.

GSM-модуль можно использовать для дистанционного управления включением нагрузки. Т. к. силовая часть в автозапуске уже есть, то используя режим «Управление нагрузкой», можно организовать вкл/выкл нагрузки при наличии внешней сети. Это удобно использовать, например, для дистанционного управления электроотоплением на даче в зимний период, что позволит Вам приезжать в любое время в уже прогретый дом. С помощью термометра можно контролировать процесс нагрева.

Если Вы планируете использовать этот режим, необходимо переключить вход БП, подзаряжающего аккумулятор генератора с потребителей на входную сеть! Также необходимо проверить нормальную работу встроенной в генератор системы подзарядки аккумулятора, т. к. в отсутствии сети, подзарядка аккумулятора будет происходить только от встроенной системы.

Использование GSM-модуля для дистанционного отключения системы.

GSM-модуль можно использовать для дистанционного отключения/включения системы. Режим «Управляемое включение» активируется в настройках. Позволяет корректно выключать систему и снова включать при необходимости.

Подключение GSM-модуля к автозапуску изображено на схеме:


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

Итак, SIM900 – GSM-модуль компании SIM COM, управляется AT-командами, умеет посылать SMS, совершать звонки, организовывать прямое CSD-соединение, обмениваться информацией по GPRS.

В моих руках оказалась заказанная из Китая отладочная плата SIM900 GPRS shield – совместимая с платформой Arduino.

На плате находится сам чип SIM900, разъёмы для микрофона и наушников, переключатель источника питания (от внешнего разъёма или от Arduino), антенна, несколько светодиодов для индикации режимов работы, разъём для батарейки (если нужны часы реального времени), кнопка включения/выключения. Хорошее описание я нашёл на wiki производителя . Там же приведён код для управления модемом в различных режимах.

Как заявляет нам производитель плата отлично совместима с Arduino Uno. Действительно, плата SIM900 просто втыкается в Uno и сразу же начинает работать. Однако, как выяснилось, Arduino Uno может оказаться «слабоватой» для реализации некоторых функций, но об этом я расскажу чуть ниже.

С Arduino Mega плата работает с некоторыми ограничениями. Это связано с тем, что у Меги в отличие от Uno пины 7 и 8, недоступны для использования в качестве software serial (программный USART). Это решается переключением интерфейса USART на ноги 0 и 1, для этого на плате SIM900 предусмотрены джамперы.

Вообще, плату можно подключить к любому контроллеру с интерфейсом USART. Например, пробовал управлять модемом с помощью контроллера STM32F4.

SIM900: SMS-сообщения и звонки

Испытания модуля для обмена SMS-сообщениями и звонков прошли «на УРА»! Модуль справился с этими задачами без особых проблем, для этого я просто скопировал c того же сайта , скомпилировал и прошил в Arduino Uno вот этот код:

//Serial Relay - Arduino will patch a //serial link between the computer and the GPRS Shield //at 19200 bps 8-N-1 //Computer is connected to Hardware UART //GPRS Shield is connected to the Software UART #include SoftwareSerial GPRS(7, 8); unsigned char buffer; // buffer array for data recieve over serial port int count=0; // counter for buffer array void setup() { GPRS.begin(19200); // the GPRS baud rate Serial.begin(19200); // the Serial port of Arduino baud rate. } void loop() { if (GPRS.available()) // if date is comming from softwareserial port ==> data is comming from gprs shield { while(GPRS.available()) // reading data into char array { buffer=GPRS.read(); // writing data into array if(count == 64)break; } Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array count = 0; // set counter of while loop to zero } if (Serial.available()) // if data is available on hardwareserial port ==> data is comming from PC or notebook GPRS.write(Serial.read()); // write it to the GPRS shield } void clearBufferArray() // function to clear buffer array { for (int i=0; i

Для того, чтобы посылать модулю команды, его нужно подключить к компьютеру. Это можно сделать, используя USB порт Arduino. На компьютере для этого нужен любой монитор COM-порта. Его можно скачать отсюда , а можно использовать монитор, встроенный в Arduino IDE.

Всё, что делает прошитая программа Arduino, — «ловит» команды пользователя и посылает их модулю, а затем возвращает пользователю ответы SIM900. Таким образом, передавая модулю AT-команды в ручном режиме, я опробовал приём и передачу SMS-сообщений, а подключив в соответствующие разъёмы микрофон и наушники — воспользовался модулем SIM900 в качестве мобильного телефона.

Передача данных по GPRS с помощью SIM900

Свои первые опыты по передаче данных через GPRS я начал, используя для управления SIM900 платформу Arduino UNO (просто потому, что она была под рукой). Для начала купил хостинг с сервером под Apatche и развернул на нём простейшее приложение, которое умело отвечать на GET-запросы. Получилось! Я все так же посылал команды с ПК контроллеру Arduino, который в свою очередь пересылал их SIM900.

Всё работало корректно до тех пор, пока GET-запросы были достаточно короткими (до 100 символов). Но как только запросы стали длиннее — начались сбои: запросы передавались не полностью. Было замечено, что глюки могут появиться или исчезнуть даже при увеличении/уменьшении управляющей программы Arduino на несколько строк. Впоследствии выяснилось, что сбои связаны с программным USARTом, которой Arduino UNO использует для общения с SIM900, т.к. такой USART целиком и полностью зависит от программного цикла ядра контроллера. При малом количестве данных, они успевают передаваться всегда, а при увеличении их количества — результат передачи зависит от длительности программного цикла.

Вывод из всего вышесказанного: использовать программный USART при общении с SIM900 НЕЛЬЗЯ , особенно когда речь идёт о большом количестве передаваемых данных.

У Arduino Uno всего один «железный» интерфейс USART, который был занят под обмен с ПК, поэтому пришлось отказаться от UNO, заменив её на Arduino Mega, которая не страдает недостатком «железных» USARTов. После такой «рокировки» работа устройства стала стабильной и корректной.

SIM900: TCP-IP стек или HTTP? Что лучше?

Изучая руководство по управлению модемом, я обнаружил что существует две группы AT-команд. Первая группа используется для передачи данных через встроенный TCP-IP стек, а вторая использует HTTP протокол уже реализованный внутренней логикой SIM900. Сколько я ни мучал Google и Яндекс пытаясь узнать, чем же отличаются данные способы, каковы плюсы и минусы каждого из них, — ничего не нашёл, поэтому попробовал оба и делюсь своим практическим опытом тут.

Оба способа рабочие и имеют право на существование.

TCP-IP стек немного сложнее инициализируется (больше команд нужно передать модулю), им немного сложнее управлять. Для того, чтобы передать запрос, необходимо открыть соединение, дождаться ответа и корректно закрыть его.

HTTP — это, говоря простыми словами, браузер встроенный в SIM900. Он прост в инициализации, для того чтобы начать обмен с сервером необходимо открыть сеанс. При этом открытие и закрытие соединения при каждом запросе и решение других «организационных задач» ложиться на плечи SIM900. Это удобно, к тому же передача данных таким способом происходит несколько быстрее, как раз из-за того, что у SIM900 быстрее получается выполнять все «вспомогательные операции», чем это может делать управляющий контроллер.

Таким образом, при выборе способа обмена я все-таки остановился на протоколе HTTP.

Некорректный GET-запрос на сервер

В самом начале своей работы по передаче данных по GPRS я допустил ошибку, которая стоила мне не одного дня мучений. Не имея достаточного опыта работы по взаимодействию с сервером посредством GET-запросов, я, набравшись поверхностных знаний в интернете, составил запрос вида:

GET http://xxx.ru/d_command.php?UC=1111 HTTP/1.1
HOST: xxx.ru

Этот запрос не является корректным, однако его отлично «кушал» браузер и прокси сервер, с которого я отправлял запросы для отладки — именно поэтому я считал запрос верным.

Самое удивительное то, что SIM900 тоже отлично справлялся с «плохим» запросом (а отправлял запросы я тогда через TCP-IP стек). Однако, в один прекрасный день сервер начал отвечать на такие запросы ошибкой 404. Произошло это по так и не выясненным обстоятельствам, то ли хостинг-провайдер поменял алгоритмы обработки запроса (он открещивается от этого), то ли это сделал мобильный оператор. Но факт остаётся фактом. Тогда же я попробовал передать тот же запрос через HTTP — всё работало. Объясняется это тем, что внутренний HTTP протокол модуля SIM900 (как я уже говорил, по-сути встроенный браузер) умеет сам правильно «распарсивать» некорректные запросы и транслировать в сеть уже в правильном виде. Это еще один плюс (сомнительный, конечно же) использования HTTP, поскольку позволяет программисту некоторые неточности. А вообще, конечно, запрос должен быть написан правильно и выглядеть вот так:

GET /d_command.php?UC=1111 HTTP/1.1
HOST: xxx.ru

С таким корректным запросом SIM900 успешно обменивается и через TCP-IP стек, и через HTTP.

Зависание SIM900

Иногда при обмене по GPRS возникают ситуации, после которых модуль может зависнуть. Этому виной могут быть некорректные данные, пришедшие по сети и загнавшие в ступор SIM900, или помехи на линии обмена модуля и контроллера, при которых SIM900 получил «не то, что ждал», или ещё какие-то неведомые проблемы. Производитель чипа предупреждает о том, что это может происходить и предлагает в таких случаях перезагружать модуль с помощью специальной последовательности импульсов, подаваемых на вход PWRKEY.

Однако, как выяснилось, это не всегда помогает — после такой перезагрузки модуль может «проснуться» всё ещё «глюкнутым». И об этом тоже нас предупреждает производитель, если внимательно читать DataSheet на модуль. Вот что рекомендуется в документации:

NOTE: It is recommended to cut off the VBAT power supply directly instead of using external reset pin when SIM900 can not respond to the AT command “AT+CPOWD=1” and PWRKEY pin.

Поэтому самым правильным способом перезагрузки модуля является полное снятие с него питания (с ножки VBAT), выдержка некоторой паузы (хотя бы секунду на всякий случай) и повторная подача питания. Для перезагрузки модуля на плате лучше предусмотреть реле или транзисторный ключ, управляемый контроллером.

Заключение

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

До свидания! Следите за обновлениями на LAZY SMART .