Общие сведения
В этом проекте мы соединим две платы 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 -------");
}
}

Обсуждение