Главная chevron_right Наши уроки chevron_right Arduino chevron_right Соединяем две Arduino через Интернет (IOT)

Соединяем две Arduino через Интернет (IOT)

Подключаем две платы Piranha ULTRA через интернет с помощью сервиса ioControl и Ethernet Shield W5500. Нажатие кнопки на одном устройстве управляет светодиодом на другом

Видео-обложка запускается при наведении

Общие сведения

В этом проекте мы соединим две платы Arduino ULTRA/Piranha ULTRA через интернет. Сделаем мы это при помощи сервиса ioControl.

Видео

Нам понадобится

Создание и настройка панели на iocontrol.ru

  1. Создаём или входим в учётную запись на сайте iocontrol
  2. нажимаем "Создать панель". Придумываем название панели, например "myNewPanel" (название панели должно быть уникальным на сайте. Если панель с таким именем уже есть, сайт уведомит об этом). Нажимаем Создать.
  3. Создаём переменную целочисленного типа и называем её myButton.
  4. Настраиваем вид переменной как кнопки(Нажимаем на пиктограмму шестерёнки в правом верхнем углу карточки переменной и в открывшейся странице выбираем вид "Кнопка".

Подключение

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

Устанавливаем модуль Ethernet Shield W5500 на Piranha ULTRA

Устанавливаем Battery Shield

Устанавливаем сверху Trema Shield

Подключаем Trema-модуль Кнопка к одному устройству.

Подключаем Trema-модуль Светодиод к другому устройству.

Скетч проекта

Для скетча мы воспользуемся генератором скетча для IDE на сайте ioControl.

Нажмём на кнопку "Генератор скетча для IDE".

Выберем необходимые параметры. В нашем случае это:

ПараметрУстройство с кнопкойУстройство со светодиодом
КонтроллерArduino/Piranha ULTRAArduino/Piranha ULTRA
ShieldEthernet Shield w5500Ethernet Shield w5500
Вывод SSD10D10
IP адресDHCPDHCP
Mac адрес0xCE0xCC
Панельпанель с переменной 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 -------");
    }
}

Ссылки

Комплект для повторения проекта

Что понадобится

Это быстрый ориентир по основным модулям и деталям. Полный список для повторения проекта смотрите в самой статье.

7 позиций
Все уроки Arduino