Подключение GPRS модуля SIM800C

Для разработки IoT устройств приходится использовать различные GSM модули. К сожалению, NB IoT или LoraWAN чипы на данный момент стоят минимум в три раза дороже, поэтому в большинстве проектов их использование неоправданно, пока не снизится стоимость.

Модуль хорошо документирован. Документация здесь. Сайт кривой. Скачать документацию официально не просто. 🙁 Поэтому используем прямую ссылку, не требующую регистрации, на всю необходимую документацию и прошивки для SIM800C. Прямая ссылка на документацию и инструменты прошивки для SIM800x. Документация по схемотехнике.

На Aliexpress есть несколько вариантов модулей SIM800C. Ссылка здесь. В данном примере я рассмотрю вариант с разведенным на плате конвертером уровней TTL 5V <-3,3V и преобразователем напряжения с 5V до ~3,7 Вольт (стандартное напряжение Li-Ion батарей сотовых телефонов).

В приницпе, можно использовать более дешевый вариант модуля адаптировав уровень TTL с помощью резисторного делителя напряжения, либо заказав плату двунаправленного TTL конвертера уровней 5V <-> 3V ценой в районе 0,5 $ и добавив DC-DC down-step модуль для снижения напряжения с 5V до 3,7 V по цене 0,3 $ но в совокупности цена получится примерно такой-же, экономии не будет.

Батарею можно напрямую подключить к пину Vbat. На этом входе можно замерять напряжение на чипе. Оно составляе 3,7 V, встроенный преобразователь напряжения работает нормально, хоть и схема проще, чем у самого дешевого DC-DC step down конвертера.

Модуль SIM800C

Распиновка платы модуля SIM800C

  • 5V: power supply pin, the only input DC5V, used to power the board.
  • V_TTL: access control board microcontroller core target voltage of 5V / 3.3V (according to its own microcontroller is much to distinguish kernel V), this pin is used to convert the GSM module board TXD and RXD for the corresponding TTL logic. Описание пространное. Судя по всему на этот пин нужно подать 5V при подключении к платам с уровнем логики 5V (например, Arduino). При подключении GSM модуля к ESP8266/ESP32 — на него подать 3,3 V.
  • GND: power supply ground
  • TXD: send pin serial port module, TTL level (not directly connected to RS232 level)
  • RXD: receive pin serial port module, TTL level (not directly connected to RS232 level)
  • DTR: Data Terminal Ready
  • SPKP: Core Audio output pin
  • SPKN: Core Audio output pin
  • MICN: Core Audio input
  • MICP: Core Audio input
  • RI: Ring core pin tips
  • VRTC: RTC pin external battery
  • GND: power supply ground
  • PWR: This pin can turn down or turn off the module. Этот пин должен быть замкнут на GND на время не менее 1 с для включения модуля. Чтобы модуль стартовал сразу при включении — PWR закорачивают на GND.
  • GND: power supply ground
  • VBAT: lithium battery input pin, 3.3v-4.4v

Схема соединения SIM800C c USB-to-TTL конвертером

Перед использованием модуля SIM800C с микроконтроллерами стоит проверить его работоспособность соединив с конвертером USB to TTL.

Таблица соединения SIM800C с USB-to-TTL converter

SIM800C pinUSB-to-TTL converterБП +5 VПримечания
TXDRXD
RXDTXD
GNDGNDGND
+5V+5VБлок питания на пиковы ток не менее 1 А!!!
V_TTL+5V
PWXGNDЗакоротить пин PWX на GND, чтобы модуль стартовал сразу при включении питания.
Схема подключения модуля SIM800C

Лучше подавать сначала питание на модуль GSM, а затем уже подключать USB к PC, но это не критично.

Тестирование SIM800

  • Запускаем Arduino IDE.
  • В настройках порта (Tools -> Port) выбираем порт на котором работает USB-to-TTL конвертер.
  • Переходим в Tools -> Serial Monitor (Ctrl-Shift-M).
  • Выбираем скорость 115200. Где-то проскакивает, что у чипа работает автоопределение скорости. По моим тестам — не работает. 🙂
  • Набираем AT и ввод.
  • Если модуль рабочий и корректно подключен, то появится хотя-бы ответ «OK». Если модуль определил SIM-ку и зарегистрировался в сети оператора, то будет развернутая информация.
AT
OK

+CPIN: READY

Call Ready

SMS Ready
  • Отправляем команду: AT+COPS=?
    После нескольких секунд ожидания появится ответ, вроде: +COPS: (2,»Bee Line GSM»,»BeeLine»,»25099″),(1,»MTS»,»MTS»,»25001″),(1,»MOTIV»,»MOTIV»,»25020″),(1,»MegaFon»,»MegaFon»,»25002″),,(0-4),(0-2). Модуль «видит» ближайшие соты. Уже хорошо.
  • Проверим статус PIN кода на SIM карте командой:
    AT+CPIN? Если появился ERROR — что-то не так.
  • Запускаем команду: AT+CMEE=2. Эта команда при выводе сообщения об ошибке предоставляет максимально детальную информацию. Сохраняем командой: AT&W.
  • Поворяем комунду AT+CPIN? Появляется детальный код ошибки. Например, в моем случае: +CME ERROR: SIM not inserted.
  • Проверяем установку SIM карты. SIM слот распаянный на модуле «без защиты от дурака», т.е. позволяет вставить SIM-ку любым способом, без привычных ограничений как на сотовом телефоне или в других типах слотов. На SIM слоте мелко есть пиктограмма правильной установки карты.
  • Повторяем команду AT+COPS=? Ответ изменился. Появились строчки «Call Ready» и «SMS Ready», значит карта определилась нормально и зарегистрировалась в сети оператора:
AT+COPS=?
Call Ready

SMS Ready

+COPS: (1,"Bee Line GSM","BeeLine","25099"),(1,"MOTIV","MOTIV","25020"),(3,"MTS","MTS","25001"),(3,"MegaFon","MegaFon","25002"),,(0-4),(0-2)

OK
  • Отправляем команду AT+CSQ для получения уровня сигнала. Первая цифра в ответе должна быть отлична от нуля. Например, +CSQ: 23,0.
  • Проверяем регистрацию в сети оператора командой AT+CREG? Правильный ответ: +CREG: 0,1

Ошибка +CSQ: 0,0

Если команда получения уровня сигнала AT+CSQ возвращает +CSQ: 0,0, то наверняка будут проблемы с регистрацией в сети. Команда AT+CREG? вернет +CREG: 0,2 вместо +CREG: 0,1. Какие действия для разрешения ошибки:

  • Проверяем в другом устройстве, что SIM-ка корректно регистрируется в сети.
  • Вставляем в SIM800 в соответствии с пиктограммой на слоте и проверяем командой AT+CPIN, что SIM карта определилась корректно.
  • Командой AT+CBAND? проверяем, что SIM800 настроен на все диапазоны частот. На моем модуле, когда он нормально регистрируется в сети Билайна, результат: DCS_MODE,ALL_BANDS.
  • Основной момент на который обратить внимание!!! Не зависимо от того, какой ток держит блок питания или DC-DC step-down модуль, хоть 3A и вы в этом лично убеждались, попробуйте запустить SIM800 от батареи. Возьмите аккумулятор от мобильного телефона на 3,7 В или Li-Ion элемент 18650 на 3,7 V и присоедините плюс батареи к пину V_BAT , а минус — на GND.
  • Спустя некорое время проверяем уровень сигнала AT+CSQ. Скорее всего проблема с регистрацией разрешится.

Все GSM модули, не важно, дорогой SIM800 или дешевый M590 КРАЙНЕ чувствительны к качеству блока питания. И дело не только в токе, но и в пульсациях. Я запитывал SIM800C от разных БП с макисмальными токами до 2,1 A и он нормально включался, отвечал на AT команды, но не регистрировался в сети. После подключения на батарею сеть сразу нашлась.

Ниже приведены вырезки из design guide для модулей SIM800 и M590. Они почти сходятся в блоке фильтрации. Нужно ставить керамические конденсаторы на 10 pF и 33 pF (у M590 на 100 pF) для сглаживания высокочастотных пульсаций и электролитические хотя-бы на 100 uF, а лучше на 1000 uF.

Фильтры на блок питания для SIM800
Фильтры на блок питания для Neoway M590

Отправка SMS через SIM800

Для теста работы пытаемся отправить SMS. Для начала отправляем команду: AT+CMGF=1. Если возник ERROR — скорее всего не прошла регистрация SIM-ки в сети.

AT командаОтветПримечания
AT+CMGF=1OKПереводим в текстовый режим отправки сообщений.

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

Передача данных по TCP

Далее привожу AT команды для установки tcp соединения через GPRS.

AT командаОтветПримечания
AT+CPIN? +CPIN: READY
OK
Проверка SIM PIN
AT+CSQ+CSQ: 23,0
OK
Проверка уровня сигнала. Первая цифра — уровень сигнала <rssi>:
0 — 115 dBm or less
1 -111 dBm
2…30 -110… -54 dBm
31 -52 dBm or greater
99 — not known or not detectable
Вторая цифра — количество ошибок в канале. 0 — хорошо.
AT+CREG?
+CREG: 0,1
OK
Первая цифра <n>:
0 — Disable network registration unsolicited result code
1 — Enable network registration unsolicited result code +CREG:
2 — Enable network registration unsolicited result code with location information
Вторая цифра <stat>:
0 — Not registered, MT is not currently searching a new operator to register to
1 — Registered, home network — правильный вариант
2 — Not registered, but MT is currently searching a new operator to register to
3 — Registration denied
4 — Unknown
5 — Registered, roaming
AT+CGATT?
+CGATT: 1
OK
Статус GPRS Service-а <stat>:
0 — Detached
1 — Attached — правильный вариант
AT+CIPSHUT SHUT OK Deactivate GPRS PDP Context. В доке разработчик эта команда не указана, но без неё у меня не проходила команда установки APN.
AT+CSTT=
«internet.beeline.ru»,»beeline»,»beeline»
OKУстанавливаем APN. В примере — для оператора «Билайн».

AT+CSTT?
+CSTT:
«internet.beeline.ru»,»beeline»,»beeline»
Проверяем, что APN сохранился.
AT+CIICROKПереводим в режим беспроводного соединения (GPRS or CSD).
AT+CIFSR 100.89.139.161 Получаем выделенный оператором динамический IP адрес.
AT+CIPSTART=
«TCP»,»116.228.221.51″,»8500″
OKУстановка тестового TCP соединения с каким-то китайским тестовым сервером.

Отправка данных по HTTP

AT+SAPBR=3,1,»CONTYPE»,»GPRS»
AT+SAPBR=3,1,»APN»,»internet.beeline.ru»
AT+SAPBR=3,1,»USER»,»beeline»
AT+SAPBR=3,1,»PWD»,»beeline»
AT+SAPBR=1,1 — Устанавливаем GPRS соединение
AT+HTTPINIT — Инициализация http сервиса
AT+HTTPPARA=»CID»,1 — Установка CID параметра для http сессии
AT+HTTPPARA=»URL»,»http://www.ya.ru» — адрес web сервера
AT+HTTPACTION=0 — GET запрос.
-> +HTTPACTION: 0,302,0 — 302 код ошибки — Found.

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

Spread the love
Запись опубликована в рубрике IT рецепты с метками , . Добавьте в закладки постоянную ссылку.