Кошки. Породы, стерилизация

Схема подключения sim900 к компьютеру. Дешевый модуль GSM с поддержкой GPRS, для самоделок и удаленного управления

Shield GPRS/GSM SIM900 с антенной
SIM900 GPRS/GSM Shield Development Board Quad-Band Kit For Arduino Compatible

Модуль для работы микроконтроллерных устройств Arduino и аналогичных в сетях сотовой связи по стандартам GSM и GPRS. Ориентирован на использование в системах автоматики и управления. Обмен данными с другими модулями происходит через интерфейс UART. Shield GPRS/GSM SIM900 с антенной может сопрягаться непосредственно с микроконтроллером через интерфейс UART или работать совместно с персональным компьютером при использовании преобразователя интерфейса портПК-UART. Это возможно благодаря программной совместимости на уровне класса команд используемых для управления модемами - АТ команды.
Мониторинг объектов и управление ими происходит благодаря обмену данными в пределах досягаемости мобильной связи. Обеспечивается голосовая связь, отправка СМС, ММС и много других функций и сервисов. Работа модуля основана на компоненте SIM900.

Статья на русском из журнала о компоненте SIM900 . Компонент разработан компанией SIMCom Wireless Solutions. Сайт SIMCom имеет русскоязычную версию . Плата GSM модуля на стороне компонентов содержит соединители для подключения антенны, наушников и микрофона. На стороне пайки платы размещены держатель батареи CR1220 3 вольта поддерживающей работу часов модуля и контейнер для установки симкарты.
Одно из применений устройства - система слежения за перемещениями транспорта совместно с ГЛОНАСС или 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, т. е. сразу после подачи питания. Для этого в программу МК следует добавить несколько команд.

Void powerUpOrDown()
{
pinMode(9, OUTPUT);
digitalWrite(9,LOW);
delay(1000);
digitalWrite(9,HIGH);
delay(2000);
digitalWrite(9,LOW);
delay(3000);
}

Эту группу команд в программе можно использовать и для выключения модуля. Также выключить GSM модуль можно посылая AT команду.

Работу с GSM/GPRS-шилдом SIM900 , сейчас речь пойдёт о дешёвом (порядка 150 рублей) модуле GSM NEOWAY M590 .

Модуль продаётся «врассыпную» (в комплекте есть всё необходимое) , поэтому потребуются навыки пайки, впрочем, ничего сложного там нет.

В комплекте поставляется
Две маленькие, чёрные штучки - это резисторы, полярность не имеет значения.
Квадратная жёлтая штука - это танталовый конденсатор, полярность здесь важна, поэтому припаиваем как на картинке.
Чёрный цилиндр - это диод (в данной конструкции отвечает за понижение напряжения) , обязательно соблюдение полярности, так что делаем как на иллюстрации.
Маленькая прозрачная штучка - это светодиод, опять же, важна полярность, на плате минус расположен ближе к букве B oot.

Остальные детали, думаю, не вызывают вопросов.

Для тех, кто планирует разводить плату под модуль самостоятельно:

Подключение и эксплуатация

NEOWAY общается с ардуиной (или иным устройством) через UART (RX, TX) с помощью AT-команд . Для того чтоб посылать команды, надо выяснить скорость UARTа.
Для выяснения скорости, нужно подключить собраный модуль к компьютеру с помощью USB-UART моста, выглядит эта штука так:

В этом случае соединяем:

USB-UART <> NEOWAY

+5 <> +5
GND <> GND
TX <> RX
RX <> TX

Контакт BOOT используется для включения/отключения модуля кратковременным (~1сек) соединением с GND , однако удобнее просто соединить его с GND и не отсоединять. Включение модуля будет происходить при подачи питания.

Если такой штуки нет, то можно превратить ардуину в USB-UART мост залив в неё вот такой скетч…

Void setup() { pinMode(0, INPUT); pinMode(1, INPUT); } void loop() {}

… и соединив следующим образом:

Ардуина <> NEOWAY

+5 <> +5
GND <> GND
RX <> RX
TX <> TX

Контакт BOOT соедините с GND .

О питании

Модуль может потреблять большой ток , до 2-х ампер в пике, поэтому для надёжной работы необходимо организовать дополнительный БП. В принципе заработает то он и от ардуины, но в момент регистрации в сети или приёма звонка, модуль может перегружаться.

Так же будет не лишним поставить электролитический конденсатор (~1000 микрофарад, 16 вольт) поближе к модулю.

После подачи питания, на плате должен начать м и г а т ь светодиод (примерно раз в секунду) - это говорит о том, что он готов к работе.

Теперь подключаем Вашу конструкцию к компьютеру, в IDE Arduino открываем «Монитор последовательного порта» (в дальнейшем «терминал») , выбираем (внизу-справа) NL & CR , устанавливаем скорость 9600 и отправляем команду проверки связи - AT

Если ответ - ОК, то значит модуль работает и скорость UARTа установлена 9600 . Если ответа нет, то проверьте правильность соединения UARTа и дальше действуйте методом «тыка» подставляя разные скорости, пока не увидите заветное ОК .

После старта модем скажет - MODEM:STARTUP , а о готовности к работе сообщит - +PBREADY

Если модему не будет хватать питания (большинство возникающих проблем происходят из-за этого) , то он будет постоянно рестартовать.

Ещё я столкнулся с тем, что модем работает не со всеми сим-картами.

Если всё в порядке, тогда переходим к изучению АТ-команд для общения с NEOWAY и его настройки.

АТ-команды

АТ - запрос состояния, ответ - ОК.

ATE0 - отключить «эхо».

ATE1 - включить «эхо».
Эхо - это повтор введённой команды в терминал.

ATI - название и версия модуля.

AT+getvers - версия прошивки.

AT+IPR=9600 - установка скорости UARTа (9600) , возможные варианты - 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.

AT&W0

AT&W1 - сохранение конфигурации настроек в EEPROM.
0 для нулевого профиля, 1 для первого профиля.

AT+CPAS - проверка статуса модема, ответ - +CPAS: 0.
Статусы: 0 - готов к работе, 2 - неизвестно, 3 - входящий звонок, 4 - в режиме соединения.

AT+CPWROFF - отключение модуля.

AT+CLIP=1 - включить АОН.

AT+CLIP=0 - отключить АОН.

ATD+79634759175; - позвонить.
В терминал будут выводиться сообщения: CONNECT - соединение установлено, BUSY - занят, NO ANSWER - нет ответа, NO CARRIER - вызов сброшен.

ATH - сбросить все соединения.

ATH1 - сбросить текущие соединение.

AT+CMGF=1 - настроить на текстовый формат SMS.

AT+CMGF=0 - настроить SMS на PDU формат.

AT+CSCS=«GSM» - кодировка текста sms - ASCII. Переправьте на нормальные кавычки.
Возможны другие кодировки: HEX – шестнадцатеричными значениями, IRA – международный справочный алфавит, PCCP437 – кодировка CP437(IBM PC), 8859-1 – кодовые страницы семейства ISO 8859, UCS2 – кодировка unicode.

AT+CMGR=1 - чтение sms, где цифра - порядковый номер сообщения. То есть в данном случае читается первое сообщение, так - AT+CMGR=2 второе и т.д.

AT+CMGD=1 - удаление sms, где цифра - порядковый номер сообщения.

AT+CMGD=1,1 - удалить все прочитанные sms.

AT+CMGD=1,2 - удалить все прочитанные и отправленные sms.

AT+CMGD=1,3 - удалить все прочитанные, отправленные и неотправленные sms.

AT+CMGD=1,4 - удалить все sms.

AT+CNMI=1,2,2,1,0 - вывод принятого sms в терминал.

Можно найти исчерпывающую информацию по ат-командам.

Отправка SMS будет осуществляться ардуиной.

Далее будем управлять модулем с помощью ардуины

Если на вашем модуле установлена скорость UARTа отличная от 9600 , тогда дайте команду:

AT+IPR=9600
При взаимодействии с ардуиной будет использоваться SoftwareSerial, а он плохо работает на скоростях выше 9600.

Отключите девайс от питания и переключите RX и TX (остальное без изменений) модуля к ардуине следующим образом:

Ардуина <> NEOWAY

+5 <> +5
GND <> GND
D2 <> TX
D3 <> RX

Контакт BOOT соедините с GND .

Вначале загружаем в ардуину простой скетч (предварительно вписав номер, с которого будете звонить на модуль) .

При старте, на каждую команду должно быть подтверждение - ОК.

#include SoftwareSerial mySerial(2, 3); byte led = 13; void setup() { delay(2000); pinMode(led, OUTPUT); digitalWrite(led, LOW); Serial.begin(9600); mySerial.begin(9600); Serial..println(); Serial.println("Turn on AOH:"); mySerial.println("AT+CLIP=1"); //включить АОН delay(100); // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК } void loop() { if(mySerial.available()) //если модуль что-то послал { char ch = " "; String val = ""; while(mySerial.available()) { ch = mySerial.read(); val += char(ch); //собираем принятые символы в строку delay(3); } Serial.print("Neo send> "); Serial.println(val); if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер { if(val.indexOf("79891196709") > -1) // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль { Serial.println("Call my phone"); mySerial.println("ATH"); //разрываем связь Serial.println("Disconnection"); Serial.println("On D13"); digitalWrite(led, HIGH); //включаем светодиод на 5 сек Serial.println("5 sec pause"); delay(5000); digitalWrite(led, LOW); //выключаем Serial.println("Off D13"); } } } }
При звонке со вписанного номера, будет на 5 секунд зажигаться D13, а связь обрываться. Если это будет другой номер, то ничего не произойдёт. Все действия отображаются в терминале.

Следующий скетч будет посылать SMS в ответ на наш звонок:

#include SoftwareSerial mySerial(2, 3); byte led = 13; void setup() { delay(2000); pinMode(led, OUTPUT); digitalWrite(led, LOW); Serial.begin(9600); mySerial.begin(9600); Serial..println(); Serial.println("Turn on AOH:"); mySerial.println("AT+CLIP=1"); // включить АОН delay(100); Serial.println("Text format sms:"); mySerial.println("AT+CMGF=1"); // текстовый формат SMS delay(100); Serial.println("Mode GSM:"); mySerial.println("AT+CSCS=\"GSM\""); // кодировка текста - GSM delay(100); // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК } void loop() { if(mySerial.available()) //если модуль что-то послал { char ch = " "; String val = ""; while(mySerial.available()) { ch = mySerial.read(); val += char(ch); //собираем принятые символы в строку delay(5); } Serial.print("Neo send> "); Serial.println(val); if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер { if(val.indexOf("79919790861") > -1) // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль { Serial.println("Call my phone"); mySerial.println("ATH"); //разрываем связь Serial.println("Disconnection"); delay(3000); sms(String("Hello from сайт"), String("+79919790861")); // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль } } } } void sms(String text, String phone) // отправка СМС { Serial.println("Start SMS send"); mySerial.println("AT+CMGS=\"" + phone + "\""); delay(500); mySerial.print(text); delay(500); mySerial.print((char)26); delay(500); Serial.println("SMS send OK"); delay(2000); }
Вместо строки «Hello from сайт» можно вписать какую-либо переменную, например температуру с датчика, а звонок заменить каким-либо событием, например, нажатием на кнопку (дописав обработчик нажатия кнопки).

С помощью этого скетча можно отправлять в модуль через терминал какие-то свои команды или АТ-команды. Ответ будет выводится в терминал.

#include SoftwareSerial mySerial(2, 3); byte led = 13; void setup() { delay(2000); pinMode(led, OUTPUT); digitalWrite(led, LOW); Serial.begin(9600); mySerial.begin(9600); Serial..println(); } void loop() { if(Serial.available()) //если в мониторе порта ввели что-то { char ch = " "; String val = ""; while (Serial.available()) { ch = Serial.read(); val += char(ch); //собираем принятые символы в строку delay(5); } if(val.indexOf("callmy") > -1) // своя команда { mySerial.println("ATD+79196989701;"); // ВПИШИТЕ номер, на который нужно позвонить } else mySerial.println(val); // передача всего, что набрано в терминале в GSM модуль } while(mySerial.available()) { Serial.print((char)mySerial.read()); delay(3); } }
Если ввести в терминале ат-команду - AT+CLIP=1 , то включится АОН, а если ввести свою команду - callmy , тогда модуль перезвонит на вписанный в скетче телефон.

Скетч для отправки SMS-команд:

#include SoftwareSerial mySerial(2, 3); byte led = 13; void setup() { delay(2000); pinMode(led, OUTPUT); digitalWrite(led, LOW); Serial.begin(9600); mySerial.begin(9600); Serial..println(); Serial.println("Turn on AOH:"); mySerial.println("AT+CLIP=1"); //включить АОН delay(300); Serial.println("Text format sms:"); mySerial.println("AT+CMGF=1"); // текстовый формат SMS delay(300); Serial.println("Mode GSM:"); mySerial.println("AT+CSCS=\"GSM\""); // кодировка текста - GSM delay(300); Serial.println("SMS to terminal:"); mySerial.println("AT+CNMI=2,2,0,0,0"); // вывод смс в консоль delay(300); } void loop() { if(mySerial.available()) //если модуль что-то послал { char ch = " "; String val = ""; while(mySerial.available()) { ch = mySerial.read(); val += char(ch); //собираем принятые символы в строку delay(3); } Serial.print("Neo send> "); Serial.println(val); if(val.indexOf("+CMT") > -1) //если есть входящее sms { if(val.indexOf("led13on") > -1) // смотрим, что за команда { Serial.println("On D13"); digitalWrite(led, HIGH); //включаем светодиод } if(val.indexOf("led13off") > -1) // смотрим, что за команда { digitalWrite(led, LOW); //выключаем Serial.println("Off D13"); } } } }
Если отправить модулю смску с текстом - led13on , то светодиод зажжётся, а если отправить текст - led13off , то погаснет.

И последний скетч, который позволяет отправив в модуль смс со специальным словом, получить в ответ смс с балансом денег на симке, которая стоит в NEOWAY
Не забудьте вписать нужный номер.

#include SoftwareSerial mySerial(2, 3); byte led = 13; void setup() { delay(2000); pinMode(led, OUTPUT); digitalWrite(led, LOW); Serial.begin(9600); mySerial.begin(9600); Serial..println(); Serial.println("Turn on AOH:"); mySerial.println("AT+CLIP=1"); //включить АОН delay(300); Serial.println("Text format sms:"); mySerial.println("AT+CMGF=1"); // текстовый формат SMS delay(300); Serial.println("Mode GSM:"); mySerial.println("AT+CSCS=\"GSM\""); // кодировка текста - GSM delay(300); Serial.println("SMS to terminal:"); mySerial.println("AT+CNMI=2,2,0,0,0"); // вывод смс в консоль delay(300); } void loop() { if(mySerial.available()) //если модуль что-то послал { char ch = " "; String val = ""; while(mySerial.available()) { ch = mySerial.read(); val += char(ch); //собираем принятые символы в строку delay(3); } Serial.print("Neo send> "); Serial.println(val); if(val.indexOf("+CMT") > -1) //если есть входящее sms { if(val.indexOf("money") > -1) // смотрим, что за команда { delay(3000); mySerial.println("ATD#100#;"); } } if(val.indexOf("+CUSD") > -1) //если есть входящее sms { if(val.indexOf("Balance") > -1) // смотрим, что за команда { delay(3000); val = val.substring(val.indexOf("Balance"),val.indexOf("r")); sms(String(val), String("+79967081199")); // ВПИШИТЕ ВАШ НОМЕР } } } } void sms(String text, String phone) //отправка СМС с балансом модема { Serial.println("Start SMS send"); mySerial.println("AT+CMGS=\"" + phone + "\""); delay(500); mySerial.print(text); delay(500); mySerial.print((char)26); delay(500); Serial.println("SMS send OK"); delay(2000); }
Отправьте модулю смску с текстом - money и через несколько секунд придёт ответная смс с количеством денег на балансе симки NEOWAY.

Все эксперименты проводились с оператором МТС.

Теперь можно из этих скетчей собирать то, что Вам нужно.

При поступлении входящего вызова на контакте RING появляются импульсы с низким логическим уровнем длительностью 30 мс, в такт звуку гудка. При получении SMS сообщения, появляется однократный импульс длительностью 25-35 мс.

На этом пожалуй всё…

Вступайте в

Важной составляющей автоматизации любого объекта является система мониторинга и контроля. Если управлять объектом на небольших расстояниях (до нескольких сот метров) не вызывает больших проблем - можно использовать индивидуальные маломощные приемо-передатчики. То с мониторингом удаленных объектов такой прием не прокатит, организовать собственный радиоканал, скажем на 100 км, так просто не выйдет. Но тут есть один выход - можно использовать развернутые повсеместно сети сотовых операторов. Для этого есть даже специализированные GSM-модули, прикидывающиеся в сети опсоса простым мобильником. Один из таких GSM-модулей SIM900D попал ко мне в руки (за что спасибо товарищу RD3AVJ), о нем и пойдет речь.

SIM900D по сути является законченным устройством, который способен задействовать большинство услуг сотовой связи: совершать и принимать звонки, слать и получать SMS и MMS, использовать GPRS и заходить на FTP. Плюс такие плюшки как встроенный контроллер заряда Li-Ion батарей, часы реального времени, выход ШИМ интерфейс для подключения дисплея и аналогово-цифровой преобразователь (АЦП).

Для начала работы модуля нужно минимум внешних элементов и питание, но обо всем по порядку.


ПИТАНИЕ


Модуль необходимо запитывать постоянноым напряжением в диапазоне 3,2-4,5 вольта. Плюс питания подводится к выводам 38-39 (VBAT). Земля подводится ко всем выводам GND.

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


В случае автономной работы рекомендуется использовать Li-Ion аккумуляторы, которые модуль может сам и подзаряжать. Для этого имеется встроенный контроллер заряда. Чтобы модуль мог контроллировать процесс заряда, имеется вход TEMP_BAT (27 вывод). К этому выводу подключается третий вывод аккумулятора (это вывод встроенного в аккумулятор термистра) и в случае перегрева акка, зарядка будет прекращена.



Источник питания для заряда аккумулятора подключается к выводу VCHG (28 вывод). Напряжение источника может находиться в диапазоне 5-6 Вольт с возможностью тянуть ток до 750 мА.

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

ПОДКЛЮЧЕНИЕ SIM-КАРТЫ

Следующим основным элементом является сим карта. Это ключ ко входу в сеть опсоса:) Для работы с модулем необходимы сим карты с напряжением питания 3 или 1,8 вольт (старые пяти вольтовые симки работать не будут). Общая схема подключения ниже.


Подключается она к выводам SIM_x (выводы 6-9). Для того чтобы на выводе SIM_VDD появилось питающее напряжение необходимо прижать вывод KBR0 (вывод 10) к земле.

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

АНТЕННА

Тут вроде все просто, она подключается к выводу 33 (ANT). Желательно использовать специальную антенну GSM диапазона, от ее качества будет зависеть потребляемая мощность передатчика, и как итог - время автономной работы модуля. У меня на отрезок дорожки на плате длиной 7 мм уровень сигнала был 4 из 31, тоесть ловится но очень слабо. Но это при условии что репитер GSM находился на соседнем здании.

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

ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ

В модуле имеется собственный RTC, способный вести время даже при отсутствии основного питания. Для этого к выводу VRTC (вывод 15) должен быть подключен источник резервного питания, например 3-х вольтовая батарейка CR2032 или ионистр. В случае подключения незаряжаемого источника (как простая батарейка) необходимо использовать диод Шоттки, для ограничения обратного тока. Ниже приведены две схемы, слева подключение ионистра; справа - батарейки.

ИНДИКАЦИЯ

Для индикации собственного состояния в процессе работы, у модуля есть несколько выводов для подключения светодиодов. Первый из них вывод NETLIGHT (вывод 41). На этом выводе при работающем модуле появляется меандр, с частотой зависящей от состояния подключения к сотовой сети: во время поиска и регистрации высокий уровень на этом выводе появляется с периодом 800мс, после регистрации сети - с периодом 3 сек. Подключать светодиод к этому выводу можно только через транзисторный ключ:



Для индикации работы модуля есть еще один вывод - STATUS (5 вывод). На нем появляется высокий уровень когда модуль находится в рабочем режиме. Светодиод к этой ноге подключается также как и к выводу NETLIGHT (через NPN транзистор).

Вывод RING (вывод 11) служит для индикации входящих звонков и текстовых сообщений. Этот вывод удобно использовать с внешним прерыванием контроллера, для оперативного реагирования на события. В отличии от двух предыдущих на выводе RING активным уровнем явлется низкий, поэтому если сюда цеплять светодиод, то в качестве ключа нужно использовать PNP транзистор:



ЗАПУСК МОДУЛЯ

Модуль запускается при отрицательном импульсе длинной не менее 1 сек. на ноге PWRKEY (вывод 12). Для подачи импульса рекомендуется использовать следующую схему:


Для открытия транзистора можно использовать кнопку или импульс с микроконтроллера. Если снова подать импульс на эту ногу, то модуль выключится.

АУДИО

У модуля SIM900D имеется по два входа для микрофона и выхода на динамик. Для подключения используются выводы с 18 по 26. Схема согласования ниже.

Подключение микрофона:

Опыт использования 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 .

Наконец-то мне удалось заняться изучением, пожалуй самого популярного в DIY среде GSM модуля — GSM900. Что такое GSM модуль? Это устройство, которое реализует функции сотового телефона. Другими словами, GSM900 позволяет звонить другим абонентам сотовой сети, принимать звонки, отправлять и принимать SMS-сообщения. А еще, разумеется, передавать данные по протоколу GPRS. Мне этот модуль понадобился для вполне конкретной цели: появился проект системы освещения, управляемой дистанционно. Проще всего эта задача решается SMS-сообщениями: отправил одну sms — свет включился, отправил другую — выключился. Никаких пультов не надо, а телефон есть у всех (даже у бомжей). Собственно, в этой статье я рассмотрю именно этот вариант использования модуля GSM900.

1. Прошивка

Волею судеб, у меня в руках оказался модуль GSM900A. Прочитав первый попавшийся форум про оживление этой штуки, выяснилось, что буква A в названии означает принадлежность модуля к азиатскому региону. А следовательно, работать с нашими операторами он не станет. Уныние 🙁 Благо, в следующих постах на том же форуме содержалась успокаивающая информация:) Оказалось, что не всё так плохо, и чтобы модуль заработал в нашем регионе, его нужно попросту перепрошить. Этот процесс хорошо описан в блоге нашего соратника Alex-EXE: прошивка «all in one» sim900 Попробую сделать то же самое, но еще более подробно, и с учетом особенностей моего модуля. Если у вас правильный модуль и прошивка не требуется, можно сразу прыгать на раздел №2. Инструменты Итак, для начала подготовим все необходимые инструменты. Во-первых, непосредственно для прошивки потребуется приложение SIM900 Series download Tools Develop, которое можно легко найти в интернете (). Во-вторых, пригодится и сам файл прошивки 1137B02SIM900M64_ST_ENHANCE, который тоже легко добывается (). Наконец, в-третьих, нам нужен будет хороший терминал для экспериментов с модулем. Обычно я использую TeraTerm, но в этот раз его возможностей нехватило (или я не разобрался). Пришлось установить монстра с гениальным названием . Подключение к USB-UART мосту Теперь подключаем линии RX и TX к мосту. В качестве последнего я использовал CP2102. В моем случае, вопреки логике, RX и TX моста соединялись с RX и TX GSM-модуля симметрично (а не крест-накрест, как принято). Также следует запитать модуль от стабильного и мощного источника, так как пиковый ток на модуле может достигать 2А (якобы). Подойдут 4 аккумулятора типоразмера AA. Полная схема включения выглядит так:
SIM900
CP2102 Gnd Gnd
CP2102 +5V VCC_MCU
CP2102 RX SIMR
CP2102 TX SIMT
Внешний источник +5В VCC5
Внешний источник Gnd Gnd
RST
У данной модели нет кнопки сброса, так что для прошивки нам потребуется на пару секунд кинуть контакт RST на землю. Для этого мы пока оставим его висеть в воздухе. Предварительная настройка модуля Перед тем, как приступить к прошивке, мы соединимся с модулем, и изменим ему скорость UART. Для этого запустим терминал Terminal, выберем правильный порт, и установим скорость обмена — 9600. После этого жмем «Connect». Всё общение с модулем происходит посредством AT-команд. Первое что мы скажем модулю будет самая примитивная AT-команда: «AT». Это такой своеобразный ping, на который модуль должен ответить словом «OK». AT Если все прошло успешно, и модуль действительно ответил нам «OK», отправляем команду настройки скорости: AT+IPR=115200 В конце команды должен стоять служебный символ возврата каретки — CR. В ASCII таблице он имеет код 13 (или 0x0D в шестнадцатеричной системе). Символ подставится автоматически, если вы поставите галку «+CR» напротив строки ввода в нашем терминале. В других терминалах тоже есть подобные настройки. В ответ на введенную команду снова получим — «OK». Данная настройка понадобится нам для ускорения процедуры прошивки. В противном случае, как указал в своем блоге Alex-EXE, прошивка займет около часа. Настройка программы После того, как все провода воткнуты в нужные места, и модуль подготовлен к прошивке, запускаем приложение SIM900 Series download Tools Develop. Настройка программы состоит всего из нескольких пунктов:
  • в поле Target указываем целевой чип. Почему-то у меня не вышло залить прошивку на SIM900A, так что я выбрал «SIM900»;
  • выбираем правильный порт в поле Port;
  • Baud Rate ставим в 115200;
  • наконец, указываем файл прошивки в поле Core File (файл с расширением cla).
С настройкой всё. Прошивка Теперь выполняем строго и последовательно шесть важных шагов.
  • Подключаем к модулю питание (наши 4 аккумулятора). Должна загореться красная лампа питания, а лампа статуса должна начать мигать.
  • Подключаем USB-UART к компьютеру.
  • Замыкаем провод RST на землю (помним, что все это время он болтался в воздухе).
  • Нажимаем в программе кнопку Start Download.
  • Считаем в уме до трех, и отрываем RST от земли.
Ждем 6 минут до завершения прошивки. Что мы имеем после прошивки Во-первых, модуль теперь умеет работать с нашими операторами. Во-вторых, мы поставили расширенную прошивку, среди особенностей которой, к примеру, получение координат модуля по сотовым вышкам, работа с электронной почтой и доступ к дополнительным 2.5 Мб памяти.

2. Эксперименты с GSM модулем

Попробуем теперь выполнить разные полезные операции с модулем. Для начала, введем ПИН-код (если он есть): AT+CPIN=8899 Ответ модуля будет таким: +CPIN: READY. После этого получим от модуля немного информации. AT+GMR - идентификатор прошивки. AT+GSN - IMEI. AT+CPAS - состояние (0 – готов к работе, 2 – неизвестно, 3 – входящий звонок, 4 – голосовое соединение). AT+COPS? - информация об операторе. Телефонные вызовы Теперь наберем какой-нибудь номер. Делается это с помощью команды: ATD+790XXXXXXXX; Точка с запятой в конце команды очень важна, на забудьте про неё! Если во время UART сеанса на устройство кто-нибудь позвонит, вернется сообщение: RING Ответить на звонок (взять трубку) можно командой: ATA Если к модулю подключены наушники и микрофон, то можно пообщаться с удаленным абонентом как по обычному сотовому телефону. Завершает вызов команда: ATH0 Отправка SMS Сначала включим текстовый режим сообщений: AT+CMGF=1 и установим кодировку: AT+CSCS= "GSM" Модуль поддерживает и другие кодировки, более удобные для автоматических систем. Но нам для экспериментов удобнее всего использовать именно GSM режим, в котором телефон задается цифрами, а текст сообщений пишется в ASCII кодировке. Теперь отправим кому-нибудь сообщение: AT+CMGS="+79123456789" А конце команды необходимо добавить сразу два служебных символа: CR и LF. В Terminal это можно сделать галочкой CR=CR+LF, либо вручную добавив в конце строки: AT+CMGS=»+79123456789″&0D&0A После ввода этой команды, в ответ будет получен символ «>», означающий начало ввода сообщения. Пишем какой-нибудь текст: Hello World! В конце сообщения нам нужно будет передать один из двух специальных символов. Чтобы отправить сообщение введем символ из ASCII таблицы с номером 26. Чтобы отменить отправку — символ с номером 27. В используемом нами терминале для отправки символа по коду можно использовать одно из двух выражений: в шестнадцатеричном формате: $1A, и в десятеричном: #026 Прием SMS Если во время сеанса на устройство придет SMS, вернется сообщение формата: +CMTI: "SM",4 здесь 4 — это номер входящего непрочитанного сообщения. Чтобы прочитать текст этого сообщения, введем: AT+CMGR=4 В ответ получим: +CMGR: "REC READ","+790XXXXXXXX","","13/09/21,11:57:46+24" Hello World! OK В общем, все просто. Этого нам вполне достаточно для реализации задуманного. Для более глубокого изучения возможностей GFM900 рекомендую почитать еще одну статью Alex-EXE: at-команды gsm модема sim900

3. Взаимодействие с микроконтроллерами

Вообще, чтобы управлять внешними устройствами вовсе не обязательно спаривать модуль GSM900 с другим микроконтроллером. В этот модуль можно зашить свою программу, которая будет делать всё что угодно со свободными GPIO выводами. Однако, в большинстве готовых плат GPIO не разведены, поэтому для создания прототипа задуманного устройства воспользуемся самой простой Arduino Uno/Nano. Общаться Arduino и GSM900 будут всё по тому же UART интерфейсу. Для этого соединим эти два устройства по следующей схеме:
GSM900 GND VCC_MCU SIMT SIMR
Ардуино Уно GND +5V RX TX
Теперь составим программу, которая будет ловить СМС-ки, и зажигать светодиод на ноге №13 на пару секунд. Этим мы имитируем управление неким внешним устройством. const String spin = "1234"; const int rel_pin = 13; String ss = ""; // Отправка пин-кода void sendPin(){ String cmd = "AT+CPIN="+spin+char(0x0D); Serial.print(cmd); } // Включение светодиода на 2 секунды void receiveSMS(String s){ digitalWrite(rel_pin, HIGH); delay(2000); digitalWrite(rel_pin, LOW); } // Разбор строки, пришедшей из модуля void parseString(String src){ bool collect = false; String s = ""; for(byte i=0; i

Загрузка...