Общие сведения
В этом проекте мы соединим две платы Arduino ULTRA/Piranha ULTRA через интернет. Сделаем мы это при помощи сервиса ioControl.
Видео
Нам понадобится
- 2x Ethernet Shield W5500
- 2x Piranha ULTRA
- 2x Trema Shield
- 2x Battery Shield
- 1x Модуль кнопка
- 1x Модуль светодиод
Создание и настройка панели на iocontrol.ru
- Создаём или входим в учётную запись на сайте iocontrol
- нажимаем "Создать панель". Придумываем название панели, например "myNewPanel" (название панели должно быть уникальным на сайте. Если панель с таким именем уже есть, сайт уведомит об этом). Нажимаем Создать.
- Создаём переменную целочисленного типа и назывем её
myButton
. - Настраиваем вид переменной как кнопки(Нажимаем на пиктограмму шестерёнки в правом верхнем углу карточки переменной и в открывшейся странице выбираем вид "Кнопка".
Подключение
Каждое действие необходимо сделать два раза, за исключением последнего, где к одной плате мы подключим сетодиод, а ко второй плате кнопку.
Устанавливаем модуль Ethernet Shield W5500 на Piranha ULTRA
Устанавливаем Battery Shield
Устанавливаем сверху Trema Shield
Подключаем Trema-модуль Кнопка к одному устройству.
Подключаем Trema-модуль Светодиод к другому устройству.
Скетч проекта
Для скетча мы воспользуемся генератором скетча для IDE на сайте ioControl.
Нажмём на кнопку "Генератор скетча для IDE".
Выберем необходимые параметры. В нашем случае это:
Параметр | Устройство с кнопкой | Устройство со светодиодом |
---|---|---|
Контроллер | Arduino/Piranha ULTRA | Arduino/Piranha ULTRA |
Shield | Ethernet Shield w5500 | Ethernet Shield w5500 |
Вывод SS | D10 | D10 |
IP адрес | DHCP | DHCP |
Mac адрес | 0xCE | 0xCC |
Панель | панель с переменной myButton | панель с переменной myButton |
Переменные на чтение | - | myButton |
Переменные на запись | myButton | - |
После генерации нам остаётся добавить код только для наших модулей в кадый из скетчей соответственно.
Так же необходимо установить библиотеку iocontrol. Если Вы не знаете как устанавливать библиотеки в Arduino IDE - Вы можете узнать по этой ссылке
Скетч для кнопки
#include <iocontrol.h> #include <SPI.h> #include <Ethernet.h> // Определяем вывод кнопки #define BUT 2 // эту строку мы добавили вручную // Название панели на сайте iocontrol.ru const char* myPanelName = "сюда_необходимо_вставить_название_Вашей_панели"; int status; // Название переменных как на сайте iocontrol.ru const char* VarName_myButton = "myButton"; // Создаём переменную для хранения состояния кнопки bool button = false; // Эту строку мы добавили вручную // Создаём объект клиента класса EthernetClient EthernetClient client; // Создаём объект iocontrol, передавая в конструктор название панели и клиента iocontrol mypanel(myPanelName, client); // MAC адреса Ethernet шилда. Должен быть уникальным в сети byte mac[] = { 0xDE, 0xAD, 0xDE, 0xAD, 0xFA, 0xCE }; void setup() { Serial.begin(9600); Ethernet.init(10); // Инициируем Ethernet Shield с использованием DHCP Ethernet.begin(mac); // Вызываем функцию первого запроса к сервису status = mypanel.begin(); Serial.println((String)"Status mypanel.begin = "+status); } void loop() { // ************************ ЧТЕНИЕ ************************ // Чтение значений переменных из сервиса status = mypanel.readUpdate(); // Если статус равен константе OK... if (status == OK) { // Выводим текст в последовательный порт Serial.println("------- Read OK -------"); // Записываем считанный из сервиса значения в переменные } // ************************ ЗАПИСЬ ************************ // Записываем значение в переменную для отпраки в сервис // Считываем логический уровень кнопки // и меняем значение переменной button на // противоположное if (digitalRead(BUT)) { // Эти строки delay(100); // мы if (digitalRead(BUT)) // добавили button = !button; // вручную } // Записываем значение в переменную на сайте mypanel.write(VarName_myButton, button); // Эту строку мы изменили вручную // Отправляем переменные из контроллера в сервис status = mypanel.writeUpdate(); // Если статус равен константе OK... if (status == OK) { // Выводим текст в последовательный порт Serial.println("------- Write OK -------"); } }
Скетч для светодиода
#include <iocontrol.h> #include <SPI.h> #include <Ethernet.h> // Определяем номер вывода светодиода #define LED 2 // Эту строку мы добавили вручную // Название панели на сайте iocontrol.ru const char* myPanelName = "сюда_необходимо_вставить_название_Вашей_панели"; int status; // Название переменных как на сайте iocontrol.ru const char* VarName_myButton = "myButton"; // Создаём объект клиента класса EthernetClient EthernetClient client; // Создаём объект iocontrol, передавая в конструктор название панели и клиента iocontrol mypanel(myPanelName, client); // MAC адреса Ethernet шилда. Должен быть уникальным в сети byte mac[] = { 0xDE, 0xED, 0xDE, 0xAD, 0xFA, 0xCC }; void setup() { Serial.begin(9600); Ethernet.init(10); // Меняем режим вывода светодиода pinMode(LED, OUTPUT); // Эту строку мы добавили вручную // Инициируем Ethernet Shield с использованием DHCP Ethernet.begin(mac); // Вызываем функцию первого запроса к сервису status = mypanel.begin(); Serial.println((String)"Status mypanel.begin = "+status); } void loop() { // ************************ ЧТЕНИЕ ************************ // Чтение значений переменных из сервиса status = mypanel.readUpdate(); // Если статус равен константе OK... if (status == OK) { // Выводим текст в последовательный порт Serial.println("------- Read OK -------"); // Записываем считанный из сервиса значения в переменные bool io_myButton = mypanel.readInt(VarName_myButton); // целочисленная переменна Serial.println((String)"io_myButton = "+io_myButton); // Меняем логический уровень вывода светодиода полученный с сайта digitalWrite(LED, io_myButton); // Эту строку мы добавили вручную } // ************************ ЗАПИСЬ ************************ // Записываем значение в переменную для отправки в сервис // Отправляем переменные из контроллера в сервис status = mypanel.writeUpdate(); // Если статус равен константе OK... if (status == OK) { // Выводим текст в последовательный порт Serial.println("------- Write OK -------"); } }
Обсуждение