КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

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

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

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

Ссылки




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями