Общие сведения
В этом уроке мы создадим метео станцию с построением онлайн графиков при помощи бесплатного IoT сервиса ioControl.
Видео
Нам понадобится
- Piranha ULTRA
- Trema модуль - Датчик освещенности, люксметр, I2C-flash
- Trema модуль - Датчик температуры и влажности,I2C-flash
- Trema модуль - Барометр BMP280
- Ethernet Shield W5500
- Battery Shield
- Trema Shield
- I2C-hub
Создание и настройка панели на iocontrol.ru
- Создаём или входим в учётную запись на сайте iocontrol
- нажимаем "Создать панель". Придумываем название панели, например "myNewPanel" (название панели должно быть уникальным на сайте. Если панель с таким именем уже есть, сайт уведомит об этом). Нажимаем Создать.
- Создаём переменные myTem, myHum, myPres и указываем при создании тип с плавающей точкой. Создаём переменную целочисленного типа myLum.
- Для красоты можно настроить подписи переменных, для этого необходимо нажать на пиктограмму шестерёнки в карточке переменной и выбрать подпись из шаблонов или ввести её вручную.
Подключение
Устанавливаем модуль 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 <Wire.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 -------");
}
}
Ссылки
- Wiki - Установка библиотек в Arduino IDE.
- Расширенные возможности библиотек iarduino для шины I2C.
- Ethernet Shield W5500
- Бесплатный сервис ioControl
- Создание учётной записи в сервисе ioControl
- Создание панели в ioControl
- Создание переменных в ioControl
- Подготовка Arduino к работе с ioControl
- Wiki - Датчик освещенности, люксметр, I2C (Trema-модуль)
- Wiki - Датчик температуры и влажности, I2C (Trema-модуль)
- Wiki - Датчик давления (Trema-модуль)
- Библиотека iaruidno_I2C_DSL
- Библиотека iaruidno_I2C_SHT
- Библиотека iaruidno_Pressure_BMP
- Библиотека iocontrol

Обсуждение