ዝርዝር ሁኔታ:

IO ማስፋፊያ ለ ESP32 ፣ ESP8266 እና አርዱinoኖ 24 ደረጃዎች
IO ማስፋፊያ ለ ESP32 ፣ ESP8266 እና አርዱinoኖ 24 ደረጃዎች

ቪዲዮ: IO ማስፋፊያ ለ ESP32 ፣ ESP8266 እና አርዱinoኖ 24 ደረጃዎች

ቪዲዮ: IO ማስፋፊያ ለ ESP32 ፣ ESP8266 እና አርዱinoኖ 24 ደረጃዎች
ቪዲዮ: የት ጋር እንደሆነ ልዩ የአምልኮ ጊዜ ከዘማሪ ሳሙኤል ንጉሴ ጋር SEP 13,2021 MARSIL TVWORLDWID 2024, ሀምሌ
Anonim
Image
Image
መግቢያ
መግቢያ

የእርስዎን ESP32 ፣ ESP8266 ፣ ወይም አርዱinoኖ አይኦዎችን ማስፋት ይፈልጋሉ? እና I2C አውቶቡስን በመጠቀም ሊቆጣጠሩት ስለሚችሉት 16 አዲስ ጂፒኦዎች ዕድል አስበዋል? ደህና ፣ ዛሬ ፣ የጂፒኦ ማስፋፊያውን MCP23016 ላስተዋውቅዎታለሁ። እንዲሁም ፣ ማይክሮ መቆጣጠሪያን ከ MCP23016 ጋር እንዴት መገናኘት እንደሚችሉ አሳያችኋለሁ። እኔ ከዚህ ማስፋፊያ ጋር ለመገናኘት የዚህን ማይክሮ መቆጣጠሪያ 2 ፒኖችን ብቻ የምንጠቀምበትን ፕሮግራም ስለመፍጠር እነጋገራለሁ። እነዚህን LED ዎች እና አዝራሩን ለመቆጣጠር እንጠቀማለን።

ደረጃ 1 መግቢያ

የ MCP23016 መሣሪያው I2C አውቶቡስን በመጠቀም ለጂፒኦ ማስፋፊያ 16 ቢት ይሰጣል። እያንዳንዱ ቢት በተናጠል (ግብዓት ወይም ውፅዓት) ሊዋቀር ይችላል።

MCP23016 ለግብዓት ፣ ለውጤት እና ለፖላርነት ምርጫ በርካታ 8-ቢት ቅንብሮችን ያካትታል።

IO ዎች ለመለወጫዎች ፣ ዳሳሾች ፣ አዝራሮች እና ኤልኢዲዎች ከሌሎች ምሳሌዎች ጋር ሲያስፈልጉ ሰፋፊዎቹ ቀለል ያለ መፍትሄ ይሰጣሉ።

ደረጃ 2 - ባህሪዎች

16 የግቤት / የውጤት ካስማዎች (16 የግቤት ደረጃ)

ፈጣን I2C የአውቶቡስ ሰዓት ድግግሞሽ (0-400 ኪባ/ሰ)

ሶስት የሃርድዌር አድራሻ ፒን እስከ ስምንት መሣሪያዎች እንዲጠቀሙ ይፈቅዳሉ

ወደብ መቅረጫ መቅጃን ያቋርጡ

የግብዓት ወደብ መረጃን ዋልታ ለማቀናበር የፖላራይተሪ መቀልበስ መዝገብ

ከአብዛኞቹ ማይክሮ መቆጣጠሪያዎች ጋር ተኳሃኝ

ደረጃ 3 ፦ ESP01 128 ጂፒኦዎች ሊኖሩት ይችላል

ESP01 128 ጂፒኦዎች ሊኖሩት ይችላል!
ESP01 128 ጂፒኦዎች ሊኖሩት ይችላል!

የዚህ ማስፋፊያውን መጠን የሚያሳይ ምሳሌ ከ ESP01 ጋር መጠቀሙ ነው ፣ ይህም ሁለት IOS ብቻ እስከ ስምንት ሰፋሪዎች ድረስ ሊገናኝ ይችላል ፣ 128 ጂፒኦዎች ደርሷል።

ደረጃ 4: MCP23016

MCP23016
MCP23016

እዚህ ፣ እኛ ስምንት ቢት ሁለት ቡድኖች ያሉት የማስፋፊያ መርሃግብሩ አለን። ይህ በአጠቃላይ 16 ወደቦችን ያደርገዋል። ከተቋረጠ ፒን በተጨማሪ በሎጂክ ወደብ ውስጥ በውስጥ የተገናኙትን capacitor እና resistor የሚያገናኝ የ CLK ፒን አለው። ይህ 1 ሜኸ ሰዓት የሚፈልገውን የክሪስታል ኦዝለርተር ሀሳብ በመጠቀም ሰዓቱን ለመመስረት ነው። የቲፒ ፒን ሰዓቱን ለመለካት ጥቅም ላይ ይውላል። ፒኖች A0 ፣ A1 እና A2 የሁለትዮሽ አድራሻዎች ናቸው።

ደረጃ 5 ሰዓት

ሰዓት
ሰዓት
ሰዓት
ሰዓት

ስለዚህ MCP23016 የውስጣዊውን ሰዓት ፍጥነት ለመወሰን ውጫዊ የ RC ወረዳ ይጠቀማል። መሣሪያው በትክክል እንዲሠራ 1 ሜኸር ውስጣዊ ሰዓት (ብዙውን ጊዜ) ያስፈልጋል። ውስጣዊ ሰዓቱ በቲፒ ፒን ላይ ሊለካ ይችላል። ለ REXT እና CEXT የሚመከሩ እሴቶች ከዚህ በታች ይታያሉ።

ደረጃ 6 አድራሻ

የ MCP23016 አድራሻውን ለመለየት ፣ ከዚያ ፒን A0 ፣ A1 እና A2 ን እንጠቀማለን። ለአድራሻው ለውጥ በ HIGH ወይም LOW ብቻ ይተዋቸው።

አድራሻው እንደሚከተለው ይመሰረታል።

MCP_Address = 20 + (A0 A1 A2)

A0 A1 A2 ከፍተኛ / ዝቅተኛ እሴቶችን ሊወስድ በሚችልበት ቦታ ፣ ይህ የሁለትዮሽ ቁጥርን ከ 0 ወደ 7 ይመሰርታል።

ለምሳሌ:

A0> GND ፣ A1> GND ፣ A2> GND (000 ማለት ፣ ከዚያ 20 + 0 = 20)

ወይም ካልሆነ, A0> HIGH ፣ A1> GND ፣ A2> HIGH (ትርጉም 101 ፣ ከዚያ 20 + 5 = 25)

ደረጃ 7 - ትዕዛዞች

ትዕዛዞች
ትዕዛዞች

ከዚህ በታች ለግንኙነት ትዕዛዞች ያሉት ሰንጠረዥ ነው። GP0 እና GP1 ን ፣ እንዲሁም IODIR0 እና IODIR1 ን እንጠቀም።

ደረጃ 8 ምድቦች

GP0 / GP1 - የውሂብ ወደብ ምዝገባዎች

ሁለቱ የጂፒዮ ወደቦች መዳረሻ የሚሰጡ ሁለት መዝገቦች አሉ።

የመመዝገቢያ ንባቡ በዚያ ወደብ ላይ ያሉትን የፒንሶቹን ሁኔታ ይሰጣል።

ቢት = 1> ከፍተኛ ቢት = 0> ዝቅተኛ

OLAT0 / OLAT1 - የውጤት LACTCH REGISTERS

የሁለቱን ወደቦች የውጤት ወደቦች መዳረሻ የሚሰጡ ሁለት መዝገቦች አሉ።

IPOL0 / IPOL1 - የግቤት ፖላራይዝ ምዝገባዎች

እነዚህ መመዝገቢያዎች ተጠቃሚው የግብዓት ወደብ መረጃን (GP0 እና GP1) ዋልታ እንዲያዋቅር ያስችለዋል።

IODIR0 / IODIR1

የፒን ሁነታን የሚቆጣጠሩ ሁለት መዝገቦች አሉ። (ግቤት ወይም ውፅዓት)

ቢት = 1> ግብዓት ቢት = 0> ውጣ

INTCAP0 / INTCAP1 - የመቁረጫ መዝገቦችን ያቋርጡ

እነዚህ መቋረጡን የፈጠረውን የወደብ ዋጋ የያዙ መዝገቦች ናቸው።

IOCON0 / IOCON1 - I / O የማስፋፊያ መቆጣጠሪያ መዝገብ

ይህ የ MCP23016 ተግባራዊነትን ይቆጣጠራል።

ቅንብር ቢት 0 (IARES> የእንቅስቃሴ ጥራት ማቋረጥ) የጂፒፕ ወደብ ካስማዎች ናሙና ድግግሞሽ ይቆጣጠራል።

Bit0 = 0> (ነባሪ) ከፍተኛው የወደብ እንቅስቃሴ ማወቂያ ጊዜ 32ms ነው (ዝቅተኛ የኃይል ፍጆታ)

Bit0 = 1> በወደቡ ላይ ያለው ከፍተኛ የእንቅስቃሴ ማወቂያ ጊዜ 200usec (ከፍተኛ ኃይል ፍጆታ) ነው

ደረጃ 9 ለግንኙነት መዋቅር

ለግንኙነት መዋቅር
ለግንኙነት መዋቅር

እኔ የእኛን ዋና አርዱዲኖ ውስጥ የ I2C ግንኙነት የሆነውን የሽቦ ክፍልን እዚህ አሳያለሁ ፣ ይህም ማስፋፊያው ከአርዱዲኖ ኡኖ እና ሜጋ ጋር እንዲሠራ ያስችለዋል። ሆኖም ፣ የኋለኛው ቀድሞውኑ በርካታ አይኦዎች አሉት። እኛ እዚህ የምንመለከተው ከቺፕ አድራሻዎች ፣ ከመዳረሻ መቆጣጠሪያ ፣ የመዝጋቢዎቹ ኮዶች ፣ እንዲሁም ውሂቡ ናቸው።

ደረጃ 10 - ፕሮግራም

ፕሮግራም
ፕሮግራም

ፕሮግራማችን ለመጠቀም ብዙ ጂፒኦዎች እንዲኖሩት ESP32 ን ከ MCP23016 ጋር መገናኘትን ያካትታል። ከዚያ ከ MCP23016 ጋር የተገናኘ አዝራር እና አንዳንድ ኤልኢዲዎች ይኖረናል። I2C አውቶቡስን ብቻ በመጠቀም ሁሉንም እንቆጣጠራለን። ስለዚህ ሁለት የ ESP32 ፒኖች ብቻ ጥቅም ላይ ይውላሉ። በቪዲዮው ውስጥ ከዚህ በታች የምስል ወረዳውን ማየት ይችላሉ።

ደረጃ 11: ESP01

ESP01
ESP01

እዚህ ፣ የ ESP01 ን Pinout አሳያለሁ።

ደረጃ 12 ESP01 ን በመጫን ላይ

ESP01 ን በመጫን ላይ
ESP01 ን በመጫን ላይ

በዚህ ምሳሌ ፣ እኛ በ SDA ውስጥ የተገናኘው GPIO0 አለን ፣ እና GPIO2 በ SCL ውስጥ ተገናኝቷል። እኛ ደግሞ የቅብብሎሽ ሰሌዳ ፣ ድምጽ ማጉያ እና ኤልኢዲ አለን። በሌላ ወደብ ፣ በ GP1.0 ውስጥ ፣ አንድ ተጨማሪ LED ከተቃዋሚ ጋር አለን።

ደረጃ 13 ፦ NodeMCU ESP-12E

NodeMCU ESP-12E
NodeMCU ESP-12E

እዚህ ፣ የ NodeMCU ESP-12E Pinout አለን።

ደረጃ 14-መስቀለኛ መንገድ NodeMCU ESP-12E

NodeMCU ESP-12E ን በመጫን ላይ
NodeMCU ESP-12E ን በመጫን ላይ

በዚህ ሁኔታ ፣ ከመጀመሪያው ምሳሌ ብቸኛው ልዩነት በቅደም ተከተል በ SDA እና SCL ውስጥ D1 እና D2 ን ማገናኘቱ ነው።

ደረጃ 15: WiFi NodeMCU-32S ESP-WROOM-32

WiFi NodeMCU-32S ESP-WROOM-32
WiFi NodeMCU-32S ESP-WROOM-32

የ WiFi NodeMCU-32S ESP-WROOM-32 Pinout እዚህ አለ።

ደረጃ 16: WiFi መጫኛ NodeMCU-32S ESP-WROOM-32

WiFi መጫኛ NodeMCU-32S ESP-WROOM-32
WiFi መጫኛ NodeMCU-32S ESP-WROOM-32

በዚህ ጊዜ ከሌሎቹ ሁለት ምሳሌዎች ዋነኛው ልዩነት አዝራሩ እና ሦስቱ ብልጭ ድርግም የሚሉ ኤልኢዲዎች ናቸው። እዚህ ፣ ኤስዲኤው ከ GPIO19 ጋር የተገናኘ ሲሆን ፣ SCL ከ GPIO23 ጋር ተገናኝቷል።

ደረጃ 17 ቤተ -መጻሕፍት እና ተለዋዋጮች

በመጀመሪያ ፣ ለ i2c ግንኙነት ኃላፊነት ያለው Wire.h ን ፣ እንዲሁም የ MCP23016 ን i2c አድራሻ በማቀናጀት እንጨምራለን። በዚህ ፕሮጀክት ውስጥ የማንጠቀምባቸውን አንዳንድ ትዕዛዞችን አሳይቻለሁ።

#ያካትቱ / / የ Wire.h ቤተ -መጽሐፍትን አጠቃቀም ይግለጹ። // endereço I2C do MCP23016 #define MCPAddress 0x20 // COMMAND BYTE ለመመዝገብ ዝምድና - ሠንጠረዥ 1-3 - የማይክሮ ቺፕ MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // DATA PORT REGISTER 0 #0 የወደብ መመዝገቢያ 1 #ገላጭ OLAT0 0x02 // የውጤት LATCH REGISTER 0 #ገላጭ OLAT1 0x03 // ውጣ LATCH REGISTER 1 #ጥራት IPOL0 0x04 // የግቤት ፖልቲ RORISTER 0 #ጥራት IPOL1 0x0EG 0 0001 0X05 / 0PU0IS1 0x05 // INPU /እኔ/ኦ አቅጣጫ መመዝገቢያ 0 #IODIR1 0x07 // I/O ዳይሬክተር 1/ #INTCAP0xx8/INTERRUPT CAPTURE REGISTER 0 #INTAP1 0x09 // INTERRUPT CAPTURE REGISTER 1 የምዝገባ 0 #IOCON1 0x0B // I/O ማስፋፊያ መቆጣጠሪያ ሬጅስተር 1

ደረጃ 18: ማዋቀር

እዚህ አራት የተለያዩ የማይክሮ መቆጣጠሪያዎችን የማስጀመር ተግባራት አሉን። እኛ ደግሞ ድግግሞሹን እንፈትሻለን ፣ ጂፒኦዎችን እናዘጋጃለን እና ፒኖቹን እናስቀምጣለን። በ Loop ውስጥ የአዝራሩን ሁኔታ እንፈትሻለን።

ባዶነት ማዋቀር () {Serial.begin (9600); መዘግየት (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2 ፣ D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frequencia // configura o GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0 ፣ OUTPUT) ፤ // ያዋቅሩ ወይም GPIO1 como INPUT ወይም GP1.0 እና como OUTPUT os outros GP1 configurePort (IODIR1 ፣ 0x01); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0 ፣ B00000000) ፤ // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1 ፣ B00000000) ፤ } void loop () {// verifica e o botão GP foi pressionado checkButton (GP1); } // የመጨረሻ ዙር

ደረጃ 19: ConfigurePort

በዚህ ደረጃ ፣ የ GPIO ፒኖችን ሁነታን እናዋቅራለን እና የወደቦቹን ሁናቴ ለይተን እናውቃለን።

// ያዋቅሩ GPIO (GP0 ou GP1) // como parametro passamos: // port: GP0 ou GP1 // custom: INPUT para todos እንደ ፖርታዎች GP trabalharem como entrada // OUTPUT para todos እንደ ፖስታዎች 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 ወደብ ፣ uint8_t ብጁ) {ከሆነ (ብጁ == INPUT) {writeBlockData (ወደብ ፣ 0xFF); } ሌላ ከሆነ (ብጁ == ውጣ) {writeBlockData (ወደብ ፣ 0x00); } ሌላ {writeBlockData (ወደብ ፣ ብጁ) ፤ }}

ደረጃ 20: WriteBlockData & CheckButton

እዚህ ፣ በ ‹i2c አውቶቡስ› በኩል ወደ MCP23016 መረጃ እንልካለን ፣ የአዝራሩን ሁኔታ ይፈትሹ እና የተጫነበትን ሁኔታ ግምት ውስጥ በማስገባት ቀጣዩን ደረጃ ያመላክታሉ።

// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (registrador) // data: dados (0-255) ባዶ ጻፍBlockData (uint8_t cmd ፣ uint8_t ውሂብ) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (ውሂብ); Wire.endTransmission (); መዘግየት (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); // se botão pressionado, seta para HIGH as portas GP0 if (btn) {writeBlockData (GP0 ፣ B11111111) ፤ } // caso contrario deixa todas em estado LOW ሌላ {writeBlockData (GP0 ፣ B00000000) ፤ }}

ደረጃ 21: ReadPin & ValueFromPin

እዚህ የምንመለከተው የአንድ የተወሰነ ፒን ንባብ ፣ እና የትንሹን እሴት ወደሚፈለገው ቦታ መመለስ ነው።

// 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.begin ማስተላለፊያ (MCPAdress); Wire.write (gp); Wire.endTransmission (); Wire.requestFrom (MCPAddress, 1); // ler do ቺፕ 1 ባይት statusGP = Wire.read (); ተመላሽ እሴትFromPin (ፒን ፣ 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 << ፒን)) == 0? 0: 1; }

ደረጃ 22 ESP8266 ፕሮግራም

ከዚህ በመነሳት ፣ በ ESP-01 እና በ nodeMCU ESP-12E ውስጥ የተጠቀምንበት ፕሮግራም እንዴት እንደተፈጠረ እናያለን ፣ ይህም በመካከላቸው ልዩነቶች እንዴት አነስተኛ እንደሆኑ ለመረዳት ያስችለናል።

እኛ የምናስተካክለው የ i2c የግንኙነት ግንባታውን መስመር ብቻ ነው ፣ ይህም የሽቦው ነገር የመጀመሪያ ዘዴ ነው።

እኛ ልናጠናቅቀው ባለው ሳህን መሠረት መስመሩን uncomment ያድርጉ።

// Wire.begin (D2 ፣ D1); // nodemcu ESP8266 // Wire.begin (0 ፣ 2); // ESP-01

አዘገጃጀት

ግንበኛው አሁንም አስተያየት እንደተሰጠበት ልብ ይበሉ። ስለዚህ ፣ በቦርድዎ (ESP-01 ወይም nodeMCU ESP12-E) መሠረት አለመመጣጠን።

ባዶነት ማዋቀር () {Serial.begin (9600); መዘግየት (1000); // Wire.begin (D2 ፣ D1); // nodemcu ESP8266 // Wire.begin (0 ፣ 2); // ESP-01 Wire.setClock (200000); // frequencia // configura o GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0 ፣ OUTPUT) ፤ // ያዋቅሩ GPIO1 como OUTPUT (todos os pinos) configurePort (IODIR1 ፣ OUTPUT); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0 ፣ B00000000) ፤ // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1 ፣ B00000001) ፤ }

ሉፕ

በሉፕ ውስጥ በየ 1 ሰከንድ ፒኖችን እንቀይራለን። ስለዚህ ፣ የፒፒ0 GP0 ሲበራ ፣ የ GP1 ፒኖች ጠፍተዋል። የ GP1 pin0 ሲበራ ፣ የ GP0 ፒኖቹ ጠፍተዋል።

ባዶነት loop () {// seta o pino 7 do GP0 como HIGH e os demais como LOW writeBlockData (GP0 ፣ B10000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1 ፣ B00000000) ፤ መዘግየት (1000); // seta todos 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); መዘግየት (1000); } // የመጨረሻ ዙር

ደረጃ 23: አስፈላጊ

ጥቅም ላይ የዋሉት ተለዋዋጮች እና ቤተ -መጽሐፍት እኛ ለ ESP32 ካደረግነው ፕሮግራም ፣ እንዲሁም የማዋቀሪያ ፖርት እና የፅሕፈት ማገድ ዘዴዎችን ተመሳሳይ ናቸው።

24 ደረጃ - ፋይሎች

ፋይሎቹን ያውርዱ ፦

ፒዲኤፍ

INO (ESP8266)

INO (ESP32)

የሚመከር: