Gsm модуль sim800l и мк esp8266: вариант подключения

Модуль GSM GPRS SIM800 MicroSIM с антенной

Модуль GSM GPRS SIM800L (SIM800L) MicroSIM с антенной SIM800L GPRS GSM Module MicroSIM Card Core BOard Quad-band TTL Serial Port  

В модуль устанавливается симкарта формата микросим. 
Компонент SIM800L без металлического кожуха.

Миниатюрный модуль 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 подключаются динамик и микрофон. С модуля можно совершать звонки и принимать.

 
Характеристики   Питание             напряжение, В                         номинальное 4                         диапазон 3,4–4,4             ток                         в режиме ожидания 0,7 мА                         предельный 500 мА Максимальное напряжение высокого уровня интерфейса 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

Эта команда дает информацию о уровне сигнала. Первое число – уровень сигнала
 

Источник: https://arduino-kit.ru/product/modul-gsm-gprs-sim800-microsim-s-antennoy

GSM / GPRS модуль SIM800L

Здравствуйте!

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

В решении данного вопроса может придти на помощь GSM GPRS модуль на базе микросхемы SIM800L и ее аналогах(SIM 900,NEOWAY M590 и другие). Для удобства монтажа и повышения скорости разработки устройства, можно прибегнуть к покупке готового модуля (например на всем известной торговой китайской площадке).

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

Модуль на базе SIM800L выглядит следующим обзраом:

Следует помнить что модуль для своей работы требует не 5 вольт а 3.7-4.2, что зачастую вызывает необходимость установки дополнительного источника питания.

В момент регистрации в сети модуль может потреблять до 2А!

Подключение к микроконтроллеру производится по классической схеме:

Управляется микроконтроллер посредством AT команд, вот некоторые из них:

AT+GSN — IMEI модуля.
AT+IPR? — Информация о скорости порта.
AT+CPAS — Информация о состоянии модуля.
AT+COPS? — Вывод информации об операторе.
AT+CSQ — Информация об уровне сигнала.
ATD+7XXXXXXXXXX; — Позвонить по указанному номеру.

Не забудьте поставить ; в конце команды.
ATA — Ответить на входящий звонок.
AT+CMGS=”+7XXXXXXXXXX” > Text — Отправка SMS сообщения с текстом Text, на указанный номер.
AT — Проверка связи с модулем.

При успешном выполнении модуль ответит строкой “OK”.

При входящем звонке модуль отправляет строку RING.

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

После запуска модуль начнет часто моргать. После регистрации в сети модуль станет моргать реже. Если этого не происходит, и модуль моргает все так же часто значит происходит ошибка при регистрации в сети.

Следует проверить правильность подключения питания модуля, правильность установки SIM карты и антенны. Если все установлено правильно, попробуйте поднести модуль поближе к окну (Если Вы находитесь в помещении, разумеется).

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

Читайте также  STM32 Без HAL и SPL. Часть 1. GPIO

Изначально модуль настроен на скорость обмена 9600, 8 битную передачу с 1 стоп битом, и отсутствием контроля четности.

При подключении модуля к микроконтроллеру, после запуска модуля, следует отправить ему какую либо команду(лучше всего подойдет команда AT).Лишь после этого модуль начнет отвечать на Ваши запросы!
(Возможно это связанно с неисправностью конкретного модуля).

Как работать с UART смотрите здесь, здесь и здесь.

В следующей статье мы напишем прошивку для микроконтроллера!

Спасибо за внимание.

Источник: http://mkprog.ru/avr/gsm-gprs-modul-sim800l.html

GSM GPRS модуль SIM800L. AT команды

В предыдущей статье мы говорили о модуле SIM800l. В этой статье я хотел бы рассказать об управлении этим модулем. Как было сказано ранее — модуль управляется через UART интерфейс посредством AT команд.

Конечно, все AT команды я перечислять не буду — для этого существует даташит, в котором все они подробно расписаны. Даташит вы можете скачать в конце статьи. Остановимся на самых распространенных и необходимых AT командах управления модулем SIM800l. Но прежде, я вкратце расскажу о том как подключить модуль.

Итак, с питанием понятно — напряжение 4В и ток не менее 2А. Также понадобится переходник USB-UART, например такой. Подключаем переходник в свободный USB порт компьютера устанавливаем драйвера, далее подключаем RX вывод переходника к TX выводу модуля, а TX вывод модуля к RX выводу переходника. Вот и все.

Запускаем любую терминальную программу (Hyper Terminal или PuTTy), и вносим настройки. Собственно по настройкам:

  1. Номер COM порта (смотрим в диспетчере устройств),
  2. Скорость соединения — 9600 (Хотя изначально модуль настроен на автоопределение).
  3. Четность — (8-N-1 4)
  4. Управление потоком — нет.

После подключения шлем модулю первую команду — AT и жмем Ентер. Если все правильно модуль должен ответить — OK. Теперь несколько команд для принудительной настройки UART порта модуля:

AT+IPR=115200 — эта команда настраивает скорость порта на 115200. Можно поставить любое значение: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200. Если поставить 0, то это означает автоопределение скорости (настройка по умолчанию). На команду модуль отвечает OK, или ERROR — если что-то не так. Чтобы узнать текущую установленную скорость даем команду AT+IPR?

AT+ICF=3,3 — эта команда служит для установки четности порта модуля. Имеет два параметра. Первый — отвечает за кол-во бит в посылке/четность/стопбит.

Вот все варианты: 1 – 8/0/2, 2 – 8/1/1, 3 – 8/0/1, 4 – 7/0/2, 5 – 7/1/1, 6 – 7/0/1. Второй параметр — четность. Варианты: 0 – нечётный, 1 – чётный, 3 – нет. Т.е.

команда AT+ICF=3,3 означает 8/0/1 (8 бит посылка, четность нет, стоп бит — 1). Для проверки текущей четности вводим AT+ICF?.

Читайте также:  Xinlin x165: обзор маленького коптера - arduino+

AT+IFC=0,0 — эта команда для установки контроля передачи данных. Первый параметр – терминалом от модуля, второй параметр – модулем от терминала. Возможные варианты: 0 – нет контроля, 1 – программный, 2 – аппаратный. По умолчанию контроль выключен.

Далее команды о состоянии модуля. Думаю принцип понятен и их я приведу уже в виде таблиц для удобства.

Команда Ответ Описание
AT+GCAP +GCAP:+FCLASS,+CGSMOK Возможности модуля
AT+GMM SIMCOM_SIM900OK Идентификатор модуля
AT+GMR Revision:1137B09SIM900M64_STOK Ревизия
AT+GSN 01322600XXXXXXXOK IMEI
AT+COPS? +COPS: 0,0,»MTS-RUS»OK Информация об операторе
AT+COPS=? +COPS: (2,»MTS RUS»,»»,»25001″),(1,»MOTIV»,»MOTIV»,»25035″),(1,»Utel»,»Utel»,»25039″),,(0,1,4),(0,1,2)OK Доступные операторы
AT+CPAS +CPAS: 0OK Информация о состояние модуля

Источник: http://elschemo.ru/dlya-nachinayushhix/gsm-gprs-modul-sim800l-at-komandy/

Sim800l

Подписывайтесь на канал, чтобы быть в курсе обновлений!

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

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

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

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

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

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

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

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

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

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

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

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

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

В том числе, каждая из плат, в обязательном порядке имеет слот для внешней SIM-карты, таким образом, реализуя для пользователя этот интерфейс.

Более сложные варианты, включая Arduino-шилды, наоборот, делают доступ к расширенному функционалу модуля более удобным.

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

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

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

Источник: http://you-master.ru/texnologii-dlya-doma/sim800l/

Alex_EXE

В предыдущей статье – GSM модем SIM900 – рассмотрели, как запаять данный модем. Сейчас разберемся, как его подключить к компьютеру и пообщаемся с ним по средством AT команд.

SIM900 подключенный к компьютеру

Начнём с подключения к компьютеру, т.к. с него проще всего вести диалог с модулем. В нём нет нечего сложного, если модуль собран по схеме приведенной в предыдущей статье или подобной. Берем любой преобразователь интерфейса, например cp2102, ft232, max232 и подключаем к USB или COM порту компьютера.

Открываем любую терминальную программу, я же предпочитаю свою – AL Terminal (кстати, её версию обновил). На компьютере подключаемся к COM порту со скорость 9600 (по умолчанию для SIM900), к которому подключен модуль и общаемся. Если питать от компьютера, через преобразователь интерфейса, т.е.

от USB порта компьютера, то подключаем толстым USB кабелем, т.к. рабочие токи модуля могут быть в районе полу ампера, а кратковременные пики могут достигать 2А. Для питания модуля от 5В перемычкой JUMP1 нужно подать питание через стабилизатор, а не шунтировать его.

Если питать от батареи (3,2-4,7В), то шунтируем стабилизатор.

Диалог происходит по средством AT команд. Мы шлём модулю нужную команду или запрос, а он её выполняет и отвечает. Самая простая команда AT, на которую модуль тут же ответит OK, если модуль подключен и исправен.

Почти все команды имеют 3 режима:

  • тестовый =? – модуль ответит поддерживает ли он команду и возможные её параметры
  • чтение ? – ответом будет текущие параметры для этой команды
  • запись = записываем новые значения для команды.

A/ — повтор предыдущей команды

В статье, идёт речь о GSM модуле SIM900 (B09). Напоминаю, т.к. есть ещё и другие разновидности этого модуля и формат команд с ними может немного отличаться.

Управление портом

По умолчанию модуль настроен 9600 8N1, 9600 – скорость, 8 – бит в посылки, N – нет контроля чётности, 1- стоп бит.

Команда Ответ Описание
AT+IPR? +IPR: 0OK Скорость порта: 0 – автоматически 1200 2400 4800 9600 19200 38400 57600115200
AT+ICF? +ICF: 3,3OK Настройки передачи.Первый параметр: Бит в посылке/чётность/стоп бит 1 – 8/0/2 2 – 8/1/1 3 – 8/0/1 4 – 7/0/2 5 – 7/1/1 6 – 7/0/1Второй параметр – чётность:0 – нечётный 1 – чётный3 – нет
AT+IFC? +IFC: 0,0OK Контроль передачи данныхПервый параметр – терминалом от модуляВторой параметр – модулем от терминала 0 – нет контроля 1 – программный2 – аппаратный

Информация и состояние

Информация о модуле

Команда Ответ Описание
AT+GCAP +GCAP:+FCLASS,+CGSMOK Возможности модуля
AT+GMM SIMCOM_SIM900OK Идентификатор модуля
AT+GMR Revision:1137B09SIM900M64_STOK Ревизия
AT+GSN 01322600XXXXXXXOK IMEI

Информация о состояние модуля

Команда Ответ Описание
AT+COPS? +COPS: 0,0,»MTS-RUS»OK Информация об операторе
AT+COPS=? +COPS: (2,»MTS RUS»,»»,»25001″),(1,»MOTIV»,»MOTIV»,»25035″),(1,»Utel»,»Utel»,»25039″),,(0,1,4),(0,1,2)OK Доступные операторы
AT+CPAS +CPAS: 0OK Информация о состояние модуля

Источник: https://alex-exe.ru/radio/wireless/gsm-sim900-at-command/

Первые шаги с STM32 и компилятором mikroC для ARM архитектуры — Часть 3 — UART и GSM модуль

Сейчас немного научившись программировать под наш микроконтроллер, попробуем связать его с внешним миром. Аппаратные интерфейсные модули STM32 поддерживают много много различных внешних интерфейсов. Начнем с самого часто используемого интерфейса UART. Что это за интерфейс можно прочитать здесь и здесь.

Попробуем подключить наш МК к компьютеру посредством UART. Для этого я использую простой USB — UART TTL (3.3V) (не забываем что у нашего МК уровни — 3.3 V ) конвертер на базе микросхемы PL2303.В STM32 имеется 3 UART интерфейса. Перед тем как его использовать необходимо сконфигурировать наш последовательный приемопередатчик в МК.

Для этого используем команду:UARTх_Init(baud_rate);
Эта команда запускает наш UART на скорости baud_rate (например 9600 или 19200 kbs) со стандартными параметрами (8 бит данных, без аппаратного контроля четности.

) Если нужно запустить UART в каком-то нестандартном режиме, то используем:UARTx_Init_Advanced(baud_rate, data_bits, parity, stop_bits);здесь:

  • baud_rate — скорость порта;
  • data_bits — количество бит данных, возможно использовать структуры _UART_5_BIT_DATA, _UART_6_BIT_DATA, _UART_7_BIT_DATA, _UART_8_BIT_DATA;
  • parity — контроль четности (_UART_NOPARITY, _UART_EVENPARITY, _UART_ODDPARITY) соответственно без контроля четности, контроль по четности, контроль по нечетности;
  • stop_bits — количество стоп бит (_UART_ONE_STOPBIT, _UART_TWO_STOPBITS) — 1 или 2 стоп-бита соответственно;

Чтобы передать байт данных в наш UART используем:
UARTx_Write(unsigned int _data);
UARTx_Write(char _data);
или для массива данных (не важно текст или набор значений) передаем функции:UARTx_Write_Text(char * UART_text); используя указатель на маcсив. Напишем простую программу:
char ourtext[] = «Hellow world»;
char *txt_pnt;
void main() { UART1_INIT (19200); delay_ms (5); // ждем 5 мс txt_pnt = &ourtext; UART1_Write_Text(txt_pnt); while (1) { }
{

Подключаем RX STM32 к TX конвертера и ТX STM32 к RX конвертера и вставляем его в USB порт нашего компьютера. Открываем терминальную программу (Я использую PuTTY), выбираем режим SERIAL, скорость порта, например, 19200 kbs и COM порт который появился при подключении нашего USB-TTL конвертера (можно посмотреть в диспетчере устройств в ветке «Порты COM и LPT») и нажимаем «OPEN». Видим наш текст в окне терминала.Передавая последовательно несколько байт данных, необходимо контролировать закончилась ли передача предыдущего. У каждого UART есть свой статусный регистр.

Читайте также:  Топ-5 бюджетных квадрокоптеров - arduino+

USART1_SR. За окончание передачи отвечает бит USART1_SRbits.TC Функция UARTx_Write_Text (char * UART_text) сама контролирует, перед передачей следующего, завершение передачи предыдущего байта.

Для чтения данных с UART микроконтроллера используется функция:char UARTx_READ()Чтобы знать что в буфере нашего UARTа есть принятый байт используем функцию:UARTх_Data_Ready()возвращающую 1 если принятый байт есть в буфере и если там его нет. В данном случае нам необходимо постоянно контролировать принял ли что-либо UART нашего контроллера.

Давайте попробуем при приеме, например, буквы «А» (ASCII код 65) зажечь светодиод на плате:
void main()
{ GPIO_Digital_Output(&GPIOb_BASE, _GPIO_PINMASK_1); UART1_INIT (19200); delay_ms (5); UART1_Write_Text(«WAIT CHAR A»); while(1) { if (UART1_Data_Ready()) // если есть данные в буфере приема UART { if (UART1_READ()== 65) // если принят код 65 { GPIOb_ODR.

b1 = 1; // зажигаем светодиод } } }
}
Чтобы постоянно не занимать МК опросом состояния регистра UART можно (и нужно) использовать прерывание. При приеме очередного байта вызовется аппаратное прерывание от UART, в котором мы можем обработать данные, принятые поп последовательному интерфейсу.

Для включения прерывания по событию «RX UART» нам нужно записать в бит RXNEIE регистра CR1 используемого модуля UART логическую 1. UART1_init (19200); NVIC_IntEnable(IVT_INT_USART1); // Иннициализируем вектор прерывания IVT_INT_USART1 EnableInterrupts(); // Разрешаем прерывания USART1_CR1bits.

RXNEIE = 1; // Разрешаем прерывания по приему байта delay_ms (5);
как и в случае с таймером, при возникновении прерывания вызывается подпрограмма:
void our_int() iv IVT_INT_USART1 { if (UART1_READ()== 65) GPIOb_ODR.b1 = 1; // Если приняли A = зажигаем светодиод if (UART1_READ()== 66) GPIOb_ODR.

b1 = 0; // Если приняли B = гасим светодиод }
При помощи UART можно связывать наш МК не только с компьютером, но и с многими периферийными устройствами. Для примера рассмотрим широкодоступный GSM модуль SIM800L. Мне достался данный модуль уже распаянный на небольшой плате. Такой недорого можно заказать в Китае.

На штырьки этой платы выведены все необходимые для работы с модулем сигналы, к тому же плата имеет держатель под СИМ карту.Единственное что не удобно, это необходимость для питания данной платы напряжения от 3,7 до 4,2 В. Так что придется или подключать внешнюю литиевую батарею, или городить преобразовать с выходным напряжением 4,1 В.

Учитывая широкое распостранение регулируемых DC-DC это, думаю, не составит особой проблемы.

Подключим наш модуль у МК, не забывая что RX модуля идет на TX МК и наоборот. Для Maple mini модуль подключаем RX к 26 пину (PA9 / UART1TX), TX к 25 (PA10 / UART1RX).

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

Мы будем использовать 2 UART микроконтроллера, UART1 для связи МК -GSM и UART3 для связи МК — терминал компьютера. Иннициализируем наши UARTы
void main() { UART1_init (19200); // Включаем UART для связи с компьютером UART3_init (19200); // Включаем UART для связи с GSM модулем NVIC_IntEnable(IVT_INT_USART1); // Настраиваем прерывание по приему байта от GSM USART1_CR1bits.

RXNEIE = 1; EnableInterrupts(); delay_ms(200); while (1) { }
}

Наша программа потребует относительно большого количества функций, поэтому вынесем их в отдельный с-файл. Для этого нажмем Ctrl+N в Microc, создадим в проекте еще один файл, например «GSM_SIM800L.с».

Для того чтоб наш компилятор понял, что часть функций нужно искать в другом файле, допишем в начале основного с-файла строку (аналогично можно и подключать библиотеки.).
#include «GSM_SIM800L.с»
Для начала, в файле «GSM_SIM800L.с» напишем функцию передающую модулю АТ команду и принимающую от него ответ.

static char GSM_TEMP[256]; // Буфер приема от GSM модуля
unsigned short com_status; // Статус выполнения команды 0 — пускай будет ошибка, 1 — ОК, 2 — нет ответа от модуля (виснет он иногда)
unsigned short com_mode = 0; 0 — ответ на запрос, 1 — асинхронный ответ void Clear_GSM_Bufer () // Функция очищает буфер GSM { unsigned int cnt; for (cnt=0; cnt 255) cntas = 0; else cntas++; // Инкриментируем индекс элемента массива и следим чтобы индекс не вышел за размер массива if (com_mode == 0) // Если ждем ответ на запрос { if (strstr(GSM_TEMP, «OK
«) != 0) com_status = 1; // ОК — com_status = 1 if (strstr(GSM_TEMP, «ERROR
«) != 0) com_status = 0; //Error — com_status = 0 }
}

В MicroC строка это массив символов char который заканчивается значением 00 (NULL) означающем конец строки. Строка как аргумент функции задается указателем на тип char (например char *nasha_stroka). MicroC поддерживает функции стандартной Си — шной библиотеки С_String.h. Например выше использованна функция
char *strstr(char *s1, char *s2);

эта функция ищет подстроку, заданную указателем *s2 в строке*s1. Функция вернет указатель на найденную подстроку *s2. (фактически вернет строку от начала *s2 до конца (NULL символа) строки *s1). Если подстрока *s2 не найдена то функция вернет NULL . По умолчанию в С передача массива по его имени это указатель на начало массива. Если нужно передать массив c определенного элемента, то используем (&array_name[ind]).

Для начала непроходимо дать модулю простую команду «AT
»
— Модуль на нее должен ответить «OK
»
и согласовать скорость своего UART. Любая АТ команда заканчивается символом перевода строки »
«
. Ответ модуля на любую команду может состоять из нескольких строк и всегда заканчивается «OK
»
или «ERROR
»
. Сообщение модуля, как то сообщение о входящем звонке или СМС всегда заканчивается »
«
, причем жизнь упростило то, что информативна обычно только последняя строка. Прием таких строк, я называю асинхронным ответом (не совсем корректно, но пускай так).

Выполним несколько команд, необходимых для конфигурации модуля.

Для простоты не будем контролировать ответы модуля, хотя несложно при выполнении каждой команды проверять статус на равенство 1;

  • «ATE0
    »
    — Отключим эхо (повтор на выход UARTa нашей команды)
  • «AT+GMM
    »
    — Вернет название модуля
  • «AT+CMGD=1,4
    »
    — Удаляем все СМС, сохраненные в нашем модуле
  • «AT+CMGF=1
    »
    — Включаем для СМС режим ASCII, иначе нам сложнее будет их читать в символах Юникода
  • «AT+DDET=1» — Включаем распознание модулем DTMF команд

gsm_send_at («AT
«);
gsm_send_at («ATE0
«);
gsm_send_at («AT+CMGD=1,4
«);
gsm_send_at («AT+CMGF=1
«);
gsm_send_at («AT+DDET=1
«);
Напишем еще одну функцию которая вернет ответ модуля (а не просто статус запроса, при чем максимально в нужном нам виде. В даташите к модулю описаны ответы на АТ команды, используя регулярные выражения о особенности ответа практически всегда нужную нам часть строки можно ограничить с 2 сторон заранее известными символами).
char *gsm_at_parse (char *at_cmd, char *beg_str, char *end_str)
// *at_cmd = наша команда
// *beg_str = символы перед нужной нам частью строки
// *beg_str = символы после нужной нам части строки { char *tempchar; if (gsm_send_at (at_cmd) == 1) // отправляем команду { tempchar = strstr (GSM_TEMP, beg_str); // ищем beg_str tempchar = tempchar + strlen(beg_str); *(strstr (tempchar, end_str)) = 0; // ставим NULL символ перед началом end_str return tempchar; } }

Например «AT+GMM
»
вернет название модуля в виде »
SIM_800L

OK
«
. «Откусим» начальные »
«
и конец »

OK
«

UART3_Write_Text (gsm_at_parse(«AT+GMM
«, »
«, »

OK
«)); \ Выведет в UART3 (в наш Терминал на ПК, имя модуля)
UART3_Write_Text (»
«);
UART3_Write_Text (gsm_at_parse(«AT+CCLK?
«, «,», «+»)); \Выведет текущее время на часах модуля
UART3_Write_Text (»
«);
UART3_Write_Text (gsm_at_parse(«AT+CSPN?
«, «: «», «»»); \Выведет название оператора сети GSM.
UART3_Write_Text (»
«);

Среди АТ команд модуля существует команда «AT+CREG?
»
. Данная команда вернет состояние модуля о регистрации в сети. Если все ОК и модуль зарегистрирован ответ должен быть таким: »
+CREG: 0,1

OK
«
. 0,0 — модуль не зарегистрирован и нет поиска сети (например не вставлена SIM карта), 0,2 — модуль не зарегистрирован, идет поиск сети. Напишем функцию проверки состояния сети модуля, кроме этого вернем уровень сигнала GSM сети (для этого есть АТ команда «AT+CSQ
»
).
short int gsm_net_status () { char *tempchar[7]; // временная переменная int sgr; // уровень сигнала в сети в dBi if ( gsm_send_at(«AT+CREG?
«) == 1) // выполним запрос состояния сети { if (strstr(GSM_TEMP, «0,1»)) // если сеть есть — модуль вернул «+CREG: 0,1» { tempchar = GSM_AT_PARSE («AT+CSQ
«,»: «,»,» ); //Запросим уровень сигнала, вернет строку типа +CSQ: 17,0, нужное нам значение между : и , sgr = atoi(tempchar); // преобразуем строку в число sgr = -115 + (sgr * 2); // переведем число в dBi return sgr; // вернем значение } } return 0; // иначе вернем 0 — нет сети или модуль не зарегистрирован. }
Теперь наш модуль работает. Если мы позвоним на него то он выдаст в свой UART строку типа

»
RING
+CLIP: «+380XXXXXXXX»,145,»»,,»»,0
»
. При входящей СМС ответ будет »
+CMTI: «SM»,10
«
, где 10 означает что наша смс сохранена в памяти под номером 10. Это названые мной асинхронные ответы. мы их будем принимать и обрабатывать в обработчике нашего прерывания. Я написал распознавание наиболее нужных мне ответов. в принципе, как это делается, должно быть понятно из кода ниже.

char *eol // временная переменная, индекс символов »
»
char callingnumber[14]; // номер входящего абонента, 13 символов и NULL символ
char last_sms[4]; // Номер принятой СМС
char dtmf_in[2]; //Последняя приятая DTMF команда unsigned short callnow; // входящий вызов
unsigned short active_call; // активный звонок
unsigned short sms; // принято смс сообщение void gsm_read() iv IVT_INT_USART1 { GSM_TEMP[cntas] = UART1_READ(); if (cntas> 255) cntas = 0; else cntas++; if (com_mode == 0) { if (strstr(GSM_TEMP, «OK
«) != 0) com_status = 1; if (strstr(GSM_TEMP, «ERROR
«) != 0) com_status = 0; } // описаный ваше прием ответа на АТ команду if (com_mode == 1) { if (cntas> 2) eol = strstr(&GSM_TEMP[2], »
«); else eol = 0; // ищем конец строки if (eol != 0) //если принята полная строка { if (strstr(&GSM_TEMP, «+CLIP») != 0) // если в ней нашли «+CLIP» то это сообщение о входящем звонке { callnow=1; //есть входящий звонок temp = strstr(GSM_TEMP, «»+»); // ищем в буфере знак + — с него начинается номер strncpy (callingnumber, temp+1, 13); // копируем в массив callingnumber[] наш номер, длинной 13 сиволов } if (strstr(&GSM_TEMP, «CARRIER») != 0) // если получили «NO CARRIER» { *callingnumber=0; // очистили строку с входящим номером (вписали NULL в начало строки) callnow=0; // вызов и звонок окончен active_call=0; } if (strstr(&GSM_TEMP, «DTMF») != 0) { temp = strstr(GSM_TEMP, » «); //SIM800 умеет сам распознавать DTMF команды, в таком случае ищем в терминале сообщение о распознанной DTMF команде. strncpy(dtmf_in,temp+1,1); //копируем в переменную dtmf_in[] } if (strstr(GSM_TEMP, «CMTI»)!=0) // если приняли СМС { temp = strstr(GSM_TEMP, «,»); //ищем «,», она как раз перед номером СМС strncpy (last_sms, temp + 1, eol — (temp + 1)); //копируем в переменную last_sms[] sms=1; //принято СМС сообщение } Clear_GSM_Bufer (); //чистим буфер } } }

Контролируя во цикле программы значение переменной callnow можно узнать о входящем звонке. Поднять трубку мы можем при помощи команды «ATA
»
, сбросить вызов — «ATH0
»
.
сhar *nashomer[14] = «+380931234567» if (callnow == 1) { if (strcmp(&callingnumber, «nashomer»)==0) // strcmp (*s1, *s2) — сравнивает 2 строки, вернет 0 если каждый символ s1 = s2 { gsm_send_at («ATA
«); // AT команда «Взять трубку» active_call = 1; //ставим флаг означающий что сейчас идет звонок. } else { gsm_send_at («ATH0
«); // AT команда «Повесить трубку» callnow = 0; //сбросим флаг входящего звонка } }

Аналогично контролируя значение переменной sms узнаем о входящем смс сообщении. прочитать его мы можем командой «AT+CMGR=2
»
где N = номер СМС сообщения. В ответ модуль отдаст строку типа »
+CMGR: «REC READ»,»+380XXXXXXXX» ,»» ,«17/02/1,11:57:46+2»
hellow habrahabr

Читайте также:  Кран, который реагирует на движение своими руками

OK
«. Для разбора этой строки создадим функцию:
char *gsm_read_sms (char *sms_num, unsigned short int sms_field)
// передаем номер смс (как строка) и поле которое нужно вернуть (целое число), //1 — номер отправителя, //2 — время получения смс, //3 — текст смс { char sms_at[30]; short int res_at; strcat (sms_at, «AT+CMGR=»); strcat (sms_at, sms_num); strcat (sms_at, »
«); res_at = gsm_send_at (sms_at); if (res_at == 1 && sms_field == 1) { *(strstr (GSM_TEMP, «»,»»,»»)) = 0; sms = 0; return strstr(GSM_TEMP, «»+») + 1; } if (res_at == 1 && sms_field == 2) { *(strstr(strstr(GSM_TEMP, «»,»»,»») + 6, «+»)) = 0; sms = 0; return strstr(GSM_TEMP, «»,»»,»») + 6; } if (res_at == 1 && sms_field == 3) { *(strstr (GSM_TEMP, »

OK
«)) = 0; sms = 0; return strstr(GSM_TEMP, «»
«) + 3; } return 0; //если ошибка вернем 0
}
Например:
UART3_Write_Text (gsm_read_sms(«5»,1)); // в терминал вернет номер отправителя смс с номером 5
UART3_Write_Text (gsm_read_sms(«2»,3)); // в терминал вернет текст смс с номером 2

Для отправки СМС используется АТ команда «AT+CMGS=»+380XXXXXXXX
«
. Эта команда в ответ выдает символ »
>» — приглашение к вводу. Можно ловить это приглашение в ответе модуля, я же просто даю задержку в 100 мс. и отправляю в UART текст смс который должен окончится символом с ASCII кодом 26
UART1_Write_Text («AT+CMGS=»»);
UART1_Write_Text (nomer); // номер получателя смс
UART1_Write_Text («»
«);
Delay_ms (100);
UART1_Write_Text (text); //текст нашей смс
UART1_Write (26); Символ окончания ввода
В статье описана только малая часть возможностей как GSM модуля так и UART интерфейса МК STM32. Тем не менее, я надеюсь, что изложенная выше информация будет полезна для понимания работы с последовательным интерфейсом реализованном в микроконтроллере.

В следующей статье я расскажу что такое шина I2C, как работать с ней и как подключить LCD индикатор на основе контроллера HD44780 к STM32 по параллельной шине и через I2C расширитель линий ввода/вывода.

Источник: https://habr.com/post/321056/

Работа с SIM модулем SIM800L

2016-11-12 в 12:27

В примере покажем как работает GSM модуль SIM800L. Можно использовать и другие GSM модули SIMxxx так как они работаю по схожему принципу, а отличаются функционалом.

В данном случае будем отправлять SMS с командами «1» и «0» тем самым включая и отключая нашу нагрузку — светодиод. вы же можете использовать какое либо реле.

А управлять можно будет чем угодно, тут на что фантазии и навыков хватит.

Подключается к Arduino через серийный порт: Pin 2 Arduino — pin TX SIM800L

Pin 3 Arduino — pin RX SIM800L

Модуль sim800 питается от 3.7 до 4.2 вольт. Если его подключить к 5 вольт то модуль просто сгорит, а если к 3.3 вольт то этого будет недостаточно. Поэтому используем стабилизатор на 4 вольта. Вся система питается у меня от блока аккумулятора 7.2 вольта.

В Arduino есть встроенный преобразователь который позволяет подавать напряжение до 20 вольт.Для примера работы использовал простой светодиод подключенный к pin 10 Arduino.

Отправляем на номер sim карты которая установлена в модуле сообщение с текстом «1» и в течении 10 секунд светодиод загорится.

Для того чтобы выключить светодиод, отправим другое сообщение, но уже с текстом «0». И через некоторое время светодиод погаснет.

Скетч для Arduino

Код

#include SoftwareSerial gprsSerial(2, 3); // установка контактов 2 и 3 для программного порта int LedPin = 10; // для реле   void setup() {  gprsSerial.begin(4800);

 pinMode(LedPin, OUTPUT);

   // настройка приема сообщений    gprsSerial.print(«AT+CMGF=1
«);  delay(500); // задержка на обработку команды  gprsSerial.print(«AT+IFC=1, 1
«);  delay(500);  gprsSerial.print(«AT+CPBS=»SM»
«);  delay(500); // задержка на обработку команды  gprsSerial.

print(«AT+CNMI=1,2,2,1,0
«);  delay(700); }   String currStr = «»; // если эта строка сообщение, то переменная примет значение True boolean isStringMessage = false;   void loop() {  if (!gprsSerial.available())  return;    char currSymb = gprsSerial.

read();  if ('
' == currSymb) {  if (isStringMessage) {  // если текущая строка – сообщение, то…  if (!currStr.compareTo(«1»)) {  digitalWrite(LedPin, HIGH);  } else if (!currStr.compareTo(«0»)) {  digitalWrite(LedPin, LOW);  }    isStringMessage = false;  } else {  if (currStr.

startsWith(«+CMT»)) {  // если текущая строка начинается с «+CMT», то следующая сообщение  isStringMessage = true;  }  }  currStr = «»;  } else if ('
' != currSymb) {  currStr += String(currSymb);  }

}

Источник: http://TehnoPage.ru/rabota-s-modulem-sim800l

SIM800L GSM GPRS модуль для Arduino и esp8266

Задать вопрос продавцуСделать предложение

Состояние : новое

Наличие : в наличии

Техническое состояние : исправное

Миниатюрный модуль GSM/GPRS сотовой связи на основе компонента SIM800L , разработанного компанией SIMCom Wireless Solutions.

Стандартный интерфейс управления компонента SIM800L предоставляет доступ к сервисам сетей GSM/GPRS 850/900/1800/1900МГц для отправки звонков, СМС сообщений и обмена цифровыми данными GPRS.

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

Управлять модулем можно при помощи персонального компьютера через преобразователь интерфейса USB-UART или непосредственно через UART модулем микроконтроллера самостоятельной разработки или Arduino, Raspberry Pi и аналогичными.

Благодаря функции отправки СМС сообщений наиболее часто модуль GSM GPRS SIM800 MicroSIM с антенной используется в диспетчеризации, беспроводной сигнализации и в охранных системах.

При этом в результате различных событий происходит отправка сообщений вида: “Аварийная остановка лифта 3 дома №17”, “Гараж открыт”, “Дверь подвала открыта”, “Отключено 220 по перегрузке”, “Протечка системы отопления”, “Отопительный котел выключен”, “Температура в теплице ниже нормы”.

К модулю GSM GPRS SIM800 MicroSIM подключаются динамик и микрофон. С модуля можно совершать звонки и принимать.

Напряжение питания

3.7…4.2 В

Поддерживаемые диапазоны

GSM 850/ 900/ 1800/ 1900 МГц

Класс мощности

4 (2 Вт в диапазонах 850/ 900 МГц)

Класс мощности

1 (1 Вт в диапазонах 1800/1900MHz)

Размеры

23* 25 * 7 мм

Характеристики:

  • Напряжение питания: 3.7-4.2 В
  • Поддержка сети:Unicom и Глобальной четырехдиапазонной сети
  • ЧИП: SIM800L
  • Слот для miniSIM-карты.
  • GSM 850/ 900/ 1800/ 1900 МГц
  • TTL последовательный порт можно связать напрямую с микроконтроллером, без необходимости MAX232.
  • Когда сигнал есть, индикатор мигает медленно, когда нет, быстро.
  •  SIM800 модуль поддерживает протокол передачи гипертекста (Hyper Text Transfer Protocol).
  • Базовые приложения содержат GET, POST, HEAD методы. Он также поддерживает прокси сервер.
  •  SIM800 модуль поддерживает приложения FTP протокола, что дает режим взаимодействия с FTP сервером.
  • Базовые приложения содержат такие методы, как GET, PUT methods. PUT метод поддерживает APPE, STOR и другие режимы.

Размер: 25х23 мм 

Комплектация:

 — Плата на базе GSM/GPRS модуля SIM800L

 — контактная PLS-планка

 — антенна

Доставка и Оплата: 1) Посылкой Укрпочты 15 гр 2) Предоплата. Посылкой «Новой Почты», доставка за счет покупателя. 3) Предоплата. Посылкой «IнТайм», доставка за счет покупателя. 4) Наложенным платежом (предоплата 30 гр.)

Если укрпочтой то без предаплыты, но к цене прибавляется +20 гр за доставку.

Предоплата

Оплата при получении

Стандартный банковский перевод

Онлайн-перевод

Укрпочта по городу: 15 грн. по стране: 15 грн.
Курьерская служба по городу: 35 грн. по стране: 35 грн.

Источник: https://newauction.com.ua/offer/sim800l_gsm_gprs_modul_dlja_arduino_i_esp8266-i66855029502415.html

Ссылка на основную публикацию