Тема: Blynk, ESP8266, IoT
Створю ще одну темку для таких собі питань пов'язаних з програмуванням ESP8266 в засобі розробки Arduino IDE.
Є ESP8266 у нього на шині I2C дисплей і якісь сенсори. Є проста функція, яка по таймеру раз на 2 секунди показує на дисплейчик по черзі: поточний час, стан реле і наприклад, температуру та вологість. Ось ця функція, де : numberOfScreen - поточна "сторінка", MAXNUMBEROFSCREEN - максимальна кількість "сторінок".
void timerChangeScreen()
{
display.clear();
display.setFont(ArialMT_Plain_24);
display.setTextAlignment(TEXT_ALIGN_CENTER);
if (numberOfScreen == 0)
{
display.drawString(64, 22, String(hour()) + ":" + twoDigits(minute()));
}
else if (numberOfScreen == 1)
{
display.drawString(64, 22, String(t_dht22, 1) + " C");
}
else if (numberOfScreen == 2)
{
display.drawString(64, 22, String(h_dht22, 1) + " %");
}
else if (numberOfScreen == 3)
{
if (digitalRead(RELAY_0) == HIGH)
{
display.drawString(64, 22, "ON");
}
else
{
display.drawString(64, 22, "OFF");
}
}
else if (numberOfScreen == 4)
{
if (triggerTSL2561Init)
{
display.drawString(64, 22, String(lux, 0) + " lux");
}
}
display.display();
if (++numberOfScreen > MAXNUMBEROFSCREEN)
{
numberOfScreen = 0;
}
}
Проблема в тому, що наприклад, додаю сенсор освітленості TSL2561 і щоб показувати на дисплей люкси мені треба в коді збільшити константу MAXNUMBEROFSCREEN. Це працює. Але має недоліки. А саме, потрібно робити зміни в коді, якщо немає сенсору температури і вологості, а є тільки сенсор TSL2561, то вже потрібно добряче перелопачувати код. Це взагалі не вірний підхід.
Підкажіть ідею, як реалізувати, інший універсальний підхід. Зараз в мене реалізовано автосканування сенсорів, які під'єднані до ESP`шки і на базі того, що виявилось, хотілось би організувати вивід показників на дисплей.
Ну наприклад, початково нічого не підключено - на дисплей виводиться поточний час і стан реле.
Додав TSL2561, перезавантажив пристрій, програмно виявив що є сенсор освітлення, якось програмно автоматично додалась сторінка для показу люксів на дисплей.
Додав ще сенсор BMP180, перезавантажив, програмно виявив, що є сенсор тиску і температури, якось програмно автоматично додались сторінки для показу тиску і температури на дисплей.
Коли вилучив якийсь сенсор - сторінки для показу вилучаються з обігу теж автоматично без втручання в код.
Звісно не прошу готового коду, а саму ідею як це зробити. Бо навіть не уявляю як це зробити. Ну є якась далека думка, що треба мабуть мати вже всі функції для показу на екран підтримуваних сенсорів, і як виявились ті підтримувані сенсори, додати адреси тих функцій до масиву, а потім з того масиву по черзі брати адреси функцій і по черзі їх викликати. Так? Чи якось по іншому?