Показ дописів із міткою timer. Показати всі дописи
Показ дописів із міткою timer. Показати всі дописи

середа, 16 грудня 2020 р.

Blynk: підключення до точки WiFi та серверу Blynk, очікування WiFi точки, перепідключення до WiFi та серверу Blynk, робота основного коду без блокування при очікування з'єднання для ESP32/ESP8266

Передмова

Помітив, що багато початківців, які хочуть створити для себе IoT пристрій на базі WiFi мікроконтролера ESP8266 або ESP32 з системою Blynk, стикаються з такою проблемою як:

  • не виконання коду, поки пристрій не підключиться до точки WiFi;
  • відсутность спроб відновити з'єднання у разі втрати зв'язку з мережею;
  • блокування коду при втраті зв'язку з сервером Blynk.
Як не вирішити ці проблеми пристрій і залишиться поробкою вихідного дня для спробувати. Якийсь путній і завершений пристрій створити з таким підходом неможливо. Бібліотека Blynk потужна і універсальна бібліотека, до якої входять і інші бібліотеки, такі як робота з таймерами, датою, керування підключеннями, і багато іншого. Але! Без власного, продуманого коду створити завершений пристрій, який можна вже і виводити на ринок, або хоча б, щоб він був зручний для власного користування, для дому, для сім'ї - не побудувати. Так що пропоную все ж таки попрацювати над власним кодом, який працює з мережею, та усуває недолік блокування власного коду у разі втрати з'єднання з сервером Blynk. Та досить балачок, давайте розпочнемо, бо насправді не все так складно.

Проблематика

Ми можемо взяти за основу будь який приклад Blynk і вже навколо нього "наростити" свій функціонал. Але це буде не зовсім вірно. Тому пишемо в першу чергу код, який буде, наш модуль WiFi, завжди тримати на зв'язку з точкою WiFi. Та при втраті підключення до Blynk зробити логіку, яка дозволить не блокувати основний код, та періодично намагатись під'єднатись до серверу Blynk.

Поширений приклад для підключення до WiFi нам пропонують в такому вигляді:

#include <ESP8266WiFi.h>

void setup()
{
  Serial.begin(115200);
  Serial.println();

  WiFi.begin("network-name", "pass-to-network");

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {}

В цьому прикладі далі циклу while (WiFi.status() != WL_CONNECTED), поки не буде з'єднання з точкою WiFi, програма не виконається. Нам потрібно, щоб спроби приєднатись до точки WiFi були постійними, а код в циклі loop() виконувався та контролював стан з'єднання з точкою WiFi. 

А поширений приклад для підключення до Blynk нам пропонують в такому вигляді:

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

void setup()
{
  // Debug console
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
}

void loop()
{
  Blynk.run();
  // You can inject your own code or combine it with other sketches.
  // Check other examples on how to communicate with Blynk. Remember
  // to avoid delay() function!
}

В цьому випадку, при відсутності WiFi ваш пристрій так і буде "мертвою залізякою", а у разі наявності WiFi і втрати зв'язку з сервером Blynk, ваш код блокуватиметься функцією Blynk.run() яка викликається з циклу loop() і користуватись пристроєм буде не можливо. 

Приклад рішення для ESP8266

Я пропоную такий варіант коду для підтримки зв'язку з точкою WiFi та сервером Blynk без блокування основного коду:

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "BlynkSimpleEsp8266.h"

const char* ssid        = "MY_SSID";
const char* password    = "MY_PASS";
const char* blynkToken  = "MY_TOKEN";

bool isWiFiConnected = false;
int  numTimerReconnect = 0;

WiFiEventHandler gotIpEventHandler;
WiFiEventHandler disconnectedEventHandler;
BlynkTimer timer;

void WiFiStationConnected(const WiFiEventStationModeGotIP& event);
void WiFiStationDisconnected(const WiFiEventStationModeDisconnected& event);
void ReconnectBlynk(void);
void BlynkRun(void);

void setup() 
{
  Serial.begin(115200);
  
  gotIpEventHandler = WiFi.onStationModeGotIP(&WiFiStationConnected);
  disconnectedEventHandler = WiFi.onStationModeDisconnected(&WiFiStationDisconnected);

  WiFi.begin(ssid, password);

  Blynk.config(blynkToken);

  if(Blynk.connect())
  {
    Serial.printf("[%8lu] setup: Blynk connected\r\n", millis());
  }
  else
  {
    Serial.printf("[%8lu] setup: Blynk no connected\r\n", millis());
  }
  
  Serial.printf("[%8lu] Setup: Start timer reconnected\r\n", millis());
  numTimerReconnect = timer.setInterval(60000, ReconnectBlynk);
}

void loop() 
{
  BlynkRun();  
  timer.run();
}

void WiFiStationConnected(const WiFiEventStationModeGotIP& event)
{
  isWiFiConnected = true;
  Serial.printf("[%8lu] Interrupt: Connected to AP, Ip: ", millis());
  Serial.println(WiFi.localIP());
}

void WiFiStationDisconnected(const WiFiEventStationModeDisconnected& event)
{
  isWiFiConnected = false;
  Serial.printf("[%8lu] Interrupt: Disconnected to AP!\r\n", millis());
}

void BlynkRun(void)
{
  if (isWiFiConnected)
  {
    if(Blynk.connected())
    {
      if (timer.isEnabled(numTimerReconnect))
      {
        timer.disable(numTimerReconnect);
        Serial.printf("[%8lu] BlynkRun: Stop timer reconnected\r\n", millis());
      }

      Blynk.run();
    }
    else
    {
      if (!timer.isEnabled(numTimerReconnect))
      {
        timer.enable(numTimerReconnect);
        Serial.printf("[%8lu] BlynkRun: Start timer reconnected\r\n", millis());
      }      
    }
  }
}

void ReconnectBlynk(void)
{
  if (!Blynk.connected())
  {
    if (Blynk.connect())
    {				        
      Serial.printf("[%8lu] ReconnectBlynk: Blynk reconnected\r\n", millis());
    }
    else
    {
      Serial.printf("[%8lu] ReconnectBlynk: Blynk not reconnected\r\n", millis());
    }
  }
  else
  {
    Serial.printf("[%8lu] ReconnectBlynk: Blynk connected\r\n", millis());
  }
}


Приклад рішення для ESP32

Приклад для ESP32 дещо відрізняється з попереднім для ESP8266, але логіка роботи залишається такою самою:

#include <Arduino.h>
#include <WiFi.h>
#include "BlynkSimpleEsp32.h"

const char* ssid        =  "MY_SSID";
const char* password    =  "MY_PASS";
const char* blynkToken  =  "MY_TOKEN";

bool isWiFiConnected = false;
int  numTimerReconnect = 0;

BlynkTimer timer;

void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info);
void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info);
void ReconnectBlynk(void);
void BlynkRun(void);

void setup() 
{
  Serial.begin(115200);

  WiFi.onEvent(WiFiStationConnected, SYSTEM_EVENT_STA_GOT_IP);
  WiFi.onEvent(WiFiStationDisconnected, SYSTEM_EVENT_STA_DISCONNECTED);
  WiFi.begin(ssid, password);

  Blynk.config(blynkToken);

  if(Blynk.connect())
  {
    Serial.printf("[%8lu] setup: Blynk connected\r\n", millis());
  }
  else
  {
    Serial.printf("[%8lu] setup: Blynk no connected\r\n", millis());
  }

  Serial.printf("[%8lu] Setup: Start timer reconnected\r\n", millis());
  numTimerReconnect = timer.setInterval(60000, ReconnectBlynk);
}

void loop() 
{
  BlynkRun();
  timer.run();
}

void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info)
{
  isWiFiConnected = true;
  Serial.printf("[%8lu] Interrupt: Connected to AP, IP: ", millis());
  Serial.println(WiFi.localIP());
}

void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info)
{
  isWiFiConnected = false;
  Serial.printf("[%8lu] Interrupt: Disconnected to AP!\r\n", millis());
}

void ReconnectBlynk(void)
{
  if (!Blynk.connected())
  {
    if (Blynk.connect())
    {				        
      Serial.printf("[%8lu] ReconnectBlynk: Blynk reconnected\r\n", millis());
    }
    else
    {
      Serial.printf("[%8lu] ReconnectBlynk: Blynk not reconnected\r\n", millis());
    }
  }
  else
  {
    Serial.printf("[%8lu] ReconnectBlynk: Blynk connected\r\n", millis());
  }
}

void BlynkRun(void)
{
  if (isWiFiConnected)
  {
    if(Blynk.connected())
    {
      if (timer.isEnabled(numTimerReconnect))
      {
        timer.disable(numTimerReconnect);
        Serial.printf("[%8lu] BlynkRun: Stop timer reconnected\r\n", millis());
      }

      Blynk.run();
    }
    else
    {
      if (!timer.isEnabled(numTimerReconnect))
      {
        timer.enable(numTimerReconnect);
        Serial.printf("[%8lu] BlynkRun: Start timer reconnected\r\n", millis());
      }      
    }
  }
}

Розумію, що для початківця це доволі складний код і потребує детальних пояснень. Тому  я підготував відео з поясненням і демонстрацією роботи з кнопкою, світлодіодом і таймером. А також демонстраційний код доступний і для завантаження і для ESP8266 , і для ESP32. Приємного перегляду.

Відео з поясненням і демонстрацією



неділя, 8 липня 2018 р.

Blynk: контроль підключеннями до серверу Blynk та мережі WiFi

update 25.12.2020: написав нову статтю на цю тему плюс відео: "Blynk: підключення до точки WiFi та серверу Blynk, очікування WiFi точки, перепідключення до WiFi та серверу Blynk, робота основного коду без блокування при очікування з'єднання для ESP32/ESP8266"

Передмова

Надихнуло на написання цієї статті це відео з каналу "Інженерка" - рекомендую.

Коли справно працює ваша мережа WiFi, безперебійний доступ до інтернету, та доступ до серверу Blynk, то й немає ніяких проблем з пристроєм який виконує свій функціонал в парі з системою Blynk. Але коли нештатна ситуація з підключенням, при увімкнені пристрою, чи обірвався зв'язок з мережею, чи сервером Blynk, то треба програмно передбачити такі ситуації і передбачити повторне підключення до серверу у разі втрати зв'язку. А також, коли немає зв'язку з сервером з якихось причин, функція Blynk.run(); буде "гальмувати" ваш пристрій, при кожному виклику (за замовчуванням аж 30 секунд). А викликається ця функція в головному циклі як найчастіше. Тому, як не передбачити втрату зв'язку, ви навіть не в змозі будете щось увімкнути на своєму пристрої. Наприклад, це буде у вас WiFi реле. То увімкнути, чи вимкнути реле з кнопки, скоріше за все в вас не вийде, або вийде з величезною затримкою. У всякому разі таким пристроєм користуватись буде не зручно.

Основа

Беремо за основу "пустий" приклад скетчу для роботи з Blynk:
*************************************************************

  Youll need:
   - Blynk App (download from AppStore or Google Play)
   - ESP8266 board
   - Decide how to connect to Blynk
     (USB, Ethernet, Wi-Fi, Bluetooth, ...)

  There is a bunch of great example sketches included to show you how to get
  started. Think of them as LEGO bricks  and combine them as you wish.
  For example, take the Ethernet Shield sketch and combine it with the
  Servo example, or choose a USB sketch and add a code from SendData
  example.
 *************************************************************/

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

void setup()
{
  // Debug console
  Serial.begin(115200);

  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
}

void loop()
{
  Blynk.run();
  // You can inject your own code or combine it with other sketches.
  // Check other examples on how to communicate with Blynk. Remember
  // to avoid delay() function!
}
Тепер додамо до цієї основи програмний контроль підключення до WiFi і Blynk.

Доопрацьований базовий скетч з контролем підключення до Wi-Fi та Blynk

Код для скетчу можете копіювати звідси або завантажити файл:
/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

bool triggerBlynkConnect = false;
bool isFirstConnect = true; // Keep this flag not to re-sync on every reconnection

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

// Оголошення таймеру
BlynkTimer timer;

static void timerReconnect(void);

void setup()
{
  // Debug console
  Serial.begin(115200);

  // Конфігуруємо підключення до blynk server
  Blynk.config(auth);
  
  //Під'єднуємось до WiFi мережі
  Blynk.connectWiFi(ssid, pass);

  if (WiFi.status() == WL_CONNECTED)
  {
    if (Blynk.connect())
    {
      triggerBlynkConnect = true;
    }
    else
    {
      triggerBlynkConnect = false;
    }
  }

  timer.setInterval(60000L, timerReconnect);
}

void loop()
{
  if (Blynk.connected())
  {
    Blynk.run(); // Initiates Blynk Server  
  }
  else
  {
    triggerBlynkConnect = false;
  }

  timer.run(); // Initiates BlynkTimer
}

BLYNK_CONNECTED()
{
  triggerBlynkConnect = true;

  Serial.println(F("Blynk Connected!"));
  Serial.println(F("local ip"));
  Serial.println(WiFi.localIP());

  if (isFirstConnect)
  {       
    Blynk.syncAll();    

    isFirstConnect = false;
  }
}

static void timerReconnect(void)
{
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println(F("WiFi not connected"));
    
    Blynk.connectWiFi(ssid, pass);
  }
  else
  {
    Serial.println(F("WiFi in connected"));
  }

  if (!Blynk.connected() && WiFi.status() == WL_CONNECTED)
  {
    if (Blynk.connect())
    {
      Serial.println(F("Blynk reconnected"));
    }
    else
    {
      Serial.println(F("Blynk not reconnected"));
    }
  }
  else
  {
    Serial.println(F("Blynk in connected"));
  }
}
І трішки пояснень по порядку:

  • змінна triggerBlynkConnect саме в цьому скетчі не використовується. Їй назначається true або false, але ніде не аналізується цей стан. Але коли знадобиться такий аналіз, то змінна, значення якої залежить чи є з'єднання з сервером blynk, або немає такого з'єднання з сервером, у вас вже буде.
  • змінна isFirstConnect потрібна для того, щоб синхронізація шпильок відбувалась тільки раз при першому підключенні.
  • оголошуємо таймер BlynkTimer timer і оголошуємо прототип функції для реконекту static void timerReconnect(void)
  • конектимось до WiFi мережі і в разі успіху конектимось до серверу блінк, як ні, то до серверу блінк і не намагаємось пробитись.
  • запускаємо таймер реконекту timer.setInterval(60000L, timerReconnect) - кожну хвилину буде виконуватись функція static void timerReconnect(void), де буде здійснюватись підключення до WiFi і Blynk у разі потреби, а як з конектом буде все гаразд, то нічого не буде виконуватись в цій функції.
  • в безкінечному циклі loop буде виконуватись Blynk.run(); тільки в тому разі, коли є підключення до серверу Blynk, а у разі втрати з'єднання, ваш код не буде "гальмувати".
  • функція BLYNK_CONNECTED() викликається кожного разу при з'єднанні з сервером Blynk і щоб кожного разу, при реконекті не синхронізувались всі шпильки, аналізуємо стан змінної isFirstConnect
До цього базового, доопрацьованого скетчу можете додавати свій функціонал і не боятись втрати зв'язку. Коли зв'язок відновиться, ваш пристрій знову підключиться до мережі і серверу. А також не буде "гальмуватись" ваш код коли не буде зв'язку, бо функція Blynk.run(); буде викликатись тільки коли є зв'язок з сервером.

Післямова

Як вам сподобалась стаття і хочете підтримати проект і бачити нові статті про Blynk, то буду вдячний за будь-які "донати".

пʼятниця, 19 червня 2015 р.

Переробка програмовного реле часу з 12В живлення на 220В

Переробка програмовного реле часу з 12В живлення на 220В

Передмова

Коли замовляв програмовне реле часу DC 12V Mini LCD Digital Microcomputer Control Power Timer Switch був впевнений, що мені потрібна модель саме з 12 вольт живлення. Але коли вже дійшло діло до реалізації своєї придумки, виявилось, що мені потрібне реле з живленням від 220 вольт. З оглядом цього реле часу можна ознайомитись з попередньої публікації. Переглянувши на BANGGOOD різні варіанти цього програмовного реле часу, пересвідчився, що варіантів цього реле існують декілька, живлення як від 12 вольт, від 110 вольт і від 220 - 240 вольт. Зрозуміло, що в умовах великих обсягів виробництва, пристрій треба проектувати максимально універсальним і конструкція (щонайменше друкованої плати і корпусу) має передбачати всі модифікації пристрою. То ж я був впевнений що переробка з 12 вольт живлення на 220 вольт буде зовсім дріб'язковою. Так що не будемо замовляти нове реле часу, а переробимо те що є в нас в наявності. Зекономимо як час, так і гроші.

Нутрощі

Для того щоб зрозуміти що нам потрібно для переробки, треба щонайменше розібрати реле часу (дивись малюнок 1). І детально розглянути нутрощі.
Малюнок 1
Корпус реле часу складається з двох половинок і розбирається просто, натисканням з боків нижньої половинки так щоб защепи вийшли з пазів верхньої половинки. 
Малюнок 2
Розкривши корпус реле часу побачимо що воно складається з двох плат (дивись малюнок 2). З плати зеленого кольору ліворуч де знаходиться: дисплей, кнопки керування, мікропроцесор. І плати праворуч сірого кольору де знаходиться: реле, яке комутує навантаження, батарею резервного живлення і схему живлення. Контакти живлення і контакти реле. Нас цікавить плата що знаходиться праворуч з схемою живлення. Розгляньмо зворотню сторону плати (дивись малюнок 3).
Малюнок 3
Схема живлення дуже проста: 12В потрапляють на діодний міст, а після на стабілітрони для живлення мікропроцесора, обмотки реле і заряду батареї резервного живлення (мал.3). Як видно на платі є місце ще під один контакт реле CN3 (мал.2 позначка 3), вільне місце для стабілітрону DZ3(мал.3 позначка 3) і конденсатора C1 (мал.2 позначка 1).
Живлення пристрою від мережі 220В малим струмом зручно виконати безтрансформаторним блоком живлення, або конденсаторний блок живлення. Це дає велику перевагу не використовувати габаритний трансформатор. Але потребує надійної ізоляції корпусу і елементів керування. Бо при такому живлені немає гальванічної розв'язки з електричною мережею 220В і при доторканні струменевих частин схеми можна отримати небезпечне ураження електричним струмом. Це програмовне реле часу має щільний, суцільний пластиковий корпус і гумові кнопки керування. З ізоляцією проблем не виникне. То ж сміливо можемо доопрацювати схему.

Схема

Як пересвідчились, плата виконана універсальною і є можливість самотужки переробити наше реле часу з живлення 12 Вольт на живлення від електричної мережі 220 Вольт 50 Гц. Схема безтрансформаторного блока живлення представлена на малюнку 4.
Малюнок 4

Порядок переробки

  1. Замість R3 0 Ом (перемичка) (мал.3 позначка 1), треба впаяти резистор з номіналом від 100кОм до 1мОм. Цей резистор виконує функцію розряду конденсатора C1 після зняття напруги живлення з пристрою.
  2. Замість R1 5 Ом (мал.2 і 3 позначка 2), треба впаяти резистор 300 Ом. Це резистор що обмежує струм споживання пристроєм.
  3. Впаяти C1 0.33 mF в призначене для нього місце (мал.2 і 3 позначка 1).
  4. Впаяти стабілітрон DZ3 на 12 вольт в призначене для цього місце (мал.2 позначка 3).
Все. На цьому переробку завершено. Можна скласти корпус назад до купи і користуватись реле часу вже подаючи на контакти живлення 220 Вольт. А також можна переглянути відео по переробці.

Відео переробки


вівторок, 16 червня 2015 р.

Огляд програмовних реле часу

Огляд програмовних реле часу

Передмова

Пропоную на огляд декілька програмовних "реле часу". "Реле часу" призначене щоб, в наперед заданий час, увімкнути чи вимкнути якийсь пристрій на певний проміжок часу. Або по команді оператора увімкнути чи вимкнути пристрій на час, який контролює "реле часу". "Реле часу" бувають різні: механічні, електричні, електронні, мікропроцесорні, тощо. "Реле часу" можуть оперувати в межах часток секунд, наприклад, як колись засвічували фотопапір фотозбільшувачем. Або ж навпаки оперувати цілими годинами, наприклад вмикати і вимикати освітлення в нічний і денний час. Комутувати "реле часу" можна, наприклад - освітлення, нагрівання, охолодження, полив квітів, годування рибок, доступ до приміщення, тощо.

STM8S003F3 Digital Timing Module

Це програмовне реле часу "STM8S003F3 Digital Timing Module" придбав на ebay за, приблизно, 4 у.о. Прийшло в конверті з пухирцями, сам таймер був в простому пластиковому пакетику. Інструкцій і схем не додавалось.
Зовнішній вигляд програмовного реле часу STM8S003F3 
Зовнішній вигляд зворотньої сторони реле часу

Характеристика:

  1. На основі однокристальної мікроЕОМ STM8. Довжина: 71 мм, ширина: 29 мм, висота: 16 мм
  2. Два способу живлення, сторонній інтерфейс KP301-2 може підтримувати 7 В ~ 18 В робочої напруги, та інтерфейс мікроUSB від 5 В робочої напруги.
  3. Містить два таймери часу.
  4. Показує на екрані різні режими (натискати кнопку праворуч):
  5. Поточний час.
  6. Поточний день і місяць.
  7. Час спрацювання реле "таймер-1" (години, хвилини).
  8. Тривалість часу "таймер-1" (в секундах).
  9. Час спрацювання реле "таймер-2" (години, хвилини).
  10. Тривалість часу "таймер-2" (в секундах).
  11. Поточна температура.
  12. Режими налаштування (натискання кнопки ліворуч):
  13. Встановлення поточного часу.
  14. Встановлення поточної дати.
  15. Встановлення часу спрацювання "таймер-1".
  16. Встановлення тривалості часу спрацювання реле "таймер-1".
  17. Встановлення часу спрацювання "таймер-2".
  18. Встановлення тривалості часу спрацювання реле "таймер-2".
  19. Корекція сенсора температури.
  20. Функція показу температури, в межах - 20 ~ 59 ℃, Мінімальна похибка 1 градус Цельсія. З корекцією температурної похибки, можливий діапазон корекції - 5 ~ 5 ℃.
  21. Допустимо комутувати навантаження на контакти реле в межах 10 А 250 В змінного струму і 10 А 30 В постійного струму.
  22. Є інфрачервоний приймач для керування реле часу з ПДК (пульт дистанційного керування). ПДК купується окремо.
Керування реле за допомоги пульта дистанційного керування
Подаємо живлення на плату. Якщо це перше увімкнення, то налаштовуємо час, дату, коли спрацюють таймери і тривалість роботи таймера.
Як вже раніше реле часу налаштовували, то після подачі живлення налаштовувати немає потреби, бо пристрій містить джерело резервного живлення для збереження налаштувань.

Переваги

Низька ціна, мініатюрність, простота, наявність інфрачервоного приймача, доволі широкий діапазон напруги якою можна живити реле часу.

Недоліки

Головний недолік це те, що після того як таймер відпрацював свій час, тривалість спрацювання таймеру обнуляється! Іншими словами не можна повністю автоматизувати якийсь процес, щоб кожного дня, наприклад, вмикався насос поливу городини вранці і у вечері. Треба кожного разу тривалість спрацювання вводити заново.
Другий недолік, теж дуже важливий, це тривалість часу таймера задається в секундах. А як для задання параметрів призначена тільки одна кнопка на збільшення, то можна або "промахнутись", або дуже довго чекати на потрібне значення - це не зручно. Час тривалості спрацювання таймеру обмежений приблизно двома годинами.
Третій недолік це, або мені попався екземпляр з дефектом, або це "софт" з недоліком - блимає нижній сегмент на цифрі 2 і знаку Цельсій С раз на секунду.
Сенсор температури хоч і не можна назвати недоліком, але його наявність не має ніякого сенсу бо ні на що не впливає. Не впливає ні на що також і дата. Не можна налаштувати спрацювання таймера в якийсь конкретний день.
В цілому, якщо допрацювати програмну частину пристрою, то буде доволі хороше реле часу.

Відео-огляд STM8S003F3 Digital Timing Module


DC 12V Mini LCD Digital Microcomputer Control Power Timer Switch

Розглянемо інше програмовне реле часу DC 12V Mini LCD Digital Microcomputer Control Power Timer Switch. Це "реле часу" вже має гарний білий корпус з отворами для монтажу на якусь поверхню. Має РК дисплей і вісім кнопок керування. Це "реле часу" придбав на BANGGOOD.
Передня панель реле часу
До цього реле часу додавався папірець з короткою інструкцією по налаштуванню та способів електричного монтажу.
Існують декілька варіантів цього реле часу. Різняться вони між собою напругою живлення і кількістю контактів реле комутації. 
Задня сторона реле часу
Я придбав реле часу яке живиться від 12 В і з контактами реле тільки на замкнення. Може комутувати це реле часу, навантаження, яке споживає до 250В 16А. Це реле також має всередині резервне живлення для збереження поточного часу, дня тижня і всіх таймерів.

Характеристика

До 8 циклів на день. Внутрішній акумулятор всередині зберігає налаштування при відключенні основного живлення. Живиться від 12 вольт будь-якого джерела постійного струму 
Постійна напруга: 12V.
Струм споживання без навантаження: 0.015mA.
Активне навантаження контактів реле 16A / 250В змінного струму.
Індуктивне навантаження  8A / 250В змінного струму.
Навантаження для ламп розжарювання до 1000Вт.
Комутований постійний струм: 16A / 24В DC.
Найкоротший час перемикання: 1 хв.
Найкоротший період між перемиканнями: 1 хв.
Кількість каналів 1.
Кількість чарунок пам'яті: 17.
Похибка спрацьовування: +/- 1 сек / день.
Температура навколишнього середовища: -10 ℃ -55 ℃.
Спосіб монтажу: гвинт.

Поради:
Перед запуском програми, таймер повинен бути заряджений протягом принаймні 5 хвилин. 
Потім натисніть клавішу скидання, щоб очистити дані. Запрограмуйте нові налаштування.

Включення і виключення може бути встановлено вісім разів на день. Ці дії можуть бути встановлені таким чином:
Перший варіант: неділя.
Другий варіант: з понеділка по п'ятницю.
Третій варіант: субота і неділя (вихідні).
Четвертий варіант: з понеділка по суботу (робочі дні).
П'ятий варіант: понеділок, середа, п'ятниця.
Шостий варіант: вівторок, четвер, субота.
Сьомий варіант: з понеділка по середу.
Восьмий варіант: з середи по суботу.

Габарити: 61 * 59 * 31мм
Розмір упаковки: 70 * 67 * 44 мм
Вага нетто: 79 г
Вага з упаковкою: 88 г
Колір Білий

Налаштування

Завдяки тому що тут 8 кнопок, керувати і налаштовувати таймери дуже просто.
Одночасне натискання кнопки з зображенням годинника і кнопок "D+", "H+", "M+" встановлює поточний день тижня, години і хвилини. 
Натискання кнопки "P" переводить в режим програмування таймерів. Перший пункт це день години і хвилини коли увімкнеться реле, ще раз тиснемо "P" і програмуємо коли реле вимкнеться. Далі так само з іншими таймерами.
Кнопкою "C/R" можна відімкнути якийсь таймер, або повернути його в дію.
Кнопка "C" - це повне скидання пристрою.
Кнопкою "Manual" можна увімкнути, вимкнути чи перевести в автоматичний режим реле часу.

Переваги

Низька ціна. Зручність користування. Багато варіантів програмування і багато чарунок пам'яті для програмування таймерів. Можливість ручного керування.

THC 15A AC 220V Digital LCD Power Weekly Programmable Timer Time

Наступне "реле часу" THC15A аналогічне попередньому DC 12V Mini LCD Digital Microcomputer Control Power Timer Switch по функціоналу, можливостям і характеристикам. Відрізняється тільки конструкцією корпуса, способом монтажу приладу, напругою живлення і ціною. Конструкція корпусу схожа на три пакетних перемикача складених разом. Монтується це реле часу на DIN рейку. Живиться від мережі 220В 50Гц.
Зовнішній вигляд реле часу
Кнопки і керування пристроєм аналогічне з попереднім реле часу, який вже розглянули.
Кнопки керування реле часу
Вид з боку
Повторювати опис цього "реле часу" немає сенсу. Натомість, пропоную переглянути короткий відео-огляд цих двох "реле часу".

Відео-огляд Digital Timer Switch YP109A та THC15A