Подключение популярных gsm модулей к ардуино

SIM-карты

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

SIM-карты, как правило, имеют 4-значный PIN-код – в целях безопасности. Обязательно запомните этот код, т.к. он очень важен для подключения к сети. Если вы потеряете PIN-код, связанный с вашей SIM-картой, для его восстановления, возможно, надо будет обратиться к мобильному оператору. Если много раз раз ввести неправильный PIN-код, некоторые карты имеют свойство блокироваться. Поэтому если вы не уверены в правильности PIN-кода, лучше свериться с документацией, которая идет в комплекте с SIM-картой.

Кроме того, у вас есть возможность сбросить забытый или потерянный PIN-код, и это делается с помощью PUK-кода (от Pin Unlock Code, что значит «код для разблокировки PIN-кода). Этот PUK-код тоже указан в документации, идущей в комплекте с SIM-картой.

Ограничения и функциональность

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

  1. При обнаружении нарушения охранного периметра сработает звуковая сигнализация на 30 секунд, и будет отправлено СМС владельцу следующего содержания:Главные факторы, влияющие на возникновение названого события — изменение света (фоторезистор), открытие двери (геркон) или определение движения (MH-SR602). Причем сообщения будут меняться в зависимости от конкретной причины.
  2. Дополнительно владелец будет получать SMS, содержащую информацию о резкой смене температуры в помещении или низком уровне заряда аккумулятора.
  3. Раз в сутки, в установленный период, происходит отправка отчета следующего вида с использованием GSM связи:Время его получения устанавливается пользователем в конфигурирующей утилите.
  4. После сборки аппаратной части, нужно произвести первоначальные настройки сигнализации, применив программу, описанную ранее.
  5. При определении контакта по USB, микроконтроллер прерывает работу прошивки, ожидая действий пользователя. Очередь не отправленных SMS сообщений очищается.
  6. Факторы, вызывающие включение тревоги, будут повторно определены не быстрее 20 минут после предыдущей их регистрации.
  7. Если питание сигнализации будет отсутствовать более трех часов, сохраненные изменения температуры сбросятся.
  8. При неудачной отправке SMS, микроконтроллером будут выполнены попытки повторить действие через 5, 10 и 20 минут. Следующая будет сделана дважды через 40 и повторена однократно после 12 часов простоя.
  9. Поступающие звонки по GSM модулю устройством принимаются, через 3 минуты сбрасываются.

Принципы работы GSM модуля

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

GSM модуль понимает только AT команды и может на них отвечать. На большинство AT команд модуль отвечает сообщением “OK“ если он выполнил ее успешно, и сообщением “ERROR” если во время выполнения команды произошли какие либо проблемы. Существуют различные AT команды, например, ATA – ответить на звонок, ATD – сделать звонок, AT+CMGR — прочесть сообщение, AT+CMGS – передать SMS сообщение и т.д. AT команды должны заканчиваться символом возврата каретки, то есть \r (0D в шестнадцатеричном формате), например, “AT+CMGS\r”. К примеру, в нашем проекте мы можем использовать следующие AT команды:

ATE0 For echo offAT+CNMI=2,2,0,0,0 <ENTER> режим автоматического открытия принимаемых сообщений ATD<Mobile Number>; <ENTER> осуществить вызов (например, ATD+919610126059;\r\n)AT+CMGF=1 <ENTER> выбор текстового режимаAT+CMGS=”Mobile Number” <ENTER> назначение мобильного номера получателя>>после этого мы можем написать наше сообщение>>после написания сообщенияCtrl+Z команда передачи сообщения (26 в десятичном коде).ENTER=0x0d в шестнадцатеричном формате

SIM900 представляет собой четырех диапазонный GSM/GPRS модуль, способный функционировать в диапазонах 850/900/1800/1900 МГц в режимах передачи/приема голоса, SMS и данных. Отличается низким энергопотреблением. Внешний вид данного модуля показан на следующем рисунке.

How does it work?

Many GSM modems, WiFi and radio modules can be controlled by sending AT commands over Serial.
TinyGSM knows which commands to send, and how to handle AT responses, and wraps that into standard Arduino Client interface.

This library is «blocking» in all of its communication.
Depending on the function, your code may be blocked for a long time waiting for the module responses.
Apart from the obvious (ie, ) several other functions may block your code for up to several minutes.
The and functions commonly block the longest, especially in poorer service regions.
The module shutdown and restart may also be quite slow.

This libary does not support any sort of «hardware» or pin level controls for the modules.
If you need to turn your module on or reset it using some sort of High/Low/High pin sequence, you must write those functions yourself.

Отправка SMS через SIM800

Для теста работы пытаемся отправить SMS. Для начала отправляем команду: AT+CMGF=1. Если возник ERROR — скорее всего не прошла регистрация SIM-ки в сети.

AT команда Ответ Примечания
AT+CMGF=1 OK Переводим в текстовый режим отправки сообщений.
AT+CSCS=»GSM» OK Устаналиваем charset:«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 bers from 00 to FF; «PCCP» PC character set Code «PCDN» PC Danish/Norwegian character set «8859-1» ISO 8859 Latin 1 character set
AT+CSCS? +CSCS: «GSM» Проверяем, что нужная кодовая таблица установилась корректно.
AT+CMGS=»+796019xxxxx» > Номер телефона вводить обязательно с +, иначе будет сообщение об ошибке: +CMS ERROR: invalid input value.После запуска команды появится запрос на ввод текста сообщения, которое должно быть завершено отправкой CTRL-z (0x1A или (char)26). К сожалению, Arduino Serial Monitor не позволяет отправить этот код, так что только программно.

Популярные GSM-модули связи

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

SIM900

Контроллер SIM900 от SIMCom Wireless Solution соединяется с Ардуино посредством распространенного протокола взаимодействия UART. К ПК его можно подключить простым USB-UART переходником, который легко собирается даже самостоятельно.

SIM900 выполняет работу в полнодуплексном режиме и дает возможность осуществлять голосовые звонки и обмен сообщениями. Основные характеристики:

  • рабочие частоты четырех стандартов — EGSM900, GSM850, DCS1800, PCS1900;
  • напряжение — от 3.2 до 4.8 вольт;
  • ток в состоянии простоя — 450 мА, пиковый – 2 А;
  • скорость канала GPRS — 14.4 Кбит/с;
  • рабочие температуры с гарантией отсутствия искажений — от −30 до +80 градусов, с таковыми от −40 до +85. В последнем диапазоне заявлены минимальные отклонения без потери работоспособности устройства;
  • масса — 6.5 г;
  • габариты — 24×24×3 мм.

Существует несколько модификаций модуля с индексами B, D. TE-C, R и X. Они обладают определенными отличиями. Так, модель D дооснащена подсистемой зарядки аккумулятора, а плата с индексом X содержит улучшенные режимы энергосбережения, продлевающие срок работы батареи без подзарядки. Это позволяет применить радиомодуль в требующих длительной автономности системах охраны, трекинга, промышленной автоматизации.

Вне зависимости от модификации этот GSM модуль Ардуино поставляется в корпусе SMT с выведенными на торец контактами для распайки. Существуют версии и в иных исполнениях.

Контроллер SIM800L

Чип SIM800L «умеет» обмениваться информацией в режиме дуплекса через GSM и технологию GPRS. В устройстве предусмотрен слот под сим-карту, интегрированная антенна и дополнительный выход для внешней. Питание подается как от конвертера тока DC-DC, так и от иных внешних источников. С главным контроллером SIM800L взаимодействует через UART.

Характеристики:

  • четырехдиапазонный радиомодуль;
  • рабочее напряжение питания — от 3.8В до 4.2 В;
  • ток в standby 0.7 мА, в пиковом нагрузке — 500 мА;
  • слот под SIM карту;
  • имеется поддержка связи 2G;
  • температурный режим — от −30 до +75 градусов.

A6

Это популярный шилд от разработчика AI-Thinker. Контроллер А6 позволяет принимать и посылать GSM GPRS сигналы через сотовые сети и весьма популярен в проектах систем автоматизации и удаленного доступа к управлению.

Характеристики модуля:

  • четырехдиапазонный терминал мобильной связи;
  • питание — от источника 5 В;
  • потребляемый в состоянии «сна» ток — 3 мА, в standby 100 мА, при передаче 500 мА;
  • максимальная нагрузка гаджета — 2 А;
  • скорость GPRS — до 42.8 Кбит/с;
  • диапазон рабочих температур от −30 до +80 градусов.

А7

Он развивает модуль А6 и отличается встроенным чипом позиционирования GPS. Последний добавляет плате функциональности, одновременно упрощая конструкцию.

Характеристики:

  • сотовый терминал с 4-мя диапазонами;
  • напряжение питания — от 3.3 до 4.6 В;
  • источник тока — 5 В;
  • модуль GPRS класса 10, скорость трансляции до 86.5 Кбит/с;
  • имеется встроенное подавление электронного эха, статических шумов и паразитных наводок.

NeoWay M590

Данное GSM GPRS устройство 10 класса подключается по UART и умеет осуществлять обмен SMS, работать со звонками и взаимодействовать по протоколу GPRS.

Характеристики:

  • двухдиапазонный контроллер с поддержкой стандартов DCS1800 и EGSM 900;
  • 10 класс модуля GPRS;
  • напряжение питания от 3.3 до 5 В;
  • пиковый ток — 2 А;
  • рабочий ток устройства — 210 мА;
  • заявленный диапазон эксплуатационных температур — от −40 до +80 градусов.

Для подсоединения к Ардуино понадобится преобразователь электропитания 3.3–5 В.

Общие принципы работы устройства

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

В нашем проекте мы в SMS сообщениях будем использовать префикс “#A.” чтобы идентифицировать начало команды, а в конце сообщения будем использовать суффикс (концевик) “*“ чтобы идентифицировать конец команды.

Когда мы передаем SMS с мобильного телефона, GSM модуль принимает его и передает на плату Arduino. Плата Arduino принимает это сообщение, извлекает из него значащую часть и сохраняет ее в строковой переменной. После этого Arduino сравнивает эту строку с заранее определенными строками (шаблонами) для управления электронными устройствами. Если строки совпадают, то Arduino выдает команду через реле на включение/выключение соответствующего устройства и высвечивает на ЖК дисплее результат операции.
В нашем проекте для демонстрации мы использовали 3 электрические лампочки, которые условно будут обозначать вентилятор, свет и телевизор.

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

S.no. Message Operation
1 #A.fan on* Fan ON
2 #A.fan off* Fan OFF
3 #A.light on* Light ON
4 #A.light off* Light OFF
5 #A.tv on* TV ON
6 #A.tv off* TV Off
7 #A.all on* All ON
8 #A.all off* All OFF

Зачем это нужно

Аббревиатура GSM расшифровывается как Global System for Mobile (Communications). Технология эксплуатирует сети связи сотовых операторов, обеспечивая трансляцию голосовой, текстовой и служебной информации между подключенными устройствами.

Через сеть GSM передаются не только данные, но и СМС-сообщения, и голос. С подключенной к Arduino GSM платой компьютер способен:

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

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

Простейший пример применения Ардуино с GSM — автономная сигнализация. Периферийные датчики фиксируют свое состояние и передают на центральную плату, которая через модуль отправляет данные на смартфон владельца. Такое решение можно считать базой для «умного дома»: если добавить дополнительные подключаемые блоки, датчики и программные оболочки, Arduino превращается в полноценный комплекс Smart Home.

Любой GSM/GPRS блок соединяется с основной платой. Для реализации простых проектов, как правило, используют Arduino Uno, но есть возможность построения и на базе минималистичного Nano, и более богато оснащенного Mega. Соединенный с Arduino GSM модуль обеспечивает все возможности технологии передачи данных по сотовой сети.

Модулей связи на рынке представлено достаточно много. Далее мы рассмотрим характеристики наиболее популярных и приведем пример типового проекта.

Исходный код программы

Arduino

/*
Automatic Voice machine using Arudino and GSM900
Created by: Aswinth Raj B
Coded on: 22-9-2017
Website: http://www.circuitdigest.com/
*/
#include <sim900.h> //скачайте библиотеку по этому адресу https://github.com/Seeed-Studio/GPRS_SIM900
#include <SoftwareSerial.h> //default library
#include <Wire.h> //default library
int Incomingch;
String data,Fdata;
//Connect Tx pin of GSM to 9 of Arduino
//Connect Rx pin of GSM to 10 of Arduino
SoftwareSerial gprs(9,10);//TX,RX
void setup(){
Serial.begin(9600); //Serial monitor works on 9600 baudrate for debugging
sim900_init(&gprs, 9600); //GSM module works on 9600 baudrate
pinMode(8, OUTPUT); //контакт, с которого управляется голосовой модуль
Serial.println(«Arduino — Automatic Voice Machine»);
}
/*функция для считывания поступающей информации от модуля GSM */
void check_Incoming()
{
if(gprs.available()) //если модуль GSM что-нибудь передает
{
Incomingch = gprs.read(); // сохраняем эту информацию в переменной

if (Incomingch == 10 || Incomingch ==13) // если это пробел (10) или перевод строки (13) это значит что закончилось слово
{Serial.println(data); Fdata =data; data = «»; } //печатаем слово и очищаем переменную чтобы начать заново
else
{
String newchar = String (char(Incomingch)); // конвертируем символ (char) в строку (string) с помощью использования объекта типа строка
data = data +newchar; // после конвертирования в строку производим объединение строк
}
}
}
/*##End of Function##*/
void loop(){

check_Incoming(); //считываем что передает GSM модуль

if(Serial.available()){ //Used for debugging
gprs.write(Serial.read()); //Used for debugging
} //Used for debugging
if (Fdata == «RING») // если GSM модуль передал RING
{
delay(5000); // ждем 5 секунд чтобы сделать задержку на 3 долгих гудка
gprs.write («ATA\r\n»); //отвечаем на вызов
Serial.println («Placed Received»); //Used for debugging
while(Fdata != «OK») // ждем пока вызов не будет успешно отвечен
{check_Incoming(); // считываем что передает GSM модуль
Serial.println («Playing Recorded message»); //Used for debugging
// воспроизводим записанное голосовое сообщение
delay(500);
digitalWrite(8, HIGH); //Go high
delay(200); // ждем 200 мс
digitalWrite(8, LOW); //Go low
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

/*
Automatic Voice machine using Arudino and GSM900
Created by: Aswinth Raj B
Coded on: 22-9-2017
Website: http://www.circuitdigest.com/
*/
#include <sim900.h> //скачайте библиотеку по этому адресу https://github.com/Seeed-Studio/GPRS_SIM900
#include <SoftwareSerial.h> //default library
#include <Wire.h> //default library

intIncomingch;

Stringdata,Fdata;

//Connect Tx pin of GSM to 9 of Arduino

//Connect Rx pin of GSM to 10 of Arduino

SoftwareSerialgprs(9,10);//TX,RX

voidsetup(){

Serial.begin(9600);//Serial monitor works on 9600 baudrate for debugging

sim900_init(&gprs,9600);//GSM module works on 9600 baudrate

pinMode(8,OUTPUT);//контакт, с которого управляется голосовой модуль

Serial.println(«Arduino — Automatic Voice Machine»);

}
/*функция для считывания поступающей информации от модуля GSM */

voidcheck_Incoming()

{

if(gprs.available())//если модуль GSM что-нибудь передает

{

Incomingch=gprs.read();// сохраняем эту информацию в переменной

if(Incomingch==10||Incomingch==13)// если это пробел (10) или перевод строки (13) это значит что закончилось слово

{Serial.println(data);Fdata=data;data=»»;}//печатаем слово и очищаем переменную чтобы начать заново

else

{

Stringnewchar=String(char(Incomingch));// конвертируем символ (char) в строку (string) с помощью использования объекта типа строка

data=data+newchar;// после конвертирования в строку производим объединение строк

}

}

}
/*##End of Function##*/

voidloop(){

check_Incoming();//считываем что передает GSM модуль

if(Serial.available()){//Used for debugging    

gprs.write(Serial.read());//Used for debugging

}//Used for debugging

if(Fdata==»RING»)// если GSM модуль передал RING

{

delay(5000);// ждем 5 секунд чтобы сделать задержку на 3 долгих гудка

gprs.write(«ATA\r\n»);//отвечаем на вызов

Serial.println(«Placed Received»);//Used for debugging

while(Fdata!=»OK»)// ждем пока вызов не будет успешно отвечен

{check_Incoming();// считываем что передает GSM модуль

Serial.println(«Playing Recorded message»);//Used for debugging

// воспроизводим записанное голосовое сообщение

delay(500);

digitalWrite(8,HIGH);//Go high  

delay(200);// ждем 200 мс              

digitalWrite(8,LOW);//Go low

}

}

}

Элементы платы

Микроконтроллер ATSAMD21G18

Мозгом платформы Arduino MKR GSM 1400 является 32-разрядный микроконтроллер фирмы Microchip (Atmel) — ATSAMD21G18 с вычислительном ядром ARM Cortex M0.
Контроллер работает на тактовой частоте 48 МГц, а также предоставляет 256 КБ Flash-памяти для хранения прошивки и 32 КБ SRAM-памяти для работы с переменными в программе.

Беспроводной модуль SARA-U201

Модуль U-blox SARA-U201 обеспечивает сотовую связь 3G/2G с поддержкой UMTS/HSPA и GSM/GPRS. Поддержка стандарта 3G обеспечивает входящую скорость передачи данных до 7,2 Мбит/с и исходящую до 5,76 Мбит/с. Для пользования сотовой связью вам понадобится SIM-карта формата Micro-SIM, которая устанавливается с обратной стороны платформы.

Разъём подключения GSM-антенны

В зоне слабого приёма воспользуйтесь дополнительной антенной усиления GSM-сигнала, которая подключается через разъём U.FL.

Светодиодная индикация

Имя светодиода Назначение
ON Индикатор питания платформы.
CHRG Индикатор зарядки внешнего аккумулятора.
L Пользовательский светодиод на пине микроконтроллера, в отличии от пина на других платформах Arduino. Используйте определение для работы со светодиодом. При задании значения светодиод включается, при – выключается.

Разъём подключения аккумулятора

На плате расположен JST PH-разъём (2 pin) для подключения внешних Li-Pol и Li-Ion аккумуляторов.

При одновременном питании платформы от USB и аккумулятора:

  • батарея заряжается через контролер заряда BQ24195L до 4,2 вольта.
  • светодиод горит об индикации питания
  • светодиод горит об индикации заряда батареи

При питании платформы только от аккумулятора:

  • батарея не заряжается
  • светодиод горит об индикации питания

Разъём I²C интерфейса

На платформе предусмотрен JST SH-разъём (5 pin) для подключения дополнительных модулей по интерфейсу «I²C». Коннектор включает в себя:

  • пины питания — и

  • пины шины I²C — и

  • дополнительный цифровой пин

Регулятор напряжения

Линейный понижающий регулятор напряжение AP7215-33 с выходом 3,3 вольта обеспечивает питание микроконтроллера. Максимальный выходной ток составляет 600 мА.

Сфера применения

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

Назначение

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

Стоит отметить, что модуль практически мгновенно передает сигнал в случае экстренной ситуации, и вся информация поступает практически мгновенно, это обусловлено использованием СИМ карты и оператор в данном случае не играет никакой роли. Дополнительной особенностью системы Arduino считает то, что имеющийся микроконтроллер дает возможность программировать устройство непосредственно владельцу. В такой ситуации можно применить язык Arduino, который в свою очередь основывается на Wiring. То есть каждый человек может настрочить работу в зависимости от требований к охранной системе.

Тестирование SIM800

  • Запускаем Arduino IDE.
  • В настройках порта (Tools -> Port) выбираем порт на котором работает USB-to-TTL конвертер.
  • Переходим в Tools -> Serial Monitor (Ctrl-Shift-M).
  • Выбираем скорость 115200. Где-то проскакивает, что у чипа работает автоопределение скорости. По моим тестам — не работает.
  • Набираем AT и ввод. Документация по AT коммандам SIM800 здесь.
  • Если модуль рабочий и корректно подключен, то появится хотя-бы ответ «OK». Если модуль определил SIM-ку и зарегистрировался в сети оператора, то будет развернутая информация.
AT
OK

+CPIN: READY

Call Ready

SMS Ready
  • Отправляем команду: AT+COPS=?После нескольких секунд ожидания появится ответ, вроде: +COPS: (2,»Bee Line GSM»,»BeeLine»,»25099″),(1,»MTS»,»MTS»,»25001″),(1,»MOTIV»,»MOTIV»,»25020″),(1,»MegaFon»,»MegaFon»,»25002″),,(0-4),(0-2). Модуль «видит» ближайшие соты. Уже хорошо.
  • Проверим статус PIN кода на SIM карте командой: AT+CPIN? Если появился ERROR — что-то не так.
  • Запускаем команду: AT+CMEE=2. Эта команда при выводе сообщения об ошибке предоставляет максимально детальную информацию. Сохраняем командой: AT&W.
  • Поворяем комунду AT+CPIN? Появляется детальный код ошибки. Например, в моем случае: +CME ERROR: SIM not inserted.
  • Проверяем установку SIM карты. SIM слот распаянный на модуле «без защиты от дурака», т.е. позволяет вставить SIM-ку любым способом, без привычных ограничений как на сотовом телефоне или в других типах слотов. На SIM слоте мелко есть пиктограмма правильной установки карты.
  • Повторяем команду AT+COPS=? Ответ изменился. Появились строчки «Call Ready» и «SMS Ready», значит карта определилась нормально и зарегистрировалась в сети оператора:
AT+COPS=?
Call Ready

SMS Ready

+COPS: (1,"Bee Line GSM","BeeLine","25099"),(1,"MOTIV","MOTIV","25020"),(3,"MTS","MTS","25001"),(3,"MegaFon","MegaFon","25002"),,(0-4),(0-2)

OK
  • Отправляем команду AT+CSQ для получения уровня сигнала. Первая цифра в ответе должна быть отлична от нуля. Например, +CSQ: 23,0.
  • Проверяем регистрацию в сети оператора командой AT+CREG? Правильный ответ: +CREG: 0,1

Сборка устройства

Себестоимость деталей устройства на момент публикации этой статьи составляет примерно 1000-1200 рублей (без учета заказа платы).
Для удобства сборки и надежности в эксплуатации лучше заказать плату. Китайские друзья с известного сайта предлагают сделать 10 штук с доставкой за ~$7, а иногда и меньше. Но всегда можно собрать и на макетке, как я и поступил с первым прототипом:

Прототип.

Arduino и совместимые модули были заказаны с aliexpress. Понадобятся:

  • Arduino Pro Mini 3.3v 8MHz (5v 16MHz is also acceptable, but requires different firmware);
  • MH-SR602 MINI Motion Sensor;
  • SIM800C(L) GSM Module;
  • CP2102 MICRO USB to UART TTL Module;
  • DS3231 RTC Module For Raspberry Pi;
  • 3 AA battery holder With ON OFF Switch;
  • различная рассыпуха (резисторы, конденсаторы, зуммер и поч.).

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

Схема устройства.

Для снижения энергопотребления с платы Arduino нужно обязательно удалить резистор светодиода питания и регулятор напряжения. Проект платы сделан в Ki-CAD.

Устройство и характеристики

Устройство отправляет SMS при возникновении следующих событий:

  • открытие двери (герконовый датчик);
  • резкое изменение освещения (фоторезистор);
  • движение (PIR датчик);
  • выход температуры из заданного диапазона;
  • низкое напряжение батареи.

Пример SMS с событием.

Также, раз в сутки можно настроить время ежедневного отчета.

Питается устройство от 3-х батареек AA. Расчетное время работы ≥6мес.

Настройка устройства, считывание логов событий и построение месячного графика температуры происходит с помощью утилиты (Python 2.7 + Tk + pyserial + matplotli).

Основное окно утилиты настройки.

Окно лога событий.

Окно лога температуры.

Скетчи для работы с модулем 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/GPRS SIM900 Shield

Плата Arduino GPRS/GSM Shield (рисунок 1) предоставляет нам возможность использовать для удаленного приема и передачи данных мобильной GSM-связи. Осуществить это можно тремя способами:

используя отправку/прием коротких текстовых сообщений (SMS);

отправкой голосовых (аудио) команд на основе технологий CSD (стандартная технология передачи данных в сети GSM) и/или DTMF (двухтональный многочастотный аналоговый сигнал, используемый для набора телефонного номера);

используя пакетную передачу данных на основе технологии GPRS.

Плата построена на базе модуля SIMCom SIM900.

Также на ней расположены:

слот для SIM-карты;

джек 3,5 мм для аудио-входа и выхода;

разъём для внешней антенны.

Общение с платой производится через serial-соединение с помощью набора AT-команд. С помощью перемычек на плате возможно установить используемые для коммуникации контакты: аппаратные 0- 1-й или 2-3 (на некоторых платах) 7- 8-й для работы через SoftwareSerial.

Рисунок 1. GPS GPRS shield.

Плату GSM GPRS SIM900 Shield можно включить двумя способами:

аппаратным (нажатие кнопки PWRKEY);

программным.