Ранее мыс Вами уже начали разбирать вопрос передачи данных посредством GSM связи с применением одноплатника Repka Pi и в предыдущей статье рассказали, как с помощью модуля GSM/GPRS/GNSS Bluetooth HAT, созданного на базе SIM868, библиотек SIM800L, RoverConnect и Telemetry можно обмениваться данными между микрокомпьютером Repka Pi с JSON-сервисом, доступным в интернете.

Мы привели исходные коды программ на Python, которые можно использовать для такого обмена. Однако за пределами изложения остался рассказ о том, как происходит работа с модулем на уровне AT-команд.

Такая информация нужна для более глубокого понимания принципов работы SIM800 и SIM868 при передаче данных через GPRS (General Packet Radio Service). Она может пригодиться при отладке программ передачи данных, составленных с использованием других библиотек и языков программирования. Также же сведения об AT-командах GPRS потребуются, если вы собираетесь создать свою собственную библиотеку передачи данных в сетях мобильных операторов.

Собираем стенд для работы

Установка и запуск терминала minicom

Документация по AT-командам модуля

Получаем информацию с помощью AT-команд

Инициализация модуля SIM868

Обмен данными через GPRS

Полезные ссылки

Итоги

Собираем стенд для работы

Для изучения AT-команд модуля GSM/GPRS/GNSS Bluetooth HAT соберем простой стенд, подключив этот модуль непосредственно к разъему GPIO микрокомпьютера Repka Pi как «шляпу» (рис. 1). Такой стенд уже был описан ранее в предыдущей статье.

Рис. 1. Подключение GSM/GPRS/GNSS Bluetooth HAT к Repka Pi через GPIO.
Рис. 1. Подключение GSM/GPRS/GNSS Bluetooth HAT к Repka Pi через GPIO.

Не забудьте перед подключением установить перемычки желтого цвета на пины B, а также вставить SIM-карту мобильного оператора.

После подключения и загрузки Repka OS отключите вывод сообщений на UART0 с помощью программы repka-config. Для этого запустите repka-config, и, когда появится окно с текущей максимальной частотой процессора, щелкните в нем кнопку Ok. Далее в меню настраиваемых опций выберите Включить / отключить вывод сообщений на UART0. После этого отключите вывод сообщений (рис. 2).

Рис. 2. Отключение вывода сообщений на UART0.
Рис. 2. Отключение вывода сообщений на UART0.

При выходе  из программы repka-config перезагрузите Repka OS. Когда Repka OS перезагрузится, включите питание модуля кнопкой PWRKEY, нажав ее примерно на одну секунду. После этого на плате модуля GSM/GPRS/GNSS Bluetooth HAT должны замигать светодиоды красного цвета.

Мы предполагаем, что вас есть доступ к консоли Repka OS, установленной на Repka Pi, через сеть или через оконный интерфейс Repka OS. В наших примерах мы будем использовать доступ к консоли через терминал SSH.

Установка и запуск терминала minicom

Прежде всего, установите программу терминала minicom в Repka OS следующей командой:

# apt install minicom

После установки запустите терминал, подключив его к устройству /dev/ttyS0, которое подключено к модулю GSM/GPRS/GNSS Bluetooth HAT:

minicom -D /dev/ttyS0

После запуска в окне терминальной программы появится сообщение об успешном подключении (рис. 3).

Рис. 3. Сообщение об успешном подключении к модулю через UART0.
Рис. 3. Сообщение об успешном подключении к модулю через UART0.

Введите здесь команду at и нажмите клавишу Enter (можно ввести и как AT). В окне терминала должен появиться ответ OK:

at
OK

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

NORMAL POWER DOWN

Можно опять включить питание модуля и через некоторое время продолжить работу с AT-командами.

В нашей статье мы будем выводить на экран данные JSON. Чтобы вывод был компактнее, включите автоматическое добавление символа перевода каретки CR после символа перевода строки LF. Для этого щелкните комбинацию клавиш Ctrl+A и клавишу Z, а затем нажмите клавишу U.

Второй способ позволяет сохранить эту настройку навсегда. Запустите программу minicom -s с правами пользователя root, выберите Экран и клавиатура, затем нажмите TAdd carriage return. После этого сохраните настройки, выбрав строку Сохранить настройки как dfl.

Для завершения работы с minicom нажмите комбинацию клавиш Ctrl+A, а затем клавишу X. Выберите в меню Покинуть Minicom? строку Да.

Документация по AT-командам модуля

Самая полная и подробная документация по AT-командам SIM868, на базе которого сделан модуль GSM/GPRS/GNSS Bluetooth HAT, приведена на сайте SIMCom (рис. 4).

Рис. 4. Сайт компании SIMCom.
Рис. 4. Сайт компании SIMCom.

Зарегистрируйтесь здесь, щелкнув ссылку Login. После регистрации вам станет доступной загрузка многочисленных файлов PDF с описаниями SIM868 и SIM800 (рис. 5).

Рис. 5. Список документации на сайте SIMCom.
Рис. 5. Список документации на сайте SIMCom.

В наших статьях, посвященных использованию AT-команд для модуля SIM868 и SIM800 мы будем ссылаться на эти файлы. Например, в файле SIM800 Series_AT Command Manual_V1.12.pdf находится руководство SIM800 Series_ AT Command Manual с описанием команд, имеющих отношение к GPRS.

Получаем информацию с помощью AT-команд

Прежде всего мы попробуем получить с помощью AT-команд информацию о состоянии модуля GSM/GPRS/GNSS Bluetooth HAT, которую собирала программа get-telemetry.py с помощью библиотек SIM800L, RoverConnect и Telemetry из предыдущей статьи про этот модуль.

Напомним, что в библиотеке  Telemetry определена функция get_telemetry_data, показанная ниже в сокращенном виде:

def get_telemetry_data(self):
    telemetry_data = {
        "Flash ID": self.rover.get_flash_id(),
        "Hw revision": self.rover.get_hw_revision(),
        "Date": self.rover.get_date().strftime('%Y-%m-%d %H:%M:%S'),
        "Operator": self.rover.get_operator(),
        "Service provider": self.rover.get_service_provider(),
        "Signal strength": f"{self.rover.get_signal_strength()}%",
        "Temperature": f"{self.rover.get_temperature()} degrees",
        "MSISDN": self.rover.get_msisdn(),
        "Battery Voltage": f"{self.rover.get_battery_voltage()} V",
        "IMSI": self.rover.get_imsi(),
        "ICCID": self.rover.get_ccid(),
        "Unit Name": self.rover.get_unit_name(),
        "Balance": f"{self.rover.getMtsBalance()} rub.",
        "SIM is registered": self.rover.is_registered()
    }
…

Все приведенные выше запросы параметров модуля выполнялись при помощи вызова функций модуля SIM800L. Для получения других параметров телеметрии  вызывались функции RoverConnect.

Давайте для примера рассмотрим функцию get_hw_revision библиотеки SIM800L, которая позволяет определить версию (ревизию) аппаратного обеспечения модуля:

def get_hw_revision(self, method=0):
    if method == 2:
          return self.command_data_ok('AT+GMR')
    firmware = self.command_data_ok('AT+CGMR')
    if not firmware:
       return None
    if method == 1:
           logging.info("Firmware version: R%s.%s",
                firmware[9:11], firmware[11:13])
           logging.info("Device: %s", firmware[16:23])
           logging.info("Rel: %s", firmware[13:16])
           logging.info("Hardware Model type: %s", firmware[23:])
      return firmware

Как видите, эта функция может использовать два метода получения версии, одна из которых выдает команду AT+GMR, а вторая — команду AT+CGMR.

Если попробовать ввести эти команды в окне терминальной программы minicom, то мы увидим, что обе они возвращают одинаковые строки (рис. 6).

Рис. 6. Получение версии аппаратного обеспечения модуля.
Рис. 6. Получение версии аппаратного обеспечения модуля.

Но почему предусмотрено две команды?

Команда AT+GMR входит в стандарт V.25ter, устанавливающий процедуры и параметры для управления модемами в аналоговых телекоммуникационных системах.

Что же касается команды  AT+CGMR, она входит в стандарт (спецификацию) 3GPP TS 27.007, разработанную 3rd Generation Partnership Project (3GPP), который применяется для мобильных сетей, таких как GSM (2G), UMTS (3G), и других.

Модуль SIM868 поддерживает оба этих стандарта.

Если вам нужно узнать, доступна та или иная команда, введите ее в окне терминальной программы с добавлением строки «=?» (рис. 7).

Рис. 7. Проверка доступности команды.
Рис. 7. Проверка доступности команды.

Строка OK означает, что команда доступна. Если же появилась строка ERROR, то или команда недоступна, или сделана попытка вызвать команду из неправильного контекста.

Теперь, когда вы познакомились с тем, как вводить команды и проверять их доступность, расскажем о некоторых полезных AT-командах.

Сведения о модуле SIM868 и SIM-карте

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

Заметим, что серийные номера SIM-карт ICCID, а также идентификаторы мобильного абонента IMSI можно рассматривать как личную информацию, которую не следует раскрывать без необходимости.

Описание модуля и примеры тестирования AT-команд можно загрузить с сайта компании Waveshare Electronics.

Дата и время с часовым поясом

В модуле SIM868 имеются часы. С помощью AT-команд можно получать и устанавливать дату и время.

Команда AT+CCLK? возвращает текущую дату и время в виде текстовой строки формата "YY/MM/DD,HH:MM:SS±ZZ", например, "23/11/27,14:49:05+03".

Здесь YY/MM/DD задают год, месяц и день, соответственно.  Часы, минуты и секунды определяются в формате HH:MM:SS.

Что касается ±ZZ, то эта часть строки задает часовой пояс. Для Москвы, например, это +03.

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

AT+CCLK="23/11/27,14:49:00+03"

Модуль GSM/GPRS/GNSS Bluetooth HAT предусматривает установку литий-ионной батарейки CR1220 для питания часов. Если этой батарейки нет, то придется устанавливать дату, время и часовой пояс каждый раз при включении модуля.

Напряжение питания модуля

Команда AT+CBC возвращает информацию о напряжении питания модуля SIM868 в виде текстовой строки, содержащий три числа, разделенных запятой, например: 0,72,3983.

Первое из этих чисел может иметь значение 0 или 1. В первом случае питающая батарея не заряжается, во втором — заряжается. Надо сказать, что при внешнем питании модуля GSM/GPRS/GNSS Bluetooth HAT это значение можно игнорировать.

Второе число сообщает процент зарядки батареи, и оно также вам не потребуется при питании модуля от внешнего источника или от Repka Pi.

Что касается третьего числа, то оно показывает напряжение питания на SIM868 в мВ.

Модуль SIM868 и другие модули серии SIM800 рассчитаны на питание напряжением 4 В, при этом потребляемый ток может в пике достигать 2 А. Обратите внимание на потребляемый ток — если блок питания не обеспечит как минимум 2 А для SIM868 и еще почти столько же для Repka Pi, связь через GPRS может быть ненадежной.

В составе модуля GSM/GPRS/GNSS Bluetooth HAT и SIM800L EVB уже имеются схемы, позволяющие подавать внешнее питание напряжением 5 В. Если же у вас такой модуль, в которых этих схем нет, рекомендуется понижать напряжение питания до 4 В с помощью диода 1N4007 и дополнительно устанавливать после него конденсатор емкостью 100-2000 мкФ.

Правильные способы подключения питания к SIM868 описаны в документе SIM868_Series_Hardware_Design_V1.07, который можно скачать на сайте SIMCom.

Температура модуля

Команда CMTE позволяет устанавливать режим работы при критической температуре или определить температуру модуля:

AT+CMTE?
+CMTE: 0,26.06

Анализируя первый параметр, можно узнать, включено или нет определение температуры:

  • 0 — отключено;

  • 1 — включено

Через второй параметр возвращается значение температуры в диапазоне от -40⁰ to 90⁰.

Включить определение температуры можно так:

AT+CMTE=1

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

Надо сказать, что команда AT+CMTE была добавлена в версии 1.01 документа SIM800 Series_ AT Command Manual, а начиная с версии 1.10 удалена. Вы можете найти описание этой команды, например, в руководстве версии 1.09.

Проверить, поддерживается ли команда AT+CMTE в вашем модуле, можно с помощью описанной выше команды AT+CMTE?.

Просмотр списка мобильных операторов

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

AT+COPS=?

Вывод этой команды, которая выполняется достаточно долго, может выглядеть, например, так, как показано на рис. 8.

Рис. 8. Список доступных мобильных операторов.
Рис. 8. Список доступных мобильных операторов.

Первый элемент списка (2,"MTS","MTS","25001") соответствует текущему оператору, к которому мы подключились.

Элемент состоит из четырех значений. Первое из этих значений — режим выбора оператора:

  • 0 — неизвестный оператор;

  • 1 — оператор, доступный для подключения;

  • 2 — текущий оператор;

  • 3 — оператор, недоступный для  подключения.

Из результатов выполнения команды видно, что для подключения доступны операторы MTS, Bee Line GSM и MegaFon, при этом текущий оператор, к которому подключен модуль — МТС.

Втрое и третье значения — полное и краткое название оператора. Например, полное название Bee Line GSM, а краткое BeeLine.

И, наконец, четвертое значение представляет собой код оператора в сети (MCC-MNC, где MCC - код страны, MNC - код оператора). В нашем случае мобильный код страны MCC (Mobile Country Code) для России равен 250.

Что касается кодов оператора, то для МТС, Билайн и Мегафона эти коды равны, соответственно, 1, 99 и 2.

После двух запятых в выдаче команды идут дополнительные параметры (0-4),(0-2). Первый их них задает диапазон значений поддерживаемых режимов выбора оператора:

  • 0 — автоматический режим;

  • 1 — ручной режим;

  • 2 — ручная отмена регистрации в сети

  • 3 — только установка формата;

  • 4 — ручной или автоматический режим, когда при невозможности ручного режима выполняется регистрация в автоматическом режиме

Второй параметр (0-2) показывает поддерживаемые форматы представления оператора:

  • 0 — полный текстовый формат;

  • 1 — короткий текстовый формат;

  • 2 — числовой формат

Информация о текущем мобильном операторе

Команда AT+COPS? возвращает информацию о текущем выбранном мобильном операторе:

AT+COPS?
+COPS: 0,0,"MTS"

Здесь первый ноль указывает, что для текущего мобильного оператора выбран автоматический режим. Второй ноль — выбран полный текстовый режим. Далее следует полное название оператора.

Команда AT+CSPN? читает имя мобильного оператора из SIM-карты, например:

AT+CSPN?
+CSPN: "MTS RUS",0

После названия мобильного оператора идет режим отображения:

  • 0 — не отображать сеть мобильной связи, регистрация в сети уже выполнена;

  • 1 — показать сеть мобильной связи

Узнать силу сигнала от базовой станции можно при помощи команды AT+CSQ. Команда возвращает индикатор мощности сигнала и частоту ошибок, например:

+CSQ: 21,0

Значение уровня мощности может иметь значения:

  • 0 -115 dBm или меньше;

  • 1 -111 dBm;

  • 2...30 -110... -54 dBm;

  • 31 -52 dBm или больше;

  • 99 — не известно или невозможно определить

Второй параметр означает качество сигнала RxQual и может находиться в диапазоне от 0 до 7, где 0 соответствует лучшему качеству, а 7 — худшему. Значение 99 означает что качество сигнала неизвестно или не может быть определено.

Значение RxQual отражает частоту ошибок при передаче данных по радиоканалу:

  • 0 — меньше 0.2%;

  • 1 — от 0.2% до 0.4%;

  • 2 — от 0.4% до 0.8%;

  • 3 — от 0.8% до 1.6%;

  • 4 — от 1.6% до 3.2%;

  • 5 — от 3.2% до 6.4%;

  • 6 — от 6.4% до 12.8%;

  • 7 — больше 12.8%;

Проверка баланса аккаунта

Чтобы проверить баланс аккаунта, привязанного к SIM-карте, у мобильного провайдера МТС, введите такую команду:

AT+CUSD=1,"#100#",15
OK
+CUSD: 0, "Balance:785,48r", 15

Через некоторое время команда вернет баланс в рублях.

Инициализация модуля SIM868

Посмотрим, как выполняется инициализация модуля SIM868 в библиотеке SIM800L. За инициализацию отвечает функция setup.

Отключение эхо-режима

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

На рис. 9 команды ATE0 и ATE1 показаны в работе.

Рис. 9. Демонстрация работы команд ATE0 и ATE1.
Рис. 9. Демонстрация работы команд ATE0 и ATE1.

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

Включение управления потоком данных

На следующем шаге функция setup включает управление потоком данных командой AT+IFC:

AT+IFC=1,1

Этой команде в качестве первого параметра задается способ управления потоком при получении данных от оконечного оборудования, такого как компьютер или терминал DTE (Data Terminal Equipment):

  • 0 — управление не используется;

  • 1 — программное управление;

  • 2 — аппаратное управление

Второй параметр задает точно таким же образом способ управления для оконечного оборудования, такого как модем DCE (Data Circuit-terminating Equipment):

  • 0 — управление не используется;

  • 1 — программное управление;

  • 2 — аппаратное управление

Чтобы узнать, какой способ управления потоком установлен в модеме, используйте команду AT+IFC?.

Включение автоматического определителя номера

В модуле SIM868 имеется автоматический номер вызывающего абонента (АОН). Чтобы его включить, функция инициализации setup выдает такую команду:

AT+CLIP=1 

После включения АОН при входящем вызове модуль возвращает строку, в которой добавлен входящий номер, например:

+CLIP: "+7XXXXXXXXXX",145,"",,"",0

После номера абонента идет тип номера:

  • 129 — неизвестный тип;

  • 161 — национальный номер;

  • 145 — интернациональный номер;

  • 177 — номер, специфический для сети

Подробнее об этом мы расскажем в статье, посвященной использованию модуля GSM/GPRS/GNSS Bluetooth HAT в качестве встроенного в ваше оборудование телефона.

Что касается передачи данных через GPRS, то на нее настройка АОН никак не влияет.

Настройка формата отправки SMS

Команда AT+CMGF=1 задает текстовый формат отправки SMS, который не пригоден для отправки SMS с символами кириллицы. Этот режим также не влияет на передачу данных через GPRS.

Для передачи сообщений SMS на русском языке нужно переключить модем в режим PDU командой AT+CMGF=0, о чем мы расскажем в отдельной статье.

Включение автоматической установки времени

Чтобы модуль SIM868 мог автоматически получать дату и время от сети, в которой он был зарегистрирован, функция setup библиотеки SIM800L выдает команду AT+CLTS=1.

Напомним, что команда AT+CCLK? возвращает текущую дату, время и часовой пояс.

Отключение режима сна

Следующее действие, которое выполняет setup, — это отключение автоматического перехода в режим сна модуля SIM868 командой AT+CSCLK=0.

Такое отключение повышает надежность и сокращает время реакции SIM868 на различные события.

Выбор символьной таблицы GSM

Для корректного взаимодействия с модулем SIM868 при отправке команд AT, текстовых сообщений или других данных важно установить правильную символьную таблицу. Эта таблица ограничивает допустимый набор символов. Допускаются цифры, буквы латинского алфавита, некоторые специальные символы и другие символы, соответствующие стандартам GSM.

Чтобы установить символьную таблицу GSM, используется следующая команда:

AT+CSCS="GSM"

С помощью команды AT+CSCS? можно узнать, какая символьная таблица используется в данный момент.

Установка формата кодирования текстовых сообщений SMS

При инициализации функция setup библиотеки SIM800L устанавливает шестнадцатеричный формат при передаче SMS:

AT+CMGHEX=1

Подробнее о передаче SMS мы расскажем в отдельной статье.

Обмен данными через GPRS

Для управления параметрами подключения в GPRS используется команда AT+SAPBR. Давайте посмотрим, как она применяется в библиотеке SIM800L.

Когда мы вызываем функцию http этой библиотеки, предназначенную для отправки и получения данных, прежде всего вызывается функция connect_gprs, которая создает сессию (bearer), подключаясь к мобильной сети и получает адрес IP.

Первое, что делает connect_gprs, это вызывает функцию get_ip. Она проверяет, создана ли сессия, и если да, то возвращает адрес IP, выделенный модулю SIM868 во внутренней сети мобильного провайдера на время действия сессии.

Проверка сессии

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

AT+SAPBR=2,1

Команда AT+SAPBR используется для управления параметрами подключения к GPRS.

Первое число в этой команде — тип команды:

  • 0 — закрыть сессию (bearer);

  • 1 — открыть сессию;

  • 2 — получить состояние сессии;

  • 3 — задать параметры сессии;

  • 4 — получить параметры сессии

В данном случае функция get_ip получает состояние сессии, так как первый параметр равен 2.

Второе число в команде AT+SAPBR=2,1 — идентификатор профиля. Библиотека SIM800L работает с профилем с номером 1.

Ниже мы представили результат выполнения этой команды при закрытой сессии:

AT+SAPBR=2,1
+SAPBR: 1,3,"0.0.0.0"

Первое число в ответе этой команды — состояние сессии:

  • 0 — сессия не открыта;

  • 1 — сессия активна (открыта);

  • 2 — сессия открыта (в процессе установки);

  • 3 — сессия закрыта (в процессе разрыва)

Второе число — тип подключения:

  • 0 — нет подключения;

  • 1 — активное подключение;

  • 2 — пассивное подключение;

  • 3 — GPRS

Далее в ответе команды идет адрес IP, выделенный в рамках сессии.

В нашем случае сессия открыта, ее тип — GPRS, но адрес IP не выделен. Это означает, что подключение к GPRS еще не выполнено.

Подключение к GPRS и получение адреса IP

Если адрес IP не был выделен, нужно подключиться к GPRS, что и делает функция connect_gprs. Для нашего случая выдаются такие команды:

AT+SAPBR=3,1,"CONTYPE","GPRS"
AT+SAPBR=3,1,"APN","internet.mts.ru"
AT+SAPBR=1,1

Первые две команды устанавливают параметры сессии — тип соединения CONTYPE как “GPRS”, fа также имя точки доступа Access Point Name (APN) — как “internet.mts.ru”.

Третья команда устанавливает соединение для профиля с идентификатором 1.

Когда соединение будет установлено, можно получить параметры сеанса с помощью рассмотренной выше команды AT+SAPBR=2,1. Однако теперь эта команда вернет адрес IP из внутренней сети мобильного провайдера (рис. 10).

Рис. 10. Подключение к GPRS и получение адреса IP.
Рис. 10. Подключение к GPRS и получение адреса IP.

Не пытайтесь «пинговать» этот адрес, так как он «серый», относится к внутренней сети мобильного провайдера и недоступен через интернет.

Отправка запроса GET

Чтобы отправить запрос HTTP GET после открытия сессии, сначала нужно проинициализировать сервис HTTP и задать идентификатор профиля сеанса:

AT+HTTPINIT
AT+HTTPPARA="CID",1

Далее  нужно задать URL сервиса, к которому будет отправляться запрос HTTP GET.

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

AT+HTTPPARA="URL","http://my-json-server.typicode.com/typicode/demo/posts"
OK

Далее введите команду для выполнения запроса GET:

AT+HTTPACTION=0
OK
+HTTPACTION: 0,200,134

Параметр команды AT+HTTPACTION задает тип запроса HTTP:

  • 0 — GET;

  • 1 — POST;

  • 2 — HEAD;

  • 3 — DELETE

В нашем случае нулевое значение предписывает выполнить запрос GET.

Дождавшись ответа от команды AT+HTTPACTION=0, выдаем запрос командой AT+HTTPREAD и через некоторое время получаем прочитанные от сервера данные:

AT+HTTPREAD
+HTTPREAD: 134
[
  {
    "id": 1,
    "title": "Post 1"
  },
  {
    "id": 2,
    "title": "Post 2"
  },
  {
    "id": 3,
    "title": "Post 3"
  }
]
OK

Если в окне программы терминала minicom вывод выглядит не отформатированным, включите  в терминале автоматическое добавление символа возврата каретки CR после каждого символа перевода строки LF. Для этого щелкните комбинацию клавиш Ctrl+A и клавишу Z. Далее нажмите клавишу U.

Если вы работали со статьей «Передаем данные от Repka Pi и Raspberry Pi в интернет по GSM связи через модуль SIM868 и GPRS», то можете взять из нее программу управляющего сервиса rest_app.py.

Запустите эту программу на сервере (реальном, виртуальном или облачном) и программу сбора телеметрии get-telemetry.py. Затем выдайте такую последовательность AT-команд (замените адрес сервиса своим):

AT+HTTPPARA="URL"," http://my-json-server.ru:9000/api/data:9000/api/data"
OK
AT+HTTPACTION=0
OK
+HTTPACTION: 0,200,785

Команда AT+HTTPREAD выведет на консоль данные телеметрии, знакомые вам по упомянутой статье:

AT+HTTPREAD
+HTTPREAD: 785
{
  "1": {
    "gnss": {
      "GNSS Position not fixed": 1
    },
    "gsm_gnss": {
      "latitude": "55.642XXX",
      "longitude": "37.330XXX",
      "msl_altitude": "550"
    },
    "sim868cfg": {
      "Balance": "788,48 rub.",
      "Battery Voltage": "3.983 V",
      "Date": "2004-01-01 04:27:39",
      "Flash ID": "Device Name:SERIAL\u00a7FLASH\u00a7MTKSIP\u00a76261\u00a7SF\u00a732\u00a701",
      "Hw revision": "Revision:1418B06SIM868M32\u00a7BT",
      "ICCID": "89701010064421438699",
      "IMSI": "250016442143869",
      "MSISDN": "Unstored MSISDN",
      "Operator": "Mts",
      "SIM is registered": true,
      "Service provider": "MTS RUS",
      "Signal strength": "65.625%",
      "Temperature": "28.46 degrees",
      "Unit Name": "SIM868 R14.18"
    }
  }
}

OK

Отправка запроса PUT

Чтобы продемонстрировать отправку данных через GPRS, cделаем запрос PUT к сервису rest_app.py из статьи «Передаем данные от Repka Pi и Raspberry Pi в интернет по GSM связи через модуль SIM868 и GPRS».

Вначале закроем сессию и освободим занятые ей ресурсы (закрывать не обязательно, мы сделали это только для примера):

AT+SAPBR=0,1
OK
AT+CIPSHUT
SHUT OK

Теперь нужно проинициализировать сервис HTTP и задать идентификатор профиля сеанса:

AT+HTTPINIT
OK
AT+SAPBR=3,1,"CONTYPE","GPRS"
OK
AT+SAPBR=3,1,"APN","internet.mts.ru"
OK
AT+SAPBR=1,1
OK
AT+SAPBR=2,1
+SAPBR: 1,1,"10.69.35.140"
OK

Далее мы открываем сессию и проверяем, что для этой сессии был выделен адрес IP.

На следующем шаге нужно настроить параметры HTTP-сеанса:

AT+HTTPPARA="CID",1
OK
AT+HTTPPARA="URL",http://my-json-server.ru:9000/api/data:9000/api/data
OK
AT+HTTPPARA="CONTENT","application/json"
OK

Замените здесь my-json-server.ru своим доменным именем, на котором работает ваш сервис.

Теперь приступаем к отправке данных в виде текстовой строки JSON длиной 33 байта «{"1": "Value 7", "2": "Value 7"}» (длина имеет значение).

Отправляем строку JSON с помощью следующей команды:

AT+HTTPDATA=33,10000
DOWNLOAD

После появления в окне терминала строки DOWNLOAD копируем туда нашу строку:

{"1": "Value 8", "2": "Value 8"}
OK

При копировании строка не будет показана в окне терминальной программы.

Далее выдаем запрос POST:

AT+HTTPACTION=1
OK
+HTTPACTION: 1,200,171

Читаем данные, полученные от сервиса, командной AT+HTTPREAD:

AT+HTTPREAD
+HTTPREAD: 101
{
  "key": "1",
  "message": "Data added",
  "value": {
    "1": "Value 8",
    "2": "Value 8"
  }
}
OK

На рис. 11 мы показали протокол обмена с сервисом с помощью AT-команд.

Рис. 11. Протокол обмена с сервисом с помощью AT-команд.
Рис. 11. Протокол обмена с сервисом с помощью AT-команд.

В консоли сервиса rest_app.py вы увидите добавленные данные, а также адрес IP, с которого был выполнен запрос:

{'1': 'Value 8', '2': 'Value 8'}
213.87.130.175 - - [28/Nov/2023 17:21:50] "POST /api/data HTTP/1.1" 200 –

Обратите внимание, что модулю SIM868 мобильный провайдер выдал «серый» адрес IP 10.69.35.140 из своей внутренний сети. Однако запрос PUT пришел на сервис rest_app.py с адреса 213.87.130.175. Этот адрес, принадлежащий мобильному провайдеру, доступен из интернета.

Закрытие сессии и соединения TCP/IP

Чтобы закрыть сессию и не расходовать ресурсы мобильного провайдера, используйте такую команду:

AT+SAPBR=0,1

С помощью команды AT+CIPSHUT можно закрыть соединение GPRS:

AT+CIPSHUT
SHUT OK

Команда AT+CIPSHUT закрывает все соединения TCP/UDP, которые могли бы быть открыты на модуле. Это может быть полезным, например, при перестановке соединения или для освобождения ресурсов, занятых предыдущими соединениями.

Полезные ссылки

Итоги

Работая над этой статьей, вы собрали стенд для изучения AT-команд, состоящий из модуля GSM/GPRS/GNSS Bluetooth HAT на базе SIM868 и микрокомпьютера Repka Pi, а также научились пользоваться терминальной программой minicom.

Запустив minicom в консоли SSH операционной системы Repka Pi, вы испытали в работе AT-команды, которые получают информацию о модуле SIM868, а также изменяют конфигурацию этого модуля.

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

Далее с помощью AT-команд вы устанавливали и проверяли сеанс связи с мобильным оператором, выполняя запросы GET и POST. Запросы выполнялись к тестовому JSON-серверу, описанному в предыдущей статье, посвященной GSM/GPRS/GNSS Bluetooth HAT.

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

Комментарии (10)


  1. Jury_78
    17.12.2023 17:54

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

    Это специфично... У Мегафон, например, по другому.


    1. RyabovA Автор
      17.12.2023 17:54

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


    1. AlexandreFrolov
      17.12.2023 17:54

      Нашел обсуждение темы:

      https://unixforum.org/viewtopic.php?t=116611

      Планирую приобрести SIM-карты разных операторов и тогда уже опубликую проверенные способы!


      1. Jury_78
        17.12.2023 17:54

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


  1. Speccyfan
    17.12.2023 17:54

    Ошибка в заголовке статьи "GRPS".


    1. AlexandreFrolov
      17.12.2023 17:54

      Спасибо, исправлено!


    1. sim2q
      17.12.2023 17:54

      CTRL+Enter


      1. AlexandreFrolov
        17.12.2023 17:54

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


        1. Jury_78
          17.12.2023 17:54

          Выделяете ошибку и нажимаете...


        1. sim2q
          17.12.2023 17:54

          Горячие клавиши Хабр
          ⌘/CTRL + Enter — отправка сообщения об ошибке в выделенном фрагменте текста;