Как программировать gsm модуль
Прошивка
Волею судеб, у меня в руках оказался модуль GSM900A. Прочитав первый попавшийся форум про оживление этой штуки, выяснилось, что буква A в названии означает принадлежность модуля к азиатскому региону. А следовательно, работать с нашими операторами он не станет. Уныние 🙁
Благо, в следующих постах на том же форуме содержалась успокаивающая информация:) Оказалось, что не всё так плохо, и чтобы модуль заработал в нашем регионе, его нужно попросту перепрошить. Этот процесс хорошо описан в блоге нашего соратника Alex-EXE: прошивка «all in one» sim900
Попробую сделать то же самое, но еще более подробно, и с учетом особенностей моего модуля.
Если у вас правильный модуль и прошивка не требуется, можно сразу прыгать на раздел №2.
Инструменты
Итак, для начала подготовим все необходимые инструменты. Во-первых, непосредственно для прошивки потребуется приложение SIM900 Series download Tools Develop, которое можно легко найти в интернете (хотя бы тут).
Во-вторых, пригодится и сам файл прошивки 1137B02SIM900M64_ST_ENHANCE, который тоже легко добывается (я брал тут).
Наконец, в-третьих, нам нужен будет хороший терминал для экспериментов с модулем. Обычно я использую TeraTerm, но в этот раз его возможностей нехватило (или я не разобрался). Пришлось установить монстра с гениальным названием Terminal.
Подключение к USB-UART мосту
Теперь подключаем линии RX и TX к мосту. В качестве последнего я использовал CP2102. В моем случае, вопреки логике, RX и TX моста соединялись с RX и TX GSM-модуля симметрично (а не крест-накрест, как принято).
Также следует запитать модуль от стабильного и мощного источника, так как пиковый ток на модуле может достигать 2А (якобы). Подойдут 4 аккумулятора типоразмера AA. Полная схема включения выглядит так:
SIM900 | |
CP2102 Gnd | Gnd |
CP2102 +5V | VCC_MCU |
CP2102 RX | SIMR |
CP2102 TX | SIMT |
Внешний источник +5В | VCC5 |
Внешний источник Gnd | Gnd |
RST |
У данной модели нет кнопки сброса, так что для прошивки нам потребуется на пару секунд кинуть контакт RST на землю. Для этого мы пока оставим его висеть в воздухе.
Предварительная настройка модуля
Всё общение с модулем происходит посредством AT-команд.
Данная настройка понадобится нам для ускорения процедуры прошивки. В противном случае, как указал в своем блоге Alex-EXE, прошивка займет около часа.
Настройка программы
После того, как все провода воткнуты в нужные места, и модуль подготовлен к прошивке, запускаем приложение SIM900 Series download Tools Develop. Настройка программы состоит всего из нескольких пунктов:
С настройкой всё.
Прошивка
Теперь выполняем строго и последовательно шесть важных шагов.
- Подключаем к модулю питание (наши 4 аккумулятора). Должна загореться красная лампа питания, а лампа статуса должна начать мигать.
- Подключаем USB-UART к компьютеру.
- Замыкаем провод RST на землю (помним, что все это время он болтался в воздухе).
- Нажимаем в программе кнопку Start Download.
- Считаем в уме до трех, и отрываем RST от земли.
Ждем 6 минут до завершения прошивки.
Что мы имеем после прошивки
Во-первых, модуль теперь умеет работать с нашими операторами. Во-вторых, мы поставили расширенную прошивку, среди особенностей которой, к примеру, получение координат модуля по сотовым вышкам, работа с электронной почтой и доступ к дополнительным 2.5 Мб памяти.
Эксперименты с GSM модулем
Попробуем теперь выполнить разные полезные операции с модулем. Для начала, введем ПИН-код (если он есть):
Ответ модуля будет таким:
После этого получим от модуля немного информации.
Телефонные вызовы
Теперь наберем какой-нибудь номер. Делается это с помощью команды:
Точка с запятой в конце команды очень важна, на забудьте про неё!
Ответить на звонок (взять трубку) можно командой:
Если к модулю подключены наушники и микрофон, то можно пообщаться с удаленным абонентом как по обычному сотовому телефону.
Завершает вызов команда:
Отправка SMS
и установим кодировку:
Прием SMS
В ответ получим:
В общем, все просто. Этого нам вполне достаточно для реализации задуманного. Для более глубокого изучения возможностей GFM900 рекомендую почитать еще одну статью Alex-EXE: at-команды gsm модема sim900
Взаимодействие с микроконтроллерами
Вообще, чтобы управлять внешними устройствами вовсе не обязательно спаривать модуль GSM900 с другим микроконтроллером. В этот модуль можно зашить свою программу, которая будет делать всё что угодно со свободными GPIO выводами. Однако, в большинстве готовых плат GPIO не разведены, поэтому для создания прототипа задуманного устройства воспользуемся самой простой Arduino Uno/Nano.
Общаться Arduino и GSM900 будут всё по тому же UART интерфейсу. Для этого соединим эти два устройства по следующей схеме:
GSM900 | GND | VCC_MCU | SIMT | SIMR |
Ардуино Уно | GND | +5V | RX | TX |
Теперь составим программу, которая будет ловить СМС-ки, и зажигать светодиод на ноге №13 на пару секунд. Этим мы имитируем управление неким внешним устройством.
К размышлению
Данный модуль является устаревшим. Рекомендуем использовать более свежие модули SIM800.
В продаже можно встретить более десятка моделей GSM-реле. RTU5024 самое простое в настройке и дешёвое. На Aliexpress цена на это устройство начинается с $23.
Все настройки и номера хранятся во флеш-памяти (некоторые gsm реле хранят номера и настройки на симкарте, что может быть весьма неудобно). Корпус металлический. Устройство работает при температуре от -20 до +60 градусов и влажности до 90%. Размер корпуса — 82x76x27 мм.
RTU5024 продаются либо с жёсткой антенной, либо с выносной антенной с трёхметровым кабелем.
Симкарта устанавливается в слот на дне корпуса, закрываемый крышкой на винте.
Хоть на корпусе и написано 3G, реле работает только в сетях 2G (GSM). Это означает, что в Москве можно использовать симкарты Билайн, МТС, Мегафон, но нельзя использовать Tele2 (у этого оператора в московском регионе нет сети GSM).
Устройство питается постоянным напряжением от 9 до 24 вольт и потребляет 15-50 миллиампер. Его реле может коммутировать нагрузку, потребляющую до 3A на сетевом напряжении 230 В или до 5А на напряжении 24 В. У реле три контакта — общий, нормально разомкнутый и нормально замкнутый.
Колодки для подключения проводов на разъёмах.
Два светодиода индицируют состояние устройства. Первый вспыхивает раз в две секунды, если устройство подключено к сети GSM, второй загорается, когда реле замкнуто.
Русскую инструкцию для RTU5024 можно скачать здесь.
Все настройки устройства делаются с помощью СМС, отправляемых с любого телефона. Все команды даются большими латинскими буквами.
По умолчанию в устройстве установлен пароль 1234. Первым делом меняем его, например, на 1515:
1234P1515 — меняем пароль 1234 на 1515.
Этого достаточно, чтобы начать управлять устройством. С помощью СМС можно включить реле:
1515СС — включить реле (здесь и далее команды даны с паролем 1515, в вашем случае вместо этих цифр будут цифры вашего пароля).
Если установлено включение на продолжительное время или до отключения, повторный звонок отключит реле. Кроме того его можно отключить с помощью СМС:
1515DD — отключить реле.
По умолчанию на каждое действие RTU5024 присылает ответную СМС. Когда реле включается на 0.5 секунды, приходят сразу две СМС — о включении и выключении.
Чтобы не тратить деньги зря, можно отключить СМС о включении и выключении реле:
Устройство пришлёт две ответные СМС.
При регистрации номеров устройство также присылает подтверждающие СМС. Это не отключается.
Когда всё настроено и GSM-реле управляется только бесплатными звонками, получается, что деньги с симкарты реле не расходуются совсем. Если это будет продолжаться более 90 дней оператор отключит симкарту. Чтобы этого не произошло необходимо раз в 90 дней совершать любое платное действие. У RTU5024 есть команда запроса статуса, в ответ на которую присылается СМС с состоянием реле и уровнем сигнала сотовой сети. Её-то и можно использовать, чтобы тратить 2 рубля за СМС раз в 90 дней.
1515EE — запросить статус и потратить 2 рубля на симке GSM-реле.
Для управления и настройки RTU5024 есть приложение для Android GSM Gate Opener RTU5024, которое фактически отправляет те же СМС, но вместо запоминания команд достаточно нажимать кнопки, например «Открыть ворота» или «Добавить номер».
Помимо самого простого и дешёвого RTU5024 на Aliexpress есть и более продвинутые GSM-реле.
CL4-GSM за $31.5 имеет четыре канала управления, но как там четыре канала управляются звонками я так до конца и не понял.
RTU5015 Plus стоит $29.5 с выносной антенной и имеет гораздо больше возможностей, чем RTU5024.
У RTU5015Plus есть два входа и выход сирены, поэтому это устройство можно использовать не только, как GSM-реле, но и как GSM-сигнализацию. В продаже встречается и старая версия RTU5015 по той же цене. Её легко отличить по количеству регистрируемых номеров — их всего 64.
С помощью GSM-реле RTU5024 я успешно реализовал открытие ворот в СНТ, а RTU5015Plus купил, но ещё не включал. Планирую сделать на его базе безопасное дистанционное включение отопления на даче.
Современные беспроводные технологии позволяют разрабатывать функциональные и доступные устройства. Подобные приборы взаимодействуют с широким спектром систем общего назначения. В этой статье пойдет речь об организации двухсторонней передачи данных между GSM модулем SIM800L (Рисунок 1) и полноценным веб-сервером.
Рисунок 1. | GSM модуль SIM800L. |
В сети есть много примеров использования этого модуля. Как правило, его применяют в различных системах сигнализации и удаленного управления объектами. При этом данные передаются по SMS протоколу, что совершенно неудобно с пользовательской точки зрения.
Для организации работы такой системы нам понадобятся GSM модуль SIM800L, плата Arduino Nano (Рисунок 2) и веб-сервер с доменом.
Рисунок 2. | Плата Arduino Nano. |
Принципиальная схема устройства показана на Рисунке 3.
Рисунок 3. | Принципиальная схема устройства. |
Настройка GSM модуля SIM800L
В моем случае используется оператор связи «Киевстар». Для работы с подобными устройствами был подключен тарифный план «Киевстар датчик» (Рисунок 4), ежедневная плата за который составляет 1 грн (примерно 0.04USD). При этом предоставляется 10 Мб Интернета в сутки. Для наших задач этого трафика будет достаточно.
Рисунок 4. | Тарифный план «Киевстар датчик». |
Для удобного программирования микроконтроллера платы Arduino Nano обмен данных с GSM модулем организован по программному UART с помощью стандартной библиотеки . Выводы D2-D3 назначены как Rx и Tx, соответственно.
Инициализация
Первым делом необходимо провести инициализацию и первичную настройку модуля SIM800L. Для этого в теле setup() вызываем подпрограмму init_GSM(), которая перезагружает модуль и последовательно отправляет команды:
Разберем назначение каждой команды:
На Рисунке 5 показан процесс выполнения подпрограммы init_GSM.
Рисунок 5. | Процесс выполнения подпрограммы init_GSM. |
На Листинге 1 показан пример обработки команды AT+CPAS.
Листинг 1. Программа обработки команды AT+CPAS.
Во время ответа от модуля в cycle_for() происходит сравнение и установка значения в bit_ok. Если значение равняется 1, то модуль вернул «ОК», при ответе 2 – модуль возвращает «Error». Если положительно ответа нет, то через 1 секунду повторяем отправку i раз.
Настройка GPRS соединения
После того как основная настройка модуля прошла успешно, можно начинать инициализировать GPRS соединение.
Для этого вызываем функцию init_GPRS(), которая отправляет в модуль следующие строки:
Аналогично подпрограмме init_GSM(), во всех необходимых местах проверяем положительный ответ «ОК» от модуля.
На Рисунке 6 показан процесс выполнения подпрограммы init_GPRS().
Рисунок 6. | Процесс выполнения подпрограммы init_GPRS(). |
На этом этапе работу с модулем можно завершить. Для последующей работы необходимо настроить сервер и создать соответствующие файлы для обмена данными.
Создание файлов и работа с веб-сервером
Чтобы принять данные с GSM модуля, нужно приобрести услугу хостинга с минимальными требованиями, главное, чтобы была поддержка PHP. PHP – это популярный язык программирования, который исполняется на стороне сервера, в то время как JavaScript исполняется в браузере на стороне пользователя.
В качестве примера сделаем удаленное управление поливом теплицы.
Распишем основные задачи для веб-сервера и GSM модуля.
Задачи веб-сервера:
- Принимать и отображать на веб-странице данные температуры, времени работы и статус насоса;
- Предоставлять данные GSM модулю о статусе вкл/выкл насоса.
Задачи GSM модуля:
- Отправлять данные о времени работы насоса полива;
- Отправлять температуру насоса и воды;
- Принимать данные с веб-сервера о статусе вкл/выкл насоса.
Первым делом в корневом каталоге сервера создаем файл index.php.
На Листинге 2 показан начальный код разметки HTML страницы.
Листинг 2. Начальный код разметки HTML страницы.
В моем случае веб-страница будет открываться только в телефоне, поэтому выберем самый простой дизайн для нее. При желании можно сделать страницу более удобной и информативной.
Результат открытого в браузере файла index.php показан на Рисунке 7.
Рисунок 7. | Результат открытого в браузере файла index.php. |
Добавим пару кнопок на включение насоса и создадим txt файл на сервере для сохранения данных о статусе работы насоса. Кнопки выполним в виде картинок, а их обработку сделаем с помощью AJAX (технология взаимодействия с сервером без полной перезагрузки html-страницы, использует JavaScript). Для этого перед тегом вставляем код, показанный в Листинге 3.
Листинг 3. AJAX обработчик.
Определение картинок кнопок включим в форму. При нажатии на картинку будет записываться значение статуса в файл pomidor.txt. Код обработки кнопок показан в Листинге 4.
Листинг 4. HTML код обработки кнопок.
В коневом каталоге создаем папку transfer и файл pomidor.php, код из которого приведен в Листинге 5.
Листинг 5. PHP скрипт записи статуса кнопки.
Рисунок 8. | Основной интерфейс управления. |
Для полученных значений создаем еще одну папку txt и файл pomidor.txt. Добавляем картинку насоса и получаем минимальный интерфейс управления, который показан на Рисунке 8. На Рисунке 9 показан результат нажатия на кнопку «Выкл». Соответственно, если нажмем на кнопку «Вкл», то будет результат «ON».
Рисунок 9. | Запись данных на сервер в результате нажатия на кнопку «Выкл». |
Сделаем так, чтобы при переключении статуса, менялась картинка насоса. Для этого в поле расположения картинки насоса добавим код (Листинг 6).
Листинг 6. PHP скрипт изменения картинки статуса работы насоса.
Создаем функцию «Nasos», которая каждую секунду читает и сравнивает значение с файла pomidor.txt. В зависимости от результата меняется картинка визуализации насоса. На Рисунке 10 показан пример визуализации насоса при нажатии на кнопку «Вкл».
Рисунок 10. | Визуализация статуса включенного насоса. |
По аналогии добавим вывод температур и времени полива (Рисунок 11).
Рисунок 11. | Законченный интерфейс управления. |
Вопросы безопасности, в случае атаки на веб сервер, выходят за рамки данного повествования, поэтому опустим их.
Считываем данные с сервера в Arduino
После завершения процесс отладки записи статуса вкл/выкл насоса в файл pomidor.txt можно считывать данные в Arduino. Напишем функцию чтения данных с сервера (Листинг 7).
Листинг 7. Функция чтения данных с сервера.
Прочитаем статус вкл/выкл насоса из файла txt/pomidor.txt, отобразим значение на терминале и на выводе D5 платы Arduino (Листинг 8).
Листинг 8. Программа формирования логического уровня вывода D5 в зависимости от статуса насоса.
Пример отображения при нажатии кнопки включении насоса показан на Рисунке 12.
Рисунок 12. | Пример отображения при нажатии кнопки «Вкл» насоса. |
Передача данных из Arduino на веб-сервер
Для передачи данных на веб-сервер напишем функцию SEND_GPRS с указанием адреса "adress_php", в который будет записываться значение int типа "out_messeng_Server". Для записи значения типа String нужно вызывать функцию SEND_string_GPRS. В Листинге 9 показана функция отправки данных на сервер.
Листинг 9. Функция отправки данных на сервер.
В корневом каталоге веб-сервера создаем папку in, внутри ее располагаем другие папки со скриптами для обработки приема данных GSM модуля. Внутренние папки содержат файл index.php и log.txt.
На Листинге 10 показано содержание файла index.php.
Листинг 10. PHP листинг файла index.php.
Как видно, с приходом новых данных происходит перезапись файла log.txt.
Рисунок 13. | Собранная схема на макетной плате. |
Все компоненты собраны на макетной плате (Рисунок 13). Устройство не требует настроек, после сборки и прошивки сразу готово к работе.
Модуль GSM GPRS SIM800L V2.0 обладает минимальным функционалом — обмен данными с GSM-модулем по UART. Плата имеет слот для установки внешней SIM-карты.
SIM800L V2.0 GSM/GPRS - это четырех диапазонный GSM/GPRS модуль, совместимый с Arduino. Модуль используется для реализации функций GSM и GPRS. Преимуществом этого модуля является возможность напрямую подключать его к Arduino или другому микроконтроллеру с напряжением питания 5В.
Общие характеристики SIM800L V2.0 GSM/GPRS:
- Модель : SIMCOM SIM800L;
- Напряжение питания : от 3,7В до 5В;
- Поддержка сети: четыре диапазона–850/900/1800/1900 МГц, способные осуществлять звонки, SMS и передачу данных со значительно уменьшенным расходом заряда;
- Управление посредством AT-команд;
- TTL совместимый по уровню с Arduino;
- Низкая потребляемая мощность;
- Штекер подключения антенны;
- Наличие антенны;
- Размеры: 40мм х 28мм х 3мм;
- Диапазон рабочих температур: от -40°C до +85°C.
Распиновка GSM-модуля SIM800L:
- RxD (Receiver) — Вывод последовательной связи.
- TxD (Transmitter) — Вывод последовательной связи.
- GND — Вывод заземления, должен быть подключен к выводу GND на Arduino.
- VCC — Питание модуля, от 3,7 В до 5 вольт.
- DTR — этот пин отвечает за выход из спящего режима модуля.
- RST (Reset) — Вывод сброса модуля.
Схема подключения GSM GPRS SIM800L V2.0 MicroSIM к Arduino UNO.
Схема подключения SIM800L V2.0 к Arduino NANO.
Так как модуль GSM GPRS SIM800L V2.0 MicroSIM может общаться только по UART и не имеет звукового интерфейса. Схема подключения будет очень простая, всего по двум проводам + питание.
Тестирование AT-команд SIM800L.
Для отправки AT-команд и связи с модулем SIM800L будем использовать окно «Монитора порта». Копируем приведенный скетч ниже и загружаем его в Arduino.
Открываем окно «Монитора порта», устанавливаем скорость «9600» и «NL (Новая строка)».
В коде используем библиотеку SoftwareSerial.h, которую нужно подключить. Библиотеку можно скачать внизу статьи в разделе «Файлы для скачивания».
Для проверки работоспособности будем использовать команды:
- AT — это самая основная команда AT. Если все работает, в ответ получаем, символ AT, а затем ОК, сообщая, что все в порядке.
- AT+CSQ — проверка уровня сигнала в дБ, должно быть выше 5.
- AT+CCID — получение номера SIM-карты.
- AT+CREG? — проверка регистрации в сети.
В мониторе порта увидим следующую информацию.
Также можно проверить:
- ATI — получить название модуля и ревизию
- AT+COPS? — проверка регистрации в сети (Bee Line)
- AT+COPS=? — список операторов в сети.
- AT+CBC — команда показывает состояние батареи
Подробный список AT команд приведен в таблице ниже.
Описание | Команда | Структура ответа | Пример ответа |
Готовность модуля к работе | AT | OK | OK |
Запрос информации об устройстве | ATI | <info> OK <info> — модель и версия модуля | SIM800 R14.18 |
0 — модуль не готов совершать звонки
1 — модуль готов совершать звонки
0 -115 дБм и меньше
1 -111 дБм
2. 30 -110. -54 дБм
31 -52 дБм и больше
99 определить невозможно
<ber> — RXQUAL ( мера качества сигнала), значение из таблицы GSM 05.08 — ETSI:
0. 7 — коэффициент битовых ошибок ( меньше — лучше)
99 определить невозможно
0 — зарядки нет
1 — зарядка идет
2 — зарядка завершена
0 — незапрашиваемый код регистрации в сети отключен
1 — незапрашиваемый код регистрации в сети включен
2 — незапрашиваемый код регистрации в сети включен с информацией о местоположении
<stat> — статус
0 — готов к выполнению команд из терминала
2 — неизвестно ( исполнение команд не гарантируется)
3 — входящий вызов, но модуль готов к выполнению команд
4 — исходящий вызов, но модуль готов к выполнению команд
Отправка СМС с помощью модуля GSM GPRS SIM800L V2.0 и Arduino.
Для отправки СМС также будем использовать AT команды:
СМС может содержать показание с датчика температуры и влажности, данные с датчика движения или уровень воды, давление в баке отопления или другую информацию.
С помощью модуля GSM GPRS SIM800L V2.0 MicroSIM можно получать СМС,управляя устройствами. Отправлять данные про GPRS на сайт. Также считывать команды сайта и производить управление домашней электроникой. Более подробнее данные функции рассмотрим в следующих уроках.
Появились вопросы или предложения, не стесняйся, пиши в комментарии!
Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.
Читайте также: