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 распаянный на плате: |
Проверено — автор рекомендует: Купить GSM/GPRS-модуль SIM800LВидео-инструкция о покупке со скидками на Aliexpress |
08 |
Но на самом деле это некорректно — модуль SIM800L скрывается под металлической крышкой с бело-красной наклейкой: |
|
09 |
Модуль 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 |
12 |
Исходя из этого, важно понимать что различные модули 800 серии обладают разными характеристиками и функционалом. Поэтому, следующий вопрос... |
|
13 |
Как выбрать GSM/GPRS модуль 800 серии? Если отбросить несущественные для начинающих радиолюбителей и одинаковые для всех модулей характеристики, то принципиальные отличия можно кратко представить в таблице: |
|
|
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 В, выбирает такую плату: |
|
22 |
Но эта плата не имеет выводов для подключения колонок и микрофона, она не имеет выходов для сигнализации входящего звонка и т. д. — только UART для AT-команд. И получается, что функциональность выбранного модуля загублена платой. |
|
23 |
У нашего модуля выведен необходимый минимум, для доступа к подавляющему большинству функций, включая голосовые (выходы для подключения микрофона и динамика): |
|
25 |
Самый простой способ узнать о том, что из функционала «крадет» плата — сравнить распиновку модуля и выводы платы. Распиновку модуля можно подсмотреть в даташите — SIM800HL_Hardware_Design_V2.01.pdf (2,94 MB). |
|
26 |
Выбор плат и шилдов достаточно обширен (перейти в раздел GSM/GPRS/GNSS-модули на платах): |
Распиновка модуля 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°С), сначала предупреждение, потом выключение
|
|
33 |
Для питания, модулю понадобится внешний источник питания и, если он не обеспечивает требуемого напряжения, то и DC-DC понижающий преобразователь напряжения. |
|
34 |
Нельзя запитывать модуль SIM800L от Arduino. Дело в том, что датчик бывает очень прожорлив (по даташиту максимальное потребление тока достигает $2 А$). А, как известно, Arduino не в состоянии обеспечить его таким током, поэтому очень вероятен сбой в работе — будет работать некорректно или модем, или Arduino, или оба вместе взятые (вполне вероятен выход Arduino из строя). Здесь может быть 2 выхода — либо SIM800L обеспечивается своим отдельным питанием (при этом земля GND обоих источников должна быть общая), либо и Arduino, и GSM-модуль запитываются одним мощным источником питания ($7-12 В$). |
|
36 |
Перед подключением модуля к преобразователю напряжения, необходимо, при подключенном к преобразователю источнике питания, при помощи мультиметра установить заданное выходное напряжение: |
|
38 |
Подключение к Arduino После того как питание GSM-модуля организовано, необходимо подключить его к управляющему устройству, например микроконтроллеру Arduino. |
|
39 | Важно: |
Распространенная ошибка: Нельзя напрямую подключать пин Arduino TX ко входу RX модуля SIM800L
|
|
40 |
Так подключать нельзя
|
|
41 |
Даташит (2,94 MB) модуля, в характеристиках Serial-порта, недвусмысленно говорит о максимальном уровне логической единицы на входе RX — 3,1 В (при минимальном 2,1 В): |
|
43 |
А поскольку на плате не было обнаружено никаких элементов, которые бы могли конвертировать входное напряжение, автором предлагается использовать банальный равноплечий делитель напряжения. Для организации логической единицы номиналом 2,5 В (это напряжение корректно вписывается в допустимый диапазон, и его легко получить из 5 В стандартной логики Arduino) нужно взять два резистора одинакового номинала в диапазоне 1-10 КОм: |
|
44 |
Вход 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: |
|
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-модулю, необходимо установить параметр Newline
|
|
56 |
Теперь, когда параметр Newline установлен (каждая команда с новой строки), можно отправлять команды через поле Serial-порта. Если отправить команду ATI, можно получить информацию о версии модуля: |
AT-команды (от англ. ATtention — «внимание») — набор команд, состоящий из серий коротких текстовых строк, которые объединяются вместе, чтобы сформировать полные команды операций, таких как набор номера, начала соединения или изменения параметров подключения.
Подробно с полным набором AT-команд можно ознакомиться в официальном руководстве — SIM800 Series_AT Command Manual_V1.09.pdf (3,07 MB) |
58 |
Диагностические команды Существует набор команд при помощи которых можно определить состояние/готовность GSM-модуля совершать конкретные действия, а также получить другую полезную информацию диагностического характера. Некоторые из них представлены в таблице: |
|
|
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 секунд времени запрашиваются данные о качестве сигнала. Тестирование проводилось по полчаса с антенной и без неё, ночью и днем. Результаты сравнения представлены на графике: |
|
66 |
Из графика видно, что внешняя антенна действительно улучшает сигнал. К сожалению, не удалось протестировать антенну в зоне неуверенного приема. Исходя из описания команды уровень нормального сигнала находится в диапазоне от 10 единиц, до 31. Качество сигнала в 20 единиц, является отличным результатом. Но в любом случае результат очевиден. |
|
70 |
Похожие запросы:
|
|