Obsah:
- Krok 1: Úvod
- Krok 2: Charakteristiky
- Krok 3: ESP01 může mít 128 GPIO
- Krok 4: MCP23016
- Krok 5: HODINY
- Krok 6: Adresa
- Krok 7: Příkazy
- Krok 8: Kategorie:
- Krok 9: Struktura pro komunikaci
- Krok 10: Program
- Krok 11: ESP01
- Krok 12: Montáž ESP01
- Krok 13: NodeMCU ESP-12E
- Krok 14: Montáž NodeMCU ESP-12E
- Krok 15: WiFi NodeMCU-32S ESP-WROOM-32
- Krok 16: Připojení WiFi NodeMCU-32S ESP-WROOM-32
- Krok 17: Knihovny a proměnné
- Krok 18: Nastavení
- Krok 19: ConfigurePort
- Krok 20: WriteBlockData & CheckButton
- Krok 21: ReadPin & ValueFromPin
- Krok 22: Program ESP8266
- Krok 23: DŮLEŽITÉ
- Krok 24: Soubory
Video: IO Expander pro ESP32, ESP8266 a Arduino: 24 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
Chcete rozšířit IO svých ESP32, ESP8266 nebo Arduino? A přemýšleli jste o možnosti 16 nových GPIO, které lze ovládat pomocí sběrnice I2C? Dnes vám představím GPIO expandér MCP23016. Také vám ukážu, jak komunikovat mikrokontrolér s MCP23016. Budu také mluvit o vytvoření programu, kde budeme ke komunikaci s expandérem používat pouze 2 piny tohoto mikrokontroléru. Použijeme je k ovládání LED a tlačítka.
Krok 1: Úvod
Zařízení MCP23016 poskytuje 16 bitů pro rozšíření GPIO pomocí sběrnice I2C. Každý bit lze konfigurovat jednotlivě (vstup nebo výstup).
MCP23016 se skládá z několika 8bitových nastavení pro výběr vstupu, výstupu a polarity.
Expandéry poskytují mimo jiné jednoduché řešení, když jsou IO potřebné pro spínače, senzory, tlačítka a LED diody.
Krok 2: Charakteristiky
16 vstupních / výstupních pinů (16 vstupních standardů)
Rychlá taktovací frekvence sběrnice I2C (0-400 kbit/s)
Tři hardwarové adresní kolíky umožňují použití až osmi zařízení
Záznamník přerušení portu
Registr obracející polaritu pro nastavení polarity dat vstupního portu
Kompatibilní s většinou mikrokontrolérů
Krok 3: ESP01 může mít 128 GPIO
Příkladem, který ukazuje velikost tohoto expandéru, je jeho použití s ESP01, který lze připojit až k osmi expandérům pouze se dvěma IOS a dosáhnout 128 GPIO.
Krok 4: MCP23016
Zde máme schéma expandéru, který má dvě skupiny po osmi bitech. To činí celkem 16 portů. Kromě přerušovacího pinu má pin CLK, který spojuje kondenzátor a odpor, které jsou interně propojeny v logickém portu. Toto má tvořit hodiny pomocí myšlenky krystalového oscilátoru, který potřebuje 1MHz hodiny. Pin TP slouží k měření hodin. Piny A0, A1 a A2 jsou binární adresy.
Krok 5: HODINY
MCP23016 proto používá k určení rychlosti interních hodin externí RC obvod. Aby zařízení správně fungovalo, je nutný (obvykle) vnitřní takt 1 MHz. Interní hodiny lze měřit na pinu TP. Doporučené hodnoty pro REXT a CEXT jsou uvedeny níže.
Krok 6: Adresa
K definování adresy MCP23016 pak použijeme piny A0, A1 a A2. Pro změnu adresy je nechte na VYSOKÉ nebo NÍZKÉ.
Adresa bude vytvořena následovně:
MCP_Address = 20 + (A0 A1 A2)
Kde A0 A1 A2 může nabývat hodnot HIGH / LOW, tvoří to binární číslo od 0 do 7.
Například:
A0> GND, A1> GND, A2> GND (znamená 000, pak 20 + 0 = 20)
Nebo jinak, A0> VYSOKÝ, A1> GND, A2> VYSOKÝ (to znamená 101, pak 20 + 5 = 25)
Krok 7: Příkazy
Níže je tabulka s příkazy pro komunikaci. Použijme GP0 a GP1, stejně jako IODIR0 a IODIR1.
Krok 8: Kategorie:
GP0 / GP1 - registry datových portů
Existují dva registry, které poskytují přístup ke dvěma portům GPIO.
Čtení registru poskytuje stav pinů na tomto portu.
Bit = 1> VYSOKÝ Bit = 0> NÍZKÝ
OLAT0 / OLAT1 - Výstup LACTCH REGISTRACE
Existují dva registry, které poskytují přístup k výstupním portům obou portů.
IPOL0 / IPOL1 - registry polarity vstupu
Tyto registry umožňují uživateli konfigurovat polaritu dat vstupního portu (GP0 a GP1).
IODIR0 / IODIR1
Režim pinů ovládají dva registry. (Vstup nebo výstup)
Bit = 1> VSTUP Bit = 0> VÝSTUP
INTCAP0 / INTCAP1 - Přerušení záznamových registrů
Jedná se o registry, které obsahují hodnotu portu, který generoval přerušení.
IOCON0 / IOCON1 - I / O Expander Control Register
Tím se ovládá funkčnost MCP23016.
Nastavení bitu 0 (IARES> Rozlišení aktivity přerušení) řídí vzorkovací frekvenci pinů portu GP.
Bit0 = 0> (výchozí) Maximální doba detekce aktivity portu je 32 ms (nízká spotřeba energie)
Bit0 = 1> maximální doba detekce aktivity na portu je 200usec (vyšší spotřeba energie)
Krok 9: Struktura pro komunikaci
Ukazuji zde třídu Wire, což je komunikace I2C v našem jádru Arduino, která také umožňuje expandéru pracovat s Arduino Uno a Mega. Ten druhý však již má několik IO. Zabýváme se zde adresami čipu, kontrolou přístupu, což jsou kódy registrů, a také daty.
Krok 10: Program
Náš program spočívá v komunikaci ESP32 s MCP23016, aby bylo možné použít více GPIO. Poté budeme mít k MCP23016 připojeno tlačítko a některé diody LED. Všechny je budeme ovládat pouze pomocí sběrnice I2C. Budou tedy použity pouze dva piny ESP32. Obrazový obvod můžete vidět níže ve videu.
Krok 11: ESP01
Zde ukazuji Pinout ESP01.
Krok 12: Montáž ESP01
V tomto případě máme GPIO0 připojený v SDA a GPIO2 připojený v SCL. Máme také reléovou desku, bzučák a LED. Na druhém portu, v GP1.0, máme ještě jednu LED s odporem.
Krok 13: NodeMCU ESP-12E
Zde máme Pinout NodeMCU ESP-12E.
Krok 14: Montáž NodeMCU ESP-12E
V tomto případě je jediným rozdílem od prvního příkladu to, že jste připojili D1 a D2 v SDA a SCL.
Krok 15: WiFi NodeMCU-32S ESP-WROOM-32
Zde je pinout WiFi NodeMCU-32S ESP-WROOM-32.
Krok 16: Připojení WiFi NodeMCU-32S ESP-WROOM-32
Tentokrát je hlavním rozdílem od ostatních dvou příkladů tlačítko a tři blikající diody LED. Zde je SDA připojen k GPIO19, zatímco SCL je připojen k GPIO23.
Krok 17: Knihovny a proměnné
Nejprve zahrneme Wire.h, který je zodpovědný za komunikaci i2c, a také nastavení adresy i2c MCP23016. Ukazuji několik příkazů, dokonce i některé, které v tomto projektu nepoužíváme.
#include // zadejte použití knihovny Wire.h. // endereço I2C do MCP23016 #define MCPAddress 0x20 // COMMAND BYTE TO REGISTER RELATIONSHIP: Table: 1-3 of Microchip MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // DATA PORT REGISTER 0 #define GP1 REGISTR PORTU 1 #definovat OLAT0 0x02 // VÝSTUP ZÁPADNÍ REGISTRÁTOR 0 #definovat OLAT1 0x03 // VÝSTUPNÍ ZÁPIS REGISTR 1 #definovat IPOL0 0x04 // VSTUP POLARITA REGISTR PORTU 0 #definovat IPOL1 0x05 // VSTUP POLARITY PORT REGISTER 1 # /REGISTR SMĚRU I/O 0 #definovat IODIR1 0x07 // REGISTR SMĚRU I/O 1 #definovat INTCAP0 0x08 // PŘERUŠIT REGISTR CAPTURE 0 #definovat INTCAP1 0x09 // PŘERUŠIT ZÁZNAM REGISTR 1 #definovat IOCON0 0x0 REGISTRACE 0 #definovat IOCON1 0x0B // I/O EXPANDER REGISTRACE 1
Krok 18: Nastavení
Zde máme funkce pro inicializaci čtyř různých typů mikrokontrolérů. Také kontrolujeme frekvenci, nastavujeme GPIO a nastavujeme piny. Ve smyčce kontrolujeme stav tlačítka.
neplatné nastavení () {Serial.begin (9600); zpoždění (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frekvence // konfigurace o GPIO0 como VÝSTUP (todos os pinos) configurePort (IODIR0, OUTPUT); // konfigurace o GPIO1 como INPUT o GP1.0 e como OUTPUT os outros GP1 configurePort (IODIR1, 0x01); // seta tosos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta tosos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); } void loop () {// verifica e o botão GP for pressionado checkButton (GP1); } // koncová smyčka
Krok 19: ConfigurePort
V tomto kroku konfigurujeme režim GPIO pinů a identifikujeme režim portů.
// konfigurace o GPIO (GP0 ou GP1) // parametry parametru passamos: // port: GP0 ou GP1 // custom: INPUT para todos as portas do GP trabalharem como entrada // OUTPUT para todos as portas do GP trabalharem como saida/ / custom 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 restando como saida void configurePort (uint8_t port, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (custom == VÝSTUP) {writeBlockData (port, 0x00); } else {writeBlockData (port, vlastní); }}
Krok 20: WriteBlockData & CheckButton
Zde odesíláme data na MCP23016 přes sběrnici i2c, kontrolujeme stav tlačítka a indikujeme další krok, přičemž vezmeme v úvahu stav stisknutí nebo ne.
// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (registrador) // data: dados (0-255) void writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (data); Wire.endTransmission (); zpoždění (10); }
// verifica se o botão foi pressionado // parametro GP: GP0 ou GP1 void checkButton (uint8_t GP) {// faz a leitura do pino 0 no GP fornecido uint8_t btn = readPin (0, GP); // více než obvykle, nastavte jako VYSOKÉ jako porty GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
Krok 21: ReadPin & ValueFromPin
Zde se zabýváme čtením konkrétního kolíku a návratem bitové hodnoty do požadované polohy.
// faz a leitura de um pino específico // pin: pino desejado (0-7) // gp: GP0 ou GP1 // retorno: 0 ou 1 uint8_t readPin (uint8_t pin, uint8_t gp) {uint8_t statusGP = 0; Wire.beginTransmission (MCPAddress); Wire.write (gp); Wire.endTransmission (); Wire.requestFrom (MCPAddress, 1); // ler do chip 1 byte statusGP = Wire.read (); návratová hodnotaFromPin (pin, statusGP); } // retorna o valor do bit na posição desejada // pin: posição do bit (0-7) // statusGP: valor lido do GP (0-255) uint8_t valueFromPin (uint8_t pin, uint8_t statusGP) {return (statusGP & (0x0001 << pin)) == 0? 0: 1; }
Krok 22: Program ESP8266
Odtud uvidíme, jak byl vytvořen program, který jsme použili v ESP-01 a v nodeMCU ESP-12E, což nám umožňuje pochopit, jak jsou rozdíly mezi nimi minimální.
Upravíme pouze řádek komunikačního konstruktoru i2c, což je počáteční metoda objektu Wire.
Stačí odkomentovat řádek podle desky, kterou se chystáme sestavit.
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Založit
Všimněte si, že stavitel je stále okomentován. Proto odkomentujte podle vaší desky (ESP-01 nebo nodeMCU ESP12-E).
neplatné nastavení () {Serial.begin (9600); zpoždění (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frekvence // konfigurace o GPIO0 como VÝSTUP (todos os pinos) configurePort (IODIR0, OUTPUT); // konfigurace o GPIO1 como VÝSTUP (todos os pinos) configurePort (IODIR1, OUTPUT); // seta tosos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta tosos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000001); }
Smyčka
Ve smyčce přepínáme kolíky každou 1 sekundu. Když je tedy pin0 GP0 zapnutý, piny GP1 jsou vypnuté. Když je pin0 GP1 zapnutý, piny GP0 jsou vypnuté.
void loop () {// seta o pino 7 do GP0 como HIGH e os demais como LOW writeBlockData (GP0, B10000000); // seta tosos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); zpoždění (1000); // seta tosos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta o pino 0 do GP1 como HIGH e os demais como LOW writeBlockData (GP1, B00000001); zpoždění (1000); } // koncová smyčka
Krok 23: DŮLEŽITÉ
Použité proměnné a knihovna jsou stejné jako v programu, který jsme udělali pro ESP32, a také v metodách configurePort a writeBlockData.
Krok 24: Soubory
Stáhnout soubory:
INO (ESP8266)
INO (ESP32)
Doporučuje:
Bezdrátová komunikace LoRa 3 až 8 km s nízkými náklady na zařízení E32 (sx1278/sx1276) pro Arduino, Esp8266 nebo Esp32: 15 kroků
Bezdrátová komunikace LoRa 3 až 8 km s nízkými náklady na zařízení E32 (sx1278/sx1276) pro Arduino, Esp8266 nebo Esp32: Vytvářím knihovnu pro správu EBYTE E32 na základě řady zařízení LoRa Semtech, velmi výkonného, jednoduchého a levného zařízení. Verze 3 km zde, verze 8 km zde Mohou pracovat na vzdálenost 3000 m až 8 000 m a mají mnoho funkcí
Začínáme s Pythonem pro ESP8266 a ESP32: 6 kroků
Začínáme s Pythonem pro ESP8266 a ESP32: Bacground ESP8266 a jeho mladší velký bratr ESP32 jsou levné Wi-Fi mikročipy s plným zásobníkem TCP/IP a schopností mikrořadiče. Čip ESP8266 se poprvé dostal do povědomí komunity tvůrců v roce 2014. Od té doby nízká cena (
Skříňový držák pro ESP32 a ESP8266: 7 kroků
Cabinet Mount pro ESP32 a ESP8266: Někdy může být užitečné nainstalovat projekt založený na ESP32 nebo ESP8266 do skříně a dát mu profesionální vzhled. Tato malá sada pouzder vám pomůže přenést váš projekt založený na ESP na lištu DIN. Sada obsahuje prototypovací desku plošných spojů s integrovaným
PCF8591 (i2c Analog I/O Expander) Rychlé snadné použití: 9 kroků
PCF8591 (i2c Analog I/O Expander) Rychlé snadné použití: Knihovna pro použití i2c pcf8591 IC s arduino a esp8266. Tento IC může ovládat (až 4) analogový vstup a/nebo 1 analogový výstup, jako je měření napětí, čtení hodnoty termistoru nebo vyblednutí LED. Umí číst analogovou hodnotu a zapisovat analogovou hodnotu pouze pomocí 2 vodičů (perfektní
Použijte 1 analogový vstup pro 6 tlačítek pro Arduino: 6 kroků
Použijte 1 analogový vstup pro 6 tlačítek pro Arduino: Často jsem přemýšlel, jak bych mohl pro svůj Arduino získat více digitálních vstupů. Nedávno mě napadlo, že bych měl být schopen použít jeden z analogových vstupů pro zavedení více digitálních vstupů. Rychle jsem hledal a zjistil, kde jsou lidé