
Съдържание:
- Стъпка 1: Съвет, който трябва да запомните
- Стъпка 2: MCP23016
- Стъпка 3: Адрес
- Стъпка 4: Команди
- Стъпка 5: Категории
- Стъпка 6: Структура за комуникация
- Стъпка 7: Програма
- Стъпка 8: MCP23016
- Стъпка 9: ESP-01
- Стъпка 10: Монтиране на ESP01
- Стъпка 11: Библиотеки и променливи
- Стъпка 12: Настройка
- Стъпка 13: Цикъл
- Стъпка 14: ParserData
- Стъпка 15: ConfigurePort
- Стъпка 16: WritePinData
- Стъпка 17: WriteBlockData & SetupWiFi
- Стъпка 18: Приложение
- Стъпка 19: Изтеглете
2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 14:36



Днес ще обсъдим автоматизацията, използвайки ESP01 с 16 релета. Това е супер евтин модел на дизайн, при който можете да умножите модулите и да получите до 128 релета, тъй като е възможно да поставите до осем разширителя на портове в този микроконтролер.
В нашата верига ще имате приложение на смартфон, което комуникира с ESP01. Той ще има разширител с 16 порта, всеки свързан към реле. Имаме и 3v3 регулируем източник. Следователно ще контролираме 16-канален релеен модул, използвайки ESP01 чрез приложението за Android, което ви предоставям.
Стъпка 1: Съвет, който трябва да запомните
Важно е да се отбележи, приятели, че използвах този чип във верига, наречена MCP23016. Също така е важно за вас да гледате видео ЕКСПАНСОР НА IOS ЗА ESP32, ESP8266 И ARDUINO, в който тествам устройството и показвам, че работи за тези три типа платки.
Стъпка 2: MCP23016
Тук имаме изображение на MCP23016, който е чип с 28 пина. Важно е да се спомене, че има и модел MCP23017, който е по -често срещан и не се нуждае от резистор и кондензатор, тъй като има вътрешен часовник. Това го улеснява, но фиксирането му е различно от това, което показваме в този видеоклип.
Стъпка 3: Адрес

За да определим адреса на MCP23016, използваме пинове A0, A1 и A2. Можете просто да ги оставите на HIGH или LOW за промяна на адреса.
Адресът ще бъде оформен, както следва:
MCP_Address = 20 + (A2 A1 A0)
Когато A2 A1 A0 може да приеме стойности HIGH / LOW, се формира двоично число от 0 до 7.
Например:
A2> GND, A1> GND, A0> GND (означава 000, след това 20 + 0 = 20)
Или иначе, A2> HIGH, A1> GND, A0> HIGH (означава 101, след това 20 + 5 = 25)
Стъпка 4: Команди

Ето таблица с команди за комуникация:
Стъпка 5: Категории
GP0 / GP1 - Регистри на порта за данни
Има два регистъра, които осигуряват достъп до двата GPIO порта.
Четенето на регистъра осигурява състоянието на пиновете на този порт.
Bit = 1> HIGH Bit = 0> LOW
IODIR0 / IODIR1
Има два регистъра, които контролират pin режима. (Вход или изход)
Бит = 1> ВХОД Бит = 0> ИЗХОД
Стъпка 6: Структура за комуникация

Тук говорим за адреса на чипа и за достъп до командата и данните, което е един вид протокол, който трябва да се направи за изпращане на информация.
Стъпка 7: Програма

Ще направим програма, която се състои от комуникация на ESP01 с MCP23016, за да можем да използваме повече GPIO. Тези 16 нови GPIO, които ще имаме, ще контролират 16-канален релеен модул.
Командите ще бъдат изпращани до ESP01 чрез приложение за Android.
Стъпка 8: MCP23016

Стъпка 9: ESP-01


Това е платка с 16 релета.
Стъпка 10: Монтиране на ESP01

Стъпка 11: Библиотеки и променливи
Ще включим библиотеките, отговорни за i2c комуникацията и за създаването на точка за достъп и уеб сървър. Определяме адреса на чипа и портовете. И накрая, ние дефинираме променливите за съхраняване на стойностите на MCP пиновете.
#include // responsável pela comunicação i2c. #include // responseável por criar o accesspoint eo webserver WiFiServer сървър (80); // webserver за acessarmos através to aplicativo // endereço I2C до MCP23016 #define MCPAddress 0x20 // ENDEREADOS REGES define GP0 0x00 // DIST PORT REGISTER 0 #define GP1 0x01 // DATA PORT REGISTER 1 #define IODIR0 0x06 // I/O DIRECTION REGISTER 0 #define IODIR1 0x07 // I/O DIRECTION REGISTER 1 // guarda os valores dos pinos направете MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;
Стъпка 12: Настройка
Инициализираме ESP01 и конфигурираме портовете. Също така конфигурираме точката за достъп и инициализираме сървъра.
void setup () {Serial.begin (9600); забавяне (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // конфигуриране на точка за достъп server.begin (); // инициализиране на сървър}
Стъпка 13: Цикъл
Тук проверявам дали към сървъра са свързани клиенти. Прочетохме и първия ред за заявка. Извличаме данните за манипулиране, дефинираме заглавката на отговора по подразбиране и изпращаме този отговор на клиента.
void loop () {WiFiClient клиент = server.available (); // Проверка на клиентите за свързване if (! Client) {return; } String req = client.readStringUntil ('\ r'); // Faz a leitura da primeira linha da requisição/ */MR е префиксът на заглавката за sabre se a requisição é a esperada para os relés */if (req.indexOf ("/MR")! = -1) {parserData (req); // част, която изисква реквизит за допълнителен оператор за манипулиране} else {Serial.println ("невалидна заявка"); връщане; } client.flush (); Низ s = "HTTP/1.1 200 OK / r / n"; // cabeçalho padrão de resposta client.print (s); // envia a resposta para o cliente delay (1); } // краен цикъл
Стъпка 14: ParserData

От заявката търсим данните, свързани с релетата. След това изпращаме данните до MCP23016.
// a partir da requisição busca os dados referente aos relésvoid parserData (String data) {uint8_t relay = -1; uint8_t gp = -1; uint8_t стойност = -1; int index = data.indexOf ("/MR"); // busca o index do prefixo MR if (data [index+5] == '/') ///MR01/1, onde 0 = GP; 1 = RELE; 1 = ESTADO (включване/изключване) {gp = данни [индекс+3]-'0'; реле = данни [индекс+4]-'0'; стойност = данни [индекс+6]-'0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relay-1, value, gp); }}
Стъпка 15: ConfigurePort
Зададохме режим GPIO pin (GP0 или GP1).
// конфигуриране на modo dos pinos GPIO (GP0 ou GP1) // como parametro passamos: // порт: GP0 ou GP1 // INPUT para todos as portas do GP trabalharem como entrada // OUTPUT para todos as portas do GP trabalharem como saida // персонализиран um valor de 0-255 indicando o modo das portas (1 = INPUT, 0 = OUTPUT) // ex: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, o restante como saida void configurePort (uint8_t порт, uint8_t персонализиран) {if (обичай == INPUT) {writeBlockData (порт, 0xFF); } else if (custom == OUTPUT) {writeBlockData (порт, 0x00); } else {writeBlockData (порт, персонализиран); }}
Стъпка 16: WritePinData
В тази част на кода ние променяме състоянието на желания пин и изпращаме данните към MCP.
// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; стойност = 0/1 (включване/изключване); gp = 0/1 (PORT do MCP) void writePinData (int pin, int value, uint8_t gp) {uint8_t statusGP = 0; if (gp == GP0) statusGP = currentValueGP0; else statusGP = currentValueGP1; if (стойност == 0) {statusGP & = ~ (B00000001 << (щифт)); // muda o pino para LOW} else if (value == 1) {statusGP | = (B00000001 << (pin)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; иначе currentValueGP1 = statusGP; // envia os dados за MCP writeBlockData (gp, statusGP); забавяне (10); }
Стъпка 17: WriteBlockData & SetupWiFi
Тук изпращаме данни към MCP23016 чрез шината i2c. След това конфигурираме свойствата да активират точката за достъп. И накрая, конфигурирахме WiFi за режим на точка за достъп и създадохме AP със SSID и PASSWORD.
// Допълнителни данни за MCP23016 através do barramento i2c // reg: REGISTRADOR // данни: dados (0-255) void writeBlockData (uint8_t порт, uint8_t данни) {Wire.beginTransmission (MCPAddress); Wire.write (порт); Wire.write (данни); Wire.endTransmission (); забавяне (10); }
// конфигуриране като собственост за хабилитиране на ТОЧКА НА ДОСТЪП Избягване на настройкаWiFi () {WiFi.mode (WIFI_AP); WiFi.softAP ("ESP01_RELAY", "12345678"); }
Стъпка 18: Приложение




За да създадем приложението, използваме MIT App Inventor 2, до който можете да получите достъп чрез връзката:
ai2.appinventor.mit.edu/
Приложението се състои от два екрана, съдържащи осем двойки бутони във всеки, показващи състоянието на всяко реле.
По -долу са някои от използваните програмни блокове:
ВАЖНО: IP адресът по подразбиране на ESP, тъй като точката за достъп е 192.168.4.1
1. Когато екранът се инициализира, ние съхраняваме IP в паметта и извикваме процедурата за възстановяване на състоянието на бутоните (ON / OFF).
2. Обадете се на другия екран
1. Когато кликнете върху бутона ON на едно от релетата, ще направим визуални промени в бутона (зелени блокове). WebViewer1. GoToUrl прави заявка за нашия ESP01, като свързва данните MR01 / 1 в URL адреса.
2. Когато щракнете върху бутона OFF на едно от релетата, ще направим визуални промени в бутона (зелени блокове). WebViewer1. GoToUrl прави заявка към нашия ESP01, като свързва данните MR01 / 0 в URL адреса.
Тази процедура се използва за възстановяване на състоянието на бутоните (релета), тъй като при смяна на екрана се връща към шаблона за създаване.
Жълтият блок се повтаря за всяка от двойките бутони.
Стъпка 19: Изтеглете
Ето файловете на проекта за изтегляне:
Файл на проекта MIT App Inventor 2 - изтегляне
APK за приложение за инсталиране на android - изтегляне
Изтеглете другите файлове:
АЗ НЕ
Препоръчано:
УСТРОЙСТВО ЗА ОТКРИВАНЕ НА КРАЖА НА НИСКИ РАЗХОДИ (Pi Home Security): 7 стъпки

НИСКО РАЗХОДНИ УСТРОЙСТВА ЗА ОТКРИВАНЕ НА КРАЖБА (Pi Home Security): Системата е предназначена за откриване на проникване (неоторизирано влизане) в сграда или други зони. Този проект може да се използва в жилищни, търговски, промишлени и военни имоти за защита срещу взлом или имуществени щети, както и
Електрическо измервателно устройство за разходи за енергия на Arduino: 13 стъпки (със снимки)

Устройство за измерване на разходите за енергия на Arduino: Плащате ли твърде много за сметките си за ток? Искате ли да знаете колко електроенергия консумира вашата чайник или нагревател? Направете свой собствен преносим електрически измервател на разходите за енергия! Гледайте как намерих използването на това устройство
Сонда за измерване на нивото на подземните води за настройки на ниски ресурси: 4 стъпки (със снимки)

Сонда за измерване на нивото на подземните води за настройки на ниски ресурси: Въведение Получихме искане от Oxfam да разработим прост начин, по който учениците в Афганистан могат да наблюдават нивата на подземните води в близките кладенци. Тази страница е преведена на Дари от д -р Амир Хайдари и преводът може да бъде
Dupin-портативен източник на светлина с много ниска цена на свръх ниски разходи: 11 стъпки

Dupin-преносим многовълнов източник на светлина с ултра ниска цена: Кръстен на Огюст Дюпен, считан за първия измислен детектив, този преносим източник на светлина работи от всяко 5V USB зарядно устройство или захранващ блок. Всяка LED глава се захваща магнитно. Използвайки евтини 3W звездни светодиоди, активно охлаждани от малък вентилатор
Нов начин за производство на ферофлуид. Разходи по -малко от 3 $ !!!: 6 стъпки (със снимки)

Нов начин за производство на ферофлуид. Разходи по -малко от 3 $ !!!: Ферофлуид - вещество, което е течно при нормални условия, но става твърдо в присъствието на магнитно поле. Открих нов начин за приготвяне на домашен ферофлуид и искам да го споделя с вас, момчета. Предимството на моя проект е цената. То