Sim800l gsm розетка с термодатчиком

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

Simcom SIM800L

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

Современные беспроводные технологии позволяют разрабатывать функциональные и доступные устройства. Подобные приборы взаимодействуют с широким спектром систем общего назначения. В этой статье пойдет речь об организации двухсторонней передачи данных между 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, соответственно.

Читайте также:  Розетка двойная накладная werkel galant с заземлением

Инициализация

Первым делом необходимо провести инициализацию и первичную настройку модуля 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.

Рисунок 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().

Рисунок 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. Функция чтения данных с сервера.

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

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

Источник