Подключение модуля Sim800l к микроконтроллеру esp8266. Подключение GSM модуля SIM800L к Arduino Описание модуля SIM800L

Рассмотрим как связать Адруино с GSM модулем SIM800L. Существуют GSM шилды специально для Ардуино, но по цене они достаточно дороги, потому решил приобрести бюджетный вариант. Статья может быть полезна так же для подключения модуля SIM900, NEOWAY M590, и некоторых сотовых телефонов. Неудобный нюанс в том, что этот модуль требует нестандартное для Ардуино питание 3.7В, поэтому запитывать пришлось отдельно через понижающий преобразователь напряжения.

Подключение

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

  1. Контроллер Arduino UNO R3 + USB кабель
  2. GSM модуль SIM800L (питание от 3.7В до 4.2В)
  3. Преобразователь напряжения понижающий (DC-DC step-down converter)
  4. Батарея 12В (или любой источник питания от 6В до 20В)
  5. Соединительные провода

Соединяем Ардуино с компьютером через USB кабель.

Даем питание к GSM модулю от батареи 12В через преобразователь:

  • от 12В "минус" идет на ардуино в "GND", от "GND" в преобразователь напряжения во "входящий минус".
  • от 12В "плюс" идет в преобразователь напряжения во "входящий плюс".

Возникает вопрос: можно ли подать питание от самой Ардуино от 5В? Напрямую не рисковал бы. Но можно подобрать диод или стабилизатор напряжения.

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

TX и RX контакты на GSM модуле соединяем с 2 и 3 цифровыми контактами на Ардуино. Если необходимо подключить несколько GSM модулей к Arduino, то используйте другие пины и прописывайте в скетче через SoftwareSerial.

Скетч

#include <SoftwareSerial .h> SoftwareSerial mySerial(2, 3); // RX, TX void setup () { Serial .begin (19200); //Скорость порта для связи Arduino с компьютером Serial .println ("Goodnight moon!" ); mySerial.begin (19200); //Скорость порта для связи Arduino с GSM модулем mySerial.println ("AT" ); } void loop () { if (mySerial.available ()) Serial .write (mySerial.read ()); if (Serial .available ()) mySerial.write (Serial .read ()); }

Процедура для отправки СМС

void sms (String text , String phone ) { Serial . println ("SMS send started" ) ; mySerial . println ("AT+CMGS=\"" + phone + "\"" ) ; delay (1000 ) ; mySerial . print (text ) ; delay (300 ) ; mySerial . print ((char ) 26 ) ; delay (300 ) ; Serial . println ("SMS send finish" ) ; delay (3000 ) ; }

Процедуру добавлять в конец скетча и вызывать её из основного цикла так: sms(String("текст СМС на англ."),String("+791212345678"));

Проверка

Включаем питание затем через монитор порта, выставив скорость 19200 и обязательно опцию "новая строка".

Вводите команду "ATI" и нажмите ENTER. Должна появиться информация от модели модуля.

Пробовал отправить на модуль СМСку через бесплатный сервис от Теле2, приходят непонятные строки. Пробовал в модуле сменить кодировки. Вопрос пока не решен.

Видео

Всем привет! Давненько мы с вами не говорили про GSM. И так, начнем. Глубокоуважаемые Китайцы забацали новый бюджетный модуль под названием SIM800L. Да, да, этот модуль выпускает ихняяя же фирма SIMCOM. Я по началу боялся его тестить, мол на просторах России его нет и нет гарантии что данный модуль снюхается с нашими сетями. Заниматься перепрошивкой от другого модуля я не хотел, но мне просто чудесно повезло убить двух тараканов одним тапком. Я совсем забыл о замечательном магазине ЧипРезистор который с радостью мне предоставил данный модуль на растерзание.
Вот как выглядит это чудо.

Не густо, на плате установлен сам модуль, держатель для микросим, тантал, пару керамики, резистор и светодиод. Как ни странно Китайцы позиционируют данный модуль как шилд для Ардуины. Ардуина вроде как питается от 5 вольт и чаще всего от USB, а если меня не подводит память, то СИМкомовские модули кушают от 3,6в до 4,2 и при этом в пике хотят 2А. Ну да ладно, подключаю к отладочной плате и... Китайцы!!! Все что угодно лишь бы удешевить. Не работает данный модуль от 5 вольт. Моя память меня не подвела. Короче можно долго рассуждать чем его запитать, но я вам покажу один прекрасный девайс, который легко решит эту проблему. Прикупить его можно там же где и SIM800L , а именно в ЧипРезисторе . Модуль представляет собой понижающий импульсник до 3А.

Долее берем этот модуль и припаиваем входные и выходные провода. Заем подключаем к тостеру и настраиваем на 4 вольта.

Вот схемка, вид сверху.

Мой хаос выглядит вот так.

Проверяем на короткое, вставляем симку, подключаем USB-RS232 и питание. Если ничего не задымилось и замигал светодиод на модуле, значит все в порядке. Далее запускаем како-нибудь терминал, у меня PuTTYn и кидаем первую команду AT . В ответ если получили OK значит все работает.

Бинго! Далее кидаем AT+COPS? и если в ответ получили своего оператора, то для закрепления позвоните себе набрав команду ATD89161234567; . Точка с запятой обязательно! Если модуль дозвонился, то значит он работает с нашими сетями. Я тестил на пчелайне. Если я сейчас скажу что на этом все, то меня закидают яйцами и помидорами, а этого не хочу))) Значит давайте соберем из этого что-нибудь полезное. Например сигнализацию. Прикрутим модуль к МК и будем следить за состояние пару ножек. Как только на ножке появится изменения, то тут же пошлем SMS с оповещением об данном изменении. В роли МК будет выступать ATmegs32a. На ноги PB2 и PB3 прикрутим кнопки. Кнопки имеют общий GND, а для подтяжки используем встроенные резисторы. Для работы с модулем напишем пару функций, а именно инициализации и передачи SMS. Чтож, поехали.

Для начала сконфигурим проект при помощи генератора кода axlib . Для этого выберем МК ATmega32, внешний кварц на 7372800 (такой кварц нужен для уменьшения ошибок при передаче по UART) . Настроим UART на скорость 9600. Далее сгенерив проект откроем его в AtmelStudio 6. Первым делом создадим файл sim800l.h в корне проекта и подключим его. #include #include "main_init.h" #include "axlib/usart.h" #include "sim800l.h" Теперь переходим в наш созданный файл и впишем туда нужные нам дефайны. // Первая команда, овет OK #define SIM800L_AT_AT "AT" // Команда на ввод номера абонента для отправки ему SMS сообщения #define SIM800L_AT_SMS "AT+CMGS=\"" // Настройка формата покета #define SIM800L_AT_SMS_SET "AT+CMGF=1" Такс, дефайны для упрощения записали, теперь пишем сложную функцию инициализации. void sim800l_init(void) { usart_str_rn(SIM800L_AT_AT); } Вся сложность данной функции заключается в том, что мы просто передаем команду АТ модулю. С этой команды должен начинать работать модуль. Следующая функция немного посложнее. BYTE sim800l_send_sms(BYTE *num, BYTE *text, BYTE lenght) { // Массив для получения ответов от модуля BYTE str = {0}; _delay_ms(1000); // Настройка режима передачи usart_str_rn(SIM800L_AT_SMS_SET); // Подача номера телефона абонента usart_str_out(SIM800L_AT_SMS, 9); usart_str_out(num, 12); usart_str_rn("\""); // Ожидание начала ввода текста _delay_ms(3000); // Отправка текста usart_str_out(text, lenght); str = 0x1A; str = 0; usart_str_rn(str); // Ждем OK usart_str_in(str, 18); if(!((str == 0x4F) & (str == 0x4B))) return 0x34; return 0x30; } Вот тут я понял всю сущность дешевизны данного модуля. Эта фиговина напрочь отказывалась стабильно возвращать ответы. Как я только не извращался, и ставил таймауты по приходу данных гигантские, и задержки лепил. Короче плюнул на те ответы что плавали во времени и натыкал задержек. Для работы это не сильно мешает. Платим за дешевизну. Поехали по функции. Первым делом тыкаем настройку передачи пакета. Это нужно чтобы модуль отправлял данные получив номер телефона, а затем ожидал принятия текста. Затем передаем номер телефона абонента которому отправляем SMS. Берем его из аргумента данной функции. Есть одно но! Номер телефона должен иметь формат вида: +79161234567. +7 обязательно, этот модуль в отличии от 900-тых не понимает 8. После передачи номера абонента просто тупим 3 секунды. Все это время модуль не спеша пережевывает номер и по хрен знает какому алгоритму, как раз на этих задержках я подорвался, выдает нам приглашение на ввод текста значком > 3 секунд железно хватает пережевать и выплюнуть приглашение. После 3 секунд кидаем текст сообщения. Его так же берем из аргумента данной функции и от туда же длину текста для функций UART. Ведь мы не знаем сколько буковок вы собираетесь послать. Если внимательно присмотреться, то можно заметить байт 0x1A в конце текста сообщения. Это команда Ctrl+Z нужна для окончания передачи текста. Когда модуль получит эту команду, то все бросит и передаст SMS. Все, с данным файлом закончили, переходим в основной файл программы. #define BUTTON_1 "Nazhata knopka 1" #define BUTTON_2 "Nazhata knopka 2" // Инициализация GSM модуля sim800l_init(); // Настройка портов ввода вывода на чтение DDRB = 0x00; // Включаем подтяжку внутренним резистором PORTB |= (1 // Если нажали кнопку 1 if(!(PINB & (1 // Ждем пока не отпустили кнопку while(!(PINB & (1 // Если нажали кнопку 2 if(!(PINB & (1 // Ждем пока не отпустили кнопку while(!(PINB & (1 Что мы тут видим. Два дефайна с заранее подготовленным текстом. Затем мы инициализируем модуль. Затем настраиваем ножки 2 и 3 порта В на вход и подтягиваем внутренний резистор к плюсу питания. Затем в бесконечном цикле проверяем на нажатие кнопок. Как только какая-либо из кнопок будет нажата, сразу вваливаемся в бесконечный цикл и ждем пока не отпустят кнопку. После того как кнопку отпустили вызываем функцию отправки SMS с заранее продефаненым текстом. Вот и все.))) Проект выкладывать не буду так как его можно сгенерить axlib генератором и скопипастить текст отсюда. Ой, да, вот что я получил на телефон.))


Фыва 09.10.16 23:29

Если верить mt-system, то 800 серия это приемник 900 серии, которую якобы сворачивают к концу 2016 года. Поэтому довольно странно читать о таких досадных косяках как зажатые ответы.
может чего в датишах нового завелось? Или ты чисто по аналогии с 900 кидал команды, особо не раскуривая?

Алексей 09.10.16 23:39

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

Юрий 05.03.17 20:36

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

Алексей 06.03.17 12:36
Олег 28.03.17 02:43


передаётся \n ,для работы с симмодулем это нужно или на всякий случай?
Что делает символ /" тут

#define SIM800L_AT_SMS "AT+CMGS=\""

usart_str_out (SIM800L_AT_SMS, 9);
usart_str_out (num, 12);
usart_str_rn ("\"");
тут тоже /" /r /n
почему нельзя разом usart_str_rn (AT+CMGS="+7xxxxxxxxxx") , как в терминале?
И

usart_str_out (text, lenght);
str = 0x1A;понятно
str = 0; зачем ноль?
usart_str_rn (str); и ещё /r /n ?

Алексей 28.03.17 12:33

--> Что делает символ /" тут
Символ \ ставится перед служебными символами для того чтобы эти символы превратить в простые. Дело в том что двойная кавычка это служебный символ. Его используют чтобы передать строку в массив. А для того чтобы компилятор прочитал именно как символ, то перед служебными символами ставят обратную косую черту.
Пример:


BYTE data = "Какой-то текст \"Текст в кавычках\"";

Теперь внутренние кавычки запишутся в массив как символы.

--> почему нельзя разом usart_str_rn (AT+CMGS="+7xxxxxxxxxx") , как в терминале?

Потому что функция принимает в качестве аргумента указатель на первый элемент массива с номером абонента. Если написать сразу, то SMS будут высылаться вечно только этому абоненту. И изменить можно будет лишь переписав код.

--> Разъясните пожалуйста. Для чего в функции usart_str_rn
передаётся \n

Потому что документация на модуль SIMCOM требует в конце команды вводить код конца строки и перевода каретки.

Олег 28.03.17 14:05

Спасибо, Алексей это осознал, имею проблему с передачей 1А, в таблице служебных символов нет комбинации с \... .

Алексей 28.03.17 15:04

А как должен выглядеть символ Ctrl+z? Или например пробел, табуляция. Поэтому передается именно кодом. Например \r\n можно записать как два байта 0x0D, 0x0A. Это одно и тоже.

Олег 28.03.17 16:59

Это я понял, коммада отправилась вот так


str = 0x4D;
str = 0x4B;
str = 0x4D;// три буквы текст для теста.
str = 0x1A;
str = 0;
usart_str_rn (str);
, текст наверно могу строкой, но 1А получается только через массив, как-то проще нельзя?

Алексей 28.03.17 17:14

void usart_char_out (BYTE data)

Просто посылает один байт в порт.

Евгений 07.05.17 17:47

BYTE sim800l_send_sms(BYTE *num, BYTE *text, BYTE lenght)
{
// Массив для получения ответов от модуля
BYTE str = {0};
далее исходник
// Ждем OK
usart_str_in(str, 18);
if(!((str == 0x4F) & (str == 0x4B))) return 0x34;
Откуда взялись 14 и 15 индекс в массиве, если он объявлен явно str ?

Алексей 07.05.17 20:05

А вот такой я валенок. Массив не на 10 ячеек, а на 20)))

Евгений 08.05.17 20:13

Бывает)) Так и понял что опечатка. Начал свой код писать, взял за основу и просто сразу увидел

Алексей 08.05.17 21:34

Советую лучше использовать SIM800C вместо L. Те же деньги но у C есть синезуб в модуле.

Евгений 12.05.17 06:43

Да, у меня как раз 800C модули. Алексей, после выполнения чтения, в str пусто, в чем может быть проблема? Команды на модуль уходят и модуль отвечает (проверено лог.анализатором), но в str пусто
// Ждем OK
usart_str_in(str, 18);
if(!((str ==

Евгений 12.05.17 18:57

Алексей. Разобрался в чем проблема, в функции usart_str_in было принятие 18 байт, а модуль отвечал только 9тью байтами, соответственно функция воспринимала данный ответ как таймаут. (BYTE usart_str_in(BYTE *str, BYTE count)
{
BYTE out = 0;
BYTE data = 0;
BYTE timeout = 0;

While(count > data) // здесь пока 18>9 - таймаут
{
data = GetData();

// Если в течении 250 мс данные не пришли
// то выйти из функции и вернуть 0
if(timeout >= 250)
{
ClearBuffer();
return out;
}

Timeout++;
_delay_ms(1);
}

Out = OutBufferStr(str, count);
return out;
}
А как быть если не известно какой длины придет ответ?

Алексей 12.05.17 20:03

Опрашивать буфер на прием больше одного байта, а потом подождав вычитать весь пакет из буфера.

Евгений 12.05.17 20:21

Алексей, не совсем понял идею, поясни плз

Алексей 12.05.17 20:58


main()
{

// Количество принятых байт в буфер
BYTE len_pocket = 0;

// Массив для данных
BYTE data = {0};

while (1)
{
// Смотрим что в буфере
len_pocket = usart_data();

// Проверяем пришло ли что в буфер
if (len_pocket > 0)
{
// Если пришло, ждем
// расчет паузы (1000/(битрейт/10)) * макс байт.
// Пример битрейт 19200, макс байт 40. (1000/1920) * 40 = 20.8мс

// Пауза для гарантированного получения всех байт
_delay_ms(22);

// Получаем количество принятых байт
len_pocket = usart_data();

// Записываем данные в массив
usart_str_in (data, len_pocket);

// Теперь в массиве data лежат все принятые байты.
}
}
}

Евгений 12.05.17 21:25

Алексей, спасибо, идею понял наглядно, буду пробовать. Еще хотел спросить про два слейва и мастер, по поводу потери связи при сдергивании линии, не пробовал макетировать?

Алексей 12.05.17 22:18

Пока нет. Очень много работы. Я вообще из-за нее подзабил на сайт.

Олег 08.07.17 23:28

Алексей, расскажите как согласовать уровни если мк питается 5в а модуль 3,3в? На али нашел модуль питания KIS-3R33S, он имеет управление выходом, есть ли смысл затевать перезагрузку SIM модуля снятием питания или хватит резета и вывода включения модуля?

Алексей 09.07.17 12:28

Во первых для согласования с модулем нужно не 3,3в, а 3в. Для этого достаточно поставить резистивный делитель, где RXD МК будет на входе резистора верхнего плеча, а резистор нижнего плеча подключен к общему сигналу.
Во вторых. Затевать перезагрузку передергиванием питания можно если модуль завис. Если модуль работает, то это категорически нельзя, та как это может привести к убиванию прошивки в модуле. Рестарт нужно делать передергиванием ножки PWR или АТ командой.

Олег 09.07.17 12:44

Спасибо, по первому всё понятно.
По второму, такой жесткий резет и планируется если модуль не отвечает и дергание rst и pwr не даёт результата,к стати есть pcb модулей без pwr или без rst, вопрос а как прошивка при выключении питания всего устройства, есть рекомендации?

Алексей 09.07.17 14:48

Это китайский баг. Подпаиватся к контактам. Китайцы особо не парятся, они даже питание не всегда реализовывают правильно. Лишь бы было дешево.

Олег 09.07.17 15:05

А когда модуль повис что вначале дергать pwr или rst, и если пвр и резет не помогает как правильно по питанию передернуть?

Алексей 09.07.17 19:29

Если завис наглухо, то просто снять питание секунды на три. А потом подать и проинициализировать по правилам.

Игорь 12.09.19 19:21

Подскажите как передать номер бз кавычек модем MC52i
// Подача номера телефона абонента
usart_str_out(SIM800L_AT_SMS, 9);
usart_str_out(num, 12);
usart_str_rn(""");

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/GPRS модуль на основе SIM800L самостоятельно подключить просто. Выполните несколько этапов и используйте современный компактный элемент в своих целях.

Корпорация SimCom предлагает пользователям компактный GSM/GPRS модуль на основе SIM800L. Улучшить сигнал позволяет встроенный разъем. Также можно воспользоваться антенной, которая идет в комплекте с этой модульной системой.

GSM/GPRS модуль SIM800L — описание

Детальное описание:

  • Питание модуля производится при помощи внешних источников или через DC-DC преобразовательные системы
  • Диапазон для питания должен быть в пределах 3.7В — 4.2В. Стоит отметить, что 5В от Arduino опасны для работы модуля, так как приведут его к поломке, а 3.3В помогут реагировать на пользовательские команды, но к сети подключение будет отсутствовать
  • Управление происходит через UART, но для Rx и Tx используется делитель напряжения, чтобы не производилась нагрузка на плату
  • Низкое энергопотребление модуля SIM800L позволяет его успешно использовать для техники с аккумуляторным питанием
  • При подаче питания модуль сразу же начинает искать сеть. Когда она найдена, начинает подавать сигнал светодиод, медленно мигая. Об отсутствии сети говорит этот же светодиод, но при помощи быстрого мигания лампочки
  • Модуль поддерживает micro SIM карты 1.8В и 3В

GSM/GPRS модуль SIM800L — подключение

Для подключения, кроме самого модуля, преобразователя и контроллера Arduino UNO R3, понадобится USB кабель, батарея на 12В и соединительные провода. Выполните следующие этапы:

  1. Сначала подайте питание к системе от батареи через DC-DC: от «минуса» напряжение должно идти на ардуино в «GND», от «GND» в преобразовательный элемент в «минус» на входе
  2. Подключение нужно производить после того, как вы настроите модуль, выставляя выходное напряжение в допустимом диапазоне (3.7В — 4.2В)
  3. Все контакты, которые выходят от преобразователя, подключите к SIM800L, соблюдая полярность
  4. TX и RX контакты на модуле соедините со 2-м и 3-м цифровыми контактами соответственно на ардуино

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

Наглядно в нижеследующем видео представлено, как подключить модуль SIM800L к Ардуино.

Видео: Подключение GSM модуля SIM800L к Arduino

Модуль GSM GPRS SIM800L (SIM800L) MicroSIM с антенной
SIM800L GPRS GSM Module MicroSIM Card Core BOard Quad-band TTL Serial Port

Миниатюрный модуль GSM/GPRS сотовой связи на основе компонента SIM800L , разработанного компанией SIMCom Wireless Solutions. Русскоязычная версия сайта SIMCom . Стандартный интерфейс управления компонента SIM800L предоставляет доступ к сервисам сетей GSM/GPRS 850/900/1800/1900МГц для отправки звонков, СМС сообщений и обмена цифровыми данными GPRS. Поставляется с встроенной антенной, также можно подключить дополнительные антенны для улучшения качества сигнала.
Управлять модулем можно при помощи персонального компьютера через преобразователь интерфейса USB-UART или непосредственно через UART модулем микроконтроллера самостоятельной разработки или Arduino, Raspberry Pi и аналогичными.
Компонент SIM800L имеет реализованный стек протокола TCP/IP. Содержит микросхему MT6260SA компании MediaTek и микросхему приемопередатчика RFMD RF7176.
Благодаря функции отправки СМС сообщений наиболее часто модуль GSM GPRS SIM800 MicroSIM с антенной используется в диспетчеризации, беспроводной сигнализации и в охранных системах. При этом в результате различных событий происходит отправка сообщений вида: “Аварийная остановка лифта 3 дома №17”, “Гараж открыт”, “Дверь подвала открыта”, “Отключено 220 по перегрузке”, “Протечка системы отопления”, “Отопительный котел выключен”, “Температура в теплице ниже нормы”.
К модулю GSM GPRS SIM800 MicroSIM подключаются динамик и микрофон. С модуля можно совершать звонки и принимать.

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

Питание
напряжение, В
номинальное 4
диапазон 3,4-4,4
ток
в режиме ожидания 0,7 мА
предельный 500 мА
Максимальное напряжение высокого уровня интерфейса UART 2,8 В
Скорость UART 1200-115200 бод
Четыре диапазона EGSM900, DCS1800, GSM850, PCS1900
Мощность передачи в различных диапазонах
DCS1800, PCS1900 1 Вт
GSM850, EGSM900 2 Вт
Автоматически выполняет поиск в четырех частотных диапазонах
Поддерживает сеть 2G
Сопротивление подключаемого динамика 8 Ом
Микрофон электретный
Управляется командами AT через UART (3GPP TS 27.007, 27.005 SIMCOM enhanced AT Commands)
Автоматическое определение скорости передачи управляющих АТ команд
Отправка и получение GPRS данных (TCP/IP, HTTP, и т.д.)
Макс скорость передачи GPRS данных 85,6 Кбод
Кодирование CS-1, CS-2, CS-3 и CS-4
Поддерживает GSM 07.10 протокол
Поддержка пакетной передачи широковещательного канала управления (PBCCH) CSD на скоростях 2.4, 4.8, 9.6 и 14.4 Кбод
Поддержка неструктурированных данных дополнительных услуг USSD
Поддерживает PAP (протокол идентификации пароля)
Поддержка часов реального времени RTC
Поддерживает симкарт питанием 3 и 1,8 В
Температура, ℃
воздуха при работе -30...75
хранения -45...90
Размеры 25 х 25 мм

Индикация

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


Быстрое мигание светодиода говорит о поиске в эфире сигнала станции мобильной связи.

Подключение

Названия некоторых контактов и функции сигналов, линий.

Для улучшения качества сигнала подсоединяется антенна. Превышение входного напряжения интерфейса UART приведет к порче модуля SIM800. Не существует преобразователя интерфейса USB-UART c выходным напряжением 2,8 В. Существующие преобразователи имеют более высокое напряжение на выходе UART. Поэтому между выходом преобразователя и входом модуля GSM GPRS SIM800 устанавливается резисторный делитель напряжения.

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

Первые шаги

Для проверки работоспособности устройства достаточно иметь ПК и симкарту с небольшим денежным счетом. Проверку работоспособности можно проводить по двум методам подключения модуля к ПК: через преобразователь интерфейсов USB-UART или используя Arduino UNO. Рассмотрим метод проверки без Arduino. Установите симкарту в модуль GSM GPRS, соблюдая расположение контактов. Соедините ПК через преобразователь интерфейсов USB-UART с устройством по схеме приведенной выше. Подключите питание номинальным напряжением. Дождитесь ориентируясь на мигание светодиода подключения к мобильному оператору. Включите на ПК терминальную программу. Данные в нее следует вводить большими буквами. Используя терминальную программу отправьте в модуль GSM GPRS SIM800 через порт подключения следующие команды.

АТ
Ответ модуля ОК

AT+CSQ
Ответ модуля +CSQ: 18,0 OK

Эта команда дает информацию о уровне сигнала. Первое число - уровень сигнала, величина 18 означает -78 dbм. Второе число - количество ошибочно принятых бит, величина “0” говорит о доле ошибок менее 0,2 %, что свидетельствует о хорошей связи.


Попробуйте отправить в модуль команду ATI.

Если у вас нет преобразователя USB-UART, то можно использовать Arduino UNO. Соедините контакт RX модуля SIM800L с контактом 11 цифрового сигнала Arduino UNO применяя резисторный делитель напряжения. Величины сопротивлений резисторов нужно вычислить заново учитывая напряжение питания Arduino UNO. Соедините контакт TX модуля SIM800L с контактом 10 цифрового сигнала Arduino UNO. Загрузите в ардуино программу, текст которой приведен далее. Здесь используется библиотека SoftwareSerial позволяющая реализовать последовательный интерфейс на любых цифровых выводах Ардуино с помощью программных средств, дублирующих функциональность UART.

#include
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
mySerial.begin(9600);
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
{
while(Serial.available())
{
mySerial.write(Serial.read());
}
mySerial.println();
}
}

Текст программы и много полезной информации . Теперь вы можете отправлять AT команды через последовательный монитор Arduino.

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

В продолжение темы:
Ошибки

В Российской Федерации при формировании бухгалтерской отчетности в электронном виде действует Приказ ФНС России от 20.03.2017 N ММВ-7-6/228 "Об утверждении рекомендуемых...

Новые статьи
/
Популярные