Агуулгын хүснэгт:

ESP32, ESP8266, Arduino -д зориулсан IO Expander: 24 алхам
ESP32, ESP8266, Arduino -д зориулсан IO Expander: 24 алхам

Видео: ESP32, ESP8266, Arduino -д зориулсан IO Expander: 24 алхам

Видео: ESP32, ESP8266, Arduino -д зориулсан IO Expander: 24 алхам
Видео: 3D Hologram LED Fan Fan Naked Eye 3D Effect for Advertising Display Party Sign Naked eyes 3d hologra 2024, Долдугаар сарын
Anonim
Image
Image
Танилцуулга
Танилцуулга

Та ESP32, ESP8266 эсвэл Arduino -ийн IO -г өргөжүүлэхийг хүсч байна уу? I2C автобус ашиглан удирдах боломжтой 16 шинэ GPIO -ийн талаар та бодож үзсэн үү? Өнөөдөр би танд GPIO өргөтгөгч MCP23016 -ийг танилцуулах гэж байна. Түүнчлэн, би MCP23016 -тай микроконтроллертой хэрхэн холбогдохыг танд үзүүлэх болно. Өргөтгөгчтэй харилцахын тулд энэ микроконтроллерийн зөвхөн 2 зүү ашиглах програмыг бий болгох талаар би бас ярих болно. Бид эдгээрийг LED болон товчлуурыг хянахад ашиглах болно.

Алхам 1: Танилцуулга

MCP23016 төхөөрөмж нь I2C автобусыг ашиглан GPIO өргөтгөл хийхэд 16 битээр хангадаг. Бит бүрийг дангаар нь тохируулах боломжтой (оролт эсвэл гаралт).

MCP23016 нь оролт, гаралт, туйлыг сонгох олон 8 битийн тохиргооноос бүрдэнэ.

Өргөтгөгч нь унтраалга, мэдрэгч, товчлуур, LED -д IO шаардлагатай бол бусад жишээнүүдийн дунд энгийн шийдлийг өгдөг.

Алхам 2: Онцлог шинж чанар

16 оролт / гаралтын тээглүүр (16 оролтын стандарт)

Хурдан I2C автобусны цагийн давтамж (0-400 кбит/сек)

Гурван тоног төхөөрөмжийн хаягийн зүү нь найм хүртэлх төхөөрөмжийг ашиглах боломжийг олгодог

Порт барих бичигчийг таслах

Оролтын портын өгөгдлийн туйлыг тохируулах туйлшралыг буцаах бүртгэл

Ихэнх микроконтроллеруудтай нийцдэг

Алхам 3: ESP01 нь 128 GPIO -тэй байж болно

ESP01 нь 128 GPIO -тэй байх боломжтой!
ESP01 нь 128 GPIO -тэй байх боломжтой!

Энэхүү өргөтгөлийн цар хүрээг харуулсан жишээ бол ESP01 -ийг ашиглах явдал бөгөөд үүнийг хоёр GPOS -тэй хоёр хүртэл IOS ашиглан найм хүртэл өргөтгөгчтэй холбож болно.

Алхам 4: MCP23016

MCP23016
MCP23016

Энд бид найман битийн хоёр бүлэгтэй өргөжүүлэгчийн схемийг авч үзье. Энэ нь нийт 16 портыг бий болгодог. Таслах зүүгээс гадна конденсатор ба резисторыг холбосон CLK зүүтэй бөгөөд дотооддоо логик портоор холбогддог. Энэ бол 1МГц цаг шаардлагатай болор осцилляторын санааг ашиглан цагийг бий болгох явдал юм. TP зүү нь цагийг хэмжихэд хэрэглэгддэг. A0, A1, A2 зүү нь хоёртын хаяг юм.

Алхам 5: ЦАГ

ЦАГ
ЦАГ
ЦАГ
ЦАГ

Тиймээс MCP23016 нь дотоод цагны хурдыг тодорхойлохын тулд гадаад RC хэлхээг ашигладаг. Төхөөрөмжийг зөв ажиллахын тулд 1 МГц -ийн дотоод цаг шаардлагатай (ихэвчлэн). Дотоод цагийг TP зүүгээр хэмжих боломжтой. REXT ба CEXT -ийн санал болгож буй утгыг доор харуулав.

Алхам 6: Хаяг

MCP23016 хаягийг тодорхойлохын тулд бид A0, A1, A2 зүү ашигладаг. Хаяг солихын тулд тэдгээрийг HIGH эсвэл LOW түвшинд үлдээгээрэй.

Хаягийг дараах байдлаар бүрдүүлэх болно.

MCP_Address = 20 + (A0 A1 A2)

A0 A1 A2 нь HIGH / LOW утгыг авах боломжтой тохиолдолд энэ нь 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 - Мэдээллийн портын бүртгэл

Хоёр GPIO порт руу нэвтрэх боломжийг олгодог хоёр бүртгэл байдаг.

Бүртгэлийн уншилт нь тухайн порт дээрх тээглүүрийн статусыг өгдөг.

Bit = 1> HIGH Bit = 0> LOW

OLAT0 / OLAT1 - LACTCH регистрийн гаралт

Хоёр портын гаралтын порт руу нэвтрэх боломжийг олгодог хоёр бүртгэл байдаг.

IPOL0 / IPOL1 - Оролтын туйлшралын бүртгэлүүд

Эдгээр регистрүүд нь хэрэглэгчид оролтын портын өгөгдлийн туйлыг тохируулах боломжийг олгодог (GP0 ба GP1).

IODIR0 / IODIR1

Пин горимыг хянадаг хоёр регистр байдаг. (Оролт эсвэл гаралт)

Bit = 1> INPUT Bit = 0> OUTPUT

INTCAP0 / INTCAP1 - Таслах бүртгэлийг тасалдуулах

Эдгээр нь тасалдал үүсгэсэн портын утгыг агуулсан бүртгэлүүд юм.

IOCON0 / IOCON1 - I / O Expander Control Register

Энэ нь MCP23016 -ийн ажиллагааг хянадаг.

Бит 0 -ийг тохируулах (IARES> Тасалдлын үйл ажиллагааны шийдэл) нь GP портын голын дээж авах давтамжийг хянадаг.

Bit0 = 0> (анхдагч) Порт идэвхжүүлэлтийг илрүүлэх хамгийн дээд хугацаа нь 32ms (бага эрчим хүчний хэрэглээ)

Bit0 = 1> порт дээрх хамгийн их идэвхжил илрүүлэх хугацаа 200usec (илүү их эрчим хүчний хэрэглээ)

Алхам 9: Харилцааны бүтэц

Харилцааны бүтэц
Харилцааны бүтэц

Би энд Wire ангийг харуулав, энэ бол бидний үндсэн Arduino дахь I2C харилцаа холбоо бөгөөд өргөтгөгч нь Arduino Uno болон Mega -тай ажиллах боломжийг олгодог. Гэсэн хэдий ч сүүлийнх нь хэд хэдэн IO -тэй байна. Бид энд чипийн хаяг, бүртгэлийн код болох хандалтын хяналт, өгөгдлийг авч үздэг.

Алхам 10: Хөтөлбөр

Хөтөлбөр
Хөтөлбөр

Манай програм нь илүү олон GPIO ашиглахын тулд ESP32 -ийг MCP23016 -тэй холбохоос бүрдэнэ. Дараа нь бидэнд товчлуур болон MCP23016 -тай холбогдсон зарим LED байх болно. Бид зөвхөн I2C автобусыг ашиглан бүгдийг хянах болно. Тиймээс зөвхөн хоёр ESP32 тээглүүрийг ашиглах болно. Та доорх зургийн хэлхээг видеоноос харж болно.

Алхам 11: ESP01

ESP01
ESP01

Энд би ESP01 -ийн Pinout -ийг харуулж байна.

Алхам 12: ESP01 -ийг суурилуулах

ESP01 холбох
ESP01 холбох

Энэ жишээнд бид GPIO0 -ийг SDA -д, GPIO2 -ийг SCL -д холбосон байна. Мөн бид буухиа самбар, дуугаралт, LED -тэй. Нөгөө порт дээр 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 холбох

Энэ тохиолдолд эхний жишээнээс ялгаа нь та D1 ба D2 -ийг SDA болон SCL -д тус тус холбосон явдал юм.

Алхам 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 холбох цэгMCU-32S ESP-WROOM-32

WiFi холбох цэгMCU-32S ESP-WROOM-32
WiFi холбох цэгMCU-32S ESP-WROOM-32

Энэ удаад бусад хоёр жишээнээс гол ялгаа нь товчлуур, анивчдаг гурван LED юм. Энд SDA нь GPIO19 -тэй холбогдсон бол SCL нь GPIO23 -тэй холбогдсон байна.

Алхам 17: Номын сан ба хувьсагчид

Нэгдүгээрт, i2c холболтыг хариуцдаг Wire.h, мөн MCP23016 -ийн i2c хаягийг тохируулах болно. Би хэд хэдэн тушаалуудыг харуулдаг, тэр ч байтугай бидний энэ төсөлд ашигладаггүй заримыг.

#include // Wire.h номын сангийн хэрэглээг зааж өгнө үү. // endereço I2C do MCP23016 #MCPAddress 0x20 -ийг тодорхойлно уу // ХАРИЛЦАА БҮРТГҮҮЛЭХИЙГ ТУШААРЛАХ ХҮСЭГ: Хүснэгт: Microchip MCP23016 - DS20090A 1-3 ПОРТЫН БҮРТГЭГЧ 1 #OLAT0 0x02 -ийг тодорхойлох // ОРОЛТЫН ТҮЦИЙН БҮРТГЭГЧ 0 #тодорхойлох OLAT1 0x03 // ОРОЛТЫН ТҮЦИЙН БҮРТГЭГЧ 1 #тодорхойлох IPOL0 0x04 // ОРОЛЦООХ ПОРТЫН ПОРТЫН БҮРТГЭЛ 0 #IPOL1 0x0AR ПОТОРЫН 1 оролтыг оруулна уу. /I/O ЧИГЛЭЛИЙН БҮРТГЭГЧ 0 #IODIR1 0x07 -ийг тодорхойлно // I/O ЧИГЛЭЛИЙН БҮРТГЭГЧ 1 #INTCAP0 -ийг тодорхойлно 0x08 // INTERRUPT CAPTURE регистр 0 БҮРТГҮҮЛЭХ 0 #тодорхойлох IOCON1 0x0B // I/O ТЭРГЭГЧИЙН ХЯНАЛТЫН БҮРТГЭГЧ 1

Алхам 18: Тохиргоо

Энд бид дөрвөн төрлийн микроконтроллерийг эхлүүлэх функцтэй. Бид мөн давтамжийг шалгаж, GPIO -г тохируулж, тээглүүрийг тохируулдаг. Loop дээр бид товчлуурын статусыг шалгадаг.

void setup () {Serial.begin (9600); саатал (1000); Утас.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // давтамж // тохиргоо o GPIO0 como OUTPUT (to os os pinos) configurePort (IODIR0, OUTPUT); // GPIO1 тохиргооны тохиргоо эсвэл GP1.0 эсвэл гарч ирэх GP1 configurePort (IODIR1, 0x01); // GPIO0 командыг LOW writeBlockData (GP0, B00000000) хийх; // GPIO1 -ийг LOW writeBlockData (GP1, B00000000) ашиглан хийх; } void loop () {// verifica e o botão GP foi pressionado checkButton (GP1); } // төгсгөлийн гогцоо

Алхам 19: Портыг тохируулна уу

Энэ алхамд бид GPIO тээглүүрийн горимыг тохируулж, портуудын горимыг тодорхойлдог.

// GPIO тохиргоо (GP0 эсвэл GP1) // комо параметрийн дамжуулалт: // порт: GP0 эсвэл GP1 // өөрчлөн: INPUT нь todos шиг портууд GP trabalharem como entrada хийдэг // ОРУУЛАХ нь портуудын адилаар 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, or restando como saida void configurePort (uint8_t порт, uint8_t custom) {if (custom == INPUT) {writeBlockData (порт, 0xFF); } else if (custom == OUTPUT) {writeBlockData (порт, 0x00); } өөр {writeBlockData (порт, өөрчлөн тохируулсан); }}

Алхам 20: WriteBlockData & CheckButton

Энд бид i2c автобусаар дамжуулж өгөгдлийг MCP23016 руу илгээж, товчлуурын статусыг шалгаж, дарагдсан эсвэл дарагдаагүй байдлыг харгалзан дараагийн алхамыг зааж өгнө.

// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (бүртгэгч) // өгөгдөл: dados (0-255) хүчингүй writeBlockData (uint8_t cmd, uint8_t өгөгдөл) {Wire.beginTransmission (MCPAddress); Утас. бичих (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); // дарна уу, хэрэв та GP0 -ийг порт гэж тодорхойлсон бол (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {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.beginTransmission (MCPA хаяг); Утас. бичих (gp); Wire.endTransmission (); Wire.requestFrom (MCPA хаяг, 1); // ler do chip 1 байтын statusGP = Wire.read (); буцах утгаFromPin (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 << зүү)) == 0? 0: 1; }

Алхам 22: ESP8266 програм

Эндээс бид ESP-01 болон nodeMCU ESP-12E дээр ашигласан програмыг хэрхэн бүтээсэн болохыг харах болно.

Бид зөвхөн Wire объектын эхлэл болох i2c холбооны бүтээгчийн шугамыг өөрчлөх болно.

Зүгээр л бидний эмхэтгэх гэж байгаа хавтангийн дагуу мөрийг тайлна уу.

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

Тохируулах

Барилгачныг тайлбарласан хэвээр байгааг анхаарна уу. Тиймээс, самбарынхаа дагуу саналаа бичнэ үү (ESP-01 эсвэл nodeMCU ESP12-E).

void setup () {Serial.begin (9600); саатал (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // давтамж // тохиргоо o GPIO0 como OUTPUT (to os os pinos) configurePort (IODIR0, OUTPUT); // GPIO1 como OUTPUT тохиргоо (to os os pinos) configurePort (IODIR1, OUTPUT); // GPIO0 командыг LOW writeBlockData (GP0, B00000000) хийх; // GPIO1 -ийг LOW writeBlockData (GP1, B00000001) ашиглан хийх; }

Гогцоо

Гогцоонд бид тээглүүрийг 1 секунд тутамд сольж өгдөг. Тиймээс, GP0 -ийн pin0 асаалттай үед GP1 -ийн зүү унтраасан байна. GP1 -ийн pin0 асаалттай үед GP0 зүү унтраасан байна.

void loop () {// set0 o pino 7 to GP0 como HIGH e os demais como LOW writeBlockData (GP0, B10000000); // GPIO1 -ийг LOW writeBlockData (GP1, B00000000) ашиглан хийх; саатал (1000); // GPIO0 командыг LOW writeBlockData (GP0, B00000000) хийх; // set1 o pino 0 to GP1 como HIGH e os demais como LOW writeBlockData (GP1, B00000001); саатал (1000); } // төгсгөлийн гогцоо

Алхам 23: ЧУХАЛ

Ашигласан хувьсагч ба номын сан нь бидний ESP32 -д хийсэн програмынхтай адил, configurePort болон writeBlockData аргуудын адил байна.

Алхам 24: Файлууд

Файлуудыг татаж авах:

PDF

INO (ESP8266)

INO (ESP32)

Зөвлөмж болгож буй: