РадиоЛоцман - Все об электронике

Удаленное управление нагрузкой с помощью веб-приложения и GSM модуля SIM800L

Simcom SIM800L

Захаров Денис, Украина

Современные беспроводные технологии позволяют разрабатывать функциональные и доступные устройства. Подобные приборы взаимодействуют с широким спектром систем общего назначения. В этой статье пойдет речь об организации двухсторонней передачи данных между GSM модулем SIM800L (Рисунок 1) и полноценным веб-сервером.

GSM модуль SIM800L.
Рисунок 1. GSM модуль SIM800L.

В сети есть много примеров использования этого модуля. Как правило, его применяют в различных системах сигнализации и удаленного управления объектами. При этом данные передаются по SMS протоколу, что совершенно неудобно с пользовательской точки зрения.

Для организации работы такой системы нам понадобятся GSM модуль SIM800L, плата Arduino Nano (Рисунок 2) и веб-сервер с доменом.

Плата Arduino Nano.
Рисунок 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(), которая перезагружает модуль и последовательно отправляет команды:

AT
ATE0
AT+GSMBUSY=0
AT+CPAS
AT+CREG?
AT+CSQ
AT+CBC
AT+CUSD=1,"*111#"

Разберем назначение каждой команды:

  • AT – проверяем готовность модуля в приему команд.
  • ATE0 – отключаем режим ЭХО.
  • AT+GSMBUSY=0 – запрещаем входящие звонки.
  • AT+CPAS – проверяем готовностью и текущее состояние модуля.
  • AT+CREG? – проверка регистрации в сети.
  • AT+CSQ – проверка уровня сигнала.
  • AT+CBC – проверяем питание.
  • AT+CUSD=1,"*111#" – проверяем баланс SIM-карты.

Каждую команду необходимо проверять на наличие положительного ответа «ОК», в противном случае нужно заново отправить команду и дождаться нужного ответа. Как правило, при первом включении команда AT+CPAS с первого раза не дает ответ «ОК», обычно готовность появляется после 2-3 попыток.

На Рисунке 5 показан процесс выполнения подпрограммы init_GSM.

Процесс выполнения подпрограммы init_GSM.
Рисунок 5. Процесс выполнения подпрограммы init_GSM.

На Листинге 1 показан пример обработки команды AT+CPAS.

Листинг 1. Программа обработки команды AT+CPAS.

Во время ответа от модуля в cycle_for() происходит сравнение и установка значения в bit_ok. Если значение равняется 1, то модуль вернул «ОК», при ответе 2 – модуль возвращает «Error». Если положительно ответа нет, то через 1 секунду повторяем отправку i раз.

Настройка GPRS соединения

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

Для этого вызываем функцию init_GPRS(), которая отправляет в модуль следующие строки:

GPRS test
AT+SAPBR=3,1,"APN","internet.tele2.ru"
AT+SAPBR=3,1,"USER","tele2"
AT+SAPBR=3,1,"PWD","tele2"
AT+SAPBR=1,1
AT+HTTPINIT
AT+HTTPPARA="CID",1

Аналогично подпрограмме init_GSM(), во всех необходимых местах проверяем положительный ответ «ОК» от модуля.

На Рисунке 6 показан процесс выполнения подпрограммы init_GPRS().

Процесс выполнения подпрограммы init_GPRS().
Рисунок 6. Процесс выполнения подпрограммы init_GPRS().

На этом этапе работу с модулем можно завершить. Для последующей работы необходимо настроить сервер и создать соответствующие файлы для обмена данными.

Создание файлов и работа с веб-сервером

Чтобы принять данные с GSM модуля, нужно приобрести услугу хостинга с минимальными требованиями, главное, чтобы была поддержка PHP. PHP – это популярный язык программирования, который исполняется на стороне сервера, в то время как JavaScript исполняется в браузере на стороне пользователя.

В качестве примера сделаем удаленное управление поливом теплицы.

Распишем основные задачи для веб-сервера и GSM модуля.

Задачи веб-сервера:

  • Принимать и отображать на веб-странице данные температуры, времени работы и статус насоса;
  • Предоставлять данные GSM модулю о статусе вкл/выкл насоса.

Задачи GSM модуля:

  • Отправлять данные о времени работы насоса полива;
  • Отправлять температуру насоса и воды;
  • Принимать данные с веб-сервера о статусе вкл/выкл насоса.

Первым делом в корневом каталоге сервера создаем файл index.php.

На Листинге 2 показан начальный код разметки HTML страницы.

Листинг 2. Начальный код разметки HTML страницы.

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

Результат открытого в браузере файла index.php показан на Рисунке 7.

Результат открытого в браузере файла index.php.
Рисунок 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. Функция чтения данных с сервера.

В строке adress_site указываем адрес своего сайта форматом http://site.ru/. В строке adress_txt указываем путь к txt файлу.

Прочитаем статус вкл/выкл насоса из файла 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). Устройство не требует настроек, после сборки и прошивки сразу готово к работе.

Демонстрационное видео

Ссылки

  1. Файлы Arduino и скрипты для сервера
  2. Datasheet SIMCom SIM800L
Цена SIM800LSIM800L на РадиоЛоцман.Цены — от 18,54 до 654 руб.
SIM800L GPRS Adapter Plate GSM Module MicroSIM Card Core Board
ПоставщикПроизводительНаименованиеЦена
AliExpressSIM900 SIM800L SIM908 WI-FI 2,4 г 3dbi PCB антенна IPX IPEX WLAN 802,11 b/g/n ноутбук bluetooth, ZigBee Беспроводной модуль19 руб.
GearBestSIM800L GPRS Adapter Plate GSM Module MicroSIM Card Core Board382 руб.
ЭлитанTycoSIM800L-MOD-W1654 руб.
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя