Модуль GSM GPRS SIM800 MicroSIM с антенной и ардуино
Миниатюрный модуль GSM/GPRS сотовой связи на основе компонента SIM800L , разработанного компанией SIMCom Wireless Solutions. Русскоязычная версия сайта SIMCom здесь. Стандартный интерфейс управления компонента SIM800L предоставляет доступ к сервисам сетей GSM/GPRS 850/900/1800/1900МГц для отправки звонков, СМС сообщений и обмена цифровыми данными GPRS. Поставляется с встроенной антенной, также можно подключить дополнительные антенны для улучшения качества сигнала.
Управлять модулем можно при помощи персонального компьютера через преобразователь интерфейса USB-UART или непосредственно через UART модулем микроконтроллера самостоятельной разработки или Arduino, Raspberry Pi и аналогичными.
Компонент SIM800L имеет реализованный стек протокола TCP/IP. Содержит микросхему MT6260SA компании MediaTek и микросхему приемопередатчика RFMD RF7176.
Благодаря функции отправки СМС сообщений наиболее часто модуль GSM GPRS SIM800 MicroSIM с антенной используется в диспетчеризации, беспроводной сигнализации и в охранных системах. При этом в результате различных событий происходит отправка сообщений вида: “Аварийная остановка лифта 3 дома №17”, “Гараж открыт”, “Дверь подвала открыта”, “Отключено 220 по перегрузке”, “Протечка системы отопления”, “Отопительный котел выключен”, “Температура в теплице ниже нормы”.
К модулю GSM GPRS SIM800 MicroSIM подключаются динамик и микрофон. С модуля можно совершать звонки и принимать.
Характеристики
Максимальное напряжение высокого уровня интерфейса UART 2,8 В
Скорость UART 1200–115200 бод
Четыре диапазона EGSM900, DCS1800, GSM850, PCS1900
Мощность передачи в различных диапазонах
DCS1800, PCS1900 1 Вт
GSM850, EGSM900 2 Вт
Автоматически выполняет поиск в четырех частотных диапазонах
Поддерживает сеть 2G
Сопротивление подключаемого динамика 8 Ом
Микрофон электретный
Управляется командами AT через UART (3GPP TS 27.007, 27.005 SIMCOM enhanced AT Commands)
Автоматическое определение скорости передачи управляющих АТ команд
Отправка и получение GPRS данных (TCP/IP, HTTP, и т.д.)
Макс скорость передачи GPRS данных 85,6 Кбод
Кодирование CS-1, CS-2, CS-3 и CS-4
Поддерживает GSM 07.10 протокол
Поддержка пакетной передачи широковещательного канала управления (PBCCH) CSD на скоростях 2.4, 4.8, 9.6 и 14.4 Кбод
Поддержка неструктурированных данных дополнительных услуг USSD
Поддерживает PAP ( протокол идентификации пароля)
Поддержка часов реального времени RTC
Поддерживает симкарт питанием 3 и 1,8 В
Температура, ℃
воздуха при работе –30. 75
хранения –45. 90
Размеры 25 х 25 мм
Индикация
При включении модуля GSM GPRS на плате быстро мигает светодиод. При установке соединения с мобильным оператором частота мигания снижается. Если связь с мобильным оператором потеряна, то светодиод опять мигает быстро.
Быстрое мигание светодиода говорит о поиске в эфире сигнала станции мобильной связи.
Подключение
На плату модуля нанесены названия контактов |
DTR дополнительный сигнал UART | VCC питание |
MICP соединяется с микрофоном | RST сброс |
MICN соединяется с микрофоном | RXD к контакту TX микроконтроллера |
SPKP соединяется с динамиком | TXD к контакту RX микроконтроллера |
SPKN соединяется с динамиком | GND общий провод |
Для улучшения качества сигнала подсоединяется антенна. Превышение входного напряжения интерфейса UART приведет к порче модуля SIM800. Не существует преобразователя интерфейса USB–UART c выходным напряжением 2,8 В. Существующие преобразователи имеют более высокое напряжение на выходе UART. Поэтому между выходом преобразователя и входом модуля GSM GPRS SIM800 устанавливается резисторный делитель напряжения.
Соединение модуля и преобразователя интерфейса USB–UART. |
В зависимости от выходного напряжения U_usbttl имеющегося у вас преобразователя интерфейса рассчитываются номиналы резисторов в делителе по формуле, приведенной на рисунке. При расчетах следует стремиться к величинам сопротивлений порядка нескольких килоом.
Для проверки работоспособности устройства достаточно иметь ПК и симкарту с небольшим денежным счетом. Проверку работоспособности можно проводить по двум методам подключения модуля к ПК: через преобразователь интерфейсов USB–UART или используя Arduino UNO. Рассмотрим метод проверки без Arduino. Установите симкарту в модуль GSM GPRS, соблюдая расположение контактов. Соедините ПК через преобразователь интерфейсов USB–UART с устройством по схеме приведенной выше. Подключите питание номинальным напряжением. Дождитесь ориентируясь на мигание светодиода подключения к мобильному оператору. Включите на ПК терминальную программу. Данные в нее следует вводить большими буквами. Используя терминальную программу отправьте в модуль GSM GPRS SIM800 через порт подключения следующие команды.
АТ
Ответ модуля ОК
AT+CSQ
Ответ модуля +CSQ: 18,0 OK
Эта команда дает информацию о уровне сигнала. Первое число – уровень сигнала , величина 18 означает -78 dbм. Второе число – количество ошибочно принятых бит , величина “0” говорит о доле ошибок менее 0,2 %, что свидетельствует о хорошей связи.
Попробуйте отправить в модуль команду ATI.
Если у вас нет преобразователя USB–UART, то можно использовать Arduino UNO. Соедините контакт RX модуля SIM800L с контактом 11 цифрового сигнала Arduino UNO применяя резисторный делитель напряжения. Величины сопротивлений резисторов нужно вычислить заново учитывая напряжение питания Arduino UNO. Соедините контакт TX модуля SIM800L с контактом 10 цифрового сигнала Arduino UNO. Загрузите в ардуино программу, текст которой приведен далее. Здесь используется библиотека SoftwareSerial позволяющая реализовать последовательный интерфейс на любых цифровых выводах Ардуино с помощью программных средств, дублирующих функциональность UART.
#include
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
// Open serial communications and wait for port to open:
Serial.begin(9600);
mySerial.begin(9600);
>
void loop() // run over and over
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
while(Serial.available())
mySerial.write(Serial.read());
>
mySerial.println();
>
>
Текст программы и много полезной информации здесь. Теперь вы можете отправлять AT команды через последовательный монитор Arduino.
На русскоязычных и зарубежных сайтах размещены тексты программ Arduino с помощью которых можно отправлять СМС, контролировать состояние контактов датчика и отправлять на сайт время изменения состояния контролируемых контактов, а на сайте сохранять принятые данные в виде журнала.
Так же не забываем о экономии с помощью кэшбэка
Оставьте комментарий:
Деньги можно перечислить на карту Сбербанка России:
4276 5400 2194 5088
Обзор модуля UPS ETA9640, 5V, 1А беспере…
Обзор модуля UPS ETA9640, 5V, 1А бесперебойного блока питания.
ESP NOW — Как из ESP32 сделать ретрансля…
ESP NOW — Как из ESP32 сделать ретранслятор?
Sim800l подключение к компьютеру
Это не совсем законченный проект, это скорее заготовка.
Что имеем — возможность отслеживать DTMF команды и комментировать их выполнение голосом.
Например, позвонив на устройство первый раз, оно попросит Вас ввести пароль, запомнит его и вышлет по СМС. В следующий раз оно Вас пустит без пароля. Можно ввести «некую» команду, например «1*» и оно Вам ответит — «команда выполнена, постановка под охрану».
Как получить актуальное время от GSM модуля, даже если оператор его не дает
Ниже, под катом, мой путь решения этой нелегкой (как оказалось) задачи.
Сразу скажу, что в странах без летнего/зимнего времени все гораздо проще.
Понадобилось мне в системе с МК и GSM-модулем SIM800L иметь более-менее точное время.
Плодить лишние сущности в виде микросхемы часов RTC (и работы с ней) не хотелось.
Решено было воспользоваться встроеными возможностями GSM-модуля.
В ходе решения задачи было найдено аж 4 способа решения:
Способ №1 — воспользоваться SIM800 Series_GSM Location_Application Note_V1.01
Посылаем следующую последовательность команд:
AT+SAPBR=3,1,«CONTYPE»,«GPRS» // Set bearer parameter
AT+SAPBR=3,1,«APN»,«internet» // Set bearer context
AT+SAPBR=1,1 // Active bearer context
После чего делаем запрос
AT+CLBS=4,1 // Get longitude latitude and date time
Способ у меня не заработал, после запроса модуль все время долго тупил, и в конце концов изрыгал +CLBS: 2, где 2, согласно этого Application Note — Time Out Error
Продолжив поиски, я нашел
Способ №2 — воспользоваться разделом AT Commands for GSM Location Application документа SIM800_AT_Command_v1_10
Начало точно такое же, как у первого способа:
AT+SAPBR=3,1,«CONTYPE»,«GPRS» // Set bearer parameter
AT+SAPBR=3,1,«APN»,«internet» // Set bearer context
AT+SAPBR=1,1 // Active bearer context
После чего делаем запрос
AT+CIPGSMLOC=2,1 // Get GSM time and date
Способ заработал, хотя меня не все устроило. В 8 с копейками часов вечера модуль вернул мне +CIPGSMLOC: 0,2018/10/27,17:16:29, что указывало на то, что время возвращается «по гринвичу».
Меня это конечно очень «обрадовало», ведь у меня есть летнее/зимнее время, и в зависимости от даты я должен был прибавлять +2/+3 часа (и писать для вычисления значение прибавки отдельную функцию).
В добавок ко всему надо было постоянно держать «Active bearer context» для возможности обновлять показания времени.
А у меня конечный автомат работы с GSM-модулем построен так, что если приходит несколько ошибок, модуль ресетится, и при этом понятное дело происходит Deactivate bearer context.
Полон надежд и ожиданий я взялся за
Способ №3 — воспользоваться командой AT+CCLK.
Просто посылаем AT+CCLK? и модуль возвращает текещую время и дату оператора.
Команда отработала как по маслу, и я уведел долгожанное +CCLK: «18/10/27,20:54:13+12»
К тому же этот способ не зависел от перезапуска модуля (не нужно никаких предварительных настроек перед запросом времени), и в этом его неоспоримый +.
Все было прекрасно, и я сразу заподозрил неладное и вставил карточку другого оператора.
И тут меня ждал ОБЛОМ, модуль каждый раз упорно возвращал ответ вида +CCLK: «04/01/01,00:00:58+12», то есть 1 день 1 месяца 2004 года и время от старта модуля.
Ага, подумал я, этот оператор бука, не дает время, попробуем третьего. Но третий тоже решил, что время, это слишком ненужная пользователю фича, и повторил поведение второго.
Я погуглил, и нашел, что надо включить Get Local Timestamp командой AT+CLTS=1 (и даже нашел ролик какого-то индуса, который показал, как у него исправилась точно такая же ситуация после включения этой опции).
Но увы, у меня все осталось по прежнему. Прибор должен поддерживать карточки всех 3 операторов, поэтому оставалось либо воспользоватся способом №2,
либо воспользоваться предложениями операторов (услуга «Точное время» и пр., у каждого оператора свое название, но суть одна — делаем USSD-запрос, и получаем назад время в PDU-формате/ гори он в аду, причем там только пару первых запросов бесплатны, потом гони бабло за каждый),
либо изобрести свой путь…
Способ №4 — воспользоваться SIM800+Series_NTP_Application Note_V1.01
То есть взять время с NTP-сервера. Но не просто так, а немного «поумничав».
Дело в том, что стандартный способ из этого Application Note выглядит почти как Способ №2
AT+SAPBR=3,1,«CONTYPE»,«GPRS» // Set bearer parameter
AT+SAPBR=3,1,«APN»,«internet» // Set bearer context
AT+SAPBR=1,1 // Active bearer context
После чего «конектимся» к серверу
AT+CNTP=«имя_сервера»,
После чего делаем запрос
AT+CNTP, на который сервер отвечает +CNTP: 1 (1 означает что синхронизация времени прошла успешно).
После чего можно делать Deactivate bearer context, и даже перезагружать модуль (без сброса питания естественно), время будет исправно тикать дальше — AT+CCLK? возращает номальное время.
Если модуль вернул не 1, значит что-то пошло не так. У меня кроме 1 бывало возвращало 64 — service response error, но достаточно редко.
Как видим, чтобы узнать время, надо опять же знать часовой пояс. Мы то его знаем. Но серверу то пох на наше летнее/зимнее время, он всегда возращает одно и то же. Опять писать код для вычисления «нужного» часового пояса…
Но тут, на выходных, как раз прошла смена времени на зимнее, и я при очередных экспериментах с карточками обратил внимание, что 2 жлобских оператора на запрос AT+CCLK? стали возвращать не +12 в конце (часовой пояс), а +08. То есть ЧАСОВОЙ ПОЯС ОНИ КОРРЕКТИРОВАЛИ в зависимости от зимнего/летнего времени.
И тут меня осенило.
Сперва делаем запрос AT+CCLK?, и независимо от того, актуальное время или нет, мы получаем РАБОЧИЙ ЧАСОВОЙ ПОЯС. Затем нужно проанализировать год, и если он начинается на 0 (2004 представлен как 04), значит оператор жлоб, и нужно сделать коннект к NTP-серверу с указанием «актуального» часового пояса. И сервер вернет «актуальное» для нас время.
И оно не будет сбиватся при при перезапуске модуля, и его всегда можно будет узнать командой AT+CCLK. Ура, товарищи, всем добра.
Contents
We will also use the same basic code to send and receive commands to the module from the computer. These go through Arduino, so that we are assured that everything is setup properly.