Мазмуну:
- 1 -кадам: Киришүү
- 2 -кадам: мүнөздөмөсү
- 3 -кадам: ESP01де 128 GPIO болушу мүмкүн
- 4 -кадам: MCP23016
- 5 -кадам: СААТ
- 6 -кадам: Дарек
- 7 -кадам: Буйруктар
- 8 -кадам: Категориялар:
- 9 -кадам: Байланыш структурасы
- 10 -кадам: Программа
- 11 -кадам: ESP01
- 12 -кадам: ESP01 монтаждоо
- 13-кадам: NodeMCU ESP-12E
- 14-кадам: NodeMCU ESP-12E монтаждоо
- 15-кадам: WiFi NodeMCU-32S ESP-WROOM-32
- 16-кадам: WiFi орнотуу түйүнүMCU-32S ESP-WROOM-32
- 17 -кадам: Китепканалар жана өзгөрмөлөр
- 18 -кадам: Орнотуу
- 19 -кадам: ConfigurePort
- 20 -кадам: WriteBlockData & CheckButton
- 21 -кадам: ReadPin & ValueFromPin
- 22 -кадам: ESP8266 программасы
- 23 -кадам: МААНИЛҮҮ
- 24 -кадам: Файлдар
Video: ESP32, ESP8266 жана Arduino үчүн IO Expander: 24 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
ESP32, ESP8266 же Arduino IOдорун кеңейтүүнү каалайсызбы? Сиз I2C автобусун колдонуп башкарыла турган 16 жаңы GPIO мүмкүнчүлүгү жөнүндө ойлондуңуз беле? Бүгүн мен сени GPIO кеңейтүүчү MCP23016 менен тааныштырганы жатам. Ошондой эле, мен сизге MCP23016 менен микроконтроллерди кантип байланыштырууну көрсөтөм. Мен ошондой эле кеңейтүүчү менен баарлашуу үчүн бул микроконтроллердин 2 төөнөгүчүн колдоно турган программа түзүү жөнүндө сүйлөшөм. Биз муну LED жана баскычты башкаруу үчүн колдонобуз.
1 -кадам: Киришүү
MCP23016 түзмөгү I2C шинасын колдонуу менен GPIO кеңейтүү үчүн 16 битти камсыздайт. Ар бир битти жекече конфигурациялоого болот (киргизүү же чыгаруу).
MCP23016 киргизүү, чыгаруу жана полярдыкты тандоо үчүн бир нече 8-биттик орнотуулардан турат.
Экспантерлер башка мисалдардын арасында IOs өчүргүчтөргө, сенсорлорго, баскычтарга жана Светодиоддорго керек болгондо жөнөкөй чечимди камсыз кылат.
2 -кадам: мүнөздөмөсү
16 киргизүү / чыгаруу казыктары (16 киргизүү стандарты)
Тез I2C автобус саатынын жыштыгы (0-400 кбит/с)
Үч аппараттык дарек казыгы сегиз түзмөккө чейин колдонууга мүмкүндүк берет
Port Capture Recorder үзгүлтүккө учуратуу
Полярдыкты өзгөртүү портунун маалыматтарынын полярдуулугун орнотуу үчүн реестр
Көпчүлүк микроконтроллерлерге шайкеш келет
3 -кадам: ESP01де 128 GPIO болушу мүмкүн
Бул экспансердин чоңдугун көрсөткөн мисал, анын ESP01 менен колдонулушу, ал экиден IOS менен сегизге чейин кеңейтилип, 128 GPIOго жетет.
4 -кадам: MCP23016
Бул жерде бизде сегиз биттен турган эки топ бар экспансердин схемасы бар. Бул жалпысынан 16 портту түзөт. Үзгүлтүк пинден тышкары, анын ичинде логикалык портко туташкан конденсатор менен резисторду байланыштырган CLK пини бар. Бул 1МГц саатка муктаж болгон кристалл осцилляторунун идеясын колдонуу менен саатты түзүү. TP пин саатты өлчөө үчүн колдонулат. A0, A1 жана A2 казыктары бинардык даректер.
5 -кадам: СААТ
MCP23016 Ошондуктан ички Сааттын ылдамдыгын аныктоо үчүн тышкы RC схемасын колдонот. Түзмөктүн туура иштеши үчүн 1 МГц ички саат талап кылынат (көбүнчө). Ички саатты TP пининде өлчөөгө болот. REXT жана CEXT үчүн сунушталган баалуулуктар төмөндө көрсөтүлгөн.
6 -кадам: Дарек
MCP23016 дарегин аныктоо үчүн биз A0, A1 жана A2 төөнөгүчтөрүн колдонобуз. Даректи өзгөртүү үчүн аларды ЖОГОРУ же ТӨМӨН калтырыңыз.
Дарек төмөнкүчө түзүлөт:
MCP_Address = 20 + (A0 A1 A2)
А0 А1 А2 ЖОГОРУ / ТӨМӨН маанилерди кабыл ала турган жерде, бул 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 - Input Polarity Registers
Бул регистрлер колдонуучуга кирүү портунун маалыматтарынын полярлыгын конфигурациялоого мүмкүндүк берет (GP0 жана GP1).
IODIR0 / IODIR1
Пин режимин көзөмөлдөгөн эки регистр бар. (Киргизүү же чыгаруу)
Bit = 1> INPUT Bit = 0> OUTPUT
INTCAP0 / INTCAP1 - Үзгүлтүксүз жазуу реестрлери
Бул үзгүлтүктү жараткан порттун маанисин камтыган регистрлер.
IOCON0 / IOCON1 - I / O Expander Control реестри
Бул MCP23016нын иштешин көзөмөлдөйт.
0 битин коюу (IARES> Аракетти үзгүлтүккө учуратуу) GP порту казыктарынын тандоо ылдамдыгын көзөмөлдөйт.
Bit0 = 0> (демейки) Максималдуу порт ишин аныктоо убактысы 32ms (аз энергия керектөө)
Bit0 = 1> портко активдүүлүктү аныктоо убактысы 200usec (жогорку энергия керектөө)
9 -кадам: Байланыш структурасы
Мен бул жерде Wire классын көрсөтөм, бул биздин негизги Arduinoдогу I2C байланышы, бул экспантерге Arduino Uno жана Mega менен иштөөгө мүмкүнчүлүк берет. Бирок, экинчисинде буга чейин бир нече IO бар. Биз бул жерде чиптин даректери, регистрлердин коддору болгон кирүүнү башкаруу, ошондой эле маалыматтар менен алектенебиз.
10 -кадам: Программа
Биздин программа ESP32 менен MCP23016 менен байланышып, көбүрөөк GPIO колдонушу керек. Андан кийин бизде баскыч жана MCP23016га туташкан кээ бир светодиоддор болот. Биз алардын бардыгын I2C автобусу менен гана көзөмөлдөйбүз. Ошентип, эки гана ESP32 төөнөгүч колдонулат. Төмөндөгү видеонун схемасын көрө аласыз.
11 -кадам: ESP01
Бул жерде мен ESP01 Pinout көрсөтөм.
12 -кадам: ESP01 монтаждоо
Бул мисалда бизде GPIO0 SDAга, GPIO2 SCLге туташкан. Ошондой эле бизде релелик такта, ызылдак жана светодиод бар. Башка портто, GP1.0де бизде резистору бар дагы бир LED бар.
13-кадам: NodeMCU ESP-12E
Бул жерде бизде NodeMCU ESP-12E Pinout бар.
14-кадам: NodeMCU ESP-12E монтаждоо
Бул учурда, биринчи мисалдан бир гана айырмасы, сиз SDA менен SCLде D1 жана D2ди туташтырдыңыз.
15-кадам: WiFi NodeMCU-32S ESP-WROOM-32
Бул жерде WiFi NodeMCU-32S ESP-WROOM-32 түйүнү.
16-кадам: 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 // БАЙЛАНЫШТЫ КАТТОО ҮЧҮН БУЙРУТ: Таблица: 1-3 Microchip MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // DATA PORT REGINER1 0 0de ПОРТ КАТТООЧУ 1 #OLAT0 аныктоо 0x02 // ЧЫГАРЫЛЫШ КЫЛЫШ КАТТООЧУ 0 #аныктоо OLAT1 0x03 // ЧЫГАРЫЛУУЛУК КЫРГЫЗ КАТТООЧУ 1 #define IPOL0 0x04 // КИРГИЗҮҮЧҮ ПОРТТУК ПОРТ КАТТОО 0 #аныктоо IPOL1 0x05 PIR0PEPE01 INPUTE /I/O БАГЫТ КАТТООЧУ 0 #аныктоо IODIR1 0x07 // I/O БАГЫТ КАТТООЧУ 1 #интерфейс INTCAP0 0x08 // үзгүлтүксүз тартуу каттоосу 0 #аныктоо INTCAP1 0x09 // үзгүлтүксүз катталуу 0 катталуучу 0 REGISTER 0 #define IOCON1 0x0B // I/O EXPANDER CONTROL REGISTER 1
18 -кадам: Орнотуу
Бул жерде бизде төрт түрдүү микроконтроллерди баштоо функциялары бар. Биз ошондой эле жыштыкты текшеребиз, GPIO орнотобуз жана казыктарды орнотобуз. Циклда биз баскычтын абалын текшеребиз.
void setup () {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); // жыштык // конфигурация GPIO0 аркылуу OUTPUT (toos os os pinos) configurePort (IODIR0, OUTPUT); // GPIO1 конфигурациясы INPUT же GP1.0 жана OUTPUT os outros GP1 configurePort (IODIR1, 0x01); // GPIO0 аркылуу LOW writeBlockData (GP0, B00000000) жасоо керек; // GPIO1 аркылуу LOW writeBlockData (GP1, B00000000) жасоо керек; } void loop () {// verifica e o botão GP for pressionado checkButton (GP1); } // аяктоочу цикл
19 -кадам: ConfigurePort
Бул кадамда биз GPIO пиндеринин режимин конфигурациялайбыз жана порттордун режимин аныктайбыз.
// GPIO конфигурациясы (GP0 ou GP1) // комо параметрлери: // порт: GP0 же GP1 // салт: INPUT үчүн todos port to do GP trabalharem como entrada // OUTPUT үчүн todos port to do GP trabalharem como saida/ / custom um valor de 0-255 indicando o modo das portas (1 = INPUT, 0 = OUTPUT) // ex: 0x01 or B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, or restando como saida void configurePort (uint8_t порт, uint8_t салт) {if (custom == INPUT) {writeBlockData (порт, 0xFF); } else if (custom == OUTPUT) {writeBlockData (порт, 0x00); } else {writeBlockData (порт, салт); }}
20 -кадам: WriteBlockData & CheckButton
Бул жерде, биз i2c автобус аркылуу MCP23016га маалыматтарды жөнөтөбүз, баскычтын абалын текшеребиз жана басуу же баспоо шартын эске алуу менен кийинки кадамды көрсөтөбүз.
// envia dados para mCP23016 através do barramento i2c // cmd: COMANDO (регистратор) // маалыматтар: dados (0-255) жараксыз WriteBlockData (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 or GP1 void checkButton (uint8_t GP) {// faz a leitura do pino 0 no GP fornecido uint8_t btn = readPin (0, GP); // баскычтарды басуу, GP0 катары ЖОГОРУ орнотуу GP0 if (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 o 1 uint8_t readPin (uint8_t pin, uint8_t gp) {uint8_t statusGP = 0; Wire.beginTransmission (MCPA дареги); Wire.write (gp); Wire.endTransmission (); Wire.requestFrom (MCPA дареги, 1); // чип 1 байт statusGP = Wire.read (); return valueFromPin (пин, statusGP); } // retorna o valor do bit na posição desejada // pin: positsã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); // жыштык // конфигурация GPIO0 аркылуу OUTPUT (toos os os pinos) configurePort (IODIR0, OUTPUT); // конфигурация GPIO1 аркылуу OUTPUT (toos os os pinos) configurePort (IODIR1, OUTPUT); // GPIO0 аркылуу LOW writeBlockData (GP0, B00000000) жасоо керек; // GPIO1 аркылуу LOW writeBlockData (GP1, B00000001) жасоо керек; }
Loop
Укурукта биз пиндерди ар бир 1 секундда алмаштырабыз. Ошентип, GP0 pin0 күйүп турганда, GP1 пиндери өчүрүлөт. GP1дин pin0 күйгүзүлгөндө, GP0 пиндери өчүрүлөт.
void loop () {// set 7 pno do GP0 como HIGH ЖАНА DOW writeBlockData (GP0, B10000000); // GPIO1 аркылуу LOW writeBlockData (GP1, B00000000) жасоо керек; кечигүү (1000); // GPIO0 аркылуу LOW writeBlockData (GP0, B00000000) жасоо керек; // GP1 комо ЖОГОРКУ ЖОК ЭМЕС, LOW writeBlockData (GP1, B00000001); кечигүү (1000); } // аяктоочу цикл
23 -кадам: МААНИЛҮҮ
Колдонулган өзгөрмөлөр жана китепкана биз ESP32 үчүн жасаган программанын, ошондой эле configurePort жана writeBlockData методдору менен бирдей.
24 -кадам: Файлдар
Файлдарды жүктөп алыңыз:
INO (ESP8266)
INO (ESP32)
Сунушталууда:
DIY PC рулу жана педалдары картондон! Жарыш симуляторлору жана оюндары үчүн (Пикир, Калакты которгучтар, Дисплей): 9 кадам
DIY PC рулу жана педалдары картондон! Жарыш симуляторлору жана оюндары үчүн (Пикир, Калакты которгучтар, Дисплей): Эй баары! Бул кызыксыз мезгилде, биз баарыбыз эмне кылаарыбызды издеп айланып жүрөбүз. Чыныгы жашоодо жарышуу иш -чаралары жокко чыгарылып, алардын ордуна симуляторлор коюлду. Мен кемчиликсиз иштеген арзан тренажерду курууну чечтим
Иштетүү жана Arduino туташтыруу жана 7 сегментти жана GERI интервалы контролерин жасоо: 4 кадам
Processing and Arduino менен Make 7 Segment and Servo GUI Controller туташтыруу: Кээ бир долбоорлор үчүн сиз Arduino программасын колдонушуңуз керек, анткени ал прототиптөөнүн оңой платформасын камсыз кылат, бирок графиканы Arduino сериялык мониторунда көрсөтүү абдан узакка созулушу мүмкүн, ал тургай аткаруу кыйын. Сиз графикти Arduino Serial Monitorдо көрсөтө аласыз
Көрүү мүмкүнчүлүгү чектелген адамдар үчүн Arduino жана 3D басып чыгаруу үчүн жакшыртылган автобус тажрыйбасы: 7 кадам
Көрүү мүмкүнчүлүгү чектелген адамдар үчүн жакшыртылган автобус тажрыйбасы Arduino жана 3D басып чыгаруу: Көрүүсү начар адамдар үчүн коомдук транспортту кантип жөнөкөйлөтсө болот? көрүүсү начар адамдар. Т
Ultrasonic сенсорлор үчүн 3.3V Mod (ESP32/ESP8266 боюнча 3.3V логика үчүн HC-SR04 даярдоо, бөлүкчө Photon, ж.б.): 4 кадам
3.3V Ultrasonic Sensors үчүн Mod (ESP32/ESP8266 боюнча 3.3V Logic үчүн HC-SR04 даярдаңыз, Particle Photon, Etc.): TL; DR: Сенсордо Эхо пинге изин кесип, андан кийин аны кайра туташтырыңыз. чыңалуу бөлүштүргүч (Echo trace -> 2.7kΩ -> Echo pin -> 4.7kΩ -> GND). Түзөтүү: ESP8266 чындыгында GPIOдо 5V чыдамдуубу же жокпу деген талаштар болгон
Температура жана нымдуулукту көрсөтүү жана маалыматтарды чогултуу Arduino жана иштетүү менен: 13 кадам (сүрөттөр менен)
Температура жана нымдуулукту көрсөтүү жана маалыматтарды чогултуу Arduino жана иштетүү менен: Киришүү: Бул Ардуино тактасын, Sensor (DHT11), Windows компьютери жана Processing (бекер жүктөлүүчү) программасын колдонуп, Температураны, Нымдуулукту санариптик жана тилке графасынын формасы, убакытты жана күндү көрсөтүү жана эсептөө убактысын иштетүү