На данной странице описывается схема использование контроллера Arduino? без дополнительного Ethernet-модуля.
Итак, если ваш контроллер работает без Ethernet-модуля, то его можно подключить к компьютеру через USB-порт. После установки драйверов, в системе появится дополнительный COM-порт, через которых происходит "общение" компьютера с контроллером.
Задача в следующем -- сохранив общий принцип программирования контроллера обеспечить передачу данных от него в систему. Для этого можно использовать программу, представленную ниже (только для Windows-системы).
Данная программа подключается к выбранному COM-порту, считывает информацию, поступающую с него и при обнаружении строк, обозначающих вызов HTTP-запросов, перенаправляет эти запросы на указанный сервер сети. Таким образом, нам достаточно минимально изменить код прошивки?, убрав строки, отвечающие за инициализацию и использование Ethernet-модуля.
Переделка кода
Update: Полный код (уже с переделкой) данной прошивки контроллера без Ethernet-модуля можно найти здесь.
1. Удаляем приведённые ниже строки, т.к. они нам не понадобятся без etherner-модуля
1 2 3 4 5 6 7 8 9 10 11 |
#include <Ethernet.h> #include <SPI.h> // MAC-адрес нашего устройства byte mac[] = { 0x00, 0x2A, 0xF6, 0x12, 0x68, 0xFC }; // ip-адрес устройства byte ip[] = { 192, 168, 0, 72 }; // ip-адрес удалённого сервера byte server[] = { 192, 168, 0, 17 }; Ethernet.begin(mac, ip); |
2. Изменяем функцию отправки HTTP запроса на следующую:
1 2 3 |
void sendHTTPRequest() { Serial.println(buf); } |
Программа ArduinoGW
Скачать (350Kb) Исходный код (Delphi 6)
В настройках программы указывается номер COM-порта, к которому подключен контроллер, а так же скорость соединения с устройством. После нажатия кнопки Connect, будет произведено подключение к устройству и в рабочей области программы будут отображаться данные, получаемые с устройства.
При обнаружении в потоке данных строки вида:
1 |
GET /<параметры_запроса> |
Будет сформирован HTTP-запрос по адресу <BASEURL>/<параметры_запроса>
Например, если Base URL у нас http://localhost/ , а строка пришла вида
1 |
GET /objects/?object=sensorGarage&op=m&m=statusChanged&status=1 |
То будет отправлен запрос:
1 |
http://localhost/objects/?object=sensorGarage&op=m&m=statusChanged&status=1 |
Кроме того, при обнаружении строки вида
1 |
GET http://<полный_путь_с_параметрами> |
Программа не будет использовать настройку Base URL, а сформирует запрос по указанному адресу, т.е.
1 |
http://<полный_путь_с_параметрами> |
Таким образом, данная программа позволяет подключить Arduino к любому из компьютеров сети и перенаправлять запросы на "головной" сервер для последующей обработки в рамках общей системы.
Update: последнюю версию программы можно использовать ещё и для отправки команд в Arduino следующим образом:
1. Запускаем приложение, настраиваем, соединяемся с Arduino (так работало и раньше)
2. Если нужно что-то послать в открытое соединение, то просто из командной строки запускаем это же приложение, но в качестве параметров указываем строчку, которую нужно послать.
Update: Появилась возможность запускать в программе собственный веб-сервер, чтобы отправлять на него запросы, которые будут переданы в подключенное устройство. Пример запроса:
1 |
http://localhost:8082/?someData |
При этом на устройство будет отправлена строка "someData". В качестве someData могут так же выступать управляющие команды. Пример:
1 2 |
http://localhost:8082/?run:notepad.exe -- запустит notepad http://localhost:8082/?play:1.mp3 -- проиграет 1.mp3 |
Чтобы иметь возможность работать с несколькими портами, можно скопировать программу в разные каталоги.
Программа не завязана на системе MajorDoMo и может быть установлена совершенно автономно и использоваться вне общего комплекса, например посылая запросы на сервер, расположенный в сети Интернет.
Настройка "Auto connect at startup" обозначает, что программа после запуска будет автоматически стартовать сессию связи с контроллером и прятаться в системную облать.
Все настройки программы сохраняются от запуска к запуску в ini-файле, расположенном там же, где находится исполяемый exe-файл.