Управление светодиодом

Управление Arduino через интернет с помощью ПК — опыт новичка

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

Вместо вступления

Хочется сразу сказать, что в этой статье я не буду очень сильно углубляться в тонкости программирования, предполагается, что читающий имеет хотя-бы минимальные азы. Расскажу в целом как использовались ресурсы и о интересных моментах.

Предпосылки к созданию данного способа у меня возникли во время создания моего электромобиля: Жмяк сюда! Скажу сразу, что создавалось это всё больше из спортивного интереса, нежели для серьёзных практических работ, но тем не менее оно работает и может пригодится кому-либо.

На чем строится вся система и как реализовано в железе

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

PS. Про серверную часть рассказано ниже.

В этой статье я буду управлять Arduino MEGA 2560 (китайским аналогом), но «за кулисами» схема спокойно сработала и с PIC16F877А, единственное что пришлось использовать — переходник USB-TTL:

Понятное дело программа для PIC несколько отличается от программы для Ардуино, ввиду разных типов МК, но принцип один и тот-же:

Принимаем через COM-порт данные, сравниваем их с внутренней таблицей команд и выполняем соответственное действие.

Схема изначально мне показалась очень простой, но было одно НО — небыло программы, которая читала бы файлик в интернете и отсылала данные в COM-порт. Соответственно такую программу пришлось написать.

Программа писалась на VB6. Для чтения файла с сервера используется компонент VB6: Microsoft Internet Transfer Control 6.0. С его помощью просто читается текстовый файл на сервере в строковую переменную. После чтения эта строка отсылается в COM-порт с помощью компонента VB6: Microsoft Comm Control 6.0. Весь процесс чтения файла и отсылания строки читается в цикле с использования таймера. Интервал срабатывания таймера можно менять в конфиге программы, либо прямо во время работы. Кроме этого можно выбрать режим работы порта, его номер, режим работы интернет соединения и ссылку на читаемый файл.

Читайте также:  Пропадает мобильный интернет айфон 11

Хочется сделать замечание, что при больших размерах файла и маленьких промежутках программа подвисает, но продолжает работать. Размер буфера моей программы 512 байт. Учитывая, что у моего МК буфер меньше, этого хватает.

Важный момент. Программа в МК не умеет парсить данные, она умеет читать только какой символ был передан на вход через последовательный порт. Без ошибок у меня получилось принимать латиницу (26 символов A-Z и 10 цифр 0-9). Итого 36 команд, если алгоритм доработать и ввести парсинг данных в МК, то передавать можно любые данные. Так же есть возможность «допилинга» ПО для двустороннего обмена данными.

Выбор сервера и серверная часть

Для серверной части подойдет любой сервер с поддержкой PHP, хоть запущенный на личном ПК, лишь бы был статический IP, но я лично использую арендованный Jino. Серверная часть в моём примере состоит из двух файлов: HTML странички с формой с кнопками ВКЛ/ВЫКЛ светодиода и PHP скрипта, который меняет содержимое TXT файла из которого программа, запущенная на ПК читает данные.

Программное обеспечение

Код HTML. Форма с 2 кнопками, вкл/выкл светодиод на плате:

     Светодиод: 

Код PHP, здесь мы пишем в файл команду А, если светодиод должен гореть, и В если должен потухнуть:

Теперь собственно код для Arduino:

int val; // освобождаем память в контроллере для переменой void setup() < Serial.begin(9600); // подключаем последовательный порт pinMode(13, OUTPUT); // объявляем пин 13 как выход >void loop() < // проверяем, поступают ли какие-то команды if (Serial.available()) < val = Serial.read(); // переменная val равна полученной команде if (val == 'a') // при a включаем светодиод if (val == 'b') // при b выключаем светодиод >> 

Сама программа для чтения информации на сервере с пересылкой в COM-порт и её исходный код лежат в архиве по ссылке: Яндекс-Диск Программа скомпилирована в несколько вариантов кода, возможно будут какие-либо различия в работе, но не должно быть. При первом запуске EXEшника генерируется файл справки и конфиг-файл. Данные из этого файла считываются при запуске программы, если он существует. Если файл не существует (например при первом запуске программы), то config-файл создается с дефолтными значениями.

Результаты работы

Вместо заключения

В данном примере я реализовал простой «дубовый» алгоритм, который работает. Есть конечно куда развиваться дальше, но тем не менее уже в таком виде можно отсылать 36 команд. Если реализовать парсинг входящих данных в микроконтроллере, то можно передавать любые данные. Для моих задач 36 команд хватит с головой, да и к тому-же это опыт новичка 🙂

Источник

Подключение Ардуино к Интернету

Конструктор «для взрослых» — Ардуино, очень функциональный и может использоваться практически для любых задач. Если у вас есть своя задумка, но такого устройства в продаже нет, не беда – его можно собрать своими руками на базе Arduino.

Очень часто пользователи сталкиваются с проблемой подключения своего «девайса» к сети Интернет. Интернет может использоваться для:

1. Получения каких-либо данных с устройства (статистика работы, информация о состоянии или статусе, координаты местоположения, температура и т.п.).

2. Управления устройством (переключение состояния, запуск определенных процессов, управление сторонними устройствами, подключенными к Ардуино и т.п.).

3. Для двустороннего обмена данными (сочетает в себе свойства первого и второго подходов).

Интернет – это общее понятие, характеризующее сеть сетей. Под «Интернетом» часто подразумевают непосредственно доступ к децентрализованной глобальной сети. При этом составляющие ее локальные сети могут использовать различные технологии – проводные и беспроводные, скоростные и не очень.

К Интернету можно подключить любое устройство, хоть чайник, главное, чтобы он обменивался данными с другими устройствами в правильном формате.

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

Таким образом, способ подключения зависит от технологии объединения первой локальной сети. В быту наиболее часто используются:

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

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

В общем случае схема обмена данными с Arduino через Интернет выглядит следующим образом.

Схема обмена данными с Arduino через Интернет

Рис. 1. Схема обмена данными с Arduino через Интернет

К Arduino подключается внешний шилд (Wi-Fi, GPRS или Ethernet), который посредством протокола http (или TCP/IP) обменивается данными с web-сервером (необходим выделенный ПК или аренда у хостера). На сервере запускается скрипт (функционал и код зависит от задач). С конечного устройства (планшета, ПК, ноутбука, смартфона) пользователь подключается уже непосредственно к серверу и видит необходимые данные, может отправлять свои.

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

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

Если вы хотите, чтобы ваше удаленное устройство было всегда доступно (в сети), оно должно часто обмениваться пакетами с сервером, что создает ряд проблем:

1. Нагрузка на сервер (особенно актуально для бесплатных тарифов хостинга, которые используются для экономии бюджета);

2. Объем исходящего трафика (например, при использовании мобильного интернета может взиматься плата согласно тарифа);

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

Решить проблемы можно только за счет уменьшения числа запросов на обмен данными (например, 1 раз в 10 минут или реже).

Из комплектующих были выбраны следующие:

1. Плата Arduino (использовался вариант UNO);

2. Шилд GSM/GPRS (был взят SIM900);

Описания и возможности плат можно найти на официальных сайтах производителей.

Для работы с модулем V.KEL 16 понадобится библиотека TinyGPS. Сама плата подключается к UNO на 2 и 3 пины (программный UART).

GPRS shield цепляется на 7 и 8 контакты.

За обработку принимаемых данных на сервере отвечает скрипт gps_tracer1.php (см. во вложении). Сами данные передаются в GET-запросе и записываются в базу данных (БД).

WEB-интерфейс отображает метки на Я.Картах с указанием времени.

В скетче можно настроить время между отправкой данных (константа INTERVALSEND) и при простоя (константа MINCANGE отвечает за переключение режима).

После установки серверного скрипта, необходимо прописать свои данные с логином и паролем пользователя БД (файл my.php). В скетче необходимо изменить свое доменное имя.

Сервер должен иметь поддержку mySQL и php.

Самодостаточный сервер на шилде с Ethernet

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

При использовании Ethernet shield можно подключиться к Интернету через проводной интерфейс RG-45 (который расположен на шилде).

Простой пример самодостаточного сервера на Arduino UNO R3 с шилдом W5100.

К основной плате (Ардуино) подключаем два светодиода (через ограничительные резисторы номиналом 220 Ом) на контакты 7 и 8. Подключаем W5100.

Подключение к Интернету

Рис. 2. Подключение к Интернету

Прошиваем скетч из вложений (primer_ethernet.zip).

Теперь при открытии указанного в листинге IP-адреса (присваивается вашему устройству при прошивке) вы попадаете на web-страницу Arduino-сервера, где можно простым переключением указателей зажечь или погасить подключенные светодиоды.

Web-страница Arduino-сервера

Рис. 3. Web-страница Arduino-сервера

Ардуино и примеры подключения его к Интернет здесь и здесь

Мнения читателей
  • Рашит / 08.07.2021 — 19:41 Про хранение web-интерфейса на ардуинке с шилдом понятно. Т.е. кнопки для вкл/выкл хранятся на самой плате. А как сделать запрос извне, например, на хостинге есть страница page.php, где прописан примерно такой же интерфейс что и на ардуинке. Только при нажатии на кнопку какая команда должна быть отправлена на плату, чтобы сработало реле?

Вы можете оставить свой комментарий, мнение или вопрос по приведенному выше материалу:

Источник

Оцените статью
Adblock
detector