arduinoLab
Подключение GSM модуля на примере SIM800 к Arduino
О правильном подключении GSM модема SIM800L или по чему не работает модем с Arduino.
Особенности SIM800:
- Четырехдиапазонный GSM/GPRS модуль, 850/900/1800/1900 МГц
- В зависимости от версии модема, интерфейс USB для обновления программного обеспечения, UART, FM-radio, Bluetooth, PCM
- Управление AT командами
- Встроенный стек TCP/IP, UDP/IP, Протоколы HTTP, FTP, Email, PING, MMC
- Определение местоположения по базовым станциям.
- Декодирование и формирование DTMF-тонов
- Воспроизведение аудиофайлов локально и в сторону удаленного абонента
800 серия или что означает буква в конце:
Не только тип корпуса, хотя это основное различие. SIM800A, как и SIM800F, электрически совместим с популярным, но уже снятым с производства SIM900 и предназначен для его замены, SIM800C выполнен в корпусе с возможностью ручного монтажа, LGA монтаж, имеет на борту bluetooth, SIM800L для поверхностного монтажа и имеет на борту FM радио. Программно они полностью совместимы.
Как подключить к Arduino:
Питание:
Диапазон напряжение питания SIM800 (не китайского модуля на SIM800, а модема) составляет от 3,4 до 4,4 В. Рекомендуемое напряжение 4,0 В. Модем рассчитан на батарейное питание от одной Li-Ion банки, напряжение 5 вольт не допустимого, попытки запитать модем от 5 вольт приводит к тому, что модем выключается (уходит в защиту).
Источник питания должен обеспечивать достаточный ток, не менее 2А. Потребляемый ток модема зависит от режима его работы, максимальный пик потребления происходит при включении модуля и соединении с базовой станцией. На вход VBAT настоятельно рекомендуется подключать конденсатор большей емкости с низкий ESR. Потребление электричества не линейное, происходит короткими импульсами, в эти моменты важно не допустить проседания напряжения питания ниже 3,0 В.
В документации на модем, для получения заветных 4,0 вольт, рекомендуют использовать линейный стабилизатор с низким падением напряжения MIC29302 либо более распространенный DC-DC преобразователь LM2596, схема включения выше. Подойдет и MP1584EN, главное напряжение в приделах от 3,4 до 4,4 В и достаточный запас мощности. Плохая идея брать питание от USB, либо выхода 5 вольт ардуино, в этом случаи добиться стабильной работы модема, будет практически не возможно.
Логические уровни и UART:
Как и питание, у модема не стандартный логический уровень 2,8 В, что добавляет веселья. При попытки подключить что либо к 5 или 3,3 вольтовой логике, модем выключается.
Включение модема и PWRKEY:
Например чтобы включить модем, необходимо на ногу PWRKEY модема подать логический 0, тоесть соединить с массой.
В документации предлагают использовать транзисторный ключ, чтобы избежать возможность попадания высокого для модема напряжение 5 вольт на вход.
На китайских модулях о согласовании уровней не заботятся, часто выход PWRKEY выводят на колодку без транзистора, либо соединятся с массой на самом модуле, в этом случаи модуль включается при подачи питания, что не является верным и лишает возможности программного управления питанием модема с микроконтроллера.
Временные интервалы включения показаны на графике выше, включать модуль ногой PWRKEY следует по прошествии 0,5 секунд после подачи питания на ноги VBAT, а добиться ответа на команды по UART, можно не раньше трех секунд после включения.
Выходы TX и RX также должны быть согласованны, подключение модема к 5 вольтовой ардуино без согласования может вывести его из строя, хотя обычно модем поругавшись на «овервольтаж» выключится.
Один из вариантов согласования из документации, обратите внимание на выход VDD_EXT, на этом выходе модем формирует напряжение 2,8 вольт, предназначенное для периферийных устройств.
Другой вариант, рекомендуемый для 5 вольтовых уровней, конвертировать при помощи транзисторов, схема включения аналогична дешевым китайским конвертерам в виде модулей для ардуино.
Подобным решением можно воспользоваться только при проектировании устройств на SIM800, т.е. не используя готовые китайские модули для ардуино, на которых не озаботились вывести выход VDD_EXT на колодку.
Согласовать уровни можно делителем напряжения на двух резисторах, в этом случаи не понадобятся дополнительные напряжения и выход VDD_EXT, но данный способ увеличивает нагрузку на порт и может не стабильно работать на высоких скоростях UART интерфейса.
Правильным решением будет использовать модули с уже установленным на плате конвертером логических уровней, но про разновидности модулей ниже.
Разновидности китайских модулей:
Модуль на SIM800C с минимальной обвязкой. Отсутствует конвертер уровней UART интерфейса, фильтры, стабилизатор питания. Самый популярный, дешевый и малогабаритный.
Аналогичный китайский модуль на SIM800L
Этот модуль уже поинтереснее, есть конвертер уровней (на плате два транзистора 2n7002) два включенных последовательно диода, чтобы снизить напряжение питания 5 вольт до положенных модему 4.2 вольта, решение сомнительное но самое дешевое. Выведена нога для антенны встроенного bluetooth. Все еще отсутствуют фильтры в аналоговой части
Существует аналогичный модуль с тойже распиновкой, но за место конвертера уровней, стоит стабилизатор напряжения питания на DC-DC преобразователе MP1584EN. Странное решение.
Этот мало чем отличается от модулей выше, есть конвертер уровней, есть два диода чтобы снизить напряжение питания 5 вольт до положенных модему 4.2 вольта, к сожелению отсутствуют голосовые функции! возможно будет удобней в подключении, есть крепежные отверстия.
Вот, это уже чтото… Линейный стабилизатор напряжения питания MIC29302, конвертер логических уровней, на плате bluetooth антенна и SMA разъем для GSM антенны, Отсутствуют фильтры на аналоговой части.
Shield от Keystudio, вот это то как должно быть, есть возможность использовать внешнее питание и питание от ардуино, линейный стабилизатор питания MIC29302, фильтры в аналоговой части и джек для подключения гарнитуры, ионистор для часов, вывели даже USB. Один недостаток, цена…
Все таки как подключать к Arduino:
А что подключать и к чему? разновидностей модулей десятки, версий ардуино плат тоже. Я не рекомендую использовать плату Arduino UNO, как и любую другую с ATmega328, совместно с библиотекой SoftwareSerial для работы с модемом, возможно данная связка подойдет для проверки работы модема и отладки, но в устройствах стабильной работы добиться практически не возможно.
Модем общается с микроконтроллерам по средствам UART интерфейса, на UNO единственный аппаратный UART отдан для перепрошивки платы и «монитор порта», это принуждает использовать библиотеку SoftwareSerial.h которая не может нормально переварить поток с модема. Правильным решением будет использовать плату с несколькими аппаратными UART интерфейсами, например Arduino Leonardo, Arduino Mega.
В случаи с Arduino Leonardo и аппаратным UART:
Не простой случай с дешевым модулем на SIM800L, тут нужен отдельный стабилизатор напряжения питания на 4,0 В, нужно согласовывать логические уровни с ардуино при помощи резистивного делителя напряжения, ибо по другому согласовать не получится.
Чуть проще с подобными модулями, где конвертер уровней установлен на плате. Только не забываем дать питание и для конвертера.
Управление модемом:
Общение с модемом происходит при помощи АТ команд, в модем отправляется команда в текстовом виде, а после выполнения команды модем возвращает ответ, самая простая команда «AT» ответ на нее «OK«, служит для проверки соединения с модемом. Список всех доступных команд и возможных ответов можно посмотреть в документации на модем.
Для управления модемом через «монитор порта» в ардуинку нужно залить пример, который транслирует данные из «монитора порта» в UART к которому подключен модем. Убедитесь в правильной скорости UART интерфейса, в настройках модема, скорость порта может отличатся от 9600.
Подключение популярных GSM модулей к Ардуино
Модульность Ардуино позволяет создавать на базе этой платформы проекты различной направленности и функциональности. Существует возможность объединения платы и модулей связи практически любого стандарта и протокола, в частности, для подключения к сотовой сети. GSM модуль для Ардуино обеспечивает возможность соединения с любым удаленным устройством посредством мобильной сети — везде, где есть покрытие таковой.
Зачем это нужно
Аббревиатура GSM расшифровывается как Global System for Mobile (Communications). Технология эксплуатирует сети связи сотовых операторов, обеспечивая трансляцию голосовой, текстовой и служебной информации между подключенными устройствами.
Через сеть GSM передаются не только данные, но и СМС-сообщения, и голос. С подключенной к Arduino GSM платой компьютер способен:
- сообщать о состоянии датчиков периферийного оборудования;
- передавать информацию о срабатывании тревожной сигнализации;
- управлять подсоединенной системой, и выполнять любые другие действия по заданному сценарию;
- осуществлять звонки.
Поскольку GSM обеспечивает и доступ в интернет, устройства с его поддержкой также могут управляться через глобальную сеть, принимать команды, отдавать статусы и так далее.
Простейший пример применения Ардуино с GSM — автономная сигнализация. Периферийные датчики фиксируют свое состояние и передают на центральную плату, которая через модуль отправляет данные на смартфон владельца. Такое решение можно считать базой для «умного дома»: если добавить дополнительные подключаемые блоки, датчики и программные оболочки, Arduino превращается в полноценный комплекс Smart Home.
Любой GSM/GPRS блок соединяется с основной платой. Для реализации простых проектов, как правило, используют Arduino Uno, но есть возможность построения и на базе минималистичного Nano, и более богато оснащенного Mega. Соединенный с Arduino GSM модуль обеспечивает все возможности технологии передачи данных по сотовой сети.
Модулей связи на рынке представлено достаточно много. Далее мы рассмотрим характеристики наиболее популярных и приведем пример типового проекта.
Популярные GSM-модули связи
Модуль сотовой связи для Arduino представляет собой устройство из платы и размещенных на ней элементов, включая приемопередатчик. Все они скомпонованы в едином корпусе, снабженном выведенными контактами для подсоединения к материнскому контроллеру. Иногда такой компонент называют шилдом.
SIM900
Контроллер SIM900 от SIMCom Wireless Solution соединяется с Ардуино посредством распространенного протокола взаимодействия UART. К ПК его можно подключить простым USB-UART переходником, который легко собирается даже самостоятельно.
SIM900 выполняет работу в полнодуплексном режиме и дает возможность осуществлять голосовые звонки и обмен сообщениями. Основные характеристики:
- рабочие частоты четырех стандартов — EGSM900, GSM850, DCS1800, PCS1900;
- напряжение — от 3.2 до 4.8 вольт;
- ток в состоянии простоя — 450 мА, пиковый – 2 А;
- скорость канала GPRS — 14.4 Кбит/с;
- рабочие температуры с гарантией отсутствия искажений — от −30 до +80 градусов, с таковыми от −40 до +85. В последнем диапазоне заявлены минимальные отклонения без потери работоспособности устройства;
- масса — 6.5 г;
- габариты — 24×24×3 мм.
Существует несколько модификаций модуля с индексами B, D. TE-C, R и X. Они обладают определенными отличиями. Так, модель D дооснащена подсистемой зарядки аккумулятора, а плата с индексом X содержит улучшенные режимы энергосбережения, продлевающие срок работы батареи без подзарядки. Это позволяет применить радиомодуль в требующих длительной автономности системах охраны, трекинга, промышленной автоматизации.
Вне зависимости от модификации этот GSM модуль Ардуино поставляется в корпусе SMT с выведенными на торец контактами для распайки. Существуют версии и в иных исполнениях.
Контроллер SIM800L
Чип SIM800L «умеет» обмениваться информацией в режиме дуплекса через GSM и технологию GPRS. В устройстве предусмотрен слот под сим-карту, интегрированная антенна и дополнительный выход для внешней. Питание подается как от конвертера тока DC-DC, так и от иных внешних источников. С главным контроллером SIM800L взаимодействует через UART.
- четырехдиапазонный радиомодуль;
- рабочее напряжение питания — от 3.8В до 4.2 В;
- ток в standby 0.7 мА, в пиковом нагрузке — 500 мА;
- слот под SIM карту;
- имеется поддержка связи 2G;
- температурный режим — от −30 до +75 градусов.
Это популярный шилд от разработчика AI-Thinker. Контроллер А6 позволяет принимать и посылать GSM GPRS сигналы через сотовые сети и весьма популярен в проектах систем автоматизации и удаленного доступа к управлению.
- четырехдиапазонный терминал мобильной связи;
- питание — от источника 5 В;
- потребляемый в состоянии «сна» ток — 3 мА, в standby 100 мА, при передаче 500 мА;
- максимальная нагрузка гаджета — 2 А;
- скорость GPRS — до 42.8 Кбит/с;
- диапазон рабочих температур от −30 до +80 градусов.
Он развивает модуль А6 и отличается встроенным чипом позиционирования GPS. Последний добавляет плате функциональности, одновременно упрощая конструкцию.
- сотовый терминал с 4-мя диапазонами;
- напряжение питания — от 3.3 до 4.6 В;
- источник тока — 5 В;
- модуль GPRS класса 10, скорость трансляции до 86.5 Кбит/с;
- имеется встроенное подавление электронного эха, статических шумов и паразитных наводок.
NeoWay M590
Данное GSM GPRS устройство 10 класса подключается по UART и умеет осуществлять обмен SMS, работать со звонками и взаимодействовать по протоколу GPRS.
- двухдиапазонный контроллер с поддержкой стандартов DCS1800 и EGSM 900;
- 10 класс модуля GPRS;
- напряжение питания от 3.3 до 5 В;
- пиковый ток — 2 А;
- рабочий ток устройства — 210 мА;
- заявленный диапазон эксплуатационных температур — от −40 до +80 градусов.
Для подсоединения к Ардуино понадобится преобразователь электропитания 3.3–5 В.
Типовые схемы
Рассмотрим примеры подключения указанных модулей к контроллерам Arduino.
Важно: прежде всего необходимо вставить в устройство сим-карту выбранного оператора. Это необходимо сделать перед выполнением прочих работ.
Принцип дальнейших действий во всех случаях общий: GPRS модуль сопрягается с материнской платой главного контроллера. Для правильного выполнения подключения следует изучить инструкцию к используемой модели Arduino, выяснить распиновку на ней и на компоненте сотовой связи. Далее на собранную систему заводится питание. Когда устройство включено, его переходником USB-UART подключают к ПК и создают программу в среде Arduino IDE или другом удобном пакете ПО разработчика.
GSM-GPRS блок программируется так называемыми AT-командами.
Рассмотрим несколько примеров сборки аппаратной части.
Arduino Uno и контроллер SIM800L
Поскольку напряжение SIM800L невелико, понадобится преобразователь.
Изучим распиновку устройства:
- подключаем плату UТO к компьютеру;
- к ней подводится питание 12 В через конвертер;
- минус источника выводится на контакт GND Ардуино, а GND — на контакт минуса конвертера;
- плюс ИП идет к плюсу преобразователя;
- плюс конвертера — к плюсу блока GSM;
- минус с «земли» преобразователя на GND сотового блока;
- RXT и TXD блока на 2, 3 пины микроконтроллера UNO соответственно.
К цифровым выводам можно подключать и другие устройства, объединяя, при необходимости, несколько дополнительных модулей и плат.
UNO и A6
Здесь напряжение питания стандартное, и конвертер в схему не включается. Платы соединяются напрямую.
Общая схема распиновки:
Принцип соединения контактов:
- UART_RXD выводится на TX 1 UNO;
- UART_TXD — на RX 0;
- GND соединяется с GND на GSM-блоке;
- пин электропитания VCC0 c кнопкой включения PWR-KEY.
Шилд GSM SIM900 и контроллер Arduino Mega
Пиковая сила тока при активации устройства может достигать 2 А, в связи с чем напрямую питание подключать нежелательно. Перед соединением плат нужно поставить SIM-карту в предназначенный для нее слот и установить TX и RX джамперы:
Последовательность дальнейших действий:
- желтый провод (TX) объединяется с TX Arduino;
- зеленым соединяются контакты RX;
- GND выводится на «землю» микроконтроллера.
Проверить собранный гаджет можно следующим экспериментом:
- соединить GND и RESET главного микроконтроллера;
- вставить в разъем сим-карту;
- подать питание на модуль GSM;
- подключить центральную плату Arduino к ПК через порт USB, нажать кнопку ON;
- Если все собрано верно, красный светодиод загорится, а зеленый станет мигать.
Программная часть
Когда система собрана, ее необходимо запрограммировать. Управление GSM выполняется специфическими функциями и АТ-командами. Устройство принимает их, интерпретирует и выдает определенный результат, отправляя/получая СМС или звонок. Команды задаются через программное обеспечение (такая возможность предусмотрена в IDE) или вводятся напрямую через утилиты работы с портами.
AT-команды
Как уже говорилось, GSM-модули управляются посредством передаваемых на них AT-команд. Это текстовые строки, обрабатываемые прошивкой и инициирующие те или иные действия.
Все команды начинаются с символов AT.
Обычно они генерируются управляющим ПО, но могут быть отправлены и с клавиатуры, например, через утилиту монитора порта из поставки Arduino IDE.
Команды делятся на три вида:
- текстовые — на них контроллер дает ответ о поддержке введенной пользователем директивы или отсутствии таковой;
- чтение — просмотр параметров;
- запись — ввод и сохранение некоторых новых значений.
Набор команд может отличаться в зависимости от контроллера.
Получение и отправка СМС
Пример работы с короткими сообщениями для связки «Arduino + сотовый модуль»:
- в IDE выполняется директива AT+CMGF=1. Она указывает перейти в формат передачи текстового сообщения;
- далее вводится AT+CSCS=«GSM». Выбирается кодировка ASCII;
- AT+CMGS=«номер», где номер указывается полностью (в формате «+7…»);
- когда выполнена эта команда, вводится непосредственно текст сообщения, и по нажатию ctrl-Z отправляется на выбранный номер.
Если все сделано, интерфейс программы вернет ОК.
Для получения SMS:
- AT + CNMI = 2,2,0,0,0 — переход в состояние чтения;
- когда блок GSM получит сообщение, он отправит в порт строку +CMTI: «SM»,2. Цифра может отличаться, она обозначает номер СМС в очереди;
- для прочтения следует дать директиву AT+CMGR=2.
Прием голового звонка
Для выполнения потребуется включить библиотеку разработчика GSM.h:
Если SIM-карта защищена пин-кодом, его также следует определить в скетче:
При пустом коде значение этого поля просто остается пустым.
В обязательном порядке объявляется переменная отслеживания статуса подключения к мобильной сети:
Соединение выполняется посредством функции gsmAcess.begin(). Если процесс завершен успешно, функция возвращает строку GSM_READY.
Далее нужно указать, что сотовый модем переведен в режим приема звонка. За это отвечает функция vcs.hangCall(). Следующая важная функция — getvoiceCallStatus. При входящем звонке она вернет строку RECEIVINGCALL. А для определения номера звонящего следует воспользоваться retreiveCallingNumber.
При поднятой трубке скетч сообщит об этом строкой TALKING. После чего перейдет в режим ожидания ввода; для завершения разговора вводится символ перехода на новую строку.
Это основные функции и команды для данной задачи. Разумеется, в полном скетче потребуется определить гораздо больше параметров, которые можно найти в идущих с IDE примерах и официальной документации.
Где купить
Приобрести GPRS/GSM модуль можно как в специализированном магазине, так и онлайн в Интернет-магазине. Во втором случае, особого внимания заслуживает бюджетный вариант приобретения изделий на сайте Алиэкспресс. У некоторых поставщиков есть вариант отгрузки со склада в РФ, их можно получить максимально быстро, для этого при заказе выберите «Доставка из Российской Федерации»:
Заключение
Возможности микроконтроллера Arduino позволяют создать на его базе практически любой проект домашней или промышленной автоматизации. А если дополнить его комплектом подключения к сотовой сети и соответствующим образом запрограммировать, плата превратится в мощный комплекс удаленного доступа, мониторинга, оповещения и выполнения прочих задач, требующих наличия постоянной связи. GSM-модули доступны, легко устанавливаются и настраиваются, обладают низким энергопотреблением и работают везде в зоне покрытия сотовой сети.
Разумеется, использовать их как средство передачи крупных объемов данных нельзя, поскольку доступ в интернет этим классом устройств обеспечивается только через GPRS, с небольшими скоростями. Но в задачах создания дешевой и надежной охранной системы, комплекса мониторинга или хаба «умного дома» такие решения находят обширное применение — как у энтузиастов, так и профессионалов.
Видео по теме