Содержание
Обработка исключительных случаев
Все команды GSM/GPRS-модулей серии SIM800 имеют время исполнения
Разработчику ПО хоста важно знать время исполнения отдельно для каждой команды, чтобы исключить бесконечное ожидание реакции на команду (открытие соединения, к примеру). Значения максимального времени исполнения задокументированы, их можно найти в системе команд GSM/GPRS-модуля
В таблице 2 указаны значения максимального времени исполнения основных команд встроенного TCP/IP-стека. Как видно, некоторые команды исполняются десятки секунд. Это объясняется зависимостью этих команд от быстродействия сети и сервера.
Команда |
Максимальное время исполнения, с |
CIICR |
85 |
CIPSTART |
160 |
CIPSEND |
645 |
CIPCLOSE |
120 |
CIPSHUT |
65 |
Рис. 6. Нормальная процедура закрытия соединения с сервером
Получается, некоторые команды могут исполняться несколько минут, прежде чем можно будет понять, что что-то пошло не так. В М2М такие задержки, конечно, недопустимы. Как же обрабатывать случаи, когда время исполнения команды затянулось, а реакции так и не последовало? Все зависит от того, на каком этапе установления соединения произошел сбой (ошибка или вышел таймаут) и в каком состоянии находится стек (рис. 6). Причин сбоя может быть несколько, и реакция может быть разная, но главное вернуть встроенный стек в исходное состояние IP INITIAL или IP STATUS. Рассмотрим на примере несколько случаев:
- Сервер вышел из строя или доступ в Интернет ограничен (потеря пакетов, высокий пинг и проч.). В этом случае все команды из таблицы 1 приведут к длительному времени исполнения. Чтобы повторить попытку соединения с этим или другим сервером, следует перед этим закрыть сокет командой AT+CIPCLOSE=1. При этом деактивировать контекст командой AT+CIPSHUT не обязательно.
- Потеря связи с GSM-сетью. Такое возможно в местах плохого покрытия сети, из-за ухудшения условий приема сигнала или внезапной выемки SIM-карты из прибора. Здесь следует проверить готовность SIM-карты (AT+CPIN? или чтение ячейки памяти командой AT+CMGR), уровень сигнала (AT+CSQ), наличие регистрации в сети (AT+CREG?) и доступ к услугам GPRS (AT+CGATT?). Если физический доступ к GSM-сети пропадет после или во время открытия сессии командой AT+CIPSTART, то придется закрыть соединение (AT+CIPCLOSE=1), деактивировать контекст и восстанавливать соединение с начала, сразу после того как будут успешно проверены SIM-карта, уровень сигнала, регистрация в сети и доступ к услугам GPRS.
- Истек срок жизни контекста. Когда открывается контекст, сеть выделяет определенные ресурсы на его поддержание. Операторы сотовой связи не допускают мертвые контексты, когда ресурс занят, а обмена данными в этом контексте нет. Если обмена данных нет, то через некоторое время оператор деактивирует контекст. У разных операторов это время разное примерно от трех до семи минут. Модуль при этом в порт UART выдаст уведомление: +PDP DEACT. Его нужно обработать и сбросить встроенный стек в исходное состояние командой CIPSHUT. Однако иногда в некоторых приложениях требуется поддерживать контекст в активном состоянии. Для этого можно периодически обмениваться с сервером пустыми данными, типа эха. Но это неудобно в реализации. Взамен можно воспользоваться функцией поддержания соединения командой AT+CIPTKA .
- Нагрузка на сеть GSM. Всем известно, что GPRS-услуги и голосовая связь делят общие ресурсы. GPRS всегда выделяется оператором по остаточному принципу, а у голосовых соединений наивысший приоритет. Контекст может быть деактивирован оператором принудительно. Внешне данный случай выглядит как предыдущий (п. 3), и обрабатывать его следует аналогично.
Следует предусмотреть случай, когда переинициализация соединения не дает желаемого эффекта. В этом случае рекомендуются штатное выключение/включение модуля и повторная попытка восстановить соединение с самого начала.
Платы дополнения (шилды)
Для расширения вспомогательного функционала используются дополнительные платы – шилды. Ниже приведен список самых интересных:
- LCD Shield определяет метеорологические показатели в помещениях: влажность, скорость ветра, температуру.
- Motor Shield обеспечивает управление скоростью и оборотами моторов. Есть модели с поддержкой нескольких приводов.
- Data Logging Shield предназначена для записи и хранения информации до 32 Gb.
- Relay Shield самая востребованная в системах Smart Homе, рассчитана на обслуживание приборов мощностью 1 КВт.
- Ethernet Shield от Ардуино обеспечивает независимость Умного дома от ПК, настраивает интернет-связь.
- Wi-fi Shield нужен для передачи шифрованных данных между Arduino и устройствами.
- Energy Shield позволяет разнообразить источники питания для подключения проекта.
- GPRS Shield используется для связи Умного дома с телефоном владельца.
Работа с AT-командами
Данный раздел рассказывает о том, как работать с GPRS Shield на более низком уровне, без дополнительных библиотек. Если вам достаточно тех методов, которые предоставляет штатная библиотека, можете пропустить этот раздел.
Введение
С внешним миром модуль общается посредством AT-команд. Все команды делятся на базовые, так называемые S-команды, и расширенные, добавленные в стандартах GSM07.05–07.07. Практически все команды работают в 3 режимах — тестовом, чтения и записи.
-
В тестовом режиме возвращается , если команда поддерживается или возможные значения данных в параметре команды. Тестовый режим определяется окончанием команды в виде
-
В режиме чтения возвращаются текущие значения параметра, отличается от тестового наличием в конце просто символа
- В режиме записи после идут новые значения параметров.
Настройки порта
По умолчанию модуль настроен на 9600 8N1:
- 9600 – скорость;
- 8 – бит в посылки;
- N – нет контроля чётности;
- 1 – стоп бит.
Для проверки поддерживаются AT-команды:
Команда | Ответ | Описание |
---|---|---|
AT+IPR? | +IPR: 0 OK |
Скорость порта: 0 – автоматически 1200 2400 4800 9600 19200 38400 57600 115200 |
AT+ICF? | +ICF: 3,3 OK |
Настройки передачи. Первый параметр: Бит в посылке чётность/стоп бит 1 – 8/0/2 2 – 8/1/1 3 – 8/0/1 4 – 7/0/2 5 – 7/1/1 6 – 7/0/1 Второй параметр – чётность: 0 – нечётный 1 – чётный 3 – нет |
AT+IFC? | +IFC: 0,0 OK |
Контроль передачи данных. Первый параметр – терминалом от модуля Второй параметр – модулем от терминала 0 – нет контроля 1 – программный 2 – аппаратный |
Если вы хотите изменить их, введите AT-команду, замените знак на и введите нужные вам параметры из таблицы.
Все настройки этих команд сохраняются в энергонезависимой памяти.
Информация о модуле и состояние
Команда | Ответ | Описание |
---|---|---|
AT+GCAP | +GCAP: +CGSM OK |
Возможности модуля |
AT+GMM | SIMCOM_SIM800C OK |
Идентификатор модуля |
AT+GMR | Revision:1418B08SIM800C32_BT_EAT OK |
Ревизия |
AT+GSN | 8683450321ХХХХХ OK |
IMEI |
В документе с перечнем AT-команд можно найти документацию на все поддерживаемые команды.
Пример скетча для работы с использованием AT-команд
- GPRSATСommands.ino
-
// библиотека для работы с GPRS устройством #include <GPRS_Shield_Arduino.h> // создаём объект класса GPRS и передаём в него объект Serial1 GPRS gprs(Serial1); // можно указать дополнительные параметры — пины PK и ST // по умолчанию: PK = 2, ST = 3 // GPRS gprs(Serial1, 2, 3); void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с GPRS Shield Serial1.begin(9600); // включаем GPRS шилд gprs.powerOn(); // проверяем есть ли связь с GPRS устройством while (!gprs.init()) { // если связи нет, ждём 1 секунду // и выводим сообщение об ошибке // процесс повторяется в цикле // пока не появится ответ от GPRS устройства Serial.print("GPRS Init error\r\n"); delay(3000); } // выводим сообщение об удачной инициализации GPRS Shield Serial.println("GPRS init success"); } void loop() { // считываем данные с компьютера и записываем их в GPRS Shield serialPCread(); // считываем данные с GPRS Shield и выводим их в Serial-порт serialGPRSread(); } void serialPCread() { if (Serial.available() > ) { // если приходят данные по USB while (Serial.available() > ) { // записываем их в GPRS Shield Serial1.write(Serial.read()); } } } void serialGPRSread() { if (Serial1.available() > ) { // если приходят данные с GPRS Shield while (Serial1.available() > ) { // передаём их в USB Serial.write(Serial1.read()); } } }
Сигнализация для дома на Arduino
Рассмотрим, как сделать на Arduino Uno или Nano сигнализацию для дома, загородного садового участка или гаража. В проекте мы использовали сенсор движения, датчик воды и температуры — это набор основных сенсоров для самой простой системы оповещения. Вы узнаете о прорыве водопровода, снижении температуры в доме или проникновении посторонних людей в помещении в любое время и в любом месте.
Датчики Ардуино для охранной сигнализации
В данном проекте для передачи информации по сети Интернет мы использовали старый смартфон. Соответственно в месте расположения вашей недвижимости должен быть сигнал GPRS и у любого сотового оператора подключен самый простой тариф с выходом в Интернет. Если эти условия не выполняются, то в охранной системе предусмотрена звуковая сирена, которая тоже может спугнуть грабителей.
В проекте использованы самые простые сенсоры — температурный датчик DHT11, датчик утечки воды, который можно сделать самому, а также датчик движения. Если вы решите сделать более сложную сигнализацию — рекомендуем вам посмотреть проект пожарной сигнализации или сигнализации на GSM. Также потребуется установить приложение на смартфон и зарегистрировать два аккаунта в Твиттере.
Устройство и характеристики
Устройство отправляет SMS при возникновении следующих событий:
- открытие двери (герконовый датчик);
- резкое изменение освещения (фоторезистор);
- движение (PIR датчик);
- выход температуры из заданного диапазона;
- низкое напряжение батареи.
Пример SMS с событием
Также, раз в сутки можно настроить время ежедневного отчета
Питается устройство от 3-х батареек AA. Расчетное время работы ≥6мес.
Настройка устройства, считывание логов событий и построение месячного графика температуры происходит с помощью утилиты (Python 2.7 + Tk + pyserial + matplotli).
Основное окно утилиты настройки
Окно лога событий
Окно лога температуры
AT-команды взаимодействия с модулем GSM
Для начала работы с GSM модулями нужно установить библиотеку GPRS_Shield_Arduino
AT-команды – это специальные команды для модема, которые состоят из коротких текстовых строк. Для того чтобы модем распознал отправленную ему команду, строка обязательно должна начинаться с символов at. Восприниматься строка будет только тогда, когда GSM модем , будет пребывать в командном режиме.
Отправку AT-команд можно осуществлять с помощью коммуникационного программного обеспечения или же вручную с клавиатуры.
Большинство команд можно разделить на 3 режима:
- тестовый, в котором модуль отвечает, поддерживает ли команду;
- чтение – выдача текущих параметров команды;
- запись – произойдет записывание новых значений.
Список наиболее используемых AT-команд:
- AT – проверка правильности подключения GSM модуля. Если все исправно, то возвращается OK;
- A/ – повтор предыдущей команды;
- AT+IPR? – получение информации о скорости порта. Ответом будет +IPR: 0 OK (0 в данном случае – автоматически);
- AT+ICF? – настройка передачи. В ответ придет +ICF: бит, четность;
- AT+IFC? – контроль передачи. Ответом будет +IFC: терминал от модуля, модуль от терминала (0 – отсутствует контроль, 1 – программный контроль, 2 – аппаратный);
- AT+GCAP – показывает возможности модуля. Пример ответа – +GCAP:+FCLASS,+CGSM;
- AT+GSN – получение IMEI модуля. Пример ответа 01322600XXXXXXX;
- AT+COPS? – показывает доступные операторы;
- AT+CPAS – состояние модуля. Ответ +CPAS: 0. 0 – готовность к работе, 3 – входящий звонок, 4 – голосовое соединение, 2 – неизвестно;
- AT+CCLK? – информация о текущем времени и дате;
- AT+CLIP=1 – включение/выключение АОН. 1 – включен, 0 – выключен;
- AT+CSCB=0 – прием специальных смс-сообщений. 0 – разрешено, 1 – запрещено;
- AT+CSCS= “GSM” – кодирование смс-сообщения. Можно выбрать одну из следующих кодировок: IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1;
- AT+CMEE=0 – получение информации об ошибке;
- AT+CPIN=XXXX – ввод пин-кода сим-карты;
- AT&F – сброс до заводских настроек;
- AT+CPOWD=1 – срочное(0) или нормальное(1) выключение модуля;
- ATD+790XXXXXXXX – звонок на номер +790XXXXXXXX;
- ATA – ответ на вызов;
- AT+CMGS=»”+790XXXXXXXX”» Test sms – отправка смс-сообщения на номер +790XXXXXXXX;
В данном случае представлены основные команды для модуля SIM900. У других модулей команды незначительно отличаются.
Данные в модуль отправляются через специальную программу «терминал», которая устанавливается на ПК. Подавать команды модулю можно также через мониторинг порта в Arduino IDE.
Получение SMS. Инициализация.
Для начала нужно проверить, что тариф допускает отправку сообщений. Например, у Билайна на SIM-картах привязанных к основной голосовой но для использования в планшете, ноутбуке и пр. под Интернет нет опции отправки SMS. Можно потратить немало времени, пытаясь отправить SMS с такой SIM-ки.
Для работы с SIM800L я использую библиотеку TinyGSM.
Для отправки SMS используется простой код:
bool res = modemGSM.sendSMS("+7960XXXXXX", "GSM modem with IMEA " + modemGSM.getIMEI() + " has started."); Serial.println("SMS sending status: " + String(res ? "OK" : "fail"));
Он простой и хорошо работает.
К сожалению, в библиотеке не реализован функционал чтения SMS. При использовании сообщений SMS для управления устройствами нужно быть предельно внимательным, поскольку в зависимости от инициализации SIM800 модуль будет по-разному обрабатывать SMS сообщения.
AT команда AT+CNMI определяет будет ли принятое сообщение буферизовываться на SIM карте или будет лишь отображаться и передаваться напрямую в TE (например, микроконтроллеру). В последнем случае на SIM карте не будут сохранятся полученные SMS. Это довольно эксремальный вариант работы, поскольку в случае если по каким-то причинам микроконтроллер не вычитал SMS, то может быть проигнорирована важная команда управления.
Поэтому я предпочитаю сначала записывать все приходящие SMS и затем периодически вычитывать их на предмет появления новых. Как только команда полученная в SMS отработана IoT устройством, SMS можно удалить.
Для инициализации я использую несколько команд:
void smsInit() { modemGSM.sendAT(GF("+CPMS=SM,SM,SM")); //Storage to store SMS modemGSM.waitResponse(); modemGSM.sendAT(GF("+CMGF=1")); //Text type messages instead of PDU modemGSM.waitResponse(); modemGSM.sendAT(GF("+CNMI=1,0")); modemGSM.waitResponse(); modemGSM.sendAT(GF("+CSCS=\"GSM\"")); modemGSM.waitResponse(); }
AT+CPMS задает память для сохранения SMS сообщений:
- SM – Память SIM-карты
- ME – Память модема/телефона
- MT – Это общая память SIM-карты и модема, т.е. MT = SM+ME
- BM – Память для широковещательных сообщений сети
- SR – Память для отчетов (о доставке и т.п.)
Память модема делится на три логических секции и поэтому при вызове +CPMS можно передавать три аргумента:
- Первая — для просмотра, чтения и удаления сообщений
- Вторая — для сохранения и отправки исходящих сообщений.
- Третья — только для вновь полученных сообщений.
Я не нашел примеров работы с этими тремя видами памяти. Если кто-то найдет информацию — буду благодарен, если поделитесь. Для надежности буду использовать только SM.
Далее задаем формат SMS сообщений AT+CMGF=1 (тесктовые сообщения). Для формата PDU используется AT+CMGF=0. Формат PDU (Protocol Data Unit) используется по умолчанию. Он более информативный, но и более сложный для парсинга. Для управления IoT устройством достаточно простого текстового формата.
Например, команда AT+CNMI=1,2,0,0,0 говорит модулю SIM800 либо направлять толкьо что полученные SMS сообщения напрямую микроконтроллеру, или сохранять их в хранилище сообщений и затем уведомлять микроконтроллер о их размещении в хранилище. При использовании этой команды пришедшее SMS приходит в Serial порт микроконтроллера в виде:
15:52:58.028 -> +CMT: "+79601XXXXX","","19/05/02,15:52:53+12" 15:52:58.062 -> Test again
При этом пришедшие SMS сообщения не сохраняются в памяти SIM-карты.
Чтобы пришедшее SMS сообщение сохранилось в памяти SIM-ки нужно использовать команду AT+CNMI=1,0 или AT+CNMI=0,0. Мне не удалось найти обстоятельно описанные примеры использования команды.
Последняя команда AT+CSCS=»GSM» в функции инициализации устанавливает charset «GSM» для TE. Возможные значения:
- «GSM» GSM 7 bit default alphabet (3GPP TS 23.038);
- «UCS2» 16-bit universal multiple-octet coded character set (ISO/IEC10646); UCS2 character strings are converted to hexadecimal numbers from 0000 to FFFF; e.g. «004100620063» equals three 16-bit characters with decimal values 65, 98 and 99
- «IRA» International reference alphabet (ITU-T T.50)
- «HEX» Character strings consist only of hexadecimal numbers from 00 to FF;
- «PCCP» PC character set Code
- «PCDN» PC Danish/Norwegian character set «8859-1» ISO 8859 Latin 1 character set
Результат
22:21:40.333 -> Read all SMSs. 22:21:40.367 -> Data: 1,"REC READ","+79601XXXXX","","19/05/05,16:52:16+12" 22:21:40.435 -> Message: Test again. 22:21:40.469 -> Data: 2,"REC READ","+79601XXXXX","","19/05/05,16:53:01+12" 22:21:40.502 -> Message: And again 22:21:40.537 -> Data: 3,"REC READ","+79601XXXXX","","19/05/05,17:12:05+12" 22:21:40.604 -> Message: And one again 22:21:40.637 -> Data: 4,"REC READ","+79601XXXXX","","19/05/05,17:58:59+12" 22:21:40.706 -> Message: Ones again 22:21:40.706 -> Data: 5,"REC READ","+79601XXXXX","","19/05/05,21:27:58+12" 22:21:40.777 -> Message: New message again.
GSM модуль
В качестве модуля обмена информацией через сотовые сети связи, в проекте умного дома на Ардуино, используется GSM SIM900. Выбран шилд по причине его аналогичности питания 5 В, для совместного подключения с микроконтроллером к резерву.
Обмен информацией между GSM900 и Arduino выполняется по последовательному порту. В схеме, аппаратный D0 занят реле экономии, D1 отоплением. Будет использоваться программный порт на цифровых пинах 7 и 8. Питание с Ардуино раздельно, электрическая взаимосвязь выполняется через GND модема и аналогичную линию микроконтроллера.
Запуск аппарата будет производиться программно. Для чего в GSM900 запаивается перемычка R13 и пин D9 модема соединяется с D13 Ардуино.
Обратите внимание, что соединение коммутирующих линий TX-RX выполняется перекрестно. Скетч включения GSM SIM900:
Скетч включения GSM SIM900:
void Modem_on() { pinMode(13, OUTPUT); digitalWrite(13,LOW); delay(1000); digitalWrite(13,HIGH); delay(2000); digitalWrite(13,LOW); delay(3000); }
Использование GPRS в GSM модуле
В этом проекте мы использовали обычный GSM модуль с SIM картой для GPRS соединения. Технология GPRS в нашем проекте ответственна за передачу данных на сервер Sparkfun. Ранее на нашем сайте мы уже рассматривали передачу данных на веб-сервер с помощью Arduino и Wi-Fi модуля ESP8266, здесь же мы вместо технологии Wi-Fi применим технологию GPRS. Более подробно все описанные в статье процессы можно посмотреть на видео, приведенном в конце статьи.
GPRS расшифровывается как General Packet Radio Services и переводится как пакетная радиосвязь общего назначения. Данная технология способна обеспечивать выход в сеть интернет и работать со скоростями передачи данных 56-114 кбит/с.
При этом нет необходимости покупать какой то отдельный модуль для работы с GPRS поскольку она реализована в обычном GSM модуле. Для управления GSM модулем мы будем использовать так называемые AT команды. Далее рассмотрены некоторые из этих команд доступные для модуля SIMCOM SIM900A (на самом деле их достаточно много, информацию по ним легко найти в сети интернет), которые нам понадобятся в данном проекте.
Для передачи данных на веб-сервер с помощью технологии GPRS нам, прежде всего, необходимо инициализировать GSM модуль.
Команды для инициализации GSM модуля
AT : эта команда используется для проверки того отвечает ли GSM модуль или нет
AT+CPIN? : эта команда используется для проверки того вставлена ли SIM карта в GSM модуль или нет
ATE0 : эта команда отключает эхо, то есть чтобы модуль не повторял в ответ команды, которые мы ему передаем
ATE1 : эта команда используется для включения эхо
1 |
ATэтакомандаиспользуетсядляпроверкитогоотвечаетлиGSMмодульилинет AT+CPIN?этакомандаиспользуетсядляпроверкитоговставленалиSIMкартавGSMмодульилинет ATE0этакомандаотключаетэхо,тоестьчтобымодульнеповторялвответкоманды,которыемыемупередаем ATE1этакомандаиспользуетсядлявключенияэхо |
Команды для инициализации GPRS интернет соединения
AT+CIPSHUT : закрыть TCP порт, что означает прекращение всех соединений
AT+CGATT? : проверка имеет ли SIM карта интернет соединение или нет
AT+CSTT = «APN»,»userName»,»Pass» : соединение с интернет
(ex; AT+CSTT=»airtelgprs.com»,»»,»»)
AT+CIICR : соединение с беспроводной сетью. Проверяемая SIM карта должна иметь предоплаченный объем данных или положительный баланс
AT+CIFSR : получить IP (иногда без этой команды GSM не будет работать поэтому желательно ее использовать)
AT+CIPSTART = ”TCP”,”SERVER IP”,”PORT” : эта команда используется для создания TCP соединения с сервером который мы прописываем в поле SERVER IP
AT+CIPSEND : эта команда используется для передачи данных на сервер. After input, this command server asks for data.
1 |
AT+CIPSHUTзакрытьTCPпорт,чтоозначаетпрекращениевсехсоединений AT+CGATT?проверкаимеетлиSIMкартаинтернетсоединениеилинет AT+CSTT=»APN»,»userName»,»Pass»соединениесинтернет (ex;AT+CSTT=»airtelgprs.com»,»»,»») AT+CIICRсоединениесбеспроводнойсетью.ПроверяемаяSIMкартадолжнаиметьпредоплаченныйобъемданныхилиположительныйбаланс AT+CIFSRполучитьIP(иногдабезэтойкомандыGSMнебудетработатьпоэтомужелательноееиспользовать) AT+CIPSTART=”TCP”,”SERVER IP”,”PORT”этакомандаиспользуетсядлясозданияTCPсоединенияссерверомкоторыймыпрописываемвполеSERVER IP AT+CIPSENDэтакомандаиспользуетсядляпередачиданныхнасервер.After input,thiscommand server asks fordata. |
После ввода данных мы передаем 26 на сервер. Если все нормально, то данные будут успешно загружены на сервер и SparkFun (сервер в нашем рассматриваемом случае) отвечает что все нормально или произошла ошибка.
Возможно, вам также будет интересно
Авторы статьи предлагают ответ на вопрос, как быстро и с минимальными трудозатратами произвести переход на более совершенную и бюджетную серию 2G-модулей — SIM800, а именно SIM800/SIM800F/SIM800C, предлагаемую дистрибьютором МТ-Систем в качестве фокусной замены модемов SIM900R. Материал будет полезен специалистам, следящим за тенденциями рынка беспроводных технологий для M2M-решений, разработчи…
Осенью 2010 года компания Digi существенно обновит свою линейку беспроводных модулей XBee. Впервые появляются модули со встроенным дополнительным микроконтроллером и SMD-модули на базе новейшей микросхемы EM357. Дальность действия новых модулей возрастает до 3200 метров, что заметно расширяет область применения этих радиочастотных устройств. В статье дан обзор модулей XBee повышенной мощности, …
В настоящее время большинство систем, содержащих устройства с последовательным интерфейсом, не могут подключаться к сети. Это не позволяет контролировать такие устройства посредством современных технологий через Intranet или Internet. Наоборот, часто такие системы представляют собой негибкие и немасштабируемые закрытые системы, которые обычно не дают возможности прямого доступа к конечному устр…
Минимальный код EAT
Рассмотрим пример минимального пользовательского Си-кода:
{ EatEvent_st event; while(1) { eat_get_event(&event); switch(event.event) { ... } } }
Здесь app_main — это точка входа, с которой начинается пользовательская программа, а eat_get_event — интерфейс для получения событий от ядра ПО модуля. Пользовательский код выполняется в цикле while и должен вызывать API-функции, параллельно отслеживая события, которые посылает ядро.
Обычно программисту приходится работать с платой, на которой отдельно стоят GSM-модуль и микроконтроллер (MCU), управляющий GSM-модулем при помощи АТ-команд . А в случае с EAT у него возникнет вопрос, как слать GSM-модулю команды и как обрабатывать его ответы. На рис. 3 показан пример, поясняющий, как это можно реализовать в EAT по аналогии с классической архитектурой (раздельный MCU и GSM-модуль).
Рис. 3. Принцип работы классической архитектуры (слева) и EAT (справа)
Видно, что пользовательское ПО по отношению к ядру EAT следует рассматривать как ПО внешнего MCU. Все, что изменится при миграции ПО из внешнего MCU в GSM-модуль, — это синтаксис обращения к ядру EAT и интерпретация результатов. Для пояснения принципа обработки АТ-команды ядром приведен пример простейшего кода:
void app_main(void) { … Eat_modem_write(“AT+CSQ\r”,strlen(“AT+CSQ\r”)); // Шлем АТ-команду while(TRUE) { eat_get_event(&event); switch (event.event) { case EAT_EVENT_MDM_READY_RD: // При получении ответа от модуля получим индикатор события EAT_EVENT_MDM_READY_RD { Progress(); // обрабатываем ответ модуля } case … } } }
Отладочные средства
Разработчики могут протестировать работу модулей SIM800x в соответствии с приведенными в настоящей статье примерами, используя специализированные отладочные комплекты производства компании SIMCom Wireless Solutions.
Отладочный комплект состоит из двух основных компонентов: многофункциональной материнской платы и мезонинной платы, на которой распаян тот или иной модуль. На рис. 3 представлен модуль SIM800C на мезонинной плате, устанавливаемый на общую для всей линейки модулей материнскую плату. Каждый из указанных компонентов отладочного комплекта можно приобрести отдельно.
Рис. 3. Отладочный комплект для работы с модулями 800-й серии
Те, у кого остались отладочные платы для модулей 900-й серии (версий SIM900-EVB_V2.01 и позже), могут использовать их для работы со всеми модулями 800-й серии, приобретая последние в исполнении на переходном мезонине — SIM800x-TE.
Исключением из этого унифицированного отладочного комплекса является анонсированный летом 2016 г. еще один модуль этой линейки — SIM868, миниатюрный беспроводной четырехдиапазонный комбо-модуль в корпусе LCC/LGA, поддерживающий обмен данными и работу в сетях сотовой связи стандартов GSM/GPRS (2G) и прием сигналов со спутников GPS/ГЛОНАСС (GNSS).
Рис. 4. Комбо-модуль SIM868
Отличительные особенности SIM868 — это высокая чувствительность ВЧ-тракта и поддержка различных дополнительных возможностей, таких как детектирование/генерация DTMF, запись/воспроизведение аудиофайлов, встроенные протоколы POP3, SMTP, MMS, FTP, HTTP, SSL и др. Поддерживается GPRS multi-slot class 12 (↨85,6 кбит/с). В качестве дополнительных возможностей в модуле предусмотрена поддержка Bluetooth 3.0 или одновременная работа двух SIM-карт (Dual Standby).
В модуле присутствуют интерфейсы 2×UART (GSM/GPRS)+1×UART(GNSS), USB, GPIO, ADC, SD, I2C, RTC, аналоговые аудиоинтерфейсы. Габариты устройства 15,7×17,6×2,3 мм; напряжение питания 3,4–4,4 В; диапазон рабочих температур –40…+85 °C.
Работа с этим модулем требует использования специализированной отладочной платы.
Наличие, состав и стоимость отладочных комплектов можно уточнить, отправив запрос в техническую поддержку по беспроводным решениям (wireless@mt-system.ru). Обновленные версии встроенного ПО модулей и подробная инструкция по их обновлению также предоставляются пользователям по отдельному запросу.
* * *
Компания SIMCom Wireless Solutions предлагает разработчикам и пользователям функционально полную линейку 2G-модулей, позволяющую решать довольно широкий спектр задач по созданию оборудования, использующего для передачи данных и осуществления вызовов возможности сетей сотовой связи. При этом встроенный на уровне чипсета функционал Bluetooth уже не выглядит экзотикой, речь, скорее, о новых реалиях, с учетом которых теперь следует воспринимать модули этого класса, решая самый разнообразный круг прикладных задач с их использованием. При этом реализация Bluetooth в текущих и перспективных решениях не представляет собой сколь-нибудь сложной задачи.
Голосовой модуль (Voice Module) ISD 1820
Голосовой модуль ISD 1820 может добавить в ваши проекты голосовые объявления. Модуль способен записывать аудио сигнал в течение 10 секунд и затем воспроизводить его когда потребуется. Модуль включает в себя и микрофон, и динамик (8ohms 0.5watts) и выглядит примерно так, как показано на следующем рисунке.
Модуль работает от напряжения +5V и может быть запитан с помощью контактов на его левой стороне. Также на нижней стороне модуля есть 3 кнопки с названиями Rec, PlayE и PlayL. Вы можете записать ваш голос нажимая кнопку Rec и затем воспроизвести его используя кнопку PlayE. При нажатии кнопки PlayL голос будет воспроизводиться так долго, как долго вы держите кнопку. Подать питание на модуль можно непосредственно с платы Arduino. В нашем проекте мы будем управлять контактом PLAYE используя контакт D8 платы Arduino. Таким образом, мы сможем воспроизводить записанный голос всегда, когда мы будем обнаруживать входящий звонок на GSM модуль.
Полевые испытания
Прошу прощения за эстетику монтажа.
Установка на входную дверь. Часть конструкции справа (непосредственно на самой двери) — магнит для срабатывания геркона
На место постоянного использования (гараж) устройство было установлено 4 месяца назад. Для целей усиленного тестирования, функция расписания не используется (по каждому событию отправляется SMS). В среднем получается 5 SMS в день: два при входе в гараж (срабатывает датчик открытия двери и датчик освещения), два при выходе и один «ежедневный отчет». На текущий момент батареи (3x AA) держат напряжение 4.1в при включенном модеме.
Таймеры EAT
Многие программы имеют нелинейный алгоритм исполнения последовательности действий, и для реализации такого поведения программ применяют таймеры, встроенные в MCU. В EAT также реализованы два типа таймеров — программный (eat_timer_start) и аппаратный (eat_gpt_start) (рис. 4).
Рис. 4. Пояснение разницы между программным и аппаратным таймерами
Когда программный таймер переполняется, ядро пошлет пользовательскому ПО сообщение «EAT_EVENT_TIMER». Пользовательское ПО должно его «отловить» в цикле главной функции app_main. А когда переполнится аппаратный таймер, ядро вызовет callback-функцию
При этом важно, чтобы код внутри callback-функции имел короткий цикл исполнения. Недопустимо, чтобы в ней были заключены блокирующие события, такие как режим сна, ожидание освобождения семафора, работа с памятью и т
п.
Возможно, вам также будет интересно
Технология беспроводной связи ZigBee, разработанная на основе стандарта IEEE 802.15.4, характеризуется сверхнизким энергопотреблением. Она предназначена для передачи данных с небольшой скоростью и очень удобна для создания сетей сбора данных от различных датчиков и исполнительных устройств.
Настоящая статья представляет собой обзор продукции ведущего китайского производителя GSM-модемов для M2M-приложений — компании SIMCom Limited, входящей в холдинг Sim Technology Inc.
В статье рассматривается учебное оборудование, предназначенное для практического изучения современных технологий, применяемых в таких отраслях, как микроэлектроника, цифровые технологии, IT, телекоммуникации и связь.
Components You Will Need
Hardware Parts
- Arduino Uno
- SIM800l module
- Connecting cables
- 2G Sim card (Please note SIM800l is a 2g GSM module, this means that the 4G sim card will not work with this module. If you are looking for 4G GSM module then click on this link)
- Resistors (1k and 2.2k)
- 3.7V battery
- Breadboard
Note- If you are using an Arduino as a microcontroller and not using a resistor divider Ckt then you will damage the Sim800l module.
Softwares
- Arduino IDE
- Software serial.h Library
This is the part list you will need when working on a SIM800l module. Now, we’ve got all the things that will help us to play with sim800l module. Now it’s time to hook up this module with the microcontroller. Here we are using Arduino UNO as a microcontroller. To demonstrate it I have shared the interfacing diagram please take a lookFig. Interfacing Diagram
АТ-команды
Стандартные AT-команды линейки GSM-модулей компании SIMCom Wireless Solutions в большинстве случаев совпадают, однако есть и отличия. Применение более современного и мощного чипсета (в сравнении с серией SIM900) привело к появлению новых функций и соответствующих им новых команд.
Исходя из сказанного, мы рекомендуем произвести сверку AT-команд, уже используемых в решении.
В таблице 4 приведен пример ответов (возможных разночтений) на некоторые распространенные команды.
Команда |
SIM900R |
SIM800H |
AT+CGMR |
Revision:1137B05SIM900R64 _ST_ENHANCE |
Revision: 1308B02SIM800M64_BT |
AT+CSQ=? |
+CSQ: (0-31,99),(0-7,99) |
+CSQ: (0-31,99), (0-7,99) |
AT+CFUN=? |
+CFUN: (0,1,4),(0-1) |
+CFUN: (0,1,4),(1) |
AT+CBAND=? |
+CBAND: (EGSM_MODE, PGSM_MODE,DCS_MODE, EGSM_DCS_MODE, ALL_BAND) |
+CBAND: (EGSM_MODE, DCS_MODE, GSM850_MODE, PCS_MODE, EGSM_DCS_MODE, GSM850_PCS_MODE, EGSM_PCS_MODE,ALL_BAND) |
AT+CENG=? |
+CENG: (0-3),(0-1) |
+CENG: (0-3),(0-1) |
AT+ECHO=? |
+ECHO: MIC:(0,2), ES:(0-8), SES:(0-6), MODE:(0,1) |
+ECHO: (0,1), (0-65535), (0-65535), (0-65535), (0-65535), (0,1) |
AT+CWHITELIST=? |
+CWHITELIST: (0,1) |
+CWHITELIST: (0-3) |
AT+SNDLEVEL |
+SNDLEVEL: (0-3),(0-3) |
+SNDLEVEL: (0,1), (0-100) |
AT+CMOD |
+CMOD: (0) |
+CMOD: (0) |
AT+SIMTONEX |
ERROR |
+SIMTONEX: (0,1), (10-500000), (20-20000), (0-20000), (200-25500), (10-25500),(0-4)… |
AT+CROAMING |
ERROR |
OK |
AT+CANT |
ERROR |
+CANT: (0,1),(0,1),(0-3600) |
AT+CMEDPLAY |
ERROR |
+CMEDPLAY: (0-3) |
AT+CIPSSL |
ERROR |
+CIPSSL: (0-1) |
AT+CNETSCAN |
——MOST SUITABLE CELL—— |
Operator:»MTS», MCC:250, MNC:01, Rxlev:60, Cellid:3D5F, Arfcn:30 |
Operator:»MegaFon RUS», MCC:250, MNC:2, Rxlev:22, Cellid:18cc, Arfcn:0015 |
Operator:»MTS», MCC:250, MNC:01, Rxlev:47, Cellid:4D8F, Arfcn:660 |
|
Operator:»MegaFon RUS», MCC:250, MNC:2, Rxlev:16, Cellid:46f3, Arfcn:0089 |
Operator:»MTS», MCC:250, MNC:01, Rxlev:43, Cellid:3D60, Arfcn:47 |
|
——OTHER SUITABLE CELL—— |
Operator:»MTS», MCC:250, MNC:01, Rxlev:42, Cellid:4D8E,Arfcn:681 |
|
Operator:»MTS», MCC:250, MNC:01, Rxlev:41, Cellid:0B94, Arfcn:667 |
Заключение
Возможности микроконтроллера Arduino позволяют создать на его базе практически любой проект домашней или промышленной автоматизации. А если дополнить его комплектом подключения к сотовой сети и соответствующим образом запрограммировать, плата превратится в мощный комплекс удаленного доступа, мониторинга, оповещения и выполнения прочих задач, требующих наличия постоянной связи. GSM-модули доступны, легко устанавливаются и настраиваются, обладают низким энергопотреблением и работают везде в зоне покрытия сотовой сети.
Разумеется, использовать их как средство передачи крупных объемов данных нельзя, поскольку доступ в интернет этим классом устройств обеспечивается только через GPRS, с небольшими скоростями. Но в задачах создания дешевой и надежной охранной системы, комплекса мониторинга или хаба «умного дома» такие решения находят обширное применение — как у энтузиастов, так и профессионалов.