Interfacing sim800l with arduino

Отладочные средства

Разработчики могут протестировать работу модулей SIM800x в соответствии с приведенными в настоящей статье примерами, используя специализированные отладочные комплекты производства компании SIMCom Wireless Solutions.

Отладочный комплект состоит из двух основных компонентов: многофункциональной материнской платы и мезонинной платы, на которой распаян тот или иной модуль. На рис. 3 представлен модуль SIM800C на мезонинной плате, устанавливаемый на общую для всей линейки модулей материнскую плату. Каждый из указанных компонентов отладочного комплекта можно приобрести отдельно.

Рис. 3. Отладочный комплект для работы с модулями 800-й серии

Те, у кого остались отладочные платы для модулей 900-й серии (версий SIM900-EVB_V2.01 и позже), могут использовать их для работы со всеми модулями 800-й серии, приобретая последние в исполнении на переходном мезонине — SIM800x-TE.

Исключением из этого унифицированного отладочного комплекса является анонсированный летом 2016 г. еще один модуль этой линейки — SIM868, миниатюрный беспроводной четырехдиапазонный комбо-модуль в корпусе LCC/LGA, поддерживающий обмен данными и работу в сетях сотовой связи стандартов GSM/GPRS (2G) и прием сигналов со спутников GPS/ГЛОНАСС (GNSS).

Рис. 4. Комбо-модуль SIM868

Отличительные особенности SIM868 — это высокая чувствительность ВЧ-тракта и поддержка различных дополнительных возможностей, таких как детектирование/генерация DTMF, запись/воспроизведение аудиофайлов, встроенные протоколы POP3, SMTP, MMS, FTP, HTTP, SSL и др. Поддерживается GPRS multi-slot class 12 (↨85,6 кбит/с). В качестве дополнительных возможностей в модуле предусмотрена поддержка Bluetooth 3.0 или одновременная работа двух SIM-карт (Dual Standby).

В модуле присутствуют интерфейсы 2×UART (GSM/GPRS)+1×UART(GNSS), USB, GPIO, ADC, SD, I2C, RTC, аналоговые аудиоинтерфейсы. Габариты устройства 15,7×17,6×2,3 мм; напряжение питания 3,4–4,4 В; диапазон рабочих температур –40…+85 °C.

Работа с этим модулем требует использования специализированной отладочной платы.

Наличие, состав и стоимость отладочных комплектов можно уточнить, отправив запрос в техническую поддержку по беспроводным решениям (wireless@mt-system.ru). Обновленные версии встроенного ПО модулей и подробная инструкция по их обновлению также предоставляются пользователям по отдельному запросу.

* * *

Компания SIMCom Wireless Solutions предлагает разработчикам и пользователям функционально полную линейку 2G-модулей, позволяющую решать довольно широкий спектр задач по созданию оборудования, использующего для передачи данных и осуществления вызовов возможности сетей сотовой связи. При этом встроенный на уровне чипсета функционал Bluetooth уже не выглядит экзотикой, речь, скорее, о новых реалиях, с учетом которых теперь следует воспринимать модули этого класса, решая самый разнообразный круг прикладных задач с их использованием. При этом реализация Bluetooth в текущих и перспективных решениях не представляет собой сколь-нибудь сложной задачи.

Usage

Initiate the driver and the module

First, you have to initiate the driver by telling him the serial link and the RESET pin. The next two parameters defined the size of the internal buffer and the size of the reception buffer.
The size of the reception buffer is depending on the data you will receive from the web service/API. If the buffer is too small, you will receive only the first 512 bytes in the examples below. The driver has a buffer overflow protection.

To initiate with a SoftwareSerial link (on pin TX_PIN and RX_PIN):

To initiate with a hardware serial link (Serial1):

Setup and check all aspects for the connectivity

Then, you have to initiate the basis for a GPRS connectivity.

The module has to be initalized and accept AT commands. You can test it and wait the module to be ready.

The GSM signal should be up. You can test the signed strenght and wait for a signal greater than 0.

The module has to be registered on the network. You can obtain the registration status through a specific command and wait for a REGISTERED_HOME or REGISTERED_ROAMING depending on your operator and location.

Connecting GPRS

Before making any connection, you have to open the GPRS connection. It can be done easily. When the GPRS connectivity is UP, the LED is blinking fast on the SIM800L module.

HTTP communication GET

or

If the method returns 200 (HTTP status code for OK), you can obtain the size of the data received.

And you can obtain the data received through a char array.

HTTP communication POST

The arguments of the method are:

  • The URL ()
  • (optional) Headers («Header-1:value1\r\nHeader-2:value2»)
  • The content type (application/json)
  • The content to POST ({«name»: «morpheus», «job»: «leader»})
  • The write timeout while writing data to the server (10000 ms)
  • The read timeout while reading data from the server (10000 ms)

or with headers

If the method returns 200 (HTTP status code for OK), you can obtain the size of the data received.

And you can obtain the data recieved through a char array.

Arduino Code – Reading SMS

Now let’s program our Arduino to read incoming messages. This sketch is very useful when you need to trigger an action when a specific SMS is received. For example, when the Arduino receives an SMS, you can instruct it to turn on or off a relay. You got the idea!

The sketch is similar as earlier except below code snippet. Once the connection is established, we send below AT commands:

AT+CMGF=1 – Selects SMS message format as text. Default format is Protocol Data Unit (PDU)

AT+CNMI=1,2,0,0,0 – specifies how newly arrived SMS messages should be handled. This way you can tell the SIM800L module either to forward newly arrived SMS messages directly to the PC, or to save them in message storage and then notify the PC about their locations in message storage.

Its response starts with +CMT: All the fields in the response are comma-separated with first field being phone number. The second field is the name of person sending SMS. Third field is a timestamp while forth field is the actual message.

Note that this time we have NOT kept the loop function empty as we are polling for newly arrived SMS messages. Once you send the SMS to SIM800L GSM module, you will see below output on serial monitor.

Expanding Arduino SoftwareSerial Buffer Size

If your message is long enough just like ours, then you’ll probably receive it with some missing characters. This is not because of a faulty code. Your SoftwareSerial receive buffer is getting filled up and discarding characters. You are not reading fast enough from the buffer.

The simplest solution to this is to increase the size of the SoftwareSerial buffer from its default size of 64 bytes to 256 bytes (or smaller, depending on what works for you).

On a Windows PC, go to C:\Program Files (x86) -> Arduino -> hardware -> Arduino -> avr -> libraries -> SoftwareSerial (-> src for newer version of Arduino IDE) Open SoftwareSerial.h and change the line:

to

Save the file and try your sketch again.


Expanding Arduino SoftwareSerial Buffer Size

Скетчи для работы с модулем 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 <GSM.h>

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

#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-соединения  на модуле начнет мигать светодиод.

Типовые схемы

Рассмотрим примеры подключения указанных модулей к контроллерам Arduino.

Принцип дальнейших действий во всех случаях общий: GPRS модуль сопрягается с материнской платой главного контроллера. Для правильного выполнения подключения следует изучить инструкцию к используемой модели Arduino, выяснить распиновку на ней и на компоненте сотовой связи. Далее на собранную систему заводится питание. Когда устройство включено, его переходником USB-UART подключают к ПК и создают программу в среде Arduino IDE или другом удобном пакете ПО разработчика.

Рассмотрим несколько примеров сборки аппаратной части.

Arduino Uno и контроллер SIM800L

Поскольку напряжение SIM800L невелико, понадобится преобразователь.

Изучим распиновку устройства:

Последовательность действий:

  • подключаем плату UТO к компьютеру;
  • к ней подводится питание 12 В через конвертер;
  • минус источника выводится на контакт GND Ардуино, а GND — на контакт минуса конвертера;
  • плюс ИП идет к плюсу преобразователя;
  • плюс конвертера — к плюсу блока GSM;
  • минус с «земли» преобразователя на GND сотового блока;
  • RXT и TXD блока на 2, 3 пины микроконтроллера UNO соответственно.

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

UNO и A6

Здесь напряжение питания стандартное, и конвертер в схему не включается. Платы соединяются напрямую.

Общая схема распиновки:

Принцип соединения контактов:

  • UART_RXD выводится на TX 1 UNO;
  • UART_TXD — на RX 0;
  • GND соединяется с GND на GSM-блоке;
  • пин электропитания VCC0 c кнопкой включения PWR-KEY.

Шилд GSM SIM900 и контроллер Arduino Mega

Пиковая сила тока при активации устройства может достигать 2 А, в связи с чем напрямую питание подключать нежелательно. Перед соединением плат нужно поставить SIM-карту в предназначенный для нее слот и установить TX и RX джамперы:

Последовательность дальнейших действий:

  • желтый провод (TX) объединяется с TX Arduino;
  • зеленым соединяются контакты RX;
  • GND выводится на «землю» микроконтроллера.

Проверить собранный гаджет можно следующим экспериментом:

  • соединить GND и RESET главного микроконтроллера;
  • вставить в разъем сим-карту;
  • подать питание на модуль GSM;
  • подключить центральную плату Arduino к ПК через порт USB, нажать кнопку ON;
  • Если все собрано верно, красный светодиод загорится, а зеленый станет мигать.

Инициализация

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

AT
ATE0
AT+GSMBUSY=0
AT+CPAS
AT+CREG?
AT+CSQ
AT+CBC
AT+CUSD=1,»*111#»

Разберем назначение каждой команды:

  • AT – проверяем готовность модуля в приему команд.
  • ATE0 – отключаем режим ЭХО.
  • AT+GSMBUSY=0 – запрещаем входящие звонки.
  • AT+CPAS – проверяем готовностью и текущее состояние модуля.
  • AT+CREG? – проверка регистрации в сети.
  • AT+CSQ – проверка уровня сигнала.
  • AT+CBC – проверяем питание.
  • AT+CUSD=1,»*111#» – проверяем баланс SIM-карты.

Каждую команду необходимо проверять на наличие положительного ответа «ОК», в противном случае нужно заново отправить команду и дождаться нужного ответа. Как правило, при первом включении команда AT+CPAS с первого раза не дает ответ «ОК», обычно готовность появляется после 2-3 попыток.

На Рисунке 5 показан процесс выполнения подпрограммы init_GSM.

Рисунок 5. Процесс выполнения подпрограммы init_GSM.

На Листинге 1 показан пример обработки команды AT+CPAS.

Листинг 1. Программа обработки команды AT+CPAS.

Во время ответа от модуля в cycle_for() происходит сравнение и установка значения в bit_ok. Если значение равняется 1, то модуль вернул «ОК», при ответе 2 – модуль возвращает «Error». Если положительно ответа нет, то через 1 секунду повторяем отправку i раз.

Easy Scan

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

Модуль SIM900 с программным обеспечением All-In-One позволяет производить сканирование РЭО и предоставлять информацию о наличии сети того или иного оператора. При этом для сканирования сети не требуется, чтобы к модулю SIM900 была подключена SIM-карта. Используя сканирование, GSM-устройство при включении сможет оценить, к сети какого оператора необходимо подключиться в первую очередь, выбрав ту, у которой уровень сигнала на данный момент будет максимальным. Так время регистрации в сети с последующей передачей тревожного сигнала будет сведено к минимуму.

Данная функция реализована в виде простой АТ-команды:

AT+CNETSCAN // Запустить сканирование
------MOST SUITABLE CELL------
Operator:"Beeline",MCC:250,MNC:99,Rxlev:58,Cellid:43dc,Arfcn:0608
Operator:"Beeline",MCC:250,MNC:99,Rxlev:32,Cellid:43dd,Arfcn:0593
Operator:"Beeline",MCC:250,MNC:99,Rxlev:45,Cellid:43db,Arfcn:0639
Operator:"Beeline",MCC:250,MNC:99,Rxlev:39,Cellid:4351,Arfcn:0634
Operator:"Beeline",MCC:250,MNC:99,Rxlev:37,Cellid:ffff,Arfcn:0596
Operator:"Beeline",MCC:250,MNC:99,Rxlev:25,Cellid:43f0,Arfcn:0645
Operator:"Beeline",MCC:250,MNC:99,Rxlev:25,Cellid:42b0,Arfcn:0648
Operator:"Beeline",MCC:250,MNC:99,Rxlev:21,Cellid:ffff,Arfcn:0632
Operator:"Beeline",MCC:250,MNC:99,Rxlev:40,Cellid:4353,Arfcn:0086
Operator:"Beeline",MCC:250,MNC:99,Rxlev:38,Cellid:4355,Arfcn:0070
Operator:"Beeline",MCC:250,MNC:99,Rxlev:31,Cellid:ffff,Arfcn:0080
Operator:"Beeline",MCC:250,MNC:99,Rxlev:24,Cellid:434a,Arfcn:0069
------OTHER SUITABLE CELL------
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:29,Cellid:3d62,Arfcn:0775
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:42,Cellid:ffff,Arfcn:0768
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:45,Cellid:3d5f,Arfcn:0049
Operator:"MegaFon RUS",MCC:250,MNC:2,Rxlev:39,Cellid:18cc,Arfcn:0106
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:36,Cellid:05cb,Arfcn:0056
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:36,Cellid:ffff,Arfcn:1018
Operator:"MegaFon RUS",MCC:250,MNC:2,Rxlev:34,Cellid:4713,Arfcn:0123
Operator:"MegaFon RUS",MCC:250,MNC:2,Rxlev:33,Cellid:3385,Arfcn:0012
Operator:"MegaFon RUS",MCC:250,MNC:2,Rxlev:32,Cellid:ffff,Arfcn:0023
Operator:"MegaFon RUS",MCC:250,MNC:2,Rxlev:31,Cellid:46f3,Arfcn:0100
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:29,Cellid:ffff,Arfcn:0028
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:34,Cellid:ffff,Arfcn:0027
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:28,Cellid:4ba2,Arfcn:0053
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:28,Cellid:ffff,Arfcn:1016
Operator:"MegaFon RUS",MCC:250,MNC:2,Rxlev:28,Cellid:ffff,Arfcn:0006
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:28,Cellid:2b19,Arfcn:0032
Operator:"MegaFon RUS",MCC:250,MNC:2,Rxlev:26,Cellid:4712,Arfcn:0102
Operator:"MTS-RUS",MCC:250,MNC:1,Rxlev:26,Cellid:ffff,Arfcn:0030
OK

Программное обеспечение All-In-One является значительным шагом навстречу разработчикам GSM-оборудования и позволяет быстро и без лишних затрат реализовать действительно интересный функционал, который, в свою очередь, повысит конкурентоспособность конечного устройства на рынке.

Разработчики GSM-оборудования могут ознакомиться с новыми функциями модуля SIM900 на отладочном комплекте SIM900EVB KIT + SIM900TE (рис. 5).

Рис. 5. Отладочное средство для GSM модуля SIM900

Если модуль SIM900 (парт-номер, начинающийся на S2-1040S-) уже есть в наличии, его можно перепрограммировать и протестировать в рамках существующего дизайна устройства. Программное обеспечение с функциями All-In-One можно получить по запросу в службе технической поддержки компании «МТ-Систем», официального дистрибьютора SIMCom в России .

What is SIM800L?

      This is the GSM module similar to the one which is on your phone. And I can assume that every one of you knows the application of GSM module. Speaking of SIM800L module, it is a small chip that uses serial-communication to communicate with any microcontroller or microprocessor. It has an in-built onboard antenna and an onboard SIM slot for SIM insertion purposes. The SIM800L module has 12 total pins that are used to establish connections with the microcontroller. For your simplicity, here I have shared a detailed pinout of the SIM800L and a function of each pin. 

Sim800L PinOut:

 Ring

DTR

We can call this pin an enable pin. This pin plays an important role in saving electricity. If you make this pin high, the module enters sleep mode by disabling serial communication and if you make it low, the module turns on. In the case, if SIM800L is not working, it may be the reason that you are accidentally making this pin high. 

Mic+, Mic-, SPK+ & SPK- 

These are the pins where you can connect the microphone and speaker.

NET

Here you can attach that helical shape antenna. 

RST 

This pin is used to reset the sim800l module. If your module is not responding to the AT command, possibly due to a baud rate problem, you can make this pin high for 100ms to reset the SIM800L. 

VCC and GND  

You can power SIM800l using these pins but the voltage should not be more than 3.3V and Current should not be less than 1A. 

RX and TX

These pins are used for Serial communication Rx for receiving commands from the controller and Tx for sending out the data. This was the introduction part of Sim800L Module if you want to know more about this you can mail us at . Next, we are going to learn about setting the baud rate, Network Scan, Sending and receiving SMS and Answering and Dialling the call. 

Считываем данные с сервера в Arduino

После завершения процесс отладки записи статуса вкл/выкл насоса в файл pomidor.txt можно считывать данные в Arduino. Напишем функцию чтения данных с сервера (Листинг 7).

Листинг 7. Функция чтения данных с сервера.

В строке adress_site указываем адрес своего сайта форматом http://site.ru/. В строке adress_txt указываем путь к txt файлу.

Прочитаем статус вкл/выкл насоса из файла txt/pomidor.txt, отобразим значение на терминале и на выводе D5 платы Arduino (Листинг 8).

Листинг 8. Программа формирования логического уровня вывода D5 в зависимости от статуса насоса.

Пример отображения при нажатии кнопки включении насоса показан на Рисунке 12.

Рисунок 12. Пример отображения при нажатии кнопки «Вкл» насоса.

Возможно, вам также будет интересно

В статье кратко рассмотрены беспроводные модемы литовской фирмы Teltonika, использующие помимо всем привычной технологии передачи данных GSM/GPRS относительно новый стандарт EDGE.

Авторы статьи предлагают ответ на вопрос, как быстро и с минимальными трудозатратами произвести переход на более совершенную и бюджетную серию 2G-модулей — SIM800, а именно SIM800/SIM800F/SIM800C, предлагаемую дистрибьютором МТ-Систем в качестве фокусной замены модемов SIM900R. Материал будет полезен специалистам, следящим за тенденциями рынка беспроводных технологий для M2M-решений, разработчи…

Компания Silicon Labs анонсировала новое поколение беспроводных мультипротокольных микроконтроллеров EFR32BG22, реализующих стандарты Bluetooth 5.2 и Bluetooth mesh.
EFR32BG22 поддерживают новые возможности стандарта Bluetooth 5.2, включая динамический контроль излучаемой мощности и функции определения местоположения Angle of Arrival и Angle of Departure.
Микросхемы EFR32BG22 отличаются …

Подключение внешего источника питания к ESP32 и SIM800

Как подключить внешний мощный источник питания 5V к ESP32, чтобы запитать SIM800, потребляющий до 2A в пике? Рассмотрим, сделано ли что-то схематике ESP32/ESP8266, чтобы не сжечь USB порт ПК при подключении внешнего источника питания.

На схеме от производителя виден диод Шоттки BAT-760 в цепи питания +5V. Этот диод присутствует не на всех платах, поэтому прежде чем подключить USB от ПК к плате запитанной от внешнего источника +5V нужно убедится, что на плате диод распаян. Даже если нет схемы платы, то проверить несложно. Черный планарный диод относительно большого размера хорошо выделяется на плате. Катод диода идет на PIN +5V, а анод на вывод +5V питания USB разъема. Если диода нет, то его нужно добавить в схему питания.

Отправка 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 не позволяет отправить этот код, так что только программно.

Минимальный код EAT

Рассмотрим пример минимального пользовательского Си-кода:

{

            EatEvent_st event;

            while(1)

            {

                        eat_get_event(&event);

                        switch(event.event)

                        {

                                   ...

                        }

            }

}

Здесь app_main — это точка входа, с которой начинается пользовательская программа, а eat_get_event — интерфейс для получения событий от ядра ПО модуля. Пользовательский код выполняется в цикле while и должен вызывать API-функции, параллельно отслеживая события, которые посылает ядро.

Обычно программисту приходится работать с платой, на которой отдельно стоят GSM-модуль и микроконтроллер (MCU), управляющий GSM-модулем при помощи АТ-команд . А в случае с EAT у него возникнет вопрос, как слать GSM-модулю команды и как обрабатывать его ответы. На рис. 3 показан пример, поясняющий, как это можно реализовать в EAT по аналогии с классической архитектурой (раздельный MCU и GSM-модуль).

Рис. 3. Принцип работы классической архитектуры (слева) и EAT (справа)

Видно, что пользовательское ПО по отношению к ядру EAT следует рассматривать как ПО внешнего MCU. Все, что изменится при миграции ПО из внешнего MCU в GSM-модуль, — это синтаксис обращения к ядру EAT и интерпретация результатов. Для пояснения принципа обработки АТ-команды ядром приведен пример простейшего кода:

void app_main(void)

{

            …

            Eat_modem_write(“AT+CSQ\r”,strlen(“AT+CSQ\r”)); // Шлем АТ-команду

            while(TRUE)

            {

                        eat_get_event(&event);

                        switch (event.event)

                        {

                                   case EAT_EVENT_MDM_READY_RD: // При получении ответа от модуля получим индикатор события EAT_EVENT_MDM_READY_RD

                                   {

                                               Progress(); // обрабатываем ответ модуля

                                   }

                                   case …

                        }

            }

}

Обработка исключительных случаев

Все команды GSM/GPRS-модулей серии SIM800 имеют время исполнения

Разработчику ПО хоста важно знать время исполнения отдельно для каждой команды, чтобы исключить бесконечное ожидание реакции на команду (открытие соединения, к примеру). Значения максимального времени исполнения задокументированы, их можно найти в системе команд GSM/GPRS-модуля

В таблице 2 указаны значения максимального времени исполнения основных команд встроенного TCP/IP-стека. Как видно, некоторые команды исполняются десятки секунд. Это объясняется зависимостью этих команд от быстродействия сети и сервера.

Таблица 2. Максимальное время исполнения команд встроенного стека TCP/IP

Команда

Максимальное время исполнения, с

CIICR

85

CIPSTART

160

CIPSEND

645

CIPCLOSE

120

CIPSHUT

65

Рис. 6. Нормальная процедура закрытия соединения с сервером

Получается, некоторые команды могут исполняться несколько минут, прежде чем можно будет понять, что что-то пошло не так. В М2М такие задержки, конечно, недопустимы. Как же обрабатывать случаи, когда время исполнения команды затянулось, а реакции так и не последовало? Все зависит от того, на каком этапе установления соединения произошел сбой (ошибка или вышел таймаут) и в каком состоянии находится стек (рис. 6). Причин сбоя может быть несколько, и реакция может быть разная, но главное вернуть встроенный стек в исходное состояние IP INITIAL или IP STATUS. Рассмотрим на примере несколько случаев:

  1. Сервер вышел из строя или доступ в Интернет ограничен (потеря пакетов, высокий пинг и проч.). В этом случае все команды из таблицы 1 приведут к длительному времени исполнения. Чтобы повторить попытку соединения с этим или другим сервером, следует перед этим закрыть сокет командой AT+CIPCLOSE=1. При этом деактивировать контекст командой AT+CIPSHUT не обязательно.
  2. Потеря связи с GSM-сетью. Такое возможно в местах плохого покрытия сети, из-за ухудшения условий приема сигнала или внезапной выемки SIM-карты из прибора. Здесь следует проверить готовность SIM-карты (AT+CPIN? или чтение ячейки памяти командой AT+CMGR), уровень сигнала (AT+CSQ), наличие регистрации в сети (AT+CREG?) и доступ к услугам GPRS (AT+CGATT?). Если физический доступ к GSM-сети пропадет после или во время открытия сессии командой AT+CIPSTART, то придется закрыть соединение (AT+CIPCLOSE=1), деактивировать контекст и восстанавливать соединение с начала, сразу после того как будут успешно проверены SIM-карта, уровень сигнала, регистрация в сети и доступ к услугам GPRS.
  3. Истек срок жизни контекста. Когда открывается контекст, сеть выделяет определенные ресурсы на его поддержание. Операторы сотовой связи не допускают мертвые контексты, когда ресурс занят, а обмена данными в этом контексте нет. Если обмена данных нет, то через некоторое время оператор деактивирует контекст. У разных операторов это время разное примерно от трех до семи минут. Модуль при этом в порт UART выдаст уведомление: +PDP DEACT. Его нужно обработать и сбросить встроенный стек в исходное состояние командой CIPSHUT. Однако иногда в некоторых приложениях требуется поддерживать контекст в активном состоянии. Для этого можно периодически обмениваться с сервером пустыми данными, типа эха. Но это неудобно в реализации. Взамен можно воспользоваться функцией поддержания соединения командой AT+CIPTKA .
  4. Нагрузка на сеть GSM. Всем известно, что GPRS-услуги и голосовая связь делят общие ресурсы. GPRS всегда выделяется оператором по остаточному принципу, а у голосовых соединений наивысший приоритет. Контекст может быть деактивирован оператором принудительно. Внешне данный случай выглядит как предыдущий (п. 3), и обрабатывать его следует аналогично.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector