Файлы библиотеки
Для работы с Arduino IDE библиотеку необходимо установить. Ссылка на подробное описание как это сделать.
Подключение библиотеки
#include <iocontrol.h>
Инстанцирование (создание) объекта
iocontrol Obj( "ИМЯ_ПАНЕЛИ", ОБЪЕКТ_КЛИЕНТА );
или, если панель использует ключ:
iocontrol Obj( "ИМЯ_ПАНЕЛИ", "КЛЮЧ", ОБЪЕКТ_КЛИЕНТА );
Примеры:
До создания объекта библиотеки необходимо создать объект клиента того оборудования, которое будет использоваться и передать клиента этого оборудования в конструктор iocontrol.
- Для ESP это
WiFiClient
; - для Ethernet Shield'a это
EthernetClient
;
Ethernet шилд
#include <iocontrol.h> #include <SPI.h> #include <Ethernet.h> const char* myPanelName = "название_панели_на_сайте_iocontrol.ru"; // Если доступ к панели только по ключу //const char* myKey = "ключ"; // создаём объект клиента Ethernet шилда EthernetClient client; // Передаём имя панели и объект клиента в конструктор iocontrol iocontrol Obj("myPanelName", client); // Или если панель использует ключ, передаём ключ //iocontrol Obj("myPanelName", "myKey", client);
ESP32 и ESP8266
#include <iocontrol.h> #include <WiFi.h> // для ESP32 //#include <ESP8266WiFi.h> // для ESP8266 const char* myPanelName = "название_панели_на_сайте_iocontrol.ru"; // Если доступ к панели только по ключу: //const char* myKey = "ключ"; // создаём клиента WiFi WiFiClient client; // Передаём имя панели и объект клиента в конструктор iocontrol iocontrol Obj("myPanelName", client); // Или если панель использует ключ, передаём ключ //iocontrol Obj("myPanelName", "myKey", client);
Описание функций библиотеки
Список функций
Общие функции
- begin()
- readUpdate()
- writeUpdate()
- readInt()
- readFloat()
- getFloatPrec()
- readString()
- readBool()
- write()
- info()
- setDeviceCountOnIP()
- setHttps()
Функции для работы с модулем LED Матрица 8x8 - i2c
Функция begin()
- Назначение: создание структуры данных в динамической памяти, инициирование работы с библиотекой
- Синтаксис: Obj.begin()
- Параметры: нет
- Возвращаемые значения: int - результат инициализации (0 - успешная инициализация, значение отличное от нуля — номер статуса или ошибки. Подробнее см. Список статус кодов)
- Примечание:
- Функцию необходимо вызвать до обращения к любым другим функциям библиотеки;
- Функцию достаточно вызвать один раз в коде
setup
- Функцию можно использовать для определения статуса или номера ошибки
- Пример:
int status = Obj.begin(); /* При успешном выполнении функция возвращает 0. * Для удобства чтения кода в библиотеке определена * константа OK, равная нулю. */ if (status == OK) { Serial.println("OK"); } else { // Выводим статус код Serial.println(status); }
Функция readUpdate()
- Назначение: Обновление значений всех переменных в памяти микроконтроллера на значения полученные с сервера.
- Синтаксис: Obj.readUpdate()
- Принимаемые параметры: нет
- Возвращаемые значения: int - результат инициализации (0 - успешная инициализация, значение отличное от нуля - номер статуса или ошибки. Подробнее см. Список статус кодов)
- Примечание:
- Функция делает запросы через временной интервал, для предотвращения исчерпывания лимита запросов (подробнее про лимиты).
- Функцию необходимо вызывать в цикле loop(), если необходимо прочитать значения переменных с сервера. Функции readInt(), readFloat() и readString() читают переменные из памяти микроконтроллера.
- Пример:
Obj.readUpdate(); int myInt = Obj.readInt("myIntName");
Функция writeUpdate()
- Назначение: Обновление значений всех переменных на сервере на значения полученные из памяти микроконтроллера.
- Синтаксис: Obj.writeUpdate()
- Принимаемые параметры: нет
- Возвращаемые значения: int - результат инициализации (0 - успешная инициализация, значение отличное от нуля - номер статуса или ошибки. Подробнее см. Список статус кодов)
- Примечание:
- Функция делает запросы через временной интервал, для предотвращения исчерпывания лимита запросов (подробнее про лимиты).
- Функцию необходимо вызывать в цикле loop(), если необходимо отправить переменные на сервер. Функции write() записывают переменные в память микроконтроллера.
- Пример:
int myint = 42; // Записываем переменную myint в ячейку памяти микроконтроллера // соответствующую переменной myIoVar на сайте iocontrol.ru Obj.write("myIoVar", myint); /* Отправляем все подготовленные переменные на сайт. * Функция отправит запрос, только если превышен интервал * ожидания после предыдущего запроса. */ int status = Obj.writeUpdate(); if (status == OK) Serial.println("Updated"); else Serial.println(status);
Функция readInt()
- Назначение: чтение целочисленной переменной
- Синтаксис: Obj.readInt( НАЗВАНИЕ )
- Принимаемые параметры:
- НАЗВАНИЕ: String или char* - название переменной в панели на сайте iocontrol.ru
- Возвращаемые значения: long - значение переменной в панели на сайте iocontrol.ru
- Примечание:
- Пример:
int myInt = 0; if (Obj.readUpdate() == OK) myInt = Obj.readInt("myIntName");
Функция readFloat()
- Назначение: чтение переменной вещественного числа с плавающей точкой
- Синтаксис: Obj.readFloat( НАЗВАНИЕ )
- Принимаемые параметры:
- НАЗВАНИЕ: String или char* - название переменной в панели на сайте iocontrol.ru
- Возвращаемые значения: float - значение переменной в панели на сайте iocontrol.ru
- Пример:
float myFloat = 0.0; // Обновляем переменные с сайта в памяти микроконтроллера if (Obj.readUpdate() == OK) // Читаем переменную myFloatName с сайта и записываем в переменную myFloat myFloat = Obj.readFloat("myFloatName");
Функция getFloatPrec()
- Назначение: получение количества знаков после точки (точность) вещественного числа
- Синтаксис: Obj.getFloatPrec( НАЗВАНИЕ )
- Принимаемые параметры:
- НАЗВАНИЕ: String или char* - название переменной в панели на сайте iocontrol.ru
- Возвращаемые значения: uint8_t - количество знаков после точки переменной float типа
- Примечание: функция может быть полезной для вывода переменной float в монитор серийного порта или преобразования в объект String. Например:
String s = String(Obj.readFloat("myFloat"), Obj.getFloatPrec("myFloat"));
- Пример:
// Читаем переменную float myFloat = Obj.readFloat("myFloatName"); // сохраняем количество знаков после точки uint8_t prec = Obj.getFloatPrec("myFloatName"); // Выводим вещественную переменную, указывая количество знаков после точки Serial.println(myFloat, prec); // Преобразуем в объект String String s = String(myFloat, prec);
Функция readString()
- Назначение: чтение строковой переменной
- Синтаксис: Obj.readString( НАЗВАНИЕ )
- Принимаемые параметры:
- НАЗВАНИЕ: String или char* - название переменной в панели на сайте iocontrol.ru
- Возвращаемые значения: String - значение переменной в панели на сайте iocontrol.ru
- Примечание:
- Пример:
String myString = ""; // Обновляем переменные с сайта в памяти микроконтроллера if (Obj.readUpdate() == OK) // Читаем переменную myStringName с сайта и записываем в переменную myString myString = Obj.readString("myStringName");
Функция readBool()
- Назначение: чтение переменной булева числа
- Синтаксис: Obj.readBool( НАЗВАНИЕ )
- Принимаемые параметры:
- НАЗВАНИЕ: String или char* - название переменной в панели на сайте iocontrol.ru
- Возвращаемые значения: bool - значение переменной в панели на сайте iocontrol.ru
- Пример:
bool myBool = false; // Обновляем переменные с сайта в памяти микроконтроллера if (Obj.readUpdate() == OK) // Читаем переменную myBoolName с сайта и записываем в переменную myBool myBool = Obj.readBool("myBoolName");
Функция write()
- Назначение: запись переменной на сайт
- Синтаксис: Obj.write( НАЗВАНИЕ, ПЕРЕМЕННАЯ )
- Принимаемые параметры:
- НАЗВАНИЕ: String или char* - название переменной в панели на сайте iocontrol.ru
- ПЕРЕМЕННАЯ: bool, int, unsigned int, long, unsigned long, float, String - переменная, значение которой необходимо отправить на сайт iocontrol.ru
- Возвращаемые значения: нет
- Пример:
float myFloat = 3.1415; int myInt = 42; // Записываем целочисленную переменную Obj.write("myIntName", myInt); // Записываем вещественную переменную Obj.write("myFloatName", myFloat); // Обновляем переменные на сайте if (Obj.writeUpdate() == OK) Serial.println("updated");
Функция info()
- Назначение: Формирование строки информации о текущей панели, например для вывода в монитор последовательного порта
- Синтаксис: Serial.println(Obj.info())
- Принимаемые параметры: нет
- Возвращаемые значения: объект String
- Примечание: Для вывода информации последовательный порт должен быть инициирован (например, Serial.begin(9600))
- Пример:
Serial.begin(9600); Obj.begin(); // Выводим информацию о панели Serial.println(Obj.info());
Функция setDeviceCountOnIP()
- Назначение: Установка множителя интервала запросов для нескольких устройств на одном IP адресе
- Синтаксис: Obj.setDeviceCountOnIP( КОЛИЧЕСТВО )
- Принимаемые параметры: uint8_t КОЛИЧЕСТВО - количество устройств на одном IP адресе, использующих сервис iocontrol.ru
- Возвращаемые значения: нет
- Примечание:
- Необходимо вызвать до функции begin()
- Сервер iocontrol ведёт учёт количества запросов по IP адресу. Если Ваша локальная сеть работает через NAT, то все устройства в ней будут выглядеть как один IP адрес для сервера. Функции библиотеки readUpdate() и writeUpdate() делают запросы на сервер через интервал, установленный сервером. В случае если у Вас в сети несколько устройств, использующих сервис, запросы на сервер будут поступать чаще во столько раз, сколько у Вас устройств. В таком случае, сервер может дать отказ в доступе из-за превышения лимита запросов. С помощью этой функции можно установить множитель, равный количеству устройств в локальной сети. Так же можно обойтись без использования этой функции, посчитав время запросов вручную и установив соответствующий delay() в функции loop(). Подробнее про лимиты сервиса можно узнать по ссылке.
- Пример:
Obj.setDeviceCountOnIP(2); Obj.begin();
Функция setHttps()
- Назначение: Переключение объекта библиотеки в режим работы через протокол HTTPS
- Синтаксис: Obj.setHttps()
- Принимаемые параметры: нет
- Возвращаемые значения: нет
- Примечание:
- Необходимо вызвать до функции begin()
- Пример:
Obj.setHttps(); Obj.begin();
На заметку: функции ниже предназначены для работы с матрицами 8x8, которые подключаются к Ardiuno по шине i2c
Функция readMatrix()
- Назначение: чтение изображения матрицы 8x8 с сайта
- Синтаксис: Obj.readMatrix( НАЗВАНИЕ, МАССИВ )
- Принимаемые параметры:
- НАЗВАНИЕ: String или char* - название переменной в панели на сайте iocontrol.ru
- МАССИВ: массив uint8_t из 8 байтов, изображение матрицы 8x8.
- Возвращаемые значения: нет
- Пример:
uint8_t image[8]{0}; // Читаем изображение матрицы с сайта в переменную Obj.readMatrix("myMatrix", image); //Выводим изображение на матрицу 8x8 MatrixObj.drawImage(image);
Функция writeMatrix()
- Назначение: запись изображения матрицы 8x8 на сайт
- Синтаксис: Obj.writeMatrix( НАЗВАНИЕ, МАССИВ )
- Принимаемые параметры:
- НАЗВАНИЕ: String или char* - название переменной в панели на сайте iocontrol.ru
- МАССИВ: массив uint8_t из 8 байтов, изображение матрицы 8x8.
- Возвращаемые значения: нет
- Пример:
uint8_t image[8] = { 0b00000000, 0b00100100, 0b00000000, 0b00000000, 0b01000010, 0b00111100, 0b00000000, 0b00000000 }; //Записываем изображение в переменную на сайт Obj.writeMatrix("myMatrix", image); Obj.writeUpdate();
Список статус кодов
Код | Значение |
---|---|
100-599 | статус коды HTTP |
601 | пустой JSON |
602 | некорректный JSON |
603 | программе не удалось прочитать тип переменной |
604 | пустая панель iocontrol |
606 | нет изменений значений переменных после последнего запроса |
701 | некорректный заголовок HTTP |
702 | не истёк интервал между запросами |
703 | некорректный ответ от сервера |
801 | не удалось подключиться к серверу |
1002 | не указано имя панели или имя панели некорректной длины |
1003 | панель с таким именем не существует или к ней возможен только по ключу |
1004 | не указано имя переменной |
1005 | некорректное имя переменной |
1007 | не указан параметр передаваемого значения |
1008 | ошибка сохранения в базу данных |