Обновлено 04 февраля 2018
Кравченко Виктор

GSM-модуль SIM800L: самый полный мануал (на примерах с Arduino Uno) — часть 1. Введение

Цифровые устройства Arduino Arduino Lang Умный дом Датчики, модули Протоколы Микроконтроллеры и мини ПК
01
Содержание:
02 На заметку:
У данной статьи есть видеоверсия!
Подписывайтесь на канал, чтобы быть в курсе обновлений!

03

В этом цикле статей полностью раскрывается тема использования GSM-модуля SIM800L на примерах с платой Arduino Uno, а именно — отличия модулей друг от друга, подключение модуля, взаимодействие с ним при помощи AT-команд, подключение микрофона и колонок, совершение звонков, прием и отправка SMS и USSD-запросов, спящий режим модуля — погружение и пробуждение, распознавание DTMF, определение GPS-координат, FM-радио, прием и отправка данных по GPRS и т. д.

04

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

05 На заметку:
В данной статье не рассматриваются модули SIMCom 900 серии (SIM900, SIM900H и пр.), так как они устарели и сняты с производства. В любом случае информация представленная в статье в большинстве своем справедлива и для модулей 900 серии.
06

Первоначальный ликбез

Перед тем как углубляться в подробности, необходимо определиться с терминами и понятиями. Здесь и далее в статье, GSM-модулем SIM800L или модемом (GSM-модемом) будет называться модуль SIMCom SIM800L распаянный на плате:

07
08

Но на самом деле это некорректно — модуль SIM800L скрывается под металлической крышкой с бело-красной наклейкой:

09
Модуль SIM800L справа на зеленой печатной плате
Модуль SIM800L справа на зеленой печатной плате
Модуль SIM800L слева, на зеленой печатной плате, отделен от красной платы общего модуля
Модуль SIM800L слева, на зеленой печатной плате, отделен от красной платы общего модуля
10

Сердцем модуля SIM800L является чип Mediatek ARM MT6261. За GSM/GPRS-связь отвечает 4-диапазонный (GSM850/GSM900/DCS1800/PCS1900) приемопередатчик RF7198.

Mediatek ARM MT6261 — это однокристальная система, предназначенная, в первую очередь, для носимой электроники. Чипсет включает в себя ARM-ядро, Bluetooth, LCD, GSM+GPRS, Camera и FM-Radio.

Даташит на Mediatek ARM MT6261 — MT6261A GSM GPRS EDGE-RX SOC Processor Data Sheet v0.2.rar
11
12

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

13

Как выбрать GSM/GPRS модуль 800 серии?

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

14
SIM800 SIM800C SIM800H SIM800L SIM800F SIM868 SIM808
Голосовые вызовы+++++
GNSS (GPS)++
Bluetooth 3.0+++
Встроенный FM-приемник: (76-109 МГц) с шагом 50 кГц++
CSD++++
15

Но поскольку даташит на Mediatek ARM MT6261 говорит о поддержке чипом Bluetooth, то очень высока вероятность того, что в модуле SIM800L, Bluetooth есть, но задушен прошивкой, что, в принципе, поправимо.

С полным сравнением характеристик модулей 800 серии можно ознакомиться в таблице:

16

Если отбросить модули, предназначенные, в первую очередь, для GPS-трекинга (SIM808 и SIM868), из сравнения видно, что, игнорируя отмирающую технологию CSD, все модули имеют совершенно незначительные отличия. Так что, если наличие FM-приемника и Bluetooth не принципиально, то можно выбирать любой.

17

Модуль выбрали, что дальше?

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

18

Каждая печатная плата — это переходник между GSM-модулем и пользователем. Самые простые из них предоставляют пользователю минимальный функционал — обмен данными с GSM-модулем по UART. В том числе, каждая из плат, в обязательном порядке имеет слот для внешней SIM-карты, таким образом, реализуя для пользователя этот интерфейс. Более сложные варианты, включая Arduino-шилды, наоборот, делают доступ к расширенному функционалу модуля более удобным.

19

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

20

Возьмем для примера ситуацию, когда конечному пользователю необходимы звуковые функции (радио, звонки, аудио) и он определяется с модулем — SIM800L. Но при этом, купившись на питание от 5 В, выбирает такую плату:

21
22

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

23

У нашего модуля выведен необходимый минимум, для доступа к подавляющему большинству функций, включая голосовые (выходы для подключения микрофона и динамика):

24
25

Самый простой способ узнать о том, что из функционала «крадет» плата — сравнить распиновку модуля и выводы платы. Распиновку модуля можно подсмотреть в даташите — SIM800HL_Hardware_Design_V2.01.pdf (2,94 MB).

26

Выбор плат и шилдов достаточно обширен (перейти в раздел GSM/GPRS/GNSS-модули на платах):

Распиновка модуля SIM800H/L
Распиновка модуля SIM800H/L
28

Теперь перейдем к герою статьи.

29

Питание

Для начала работы понадобится рабочая SIM-карта формата microSIM.

30

Для питания модуля требуется напряжение из диапазона 3.4-4.5 В, рекомендованное 4 В. Как видно, это нестандартные для Arduino/Raspberry Pi 3, напряжения (5 В / 3.3 В), рассчитанные на питание от литиевых аккумуляторов.

31 На заметку:
При подключении питания, не соответствующего требуемому, модем выдает два типа сообщений. В случае, если питание находится на пороговом уровне (≤3.5 В, ≥4.4 В), модуль выдает предупреждение UNDER-VOLTAGE WARNING, OVER-VOLTAGE WARNING. В случаях, когда пороговый уровень превышен (≤3.4 В, ≥4.5 В), модуль сообщает об этом — UNDER-VOLTAGE POWER DOWN, OVER-VOLTAGE POWER DOWN и выключается.
32
С температурой дела обстоят также — при превышении пороговых значений (-30...80°С), сначала предупреждение, потом выключение
С температурой дела обстоят также — при превышении пороговых значений (-30...80°С), сначала предупреждение, потом выключение
33

Для питания, модулю понадобится внешний источник питания и, если он не обеспечивает требуемого напряжения, то и DC-DC понижающий преобразователь напряжения.

Постоянная ссылка

Преобразователь напряжения понижающий (понижайка) DC-DC 3A (на LM2596)

Преобразователь напряжения понижающий (понижайка) DC-DC 3A (на LM2596)

Входное напряжение: 4-40 В, выходное напряжение: 1,3-37 В, максимальный выходной ток 3 А.

Купить: 1 шт. - http://ali.pub/1p16k4
1 шт. - http://ali.pub/1p16kp
1 шт. - http://ali.pub/1p16lh
5 шт. - http://ali.pub/1p16m9
10 шт. - http://ali.pub/1p16nm

Постоянная ссылка

Преобразователь напряжения понижающий (понижайка) DC-DC 3A (на MP1584/XM1584)

Преобразователь напряжения понижающий (понижайка) DC-DC 3A (на MP1584/XM1584)

Входное напряжение: 4.5-28 В, выходное напряжение: 0.8-20 В, максимальный выходной ток 3 А.

Купить: 1 шт. - http://ali.pub/1otf3k
5 шт. - http://ali.pub/1otf3y

34

Нельзя запитывать модуль SIM800L от Arduino. Дело в том, что датчик бывает очень прожорлив (по даташиту максимальное потребление тока достигает $2 А$). А, как известно, Arduino не в состоянии обеспечить его таким током, поэтому очень вероятен сбой в работе — будет работать некорректно или модем, или Arduino, или оба вместе взятые (вполне вероятен выход Arduino из строя). Здесь может быть 2 выхода — либо SIM800L обеспечивается своим отдельным питанием (при этом земля GND обоих источников должна быть общая), либо и Arduino, и GSM-модуль запитываются одним мощным источником питания ($7-12 В$).

35
36

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

37
38

Подключение к Arduino

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

39 Важно:
Распространенная ошибка: Нельзя напрямую подключать пин Arduino TX ко входу RX модуля SIM800L
40
Так подключать нельзя
Так подключать нельзя
41

Даташит (2,94 MB) модуля, в характеристиках Serial-порта, недвусмысленно говорит о максимальном уровне логической единицы на входе RX — 3,1 В (при минимальном 2,1 В):

42
43

А поскольку на плате не было обнаружено никаких элементов, которые бы могли конвертировать входное напряжение, автором предлагается использовать банальный равноплечий делитель напряжения. Для организации логической единицы номиналом 2,5 В (это напряжение корректно вписывается в допустимый диапазон, и его легко получить из 5 В стандартной логики Arduino) нужно взять два резистора одинакового номинала в диапазоне 1-10 КОм:

44
Вход bRX/b Arduino находится в режиме span class=monoINPUT/span, и он нормально реагирует на логическую единицу GSM-модуля 2,8 В — с ним ничего делать не надо
Вход RX Arduino находится в режиме INPUT, и он нормально реагирует на логическую единицу GSM-модуля 2,8 В — с ним ничего делать не надо
45

Первое включение

При первом включении, индикатор модуля начинает часто мигать — это свидетельствует о поиске сети. Редкое мигание свидетельствует о том, что сеть найдена и модуль успешно к ней подключился.

46 На заметку:
Если модуль мигает очень редко быстрыми сериями по 3 раза, значит, либо установлено некорректное напряжения питания, либо перепутаны провода RX/TX.
47

В случае, если штатная антенна не будет обеспечивать уверенного приема, можно подключить внешнюю антенну.

48

О диагностике качества сигнала с внешней антенной, ниже в статье.

49

Обмен данными

Взаимодействие с модулем осуществляется по интерфейсу UART (Serial) при помощи специальных AT-команд. Для реализации обмена по UART-интерфейсу на пинах, отличных от стандартных RX(0)/TX(1) (они как правило заняты подключением к компьютеру), понадобится стандартная Arduino-библиотека SoftwareSerial.h:

50
51

После сборки схемы в Arduino необходимо залить первый скетч:

52 Arduino (C++)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <SoftwareSerial.h> SoftwareSerial SIM800(8, 9); // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L) void setup() { Serial.begin(9600); // Скорость обмена данными с компьютером Serial.println("Start!"); SIM800.begin(9600); // Скорость обмена данными с модемом SIM800.println("AT"); } void loop() { if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема... Serial.write(SIM800.read()); // ...и выводим их в Serial if (Serial.available()) // Ожидаем команды по Serial... SIM800.write(Serial.read()); // ...и отправляем полученную команду модему }
53 На заметку:
По умолчанию, модем автоматически определяет скорость обмена данными, но этот параметр можно задать вручную на стороне модема при помощи команды AT+IPR=<rate>, где <rate> — скорость в бодах (по умолчанию — 0).
54

Скетч настраивает скорости обмена данными Arduino и SIM800L, и далее транслирует получаемые/отправляемые данные и отображает их в мониторе порта. При запуске Arduino, в Serial, помимо приветствия Start!, будет отправлена команда AT и модем ответит ОК:

55
Для передачи команд GSM-модулю, необходимо установить параметр bNewline/b
Для передачи команд GSM-модулю, необходимо установить параметр Newline
56

Теперь, когда параметр Newline установлен (каждая команда с новой строки), можно отправлять команды через поле Serial-порта. Если отправить команду ATI, можно получить информацию о версии модуля:

AT-команды (от англ. ATtention «внимание») — набор команд, состоящий из серий коротких текстовых строк, которые объединяются вместе, чтобы сформировать полные команды операций, таких как набор номера, начала соединения или изменения параметров подключения.

Подробно с полным набором AT-команд можно ознакомиться в официальном руководстве — SIM800 Series_AT Command Manual_V1.09.pdf (3,07 MB)
57
58

Диагностические команды

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

59
Описание Команда Структура ответа Пример ответа
Готовность модуля к работе AT OK
OK
Запрос информации об устройстве ATI <info>
OK

<info> — модель и версия модуля
SIM800 R14.18

OK
Запрос версии установленного ПО AT+CGMR <revision>
OK

<revision> — модель и версия ПО
Revision:1418B04SIM800L24

OK
Готовность модуля совершать звонки AT+CCALR? +CCALR: <mode>
OK

<mode> — идентификатор готовности:
0 — модуль не готов совершать звонки
1 — модуль готов совершать звонки
+CCALR: 1

OK
Запрос качества связи AT+CSQ +CSQ: <rssi>,<ber>
OK

<rssi> — качество сигнала (от 10 и выше — нормальное):
0 -115 дБм и меньше
1 -111 дБм
2...30 -110... -54 дБм
31 -52 дБм и больше
99 определить невозможно
<ber> — RXQUAL (мера качества сигнала), значение из таблицы GSM 05.08 — ETSI:
0...7 — коэффициент битовых ошибок (меньше — лучше)
99 определить невозможно
+CSQ: 8,0

OK
Запрос IMEI-модуля AT+GSN <sn>
OK

<sn> — IMEI модуля
864713035030892

OK
Запрос идентификационной информации модуля AT+GSV Текстовая информация о модуле SIMCOM_Ltd
SIMCOM_SIM800L
Revision:1418B04SIM800L24

OK
Напряжение питания AT+CBC +CBC: <bcs>,<bcl>,<voltage>
OK

<bcs> — статус зарядки
0 — зарядки нет
1 — зарядка идет
2 — зарядка завершена
<bcl> — объем оставшегося заряда в процентах (1...100)
<voltage> — напряжение питания модуля, в милливольтах
+CBC: 0,73,3988

OK
Тип регистрации в сети AT+CREG? +CREG: <n>,<stat>
OK

<n> — параметр ответа
0 — незапрашиваемый код регистрации в сети отключен
1 — незапрашиваемый код регистрации в сети включен
2 — незапрашиваемый код регистрации в сети включен с информацией о местоположении
<stat> — статус
0 — незарегистрирован, не ищет нового оператора для регистрации
1 — зарегистрирован в домашней сети
2 — незарегистрирован, но в поиске нового оператора для регистрации
3 — регистрация запрещена
4 — неизвестно
5 — зарегистрирован, в роуминге
+CREG: 0,1

OK
Информация об операторе AT+COPS? +COPS: <mode>,[<format>,<oper>]
OK

<mode> — режим регистрации
<format> — формат отображения
<oper> — наименование оператора в заданном формате
+COPS: 0,0,"MegaFon"

OK
Получение списка всех операторов AT+COPN +COPN: <numeric1>,<alpha1>
[<CR><LF>+COPN: <numeric2>,<alpha2> […]]

OK
<numeric n> — цифровой код оператора
<alpha n> — текстовый код оператора
...
+COPN: "24008","vodafone"
+COPN: "24010","Swefour AB"
+COPN: "24201","TELENOR"
+COPN: "24202","NetCom"
+COPN: "24403","FINNET"
+COPN: "24405","Elisa Corporation"
+COPN: "24409","FINNET"
...

OK
Статус телефона GSM-модуля AT+CPAS +CPAS: <pas>
OK

<pas> — статус
0 — готов к выполнению команд из терминала
2 — неизвестно (исполнение команд не гарантируется)
3 — входящий вызов, но модуль готов к выполнению команд
4 — исходящий вызов, но модуль готов к выполнению команд
+CPAS: 4

OK
60

Текущую конфигурацию модуля по профилям можно получить при помощи команды AT&V.

61

Бонус: сравнение качества сигнала с разными антеннами

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

62 Arduino (C++)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <SoftwareSerial.h> SoftwareSerial SIM800(8, 9); // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L) void setup() { Serial.begin(9600); // Скорость обмена данными с компьютером Serial.println("Start!"); SIM800.begin(9600); // Скорость обмена данными с модемом SIM800.println("AT"); } long lastcmd = millis(); void loop() { if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема... Serial.write(SIM800.read()); // ...и выводим их в Serial if (Serial.available()) // Ожидаем команды по Serial... SIM800.write(Serial.read()); // ...и отправляем полученную команду модему if (millis() - lastcmd > 5000) { // Прошло ли 5 секунд lastcmd = millis(); // Фиксируем время SIM800.println("AT+CSQ"); // Запрашиваем информацию о качестве сигнала } }
64

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

65
66

Из графика видно, что внешняя антенна действительно улучшает сигнал. К сожалению, не удалось протестировать антенну в зоне неуверенного приема. Исходя из описания команды уровень нормального сигнала находится в диапазоне от 10 единиц, до 31. Качество сигнала в 20 единиц, является отличным результатом. Но в любом случае результат очевиден.

70

Похожие запросы:

  • GSM модуль SIM800L — самое полное руководство на русском языке
  • Подключение GSM модуля SIM800L к Arduino
  • Модуль GSM GPRS SIM800 MicroSIM с антенной
  • GSM модем SIM800L Первый взгляд
  • Работа с SIM модулем SIM800L
  • как подключить sim800L
  • GSM модем SIM800L V2.0 Первый взгляд
  • Дешевый модуль GSM с поддержкой GPRS , для самоделок и удаленного управления.
  • В чем отличия между SIM800 и SIM800H, SIM800H и SIM800L, SIM800 и SIM800C
  • Чем отличаются в функционале модули SIM800 в зависимости от буквы в конце названия
  • Quick Comparison SIMCOM 800C-DS/800F/800C/800/800H
  • Кто работал с GSM? Какая разница между модулями SIM800L, SIM800С и SIM900?
comments powered by HyperComments