MyHomeIoT Expander 4x4
Розширювач портів MyHomeIoT Expander 4х4 призначений для керування додатковими чотирма реле по шині I2C з мікроконтролера. Приєднавши цю плату до Sonoff Basic (TH), або до будь якого пристрою на ESP8266 схемно сумісного з Sonoff basic (TH) прошитого прошивкою MyHomeIoT починаючи з версії 1.1.1 і вище до шини I2C, отримуєте керування додатковими, чотирма, реле зі світлодіодною індикацією і зворотнім зв'язком, як з додатку blynk app, так і з кнопок на самій платі. В додачу на кожне додаткове реле по одному планувальнику на тиждень.
Схема розширювача
Принципова схема розширювача MyHomeIoT Expander 4x4 |
Мікросхема U1 (стабілізатор напруги) може бути як на 3.3 вольта, так і на 5 вольт. В залежності від ваших потреб.
Якщо поставити перемичку на J2 то мікросхема U2 PCF8574 буде живитись від свого внутрішнього живлення, а також ці 3.3 вольта, або 5 вольт буде подано на роз'єм J5 і можна буде живити плату з мікроконтролером.
Якщо перемичку не ставити, то для мікросхеми U2 PCF8574 живлення 3.3 вольта, або 5 вольт очікується з плати мікроконтролеру. І в такому разі стабілізатор напруги на мікросхемі U1 можна не встановлювати.
Комутувати навантаження на контактах реле можна до 5 ампер. Якщо потрібно комутувати навантаження з більшим струмом, потрібно запаяти на доріжки додаткові дроти.
Печатна плата
Печатна плата з елементами |
Плата вид зверху |
Плата вид з низу |
Плата в зборі |
Добре по розміру підходить така коробочка:
107*87*59mm Plastic Electronics Box Project Case DIN Rail PLC Junction Box DIY |
Замовити можна, наприклад, тут, або тут, або ще деінде. Отвори в платі під кріплення в цій коробочці прийдеться висвердлити самому.
Варіанти підключення
Плата розширювача з Sonoff basic
Плата розширювача з NodeMCU та іншими ESP8266
Демонстраційний код
Хто хоче використовувати цей розширювач портів в своїх розробках, то ось для прикладу демонстраційний код для системи Blynk:
/* Name: Blynk_pcf8574_demo.ino Created: 7/11/2018 10:17:12 AM Author: Andriy Honcharenko */ /* Comment this out to disable prints and save space */ #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <Wire.h> #include <pcf8574_esp.h> #define ADDRESS_PCF8574 0x20 // Address PCF8574 on the I2C bus #define SDA 4 // Pin SDA wire #define SCL 5 // Pin SCL wire #define BUTTON_1 V1 // Expander I/O 4x4 relay1 #define BUTTON_2 V2 // Expander I/O 4x4 relay2 #define BUTTON_3 V3 // Expander I/O 4x4 relay3 #define BUTTON_4 V4 // Expander I/O 4x4 relay4 // Macros to work with bits #define BIT_SET(reg, bit) reg |= 1 << bit #define BIT_RESET(reg, bit) reg &= ~(1 << bit) #define BIT_TOGGLE(reg, bit) reg ^= 1 << bit #define BIT_IS_SET(reg, bit) (reg & (1 << bit)) != 0 #define BIT_IS_RESET(reg, bit) (reg & (1 << bit)) == 0 //-------------------------- // You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth[] = "auth"; // Your WiFi credentials. // Set password to "" for open networks. char ssid[] = "ssid"; char pass[] = "pass"; //---------------------------------- //PCF8574 //---------------------------------- typedef struct { bool triggerButton[4] = { false, false, false, false }; bool stateButton[4] = { false, false, false, false }; }PCF8574TypeDef; PCF8574TypeDef pcf8574Struct; PCF857x pcf8574(ADDRESS_PCF8574, &Wire, false); // Prototypes of functions static void readExpanderKey(void); // Read the state of the buttons static void writeStateExpanderRelay(void); // Write the state of the relay //----------------------------------- void setup() { // Debug console Serial.begin(115200); Wire.begin(SDA, SCL); pcf8574.begin(0xF0); 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! // Read the state of the buttons on the PCF8574 readExpanderKey(); } BLYNK_CONNECTED() { Blynk.notify("Demo PCF8574 online!"); Blynk.syncAll(); } BLYNK_WRITE(BUTTON_1) { pcf8574Struct.stateButton[0] = param.asInt(); //Let's record the state of the relay on PCF8574 writeStateExpanderRelay(); } BLYNK_WRITE(BUTTON_2) { pcf8574Struct.stateButton[1] = param.asInt(); //Let's record the state of the relay on PCF8574 writeStateExpanderRelay(); } BLYNK_WRITE(BUTTON_3) { pcf8574Struct.stateButton[2] = param.asInt(); //Let's record the state of the relay on PCF8574 writeStateExpanderRelay(); } BLYNK_WRITE(BUTTON_4) { pcf8574Struct.stateButton[3] = param.asInt(); //Let's record the state of the relay on PCF8574 writeStateExpanderRelay(); } static void readExpanderKey(void) { // Read all 8 bits at once uint8_t buff_in = pcf8574.read8(); // We are only interested in 4 high bits (button state) buff_in >>= 4; // Analyze the state of high bits for (int i = 0; i < 4; i++) { if (BIT_IS_RESET(buff_in, (i)) && !pcf8574Struct.triggerButton[i]) { pcf8574Struct.triggerButton[i] = true; pcf8574Struct.stateButton[i] = !pcf8574Struct.stateButton[i]; if (Blynk.connected()) { switch (i) { case 0: Blynk.virtualWrite(BUTTON_1, pcf8574Struct.stateButton[i]); break; case 1: Blynk.virtualWrite(BUTTON_2, pcf8574Struct.stateButton[i]); break; case 2: Blynk.virtualWrite(BUTTON_3, pcf8574Struct.stateButton[i]); break; case 3: Blynk.virtualWrite(BUTTON_4, pcf8574Struct.stateButton[i]); break; default: break; } } } else if (BIT_IS_SET(buff_in, (i)) && pcf8574Struct.triggerButton[i]) { pcf8574Struct.triggerButton[i] = false; } } // Let's record the new state of the relay writeStateExpanderRelay(); } static void writeStateExpanderRelay(void) { uint8_t buff_out = 0xFF; for (int i = 0; i < 4; i++) { if (pcf8574Struct.stateButton[i]) { BIT_SET(buff_out, i); } else { BIT_RESET(buff_out, i); } } pcf8574.write8(buff_out); }
Демонстраційний проект
До проекту Blynk додайте 4 кнопки і назначте їм і'я, колір - за вашим смаком. А також назначте кнопкам віртуальні шпильки: V1, V2, V3, V4. Режим всіх кнопок "SWITCH".
Додайте віджет "Notification".
Або скануйте цей код і отримаєте готовий демо-проект на свій смартфон:
Додайте віджет "Notification".
Або скануйте цей код і отримаєте готовий демо-проект на свій смартфон:
Замовлення
- Плата - 3$ (у.о)
- Плата + деталі для самостійного збирання - 9$ (у.о)
- Плата зібрана і протестована - 12$ (у.о)
Щодо придбання плат пишіть на taburyak@gmail.com