Управление Arduino через интернет с помощью ПК — опыт новичка
Всем привет. В этой статье расскажу о том, как мне удалось реализовать управление Arduino через интернет с помощью подключенного к интернету ПК. В общем случае данный способ можно использовать для любого микроконтроллера, например PIC. Способ довольно дубовый, есть куда модернизироваться и есть много более продвинутых схем, но в простейшем случае этого хватит.
Хочется сразу сказать, что в этой статье я не буду очень сильно углубляться в тонкости программирования, предполагается, что читающий имеет хотя-бы минимальные азы. Расскажу в целом как использовались ресурсы и о интересных моментах.
Предпосылки к созданию данного способа у меня возникли во время создания моего электромобиля: Жмяк сюда! Скажу сразу, что создавалось это всё больше из спортивного интереса, нежели для серьёзных практических работ, но тем не менее оно работает и может пригодится кому-либо.
Arduino Bluetooth Controller
Эта программа работает в 3 основных положениях:
Контроллер. Приложение демонстрируется в облике play идентификатора и управляется кнопками переключения. Работает одной клавишей, основная функция которой – дистанционное управление.
Установка приложения Arduino Bluetooth Controller сводит несколько устройств по воздушному каналу. Сообщения передаются по датчикам, контроллерам и обратно. Управляя смартфоном при помощи блютуз модулей, также возможно организовать беспроводное соединение целого проекта. Программирование такого типа доступно всем желающим и не требует особых усилий.
Эксперимент
Чтобы продемонстрировать, как использовать Arduino в качестве веб-сервера, мы будем считывать состояние кнопки.
Необходимые комплектующие
- 1 x кабель Ethernet cable
- 1 x Wi-Fi роутер
- 1 x Arduino Mega2560
- 1 x плата расширения Ethernet Shield
- 1 x макетная плата
- 3 x перемычка
- 1 x резистор 1 кОм
- 2 x блок питания 9В
- 1 x кнопка
Схема соединений
Соедините компоненты, как показано на рисунке выше. Вывод 8 Arduino соединен с кнопкой. Этот вывод настроен, как вход, и, когда кнопка нажата, Arduino будет считывать высокий уровень на этом выводе. После чего Arduino установит состояние выхода в значение ON. Когда кнопка отпущена, выход будет установлен в значение OFF. Состояние кнопки будет доступно веб-серверу.
Конфигурация Ethernet
Для управления платой расширения Ethernet будем использовать библиотеку Ethernet.h .
Плате расширения должны быть присвоены MAC и IP адреса с помощью функции Ethernet.begin() . Для конкретного устройства MAC адрес представляет собой глобальный уникальный идентификатор. Современные платы расширения Ethernet приходят с наклейкой, указывающей MAC адрес. Для старых плат расширения должен присваиваться какой-либо случайный адрес, но не используйте один и тот же адрес для нескольких плат. Правильность IP адресов зависит от конфигурации сети. Если используется DHCP, IP адрес может быть присвоен плате расширения динамически.
IP адрес
IP адрес является числовой меткой, присваиваемой каждому устройству в компьютерной сети, использующей межсетевой протокол IP. Указать IP адрес в скетче просто:
И изменить его под собственную сеть. Например, если IP адрес роутера 192.168.0.60, а у сканера 192.168.0.40, то плате расширения можно назначить IP адрес 192.168.0.50:
Первые три байта должны быть одинаковыми.
MAC адрес
MAC адрес (адрес Media Access Control — адрес управления доступом к среде) представляет собой уникальный идентификатор, присвоенный каждому устройству, участвующему в физической сети. Каждая составляющая сетевого оборудования имеет уникальный серийный номер, чтобы идентифицировать себя в сети, и который жестко зашит в прошивку оборудования. Тем не менее, для Arduino мы можем задать MAC адрес сами:
Вы можете задать подсеть и шлюз с помощью следующего кода:
Ниже показан блок кода с настройками платы расширения Ethernet Shield:
Ниже приведено собранной схемы. Кабель Ethernet соединяет плату расширения с роутером, который через WiFi соединен с ноутбуком.
Программа
Ниже приведен блок кода, выводящего HTML код простой веб-страницы.
Эта программа будет отображать веб-страницу в веб-браузере при обращении к IP адресу, присвоенному Arduino. Следующая строка указывает браузеру на необходимость обновления страницы:
Когда страница будет запрошена снова, Arduino снова считает состояние кнопки и отобразит его.
Помните, вы всегда может посмотреть исходный код отображаемой веб-страницы. Нажав кнопку, вы может наблюдать изменение состояния кнопки, как показано на видео ниже.
Также вы можете собрать всё без роутера. Для этого необходим перекрестный ethernet кабель. Адрес шлюза в этом случае можно оставить пустым.
Подключение W5100 к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Ethernet Shield W5100 x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
Подключение:
В качестве демонстрации, возьмем стандартный пример со среды разработки IDE Arduino. Для этого нам понадобится internet Shield W5100 и Arduino UNO R3 (устанавливаем Shield поверх Arduino). Как уже поняли библиотеку используем стандартную «Ethernet» дополнительно скачивать и устанавливать не нужно, загружаем скетч показанный ниже или в IDE Arduino заходим примеры «Файл» —> «Примеры» —> «Ethernet» —> «WebServer». Схема подключения показана ниже.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress) или Nano (купить на AliExpress).
- Ethernet модуль W5100 (купить на AliExpress).
- Светодиод (купить на AliExpress).
Ethernet модуль W5100 позволяет устанавливать полнофункциональное интернет соединение. С его помощью можно подключать плату Arduino к сети интернет без поддержки операционной системы компьютера. Модуль поддерживает различные протоколы стека TCP/IP: TCP, PPPoE, Ethernet, UDP, ICMP, IPv4 и другие. Модуль W5100 способен работать в дуплексном и полудуплексном режимах работы. Также он имеет поддержку ADSL соединений (до 4-х соединений одновременно).
Для подключения Ethernet модуля W5100 мы будем использовать библиотеку Arduino Ethernet library, которая поддерживает все версии плат Arduino: UNO, NANO, mega 1280, mega 2560 и другие. Функциональность Ethernet модуля W5100 такая же, как и у шилда (shield) Arduino Ethernet, а стоит модуль в два раза дешевле чем данный шилд.
/*—————- 4 часть —————-*/
client. println («HTTP/1.1 200 OK»); //заголовочная информация
client. println («Content-Type: text/html»);
client. println («Connection: close»);
client. println («Refresh: 5»); //автоматическое обновление каждые 5 сек
client. println (); //Это не ошибка, так должно быть
client. println («>«); //HTML тип документа
client. println («>«); //открытие тега HTML
client. println («> «); //открытие тега Head
client. println («> «);
client. print («
client. println (««); //заголовочная информация
client. println (««);
client. print («>HelpDuino Web Server
«); //заголовк на странице
client. print (««);
//кнопка включить
client. print (««);
//кнопка выключить
client. println («<>br>
«); //перенос на след. строчку
client. println («
«); //линия=====================================
client. println («Tемпература ewq»>println (t); //переменная температуры
client. println (» *C»);
client. println (»
«); //перенос на след. строчку
client. println («Влажность ewq»>println (h); //переменная влажности
client. println (» %t»);
client. println (»
«); //перенос на след. строчку
client. println («
«); //линия=====================================
client. println (««);
client. println («