Arduino управление нагрузкой по gsm. Бюджетная GSM сигнализация с мозгами из Arduino. Подключение с помощью GSM-GPRS шилда

Хочу представить вам очень простой способ удаленного управления электропитанием.
Мы будем использовать готовые радиоуправляемые розетки, поэтому нам не потребуется ничего паять. Это очень здорово, потому что 220 В (начинающим) лучше не трогать.

Код

Если вы используете не GSMSHIELD, а какую-то другую библиотеку, то код разумеется будет отличаться, но принцип будет один и тот же. Через определенные интервалы времени мы проверяем, нет ли у нас непрочитанных SMS, парсим их, и если пришла валидная команда с авторизованного номера, то посылаем радиосигнал функциями mySwitch.switchOff или mySwitch.switchOn , передавая им адрес розетки.
Прим. в моем случае для шилда от Seeedstudio нужно было залезть в GSM.cpp и поменять заданные пины на 7 и 8. /* Arduino GSM-switch example code Switch on/off radio controlled controlled outlets Author: Vladislav Ross, 2014 Contact: [email protected] You need to download: 1. rc-switch https://code.google.com/p/rc-switch/ 2. GSMSHIELD http://www.gsmlib.org/ For GSMSHIELD: * To change pins for Software Serial, use the two lines in GSM.cpp. * If you are using Mega, uncomment "#define MEGA" line in HWSerial.h * You can enable debug messages on serial port by defining DEBUG_ON */ #include "SIM900.h" #include #include "sms.h" #include "call.h" #include // 433MHz transmitter pin const byte RCpin = 12; char groupAddress = "11111"; char smsLetters = "ABC"; char* deviceAddresses = { "10000", //A "01000", //B "00100" //C }; char adminNumber = "+74991356235"; //your phone number CallGSM call; SMSGSM sms; RCSwitch mySwitch = RCSwitch(); char number; byte stat=0; char smsText; byte position; int deviceLetterIdx = -1; byte i,j; void setup() { gsm.begin(2400); delay(10000); for(i = 1; i <= 21; i++) { sms.DeleteSMS(i); } mySwitch.enableTransmit(RCpin); }; void loop() { //hang up all incoming calls /*stat=call.CallStatus(); if(stat==CALL_INCOM_VOICE) { call.HangUp(); }*/ position = sms.IsSMSPresent(SMS_UNREAD); //get new SMS if (position) { sms.GetSMS(position, number, smsText, 10); sms.DeleteSMS(position); if(strcmp(number, adminNumber) == 0) //accept SMS only from defined number { for (i = 0; i < sizeof(smsText) - 1; i++) { if(deviceLetterIdx != -1) { //got letter, now expecting 0 or 1 if(smsText[i] == "0") { mySwitch.switchOff(groupAddress, deviceAddresses); delay(500); } if(smsText[i] == "1") { mySwitch.switchOn(groupAddress, deviceAddresses); delay(500); } deviceLetterIdx = -1; } else { //waiting for letter A,B,C... for(j = 0; j < sizeof(smsLetters) - 1; j++) { if(smsLetters[j] == smsText[i]) { deviceLetterIdx = j; break; } } } } } } delay(10000); }; GitHub .

Проблемы?

Если розетки ни в какую не хотят переключаться, можно попробовать принять сигнал от родного пульта на приемник. В rc-switch есть пример кода.

Что дальше?

Как дальше можно развить этот проект:
Во-первых, у нас осталось еще куча пинов на самом Ардуино и на GSM-шилде. Можно подключить к ним какие-то датчики или устройства. Например, сделать удаленный мониторинг температуры или полив цветов.
Во-вторых, мы использовали только SMS, а модуль еще умеет передавать голос и GPRS. GPRS может передать гораздо больше данных. Кроме того, можно не бросать трубку при звонке, а, например, принимать вызов и давать слушать, что происходит на месте.
Возможно также, что вы захотите принимать управляющие SMS не с одного номера, а с нескольких. В этом случае я бы рекомендовал хранить номера в адресной книге &mash; в библиотеке есть соответствующие функции.

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

Модули GSM GPRS

GSM модуль используется для расширения возможностей обычных плат Ардуино – отправка смс, совершение звонков, обмен данными по GPRS. Существуют различные виды модулей, наиболее часто используемые – SIM900, SIM800L, A6, A7.

Описание модуля SIM900

Модуль SIM900 используется в различных автоматизированных системах. С помощью интерфейса UART осуществляется обмен данными с другими устройствами. Модуль обеспечивает возможность совершения звонков, обмен текстовыми сообщениями. Работа модуля релизуется на компоненте SIM900, созданным фирмой SIMCom Wireless Solution.

Технические характеристики:

  • Диапазон напряжений 4,8-5,2В;
  • В обычном режиме ток достигает 450 мА, максимальный ток в импульсном режиме 2 А;
  • Поддержка 2G;
  • Мощность передачи: 1 Вт 1800 и 1900 МГц, 2 Вт 850 и 900 МГц;
  • Имеются встроенные протоколы TCP и UDP;
  • GPRS multi-slot class 10/8;
  • Рабочая температура от -30С до 75С.

С помощью устройства можно отслеживать маршрут транспорта совместно с ГЛОНАСС или GPS устройством. Возможность отправки смс-сообщений используется в беспроводной сигнализации и различных охранных системах.

Описание модуля SIM800L

Модуль выполнен на основе компонента SIM800L и используется для отправки смс, реализации звонков и обмена данными по GPRS. В модуль устанавливается микро сим карта. Устройство обладает встроенной антенной и разъемом, к которому можно подключать внешнюю антенну. Питание к модулю поступает от внешнего источника либо через DC-DC преобразователь. Управление осуществляется с помощью компьютера через UART, Ардуино, Raspberry Pi или аналогичные устройства.

Технические характеристики:

  • Диапазон напряжений 3,7В – 4,2В;
  • Поддержка 4х диапазонной сети 900/1800/1900 МГц;
  • GPRS class 12 (85.6 кБ/с);
  • Максимальный ток 500 мА;
  • Поддержка 2G;
  • Автоматический поиск в четырех частотных диапазонах;
  • Рабочая температура от –30С до 75С.

Описание модуля A6

Модуль A6 разработан фирмой AI-THINKER в 2016 году. Устройство используется для обмена смс-сообщениями и обмена данными по GPRS. Плата отличается низким потреблением энергии и малыми размерами. Устройство полностью совместимо с российскими мобильными операторами.

Технические характеристики:

  • Диапазон напряжений 4,5 – 5,5В;
  • Питание 5В;
  • Диапазон рабочих температур от -30С до 80С;
  • Максимальное потребление тока 900мА;
  • GPRS Class 10;
  • Поддержка протоколов PPP, TCP, UDP, MUX.

Модуль поддерживает карты формата микросим.

Описание модуля A7

A7 является новейшим модулем от фирмы AI-THINKER. По сравнению со своим предшественником A6 имеет встроенный GPS, позволяющий упрощать конструкцию устройства.

Технические характеристики:

  • Диапазон рабочих напряжений 3,3В-4,6В;
  • Напряжение питания 5В;
  • Частоты 850/900/1800/1900 МГц;
  • GPRS Class 10: Макс. 85.6 кбит;
  • Подавление эха и шумов.

Устройство поддерживает микросим карты. Модуль поддерживает обмен звонками, обмен смс-сообщениями, передачу данных по GPRS, прием сигналов по GPS.

Где купить GSM модули для ардуино

Традиционно, прежде чем начать, несколько советов и полезных ссылок на продавцов Aliexpress.

Очень качественный модуль KEYES SIM900 GSM GPRS Модуль SIM800C для ардуино от проверенного поставщика
Шилд для разработки, совместимый с Ардуино, на базе модуля SIM900 GPRS/GSM Недорогой модуль mini A6 GPRS GSM

Подключение GSM GPRS шилда к Arduino

В этом разделе мы рассмотрим вопросы подключения GSM – модулей к плате адуино. За основу почти во всех примерах берется Arduino Uno, но в большинстве своем примеры пойдут и для плат Mega, Nano и т.д.

Подключение модуля SIM800

Для подключения нужны плата Ардуино, модуль SIM800L, понижающий преобразователь напряжения, провода для соединения и батарея на 12В. Модуль SIM800L требует нестандартное для ардуино напряжение в 3,7В, для этого нужен понижающий преобразователь напряжения.

Распиновка модуля SIM800 приведена на рисунке.

Плату Ардуино нужно подключить к компьютеру через USB кабель. Батарею на 12 В подключить через преобразователь: -12В на землю Ардуино, от земли в преобразователь в минус, +12В в преобразователь в плюс. Выходы с модуля TX и RX нужно подключить к пинам 2 и 3 на Ардуино. Несколько модулей можно подключать к любым цифровым пинам.

Подключение модуля A6

Модуль A6 стоит дешевле, чем SIM900, и его очень просто подключать к Ардуино. Модуль питается напряжением 5В, поэтому для соединения не нужны дополнительно понижающие напряжение элементы.

Для подключения потребуются плата Ардуино (в данном случае рассмотрена Arduino UNO), GSM модуль А6, соединительные провода. Схема подключения приведена на рисунке.

Вывод RX с модуля GSM нужно подключить к TX на плате Ардуино, вывод TX подключить к пину RX на Ардуино. Земля с модуля соединяется с землей на микроконтроллере. Вывод Vcc на GSM модуле нужно соединить с PWR_KEY.

Подключение с помощью GSM-GPRS шилда

Перед подключением важно обратить внимание на напряжение питания шилда. Ток в момент звонка или отправки данных может достигать значений в 15-2 А, поэтому не стоит запитывать шилд напрямую от Ардуино.

Перед подключением к Ардуино нужно установить сим-карту на GSM-GPRS шилд. Также нужно установить джамперы TX и RX, как показано на рисунке.

Подключение производится следующим образом – первый контакт (на рисунке желтый провод) с шилда нужно соединить с TX на Ардуино. Второй контакт (зеленый провод) подключается к RX на Ардуино. Земля с шилда соединяется с землей с аруино. Питание на микроконтроллер поступает через USB кабель.

Макет соединения шилда и платы Ардуино изображен на рисунке.

Для работы потребуется установить библиотеку GPRS_Shield_Arduino.

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

Краткое описание взаимодействия через AT-команды

AT-команды – это набор специальных команд для модема, состоящий из коротких текстовых строк. Чтобы модем распознал поданную ему команду, строки должны начинаться с букв at. Строка будет восприниматься, когда модем находится в командном режиме. AT-команды можно отправлять как при помощи коммуникационного программного обеспечения, так и вручную с клавиатуры. Практические все команды можно разделить на 3 режима – тестовый, в котором модуль отвечает, поддерживает ли команду; чтение – выдача текущих параметров команды; запись – произойдет записывание новых значений.

Список наиболее используемых AT-команд:

  • AT – для проверки правильности подключения модуля. Если все исправно, возвращается 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.

Скетчи для работы с модулем GSM

Отправка СМС на примере SIM900

Перед тем, как отправить сообщение, нужно настроить модуль. В первую очередь нужно перевести в текстовый формат передаваемое сообщение. Для этого существует команда AT+CMGF=1. Нужно перевести кодировку на GSM командой AT+CSCS=»GSM». Эта кодировка наиболее удобная, так как там символы представлены в ASCII коде, который легко понимает компилятор.

Затем нужно набрать смс-сообщение. Для этого посылается команда с номером абонента AT+CMGS=»+79XXXXXXXXX» r, в ответ предлагается набрать текст смс. Нужно выполнить отправку сообщения. По окончании требуется отправить код комбинации Ctrl+Z, модуль позволит отправку текста адресату. Когда сообщение будет отправлено, вернется OK.

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

Получение смс. Для чтения смс-сообщения используется команда AT + CNMI = 2,2,0,0,0. Когда на модуль придет текстовое сообщение, он отправит в последовательный порт +CMTI: «SM»,2 (в данном случае 2 – порядковый номер сообщения). Чтобы его прочитать, нужно отправить команду AT+CMGR=2.

Прием голосового звонка. В первую очередь для разговора нужно подключить к модулю динамик и микрофон. При получении звонка будет показан номер, с которого он совершен. Для осуществления работы нужно включить библиотеку GSM:

#include

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

#define PINNUMBER “”

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

boolean notConnected = true;

С помощью функции gsmAccess.begin() происходит подключение к сети. При установлении соединения вернется значение GSM_READY.

vcs.hangCall(); – функция, показывающая, что модем готов принимать звонки.

getvoiceCallStatus() – определяет статус скетча. Если кто-то звонит, она возвращает значение RECEIVINGCALL. Для записи номера нужно воспользоваться функцией retrieveCallingNumber(). Когда будет совершен ответ на звонок, вернется TALKING. Затем скетч будет ждать символа новой строки, чтобы прервать разговор.

Установить GPRS-соединение и отправить данные на удаленный сервер

Сначала нужно установить библиотеку SoftwareSerial, которая позволяет обеспечивать последовательную передачу информации и связать GSM-модуль и микроконтроллер Ардуино.

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

AT+SAPBR=1,1 – открытие Carrier.

Следующие три команды связаны с установкой настроек подключения к сети.

AT+SAPBR=3,1,\”APN\”,\”internet.mts.ru\” – выбор оператора mts, имя точки доступа.

AT+SAPBR=3,1,\”USER\”,\” mts \” – выбор пользователя mts.

AT+SAPBR=3,1,\”PWD\”,\” mts \”

AT+SAPBR=1,1 – установка соединения.

AT+HTTPINIT – инициализация http.

AT+HTTPPARA=”URL”, – URL адрес.

AT+HTTPREAD – ожидание ответа.

AT+HTTPTERM – остановка http.

Если все выполнено правильно, в мониторе порта будут появляться строчки с АТ командами. Если отсутствует связь с модемом, то будет показывать по одной строке. При успешной установке GPRS-соединения на модуле начнет мигать светодиод.

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

Плата расширения GSM содержит модем, который транслирует в GSM-сеть данные, поступающие к нему через последовательный порт. Все операции выполняются модемом в виде последовательности AT-команд. Для улучшения читабельности кода библиотека абстрагирует низкоуровневые функции, работающие с модемом и SIM-картой. GSM-модем взаимодействует с Ардуино по последовательному интерфейсу с использованием библиотеки SoftwareSerial .

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

Структура библиотеки

Функциональность библиотеки GSM достаточно широка, поэтому она объединяет в себе несколько различных классов:

  • Класс GSM отвечает за управление радио-модемом. Этот класс содержит низкоуровневые функции для подключения и регистрации платы расширения в GSM-сети. Экземпляр этого класса должен быть объявлен во всех программах, использующих GSM/GPRS.
  • Класс GSMVoiceCall отвечает за голосовые вызовы.
  • Класс GSM_SMS отвечает за отправку и получение SMS-сообщений.
  • Класс GPRS отвечает за подключение к Интернету.
  • В классе GSMClient реализован клиент, подобный клиенту в библиотеках Ethernet и WiFi.
  • В классе GSMServer реализован сервер, подобный серверу в библиотеках Ethernet и WiFi. Примечание: некоторые провайдеры/операторы блокируют входящие соединения из глобальной Интернет-сети, разрешая только внутрисетевые соединения. Уточните у своего оператора действующие ограничения на передачу данных.
  • Множество вспомогательных классов, таких как GSMScanner , GSMModem и др.

Совместимость с библиотекой Ethernet

Разработчиками приложены все усилия для того, чтобы библиотека GSM была максимально совместима с библиотекой Ethernet. Благодаря этому, перенос кода, использующего библиотеки Ethernet или WiFi, на Ардуино с GSM-платой расширения должен быть довольно простым. Тем не менее, для запуска программ, написанных для Ethernet, на GSM-плате расширения недостаточно просто скопировать код. Для этого могут потребоваться незначительные изменения в программе, такие, как подключение библиотек GSM и GPRS, получение от провайдера настроек сети и т.д.

Примеры

Все примеры работы с платой расширения GSM можно условно разбить на две группы. Первая группа - это примеры, демонстрирующие возможности платы (например, отправка SMS-сообщения, подклчение к Интернету и т.д.). Вторая группа - инструментарий, с помощью которого можно отлаживать функциональность библиотеки и аппаратных средств Ардуино на низком уровне.

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-lib написанна под Arduino IDE версии 1.0. Скачать последную версию библиотеки с готовыми примерами использования можно из репозитория проекта . Для установки - распакуйте архив GSM в директорию libraries (/arduino-1.0/libraries/GSM). После запуска среды разработки Arduino, в меню программы «File -> Examples» появится пункт GSM, с примерами скетчей.

Библиотека GSM разработана для работы с шилдом « ». Она аппаратно совместима с платами Arduino (Uno, Duemilanove и прочие аналоги). При использовании других плат, возможно, потребуется внесение правок в GSM.cpp для указания правильного порта, на который выведена с шилда линия включения модема.

В настоящий момент в библиотеке реализованы следующие функциональные возможности.

  • Регистрация в GSM-сети
  • Отправка SMS
  • Прием и разбор SMS
  • Прием входящих вызовов
  • Проверка статуса соединения с сетью GSM, восстановление сети при потере сигнала

Регистрация в GSM-сети

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

Первичная инициализация выполняется в функции setup().

#include #include const char PIN PROGMEM = "0000"; // ПИН-код void setup() { while (GSM.Init(PIN)<0); // Регистрация в сети GSM.NewSMSindic(); // Настройка индикатора новых SMS GSM.WaitCall(); // Ждем входящие вызовы GSM.WaitSMS(); // Ждем входящих SMS }

Отправка SMS

Для отправки текстовых сообщений служит функция SendSMS(), в которую передаются 2 параметра - номер получателя SMS и само сообщение.

While(GSM.SendSMS(RemoteID, "Hello from Arduino!") < 0);

Где RemoteID - это номер получателя. Эту константу предпочтительнее выносить в заголовок программы.

Const char RemoteID PROGMEM = "+79280000000";

Текст сообщения можно формировать также динамически.

String textMessage; textMessage += "Sensor1 "; textMessage += "Sensor2"; char Out; textMessage.toCharArray(Out,(textMessage.length())+1); while(GSM.SendSMS(RemoteID, Out) < 0);

Прием и разбор SMS

Для считывания входящих SMS сообщений служит функция ReadSMS(), в которую передаются 2 параметра - индекс SMS и указатель, куда будет скопирован текст. Ниже представлен фрагмент скетча, в котором разбирается текст входящего сообщения. Когда SMS равен 1 - выполняем некое действие, а когда равен 2 - производим другое действие. Полный пример скетча SmsCheck.ino смотрите в examples .

If (GSM.CheckSMS()== 1) { //Есть новое СМС GSM.ReadSMS(NewSMS_index, (char*) SMStxt); GSM.DeleteAllSMS(); // Удалить СМСки (накапливать не будем!) strSMS = String(SMStxt); if(strSMS == "1") { // тут выполняем действие 1 } if(strSMS == "2") { // тут выполняем действие 2 } GSM.WaitCall(); GSM.WaitSMS(); }

Примечание. Библиотека GSM умеет работать только с латинскими символами, кириллица в настоящее время не поддерживается.

Прием входящих вызовов

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

Например, можно сделать вызов на шилд, на Ардуино проверить номер звонящего абонента и в случае совпадения с шаблонным номером - выслать на него SMS с показаниями датчиков. Следующий фрагмент реализует подобный функционал. Полная версия скетча CallCheck.ino смотрите в examples .

If (IncomingCall == 1) { //пришёл звонок! while (GSM.TerminateCall()<0); // Ложим трубку IncomingCall = 0; // Проверяем, если номер звонящего CallerID совпал с шаблоном RemoteID if (strstr_P(CallerID, RemoteID)) { while(GSM.SendSMS(RemoteID, "Hello from Arduino!") < 0);// SMS из SRAM памяти } GSM.WaitCall(); }

Проверка статуса соединения с сетью GSM

Бывают ситуации, когда соединение с сетью пропадает. Для выявления потери сети служит функция CheckStatus(), которая возвращает 0 в том случае, когда соединение с сетью утеряно. Пример использования приводится в следующем блоке кода.

// Через определенные промежутки времени проверяем состояние GPRS подключения! if(currentMillis - previousMillis > interval) { if ((GSM.CheckStatus() != 1)) { // GPRS соединение не установлено! while (GSM.Init(PIN)<0); // Делаем инициализацию } GSM.WaitCall(); currentMillis = previousMillis = millis(); }

Выполнение произвольных AT-команд из скетча

Для выполнения AT-команд из скетча используется функция WriteStr_P().

GSM.WriteStr_P(PSTR("AT\r\n"));



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: