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

Онлайн метеостанция с графиками

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

В этом уроке мы создадим метео станцию с построением онлайн графиков при помощи бесплатного IoT сервиса ioControl.

Видео

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

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

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

Подключение

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

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

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

Подключаем модули к I2C-hub, а I2C-hub к Trema Shield'у.

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

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

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

Параметр Значение
Контроллер Arduino/Piranha ULTRA
Shield Ethernet Shield w5500
Вывод SS D10
IP адрес DHCP
Mac адрес 0xCC
Панель панель с нашей переменной
Переменные на чтение -
Переменные на запись myHum, myTem, myLum, myPres

После генерации нам остаётся добавить в скетч код для наших модулей

Так же необходимо установить библиотеки iarduino_I2C_SHT, iarduino_I2C_DSL, iaruidno_Pressure_BMP и iocontrol. Если Вы не знаете как устанавливать библиотеки в Arduino IDE - Вы можете узнать по этой ссылке

#include <iocontrol.h>
#include <SPI.h>
#include <Ethernet.h>

// Следующие шесть строк мы добавили вручную
#include <iarduino_Pressure_BMP.h>
#include <iarduino_I2C_SHT.h>
#include <iarduino_I2C_DSL.h>
iarduino_I2C_SHT sht;
iarduino_I2C_DSL dsl;
iarduino_Pressure_BMP bmp;

// Название панели на сайте iocontrol.ru
const char* myPanelName = "сюда_необходимо_вставить_название_Вашей_панели";
int status;

// Название переменных как на сайте iocontrol.ru
const char* VarName_myTem = "myTem";
const char* VarName_myHum = "myHum";
const char* VarName_myPres = "myPres";
const char* VarName_myLum = "myLum";

// Создаём объект клиента класса 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);

    // Инициируем Ethernet Shield с использованием DHCP
    Ethernet.begin(mac);

    // Строки инициализации датчиков, добавлены вручную
    bmp.begin();
    dsl.begin();
    sht.begin();

    // Вызываем функцию первого запроса к сервису
    status = mypanel.begin();
    Serial.println((String)"Status mypanel.begin = "+status);
}

void loop()
{

    // ************************ ЧТЕНИЕ ************************

    // Чтение значений переменных из сервиса
    status = mypanel.readUpdate();
    // Если статус равен константе OK...
    if (status == OK) {
        // Выводим текст в последовательный порт
        Serial.println("------- Read OK -------");
        // Записываем считанный из сервиса значения в переменные

    }

    // ************************ ЗАПИСЬ ************************

    // Читаем показания датчиков, строки добавлены вручную
    bmp.read();
    float ioPres = bmp.pressure;
    float ioHum = sht.getHum();
    float ioTem = sht.getTem();
    uint16_t ioLum = dsl.getLux();

    // Записываем  значение в переменную для отправки в сервис
    // переменные io* добавлены вручную
    mypanel.write(VarName_myLum, ioLum);
    mypanel.write(VarName_myTem, ioTem);
    mypanel.write(VarName_myHum, ioHum);
    mypanel.write(VarName_myPres, ioPres);

    // Отправляем переменные из контроллера в сервис
    status = mypanel.writeUpdate();
    // Если статус равен константе OK...
    if (status == OK) {
        // Выводим текст в последовательный порт
        Serial.println("------- Write OK -------");
    }
}

Ссылки




Обсуждение

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