GSM модуль Arduino — Как работает, для чего нужен, популярные модели?

В закладки

1. Для M590 Реализованы следующие функции: — Отправка SMS (только латинский вариант) — Прием SMS (только латинский вариант) — Обработка входящего звона. * Определение номера звонящего * Подсчет числа гудков входящего вызова * Сброс вызова *Так как модуль не имеет входов под микрофон и динамик, остальные функции голосового соединения не реализованы. — Периодический опрос модуля на : * Наличие регистрации в сети оператора * Уровень сигнала, в dBm * Имя оператора сотовой связи * Текущее время модуля . Синхронизации времени с вышкой сотовой связи, идет при запуске модуля, для повторной, его необходимо перезагрузить — Работа с USSD запросами — Работа с телефонной книгой SIM-карты. Предназначено для возможности задачи рабочих номеров не в проекте, а на сим карте, и главное возможности смены рабочих номеров, без перепрограммирования контроллера. -Реализовано возможность исходящего голосового вызова (разговор невозможен, не имеет входов под микрофон и динамик ) -Добавлен параметр выбора частоты работы сотовой связи авто/900/1800. 2 Для SIM800 Поддерживает все функции описанные для M590, за некоторыми отличиями: — Обработка входящих звонков, возможно установка соединения и разговора — Исходящий голосовой вызов — Поддержка приема DTMF кодов. Подробнее в описании блока. 3 Для SIM900 Поддерживает все функции описанные для SIM800, за некоторыми отличиями: — Поддержка приема DTMF кодов. (Не работает в некоторых прошивках, в этом случаи надо отключать через параметры ) Подробнее в описании блока.

Блок может работать как с аппаратными COM портами, так и SoftwareSerial.

Подробнее в описании блока.

Еще прилагаю два блока для расшифровки времени, которое выдает блок работы с GSM модулем.

В разработке и тестировании блоков очень помогли пользователи НовыйUser, stapmoff,

Обещанные ссылки : GSM модуль NEOWAY M590 – описание и команды управления Отправка СМС через Arduino и GSM модуль NEOWAY M590 Подключение GSM модуля SIM800L к Arduino GSM/GPRS модуль SIM900 GSM/GPRS модуль SIM900. Часть вторая.

Вложения

  • GSM-NEW Дата добавления: 10.11.2019 11:54 Размер файла: 22 МБ Кол-во скачиваний: 2143

Arduino – это аппаратная платформа, которая применяется для создания электронных устройств разного типа. Зачастую для разработки системы охраны, производитель дополнительно использует GSM модуль. Конструкция не отличается своей сложностью, так как имеет простой язык программирования, помимо этого разработчик применяет открытый код. То есть даже человек, который не имеет особых навыков в этой нише, без особого труда сможет создать надежную охранную систему абсолютно для любого помещения. GSM модуль для ардуино является на данный момент оптимальным решением для разработки системы доступной по цене, и в зависимости от требований ее можно достаточно быстро настроить.

Содержание

Сфера применения

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

Назначение

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

На видео: Система «Умный Дом» #3. GSM сигнализация своими руками. SIM800L + Arduino

Основные особенности

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

  1. Доступную цену. Платформа отличается своей небольшой стоимостью в сравнении с другими аналогичными системами. Но при этом тут есть весь необходимый набор функций для обеспечения полной безопасности.
  2. Кросс-платформенность. Программное обеспечение Arduino может эффективно взаимодействовать с Linux, Windows, Macintosh-OSX.
  3. Простой процесс программирования. Для того чтобы настроить микроконтроллер применяется среда программирования Processing. Данный вариант отлично подходит не только для профессионала, но и также для пользователя, который еще не имеет навыков работы с подобными устройствами.

Как работает устройство?

Для того чтобы обеспечить защиту собственного имущества и настроить работу системы на платформе Arduino, нужно приобрести еще и GSM модуль. Благодаря ему появляется возможность выполнить вход во всемирную паутину, выполнять дозвон или отправлять СМС оповещения.

Помимо этого в GSM плате имеется и специальный радиомодем М10, который взаимодействует с системой посредствам АТ команд. Передача данных реализуется с помощью программного последовательного интерфейса с использованием специального цифрового кода.

Стоит отметить, что аппаратное устройство Arduino, оснащенное GSM модулем функционирует на 4 частотах. И дополнительно в модеме имеется поддержка отдельных, наиболее популярных протоколов, что в свою очередь гарантирует GPRS соединение. И GPRS модуль Arduino обеспечивает скорость передачи данных до 90к/бит в секунду.

Важно понимать, что отправка СМС уведомлений через устройство выполняется лишь в том случае, если предварительно была установлена СИМ карта любого сотового оператора. Это крайне важно!

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

Как выполнить подключение?

Перед подключением GSM модуля к Arduino в слот для СИМ карты, нужно провести установку соответствующего размера симку. Только после этого следует подключать сам модуль к аппаратной платформе. Производитель дает инструкцию, и чтобы не было проблем в работе, ее нужно придерживаться. При подключении нужно использовать компьютер, а устройство подсоединяется к ПК посредствам USB кабеля. После того как Arduino загрузиться, нужно закачать софт. Как только процесс будет завершен можно отключить платформу от ПК.

На видео: GSM/GPRS-модуль SIM800L (#1) — как выбрать, подключение, введение в AT-команды

Наиболее распространенные модели GSM модулей для Ардуино

На современном рынке имеется масса разных модулей SGM, но есть перечень наиболее популярных разработок, которые пользуются особым спросом среди потребителей.

Neoway M590

Сразу стоит выделить среди всего разнообразия качественную и надежную модель Neoway M590, подключение осуществляется без использования проводов. Устройство используется для приема и передачи данных с использованием мобильных сетей. Подобный модуль разработан на плате, где имеется минимальная обвязка.

Благодаря такой модели владелец может настроить связь с внешним устройством, можно мгновенно получать СМС уведомления, обмениваться данными. Также стоит отметить тот факт, что конструкция не предусматривает микрофонного входа, тем самым не поддерживается голосовая связь. То есть соединение может быть установлено, однако не будет передаваться звук.

Что касается управления, то для этого используется АТ команды, который передаются благодаря последовательной связи. Диапазон частот довольно обширный и тут не возникнет никаких проблем. Если говорить о питании, то напряжение варьируется от 3,3 до 5В, так что дополнительно требуется использование специального преобразователя напряжения.

GSM модуль SIM800L

Устройство отличается небольшими размерами, и при этом уровень сигнала все равно отличный. Но если есть необходимость улучшить данный параметр, то можно приобрести модель с дополнительной антенной. Для того чтобы управлять устройством используется ПК, модуль подключается посредствам кабеля USB-UART. Также стоит сказать, что в работе есть свои тонкости, к примеру, SIM800L подключение требует использования преобразователя логических уровней. То связано с тем, что напряжение достигает 2,8В.

GPRS shield

Seeed Studio предлагает потребителю модуль, который имеет функцию обмена данными посредствам GPRS, и при этом владелец может совершать звонки и получает на мобильное устройство СМС уведомления. Особенность устройства заключается в том, что при разработке используется модуль SIMcom SIM900. Подключение не отнимает много времени и модуль оснащается разъемом для СИМ карты, 3,5 для входа и выхода аудио системы, и даже разъем для подключения внешней антенны. Serial соединение и набор АТ команд помогут пользователю в управлении устройством.

GSM GPRS SIM900

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

  1. Голосовая связь.
  2. Отправка СМС сообщение.
  3. Передача данных посредствам мобильной связи.

На видео: GSM сигнализация своими руками. от А до Я. Arduino, Sim900

GSM модуль используется совместно с Arduino и расширяют его функционал, такой как отправка SMS, соединение и передача данных через GRPS, совершение звонков. Наиболее популярные и часто используемые модули SIM900, SIM800L, A6, A7.

GSM модуль SIM900

Этот модуль нашел свое применение в различных автоматизированных системах. Обмен данным с устройствами происходит по интерфейсу UART. Также при его помощи можно делать звонки и обмениваться текстовыми сообщениями. Отправка SMS может использоваться в охранных системах. Также на нем можно отслеживать маршрут совместно с Глонасс или GPS устройством.

image

Модуль работает на микросхеме SIM900 производимой SIMCom Wireless Solution.

Характеристики модуля SIM900

  • напряжение питания 4,8-5,2 В;
  • потребляемы ток в рабочем режиме 450 мА, максимальный ток в импульсном режиме 2 А;
  • поддержка 2G;
  • мощность передачи: 1 Вт 1800 и 1900 МГц, 2 Вт 850 и 900 МГц;
  • имеются встроенные протоколы TCP и UDP;
  • GPRS multi-slot class 10/8;
  • рабочая температура от -30 С до 75 С.

GSM модуль SIM800L

Модуль сделан на базе компонента SIM800L и также предназначен для отправки SMS, совершения звонков и обмена какими либо данными при помощи GPRS. В модуль можно установить микро сим карту. В устройстве есть встроенная антенна и разъем, к этому  разъему можно прицепить антенну. Запитать модуль можно от внешнего источника или через DC-DC преобразователь. Управлять модулем можно через UART , подавая команды с компьютера, Arduino, Raspberry Pi или аналогичные устройства.

Технические характеристики:

  • напряжение питания 3,7В – 4,2В;
  • поддержка 4х диапазонной сети 900/1800/1900 МГц;
  • GPRS class 12 (85.6 кБ/с);
  • максимальный ток 500 мА;
  • поддержка 2G;
  • автоматический поиск в четырех частотных диапазонах;
  • рабочая температура от –30 С до 75 С.

GSM модуль A6

Модуль A6 создан фирмой AI-THINKER в 2016 году. Устройство предназначено для обмена SMS-сообщениями и обмена данными по GPRS. Плата небольшое энергопотребление и небольшими размерами. Модуль совместим с операторами российских сетей. В модуль есть поддержка карт формата микросим.

Технические характеристики:

  • напряжение питания 4,5 – 5,5В;
  • диапазон рабочих температур от -30 С до 80 С;
  • максимальный ток потребление 900мА;
  • GPRS Class 10;
  • поддержка протоколов PPP, TCP, UDP, MUX.

GSM модуль A7

A7 является новейшим модулем от фирмы AI-THINKER. В отличии от A6 имеет встроенный GPS, который упрощает конструкцию. Модуль  также поддерживает микросим карты. Есть функция передачи данных по GPRS, прием сигналов по GPS.

Технические характеристики:

  • напряжение питания 3,3В-4,6В;
  • частоты 850/900/1800/1900 МГц;
  • GPRS Class 10: Макс. 85.6 кбит;
  • подавление эха и шумов.

Подключение GSM модулей к Arduino

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

Итак для того чтобы подключить модуль SIM800L к Arduino. Понадобится понижающий преобразователь напряжения, который обеспечит нас напряжением в 3.7 В.

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

image

Схема подключения модуля SIM800 к Arduino Uno

Схема подключение модуля A6 к Arduino Uno

Модуль A6 стоит несколько дешевле, чем SIM900, а подключать к Arduino его гораздо проще. Модуль запитывается от напряжением 5 В, поэтому не нужно всякие там преобразователи, подаем 5 В и все.

Ножку RX с модуля подключается к TX на Arduino,а ножка TX подключается к пину RX на Ardiono. GND с модуля соединяется с GND на Arduino. Вывод VCC на модуле соединяется с PWR_KEY.

Схема подключение модуля  SIM900 к Arduino

Перед тем как подключить нужно обратить внимание на напряжение питания шилда. Ток можеть быть 15-2 А в процессе звонка или отправки, по этой причине не нужно подключать шилд напрямую от Ардуино.

Перед тем как подключить Arduino, cначала нужно нужно установить сим-карту на GSM-GPRS шилд и выставить джамперы TX и RX, как показано на рисунке.

Подключать нужно по следующей схеме – первый провод (желтый) с шилда подключается к TX на Ардуино. Второй провод (зеленый провод) подключается к RX на Ардуино. GND с шилда соединяется с GND Arduino. Напряжение на микроконтроллер поступает через USB кабель либо любой внешний источник питания главное чтобы было 5 В.

Схема подключения модуля  SIM900 к Arduino

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

  • соединить на Arduino выводы RESET и GND (в результате данные будут передаваться напрямую от шилда к компьютеру);
  • вставить сим-карту в шилд и подать питание на шилд;
  • плату Arduino нужно подключить к компьютеру и нажать кнопку включения.

Если все шаги выполнены правильно, загорится красный светодиод а зеленый начнет мигать.

AT-команды взаимодействия с модулем GSM

Для начала работы с GSM модулями нужно установить библиотеку GPRS_Shield_Arduino

AT-команды – это специальные команды для модема, которые состоят из коротких текстовых строк. Для того чтобы модем распознал отправленную ему команду, строка обязательно должна начинаться с символов at.  Восприниматься строка будет только тогда, когда GSM модем , будет пребывать в командном режиме.

Отправку AT-команд можно осуществлять с помощью коммуникационного программного обеспечения или же вручную с клавиатуры.

Большинство команд можно разделить на 3 режима:

  • тестовый, в котором модуль отвечает, поддерживает ли команду;
  • чтение – выдача текущих параметров команды;
  • запись – произойдет записывание новых значений.

Список наиболее используемых AT-команд:

  • AT – проверка правильности подключения GSM модуля. Если все исправно, то возвращается OK;
  • A/ – повтор предыдущей команды;
  • AT+IPR? – получение информации о скорости порта. Ответом будет +IPR: 0 OK (0 в данном случае – автоматически);
  • AT+ICF? – настройка передачи. В ответ придет +ICF: бит, четность;
  • AT+IFC? – контроль передачи. Ответом будет +IFC: терминал от модуля, модуль от терминала (0 – отсутствует контроль, 1 – программный контроль, 2 – аппаратный);
  • AT+GCAP – показывает возможности модуля. Пример ответа – +GCAP:+FCLASS,+CGSM;
  • AT+GSN – получение IMEI модуля. Пример ответа 01322600XXXXXXX;
  • AT+COPS? – показывает доступные операторы;
  • AT+CPAS – состояние модуля. Ответ +CPAS: 0. 0 – готовность к работе, 3 – входящий звонок, 4 – голосовое соединение, 2 – неизвестно;
  • AT+CCLK? – информация о текущем времени и дате;
  • AT+CLIP=1 – включение/выключение АОН. 1 – включен, 0 – выключен;
  • AT+CSCB=0 – прием специальных смс-сообщений. 0 – разрешено, 1 – запрещено;
  • AT+CSCS= “GSM” – кодирование смс-сообщения. Можно выбрать одну из следующих кодировок: IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1;
  • AT+CMEE=0 – получение информации об ошибке;
  • AT+CPIN=XXXX – ввод пин-кода сим-карты;
  • AT&F – сброс до заводских настроек;
  • AT+CPOWD=1 – срочное(0) или нормальное(1) выключение модуля;
  • ATD+790XXXXXXXX – звонок на номер +790XXXXXXXX;
  • ATA – ответ на вызов;
  • AT+CMGS=»”+790XXXXXXXX”» Test sms – отправка смс-сообщения на номер +790XXXXXXXX;

В данном случае представлены основные команды для модуля SIM900. У других модулей команды незначительно отличаются.

Данные в модуль отправляются через специальную программу «терминал», которая устанавливается на ПК. Подавать команды модулю можно также через мониторинг порта в Arduino IDE.

Отправка SMS-сообщений AT командами SIM900

В примере используются команды стандарта GSM 07.05.

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

Для начала нужно перевести формат передаваемого модулю текста сообщения в текстовый режим командой «AT+CMGF=1\r».

По умолчанию используется режим PDU, а сообщения передаются в HEX-виде, а это не очень удобно.

Нужно перевести кодировку на GSM при помощи команды «AT+CSCS=»GSM»\r»

Кодировка определяет  вид передаваемого номера телефонов, текста сообщений и USSD-запросы.

Самой удобный является «GSM», где символы представлены в ASCII кодах и их без труда понимает компилятор.

Но есть минусы будет доступна только латиница.

Для кириллицы необходимо использовать режим «UCS2» Unicode. Далее пока рассмотрим вариант с кириллицей

Отправка SMS сообщения

  1. Отправляем команду «AT+CMGS=»+79XXXXXXXXX»\r», ответом будет приглашение набрать текст сообщения — символ ‘>’.
  2. Отправляем текст. По окончании нужно отправить код комбинации клавиш Ctrl+Z (код 0x1A), только тогда модуль поймет, что текст набран и можно посылать сообщение адресату.
  3. Получаем «OK» — поздравляю, сообщение улетело.

Прием голосового звонка

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

#include

Если сим-карта заблокирована, то необходимо ввести ее пин-код. Если пин-код не требуется, это поле нужно оставить пустым.

#define PINNUMBER “”

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

boolean notConnected = true;

С помощью функции gsmAccess.begin() происходит подключение к сети. При установлении соединения вернется значение GSM_READY.

vcs.hangCall(); – функция, показывающая, что модем готов принимать звонки.

getvoiceCallStatus() – определяет статус скетча. Если кто-то звонит, она возвращает значение RECEIVINGCALL. Для записи номера нужно воспользоваться функцией retrieveCallingNumber(). Когда будет совершен ответ на звонок, вернется TALKING. Затем скетч будет ждать символа новой строки, чтобы прервать разговор.

Задать вопрос —>

Популярные записи

Технические характеристики импортных микрофонов

Технические характеристики импортных микрофонов WM — 034, WM — 52, WM — 54, WM — 60, WM — 62, WM — 66, WM — 55, WM — 56 ….

Справочник по полевым транзисторам КП701 — КП730

Тип S1-S2/I(U) мсим/А(В) I01-I02/U А/В Iз/Uз нА/В C11 пф C12 пф C22 пф Uзи/Iс(U0 …

Программирование на Arduino. Функция setup

Функция setup() вызывается первой когда запускается скетч. Эта функция необходима для инициализации…

GSM модуль и Arduino

При помощи Arduino GSM модулей можно подключатся к удаленным устройства использую сотовую связь. Передача данных…

Дата: 6 Октября 2016. Автор: Алексей

Всем привет! Давненько мы с вами не говорили про GSM. И так, начнем. Глубокоуважаемые Китайцы забацали новый бюджетный модуль под названием SIM800L. Да, да, этот модуль выпускает ихняяя же фирма SIMCOM. Я по началу боялся его тестить, мол на просторах России его нет и нет гарантии что данный модуль снюхается с нашими сетями. Заниматься перепрошивкой от другого модуля я не хотел, но мне просто чудесно повезло убить двух тараканов одним тапком. Я совсем забыл о замечательном магазине ЧипРезистор который с радостью мне предоставил данный модуль на растерзание. Вот как выглядит это чудо. Не густо, на плате установлен сам модуль, держатель для микросим, тантал, пару керамики, резистор и светодиод. Как ни странно Китайцы позиционируют данный модуль как шилд для Ардуины. Ардуина вроде как питается от 5 вольт и чаще всего от USB, а если меня не подводит память, то СИМкомовские модули кушают от 3,6в до 4,2 и при этом в пике хотят 2А. Ну да ладно, подключаю к отладочной плате и… Китайцы!!! Все что угодно лишь бы удешевить. Не работает данный модуль от 5 вольт. Моя память меня не подвела. Короче можно долго рассуждать чем его запитать, но я вам покажу один прекрасный девайс, который легко решит эту проблему. Прикупить его можно там же где и SIM800L, а именно в ЧипРезисторе. Модуль представляет собой понижающий импульсник до 3А. Долее берем этот модуль и припаиваем входные и выходные провода. Заем подключаем к тостеру и настраиваем на 4 вольта. Далее собираем все в кучу. Ммм, а как!? Вот схемка, вид сверху. Мой хаос выглядит вот так. Проверяем на короткое, вставляем симку, подключаем USB-RS232 и питание. Если ничего не задымилось и замигал светодиод на модуле, значит все в порядке. Далее запускаем како-нибудь терминал, у меня PuTTYn и кидаем первую команду AT. В ответ если получили OK значит все работает. Бинго! Далее кидаем AT+COPS? и если в ответ получили своего оператора, то для закрепления позвоните себе набрав команду ATD89161234567;. Точка с запятой обязательно! Если модуль дозвонился, то значит он работает с нашими сетями. Я тестил на пчелайне. Если я сейчас скажу что на этом все, то меня закидают яйцами и помидорами, а этого не хочу))) Значит давайте соберем из этого что-нибудь полезное. Например сигнализацию. Прикрутим модуль к МК и будем следить за состояние пару ножек. Как только на ножке появится изменения, то тут же пошлем SMS с оповещением об данном изменении. В роли МК будет выступать ATmegs32a. На ноги PB2 и PB3 прикрутим кнопки. Кнопки имеют общий GND, а для подтяжки используем встроенные резисторы. Для работы с модулем напишем пару функций, а именно инициализации и передачи SMS. Чтож, поехали. Для начала сконфигурим проект при помощи генератора кода axlib. Для этого выберем МК ATmega32, внешний кварц на 7372800 (такой кварц нужен для уменьшения ошибок при передаче по UART). Настроим UART на скорость 9600. Далее сгенерив проект откроем его в AtmelStudio 6. Первым делом создадим файл sim800l.h в корне проекта и подключим его. #include #include «main_init.h» #include «axlib/usart.h» #include «sim800l.h» Теперь переходим в наш созданный файл и впишем туда нужные нам дефайны. // Первая команда, овет OK #define SIM800L_AT_AT «AT» // Команда на ввод номера абонента для отправки ему SMS сообщения #define SIM800L_AT_SMS «AT+CMGS=»» // Настройка формата покета #define SIM800L_AT_SMS_SET «AT+CMGF=1» Такс, дефайны для упрощения записали, теперь пишем сложную функцию инициализации. void sim800l_init(void) { usart_str_rn(SIM800L_AT_AT); } Вся сложность данной функции заключается в том, что мы просто передаем команду АТ модулю. С этой команды должен начинать работать модуль. Следующая функция немного посложнее. BYTE sim800l_send_sms(BYTE *num, BYTE *text, BYTE lenght) { // Массив для получения ответов от модуля BYTE str[20] = {0}; _delay_ms(1000); // Настройка режима передачи usart_str_rn(SIM800L_AT_SMS_SET); // Подача номера телефона абонента usart_str_out(SIM800L_AT_SMS, 9); usart_str_out(num, 12); usart_str_rn(«»»); // Ожидание начала ввода текста _delay_ms(3000); // Отправка текста usart_str_out(text, lenght); str[0] = 0x1A; str[1] = 0; usart_str_rn(str); // Ждем OK usart_str_in(str, 18); if(!((str[14] == 0x4F) & (str[15] == 0x4B))) return 0x34; return 0x30; } Вот тут я понял всю сущность дешевизны данного модуля. Эта фиговина напрочь отказывалась стабильно возвращать ответы. Как я только не извращался, и ставил таймауты по приходу данных гигантские, и задержки лепил. Короче плюнул на те ответы что плавали во времени и натыкал задержек. Для работы это не сильно мешает. Платим за дешевизну. Поехали по функции. Первым делом тыкаем настройку передачи пакета. Это нужно чтобы модуль отправлял данные получив номер телефона, а затем ожидал принятия текста. Затем передаем номер телефона абонента которому отправляем SMS. Берем его из аргумента данной функции. Есть одно но! Номер телефона должен иметь формат вида: +79161234567. +7 обязательно, этот модуль в отличии от 900-тых не понимает 8. После передачи номера абонента просто тупим 3 секунды. Все это время модуль не спеша пережевывает номер и по хрен знает какому алгоритму, как раз на этих задержках я подорвался, выдает нам приглашение на ввод текста значком > 3 секунд железно хватает пережевать и выплюнуть приглашение. После 3 секунд кидаем текст сообщения. Его так же берем из аргумента данной функции и от туда же длину текста для функций UART. Ведь мы не знаем сколько буковок вы собираетесь послать. Если внимательно присмотреться, то можно заметить байт 0x1A в конце текста сообщения. Это команда Ctrl+Z нужна для окончания передачи текста. Когда модуль получит эту команду, то все бросит и передаст SMS. Все, с данным файлом закончили, переходим в основной файл программы. #define BUTTON_1 «Nazhata knopka 1» #define BUTTON_2 «Nazhata knopka 2» // Инициализация GSM модуля sim800l_init(); // Настройка портов ввода вывода на чтение DDRB = 0x00; // Включаем подтяжку внутренним резистором PORTB |= (1 << PB2) | (1 << PB3); while(1) { <i>// Если нажали кнопку 1 if(!(PINB & (1 << PB2))) { <i>// Ждем пока не отпустили кнопку while(!(PINB & (1 << PB2))); sim800l_send_sms(«+79161234567», BUTTON_1, 16); } <i>// Если нажали кнопку 2 if(!(PINB & (1 << PB3))) { <i>// Ждем пока не отпустили кнопку while(!(PINB & (1 << PB3))); sim800l_send_sms(«+79161234567», BUTTON_2, 16); } } </pre> Что мы тут видим. Два дефайна с заранее подготовленным текстом. Затем мы инициализируем модуль. Затем настраиваем ножки 2 и 3 порта В на вход и подтягиваем внутренний резистор к плюсу питания. Затем в бесконечном цикле проверяем на нажатие кнопок. Как только какая-либо из кнопок будет нажата, сразу вваливаемся в бесконечный цикл и ждем пока не отпустят кнопку. После того как кнопку отпустили вызываем функцию отправки SMS с заранее продефаненым текстом. Вот и все.))) Проект выкладывать не буду так как его можно сгенерить axlib генератором и скопипастить текст отсюда. Ой, да, вот что я получил на телефон.))

Фыва    09.10.16 23:29
Алексей    09.10.16 23:39

Меня эти паузы насторожили еще когда я с ней общался через терминал. Думал порт тормозит, но на ноуте та же песня.

Юрий    05.03.17 20:36

Подскажите как заставить модуль, по запросу USSD отправлять баланс,считывать и устанавливать на ножках Avrки уровнь. В общем хочется сделать «Умный дом» Спасибо

Алексей    06.03.17 12:36

Я на эту тему уже писал статью. Вот она.

Олег    28.03.17 02:43

Разъясните пожалуйста. Для чего в функции usart_str_rn передаётся n ,для работы с симмодулем это нужно или на всякий случай? Что делает символ /» тут #define SIM800L_AT_SMS «AT+CMGS=»» и usart_str_out(SIM800L_AT_SMS, 9); usart_str_out(num, 12); usart_str_rn(«»»); тут тоже /» /r /n почему нельзя разом usart_str_rn(AT+CMGS=»+7xxxxxxxxxx») , как в терминале ? И usart_str_out(text, lenght); str[0] = 0x1A;понятно str[1] = 0; зачем ноль? usart_str_rn(str); и ещё /r /n ?

Алексей    28.03.17 12:33

—> Что делает символ /» тут Символ ставится перед служебными символами для того чтобы эти символы превратить в простые. Дело в том что двойная кавычка это служебный символ. Его используют чтобы передать строку в массив. А для того чтобы компилятор прочитал именно как символ, то перед служебными символами ставят обратную косую черту. Пример: BYTE data[] = «Какой-то текст «Текст в кавычках»»; Теперь внутренние кавычки запишутся в массив как символы. —> почему нельзя разом usart_str_rn(AT+CMGS=»+7xxxxxxxxxx») , как в терминале ? Потому что функция принимает в качестве аргумента указатель на первый элемент массива с номером абонента. Если написать сразу, то SMS будут высылаться вечно только этому абоненту. И изменить можно будет лишь переписав код. —> Разъясните пожалуйста. Для чего в функции usart_str_rn передаётся n Потому что документация на модуль SIMCOM требует в конце команды вводить код конца строки и перевода каретки.

Олег    28.03.17 14:05

Спасибо, Алексей это осознал, имею проблему с передачей 1А, в таблице служебных символов нет комбинации с … .

Алексей    28.03.17 15:04

А как должен выглядеть символ Ctrl+z? Или например пробел, табуляция. Поэтому передается именно кодом. Например rn можно записать как два байта 0x0D, 0x0A. Это одно и тоже.

Олег    28.03.17 16:59

Это я понял , коммада отправилась вот так str[0] = 0x4D; str[1] = 0x4B; str[2] = 0x4D;// три буквы текст для теста. str[3] = 0x1A; str[4] = 0; usart_str_rn(str); , текст наверно могу строкой , но 1А получается только через массив, как-то проще нельзя?

Алексей    28.03.17 17:14

void usart_char_out(BYTE data) Просто посылает один байт в порт.

Евгений    07.05.17 17:47
Алексей    07.05.17 20:05

А вот такой я валенок. Массив не на 10 ячеек, а на 20)))

Евгений    08.05.17 20:13

Бывает )) Так и понял что опечатка. Начал свой код писать, взял за основу и просто сразу увидел

Алексей    08.05.17 21:34

Советую лучше использовать SIM800C вместо L. Те же деньги но у C есть синезуб в модуле.

Евгений    12.05.17 06:43
Евгений    12.05.17 18:57
Алексей    12.05.17 20:03

Опрашивать буфер на прием больше одного байта, а потом подождав вычитать весь пакет из буфера.

Евгений    12.05.17 20:21

Алексей, не совсем понял идею, поясни плз

Алексей    12.05.17 20:58

main() { // Количество принятых байт в буфер BYTE len_pocket = 0; // Массив для данных BYTE data[40] = {0}; while(1) { // Смотрим что в буфере len_pocket = usart_data(); // Проверяем пришло ли что в буфер if(len_pocket > 0) { // Если пришло, ждем // расчет паузы (1000/(битрейт/10))*макс байт. // Пример битрейт 19200, макс байт 40. (1000/1920)*40 = 20.8мс // Пауза для гарантированного получения всех байт _delay_ms(22); // Получаем количество принятых байт len_pocket = usart_data(); // Записываем данные в массив usart_str_in(data, len_pocket); // Теперь в массиве data лежат все принятые байты. } } }

Евгений    12.05.17 21:25

Алексей, спасибо, идею понял наглядно, буду пробовать. Еще хотел спросить про два слейва и мастер, по поводу потери связи при сдергивании линии, не пробовал макетировать ?

Алексей    12.05.17 22:18

Пока нет. Очень много работы. Я вообще из-за нее подзабил на сайт.

Олег    08.07.17 23:28

Алексей, расскажите как согласовать уровни если мк питается 5в а модуль 3,3в? На али нашел модуль питания KIS-3R33S, он имеет управление выходом , есть ли смысл затевать перезагрузку SIM модуля снятием питания или хватит резета и вывода включения модуля?

Алексей    09.07.17 12:28
Олег    09.07.17 12:44
Алексей    09.07.17 14:48

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

Олег    09.07.17 15:05

А когда модуль повис что вначале дергать pwr или rst, и если пвр и резет не помогает как правильно по питанию передернуть?

Алексей    09.07.17 19:29

Если завис наглухо, то просто снять питание секунды на три. А потом подать и проинициализировать по правилам.

Игорь    12.09.19 19:21
Алексей    12.09.19 20:00

Функция usart_str_out() передает без кавычек.

Игорь    12.09.19 22:56

Спасибо разобрался

SIM800C — это компактный gsm/gprs модуль. Помимо GSM, модуль так же поддерживает Bluetooth версии 3.0. А ещё SIM800C может воспроизводить аудио и поддерживает протоколы POP3, SMTP, MMS, FTP, HTTP, SSL и др.

Несмотря на плюсы, у данного модуля есть и минусы:

  • Первый минус — питание. Запитать данный модуль от arduino не получится, т.к. для его работы потребуется источник питания с напряжением 5 В и 2 А( при пиковой нагрузке).
  • Второй минус — это избирательность по операторам. Не со всеми операторами модуль может стабильно работать. Теряет сеть или не получается авторизоваться в сети.

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

image

И обратная сторона.

image

Назначение выводов модуля:

  • GND — пин земли
  • VCC_IN — пин источника питания от 5В до 20В
  • RI — пин для звонка
  • DTR — пин вывода модуля из спящего режима
  • RXD и TXD — пины UART
  • U2_R и U2_T — пины второго UART
  • V_M — пин преобразования UART в TTL логику
  • ADC — пин АЦП
  • SPN и SPP — пины подключения динамика
  • PWR — пин включения или выключения модуля
  • MC- и MC+ пин подключения микрофона
  • BAT — пин подключения аккумулятора напряжением от 3.3В до 4.4В

Теперь соберем простую схему

image
Схема сборки для настройки модема
image

После сборки схемы, загрузим тестовый скетч для настройки модема

#include   SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800), 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()); // …и отправляем полученную команду модему }

После загрузки скетча, запускаем Serial Monitor и видим ответ от модема.

image

После, по очереди вводим команды для настройки модема. После каждой команды нажимаем «Отправить»

AT+CLTS=1 автоматическое определение времени по сети

AT+IPR=9600 задаем скорость работы модуля

AT&W сохранение настроек

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

AT+IPR?- команда проверки скорости обмена.

AT+CLTS?-команда проверки определения времени

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

  • команда AT — ответ модуля при ее вводе, покажет готовность модуля (ОК)
  • команда ATI — ответ модуля при ее вводе, покажет модель и версия модуля (SIM800 R14.18)
  • команда AT+CGMR — ответ модуля при ее вводе, покажет модель и версия ПО (Revision:1348B04SIM800L36)
  • команда AT+CCALR? — ответ модуля при ее вводе, говорит о готовности модуля совершать звонки (+CCALR: 1)
  • команда AT+CSQ — ответ модуля при ее вводе, говорит о уровне качества связи (+CSQ: 8,0)
  • команда AT+GSN — ответ модуля при ее вводе, покажет IMEI-модуля (664813735230592)
  • команда AT+GSV — ответ модуля при ее вводе, покажет идентификационные данные модуля (SIMCOM_Ltd SIMCOM_SIM800L Revision:1418B04SIM800L24)
  • команда AT+CBC — ответ модуля при ее вводе, покажет напряжение питания модуля (+CBC: 0,72,3963)
  • команда AT+CREG? — ответ модуля при ее вводе, покажет тип регистрации в сети (+CREG: 0,1). Где 0 это незапрашиваемый код регистрации в сети отключен, а 1 это зарегистрирован в домашней сети.
  • команда AT+COPS? — ответ модуля при ее вводе, покажет информацию об операторе (+COPS: 0,0,»MegaFon»)
  • команда AT+COPN — ответ модуля при ее вводе, покажет список всех доступных операторов (+COPN: «24201»,»TELENOR»)
  • команда AT+CPAS — ответ модуля при ее вводе, покажет статус модуля +CPAS: 4 — где цифра 4 означает, что модуль готов к работе.

Практическое применение.

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

image
Добавлен светодиод

Загрузим несложный скетч для управления светодиодом или реле с помощью СМС сообщений.

#include  SoftwareSerial gprsSerial(8, 9);   int LedPin = 10;  void setup(){   gprsSerial.begin(9600);   pinMode(LedPin, OUTPUT);   gprsSerial.print("AT+CMGF=1r");   delay(500);    gprsSerial.print("AT+IFC=1, 1r");   delay(500);   gprsSerial.print("AT+CPBS="SM"r");   delay(500);    gprsSerial.print("AT+CNMI=1,2,2,1,0r");   delay(700); }  String currStr = ""; boolean isStringMessage = false; void loop(){   if (!gprsSerial.available())     return;   char currSymb = gprsSerial.read();   if ('r' == 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")) {       isStringMessage = true;     }   }   currStr = "";   } else if ('n' != currSymb) {     currStr += String(currSymb);   } }

Теперь проверим работу схемы: отправляем на номер SIM карты, которая вставлена в SIM800L модуль СМС с «1» и в течении 10 секунд загорится светодиод, а чтобы его выключить отсылаем сообщение с «0».

Таким образом мы управляем любой нагрузкой с помощью модуля SIM800L и Arduino. Разумеется, вместо светодиода можно подключить, например, реле и контактор, что позволит управлять более или менее серьезной нагрузкой дома и в саду.

+1

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий