Файлы библиотеки
Для работы с 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 | ошибка сохранения в базу данных |