Мазмұны:

ESP32, ESP8266 және Arduino үшін IO Expander: 24 қадам
ESP32, ESP8266 және Arduino үшін IO Expander: 24 қадам

Бейне: ESP32, ESP8266 және Arduino үшін IO Expander: 24 қадам

Бейне: ESP32, ESP8266 және Arduino үшін IO Expander: 24 қадам
Бейне: How to control Servo Motor using ESP32 with Arduino ESP32 Servo library 2024, Шілде
Anonim
Image
Image
Кіріспе
Кіріспе

ESP32, ESP8266 немесе Arduino интерфейсінің интерфейсін кеңейткіңіз келе ме? Сіз I2C шинасының көмегімен басқарылатын 16 жаңа GPIO мүмкіндіктері туралы ойладыңыз ба? Бүгін мен сізді MCP23016 GPIO кеңейткішімен таныстырамын. Сондай -ақ, мен сізге MCP23016 микроконтроллерімен қалай байланысу керектігін көрсетемін. Мен кеңейтушімен байланысу үшін осы микроконтроллердің тек 2 түйреуішін қолданатын бағдарлама құру туралы айтамын. Біз оларды жарықдиодты және түймені басқару үшін қолданамыз.

1 -қадам: Кіріспе

MCP23016 құрылғысы I2C шинасы арқылы GPIO кеңейту үшін 16 битті қамтамасыз етеді. Әрбір бит жеке конфигурациялануы мүмкін (кіріс немесе шығыс).

MCP23016 кіріс, шығыс және полярлықты таңдауға арналған бірнеше 8 биттік параметрлерден тұрады.

Кеңейткіштер басқа мысалдармен қатар коммутаторларға, сенсорларға, түймелерге және жарықдиодты жарықдиодтарға IO қажет болғанда қарапайым шешімді ұсынады.

2 -қадам: сипаттамасы

16 кіріс / шығыс түйреуіші (16 кіріс стандарты)

Жылдам I2C шинасының жиілігі (0-400 кбит/с)

Үш аппараттық адрестік түйреуіш сегіз құрылғыға дейін пайдалануға мүмкіндік береді

Порт түсіру жазғышын үзу

Полярлықты қалпына келтіру регистрі кіріс порты деректерінің полярлығын орнатуға арналған

Көптеген микроконтроллерлермен үйлесімді

3 -қадам: ESP01 128 GPIO болуы мүмкін

ESP01 128 GPIO болуы мүмкін!
ESP01 128 GPIO болуы мүмкін!

Бұл кеңейткіштің шамасын көрсететін мысал - оны ESP01 көмегімен қолдану, ол тек екі IOS көмегімен сегізге дейін кеңейтуге қосыла алады, 128 GPIO -ға жетеді.

4 -қадам: MCP23016

MCP23016
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)

Егер 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 - енгізу -шығаруды кеңейту бақылау тізілімі

Бұл MCP23016 функциясын басқарады.

0 биттік биіктігі (IARES> Әрекетті үзу ажыратымдылығы) GP порты түйреуіштерінің іріктеу жиілігін бақылайды.

Bit0 = 0> (әдепкі) Порт белсенділігін анықтаудың максималды уақыты-32 мс (қуатты аз тұтыну)

Bit0 = 1> порттағы белсенділікті анықтаудың максималды уақыты-200usec (жоғары энергия шығыны)

9 -қадам: Байланыс құрылымы

Байланыс құрылымы
Байланыс құрылымы

Мен мұнда Wire класын көрсетемін, бұл біздің негізгі Arduino -дағы I2C байланысы, бұл кеңейтушіге Arduino Uno және Mega -мен жұмыс істеуге мүмкіндік береді. Дегенмен, соңғысында қазірдің өзінде бірнеше ИО бар. Біз мұнда чиптің адрестерімен, регистрлердің кодтары болып табылатын қатынауды басқару, сондай -ақ мәліметтермен айналысамыз.

10 -қадам: Бағдарлама

Бағдарлама
Бағдарлама

Біздің бағдарлама ESP32 -ді MCP23016 -мен байланыстырудан тұрады, ол үшін GPIO -ны көбірек пайдалану керек. Содан кейін бізде түйме және MCP23016 қосылған бірнеше жарық диодтары болады. Біз олардың барлығын тек I2C шинасы арқылы басқаратын боламыз. Осылайша, тек екі ESP32 түйреуіші қолданылады. Сіз төмендегі бейне схемасын көре аласыз.

11 -қадам: ESP01

ESP01
ESP01

Мұнда мен ESP01 түйінін көрсетемін.

12 -қадам: ESP01 орнату

ESP01 монтаждау
ESP01 монтаждау

Бұл мысалда бізде SDA -да GPIO0 қосылған, ал SCIO -да GPIO2 қосылған. Бізде реле тақтасы, дыбыстық сигнал және жарық диоды бар. Басқа портта, GP1.0 -де бізде резисторы бар тағы бір жарық диоды бар.

13-қадам: NodeMCU ESP-12E

NodeMCU ESP-12E
NodeMCU ESP-12E

Мұнда бізде NodeMCU ESP-12E түйіні бар.

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 түйреуіші.

16-қадам: WiFi орнату NodeMCU-32S ESP-WROOM-32

WiFi орнату түйініMCU-32S ESP-WROOM-32
WiFi орнату түйініMCU-32S ESP-WROOM-32

Бұл жолы басқа екі мысалдан басты айырмашылығы - түйме мен үш жыпылықтайтын диод. Мұнда 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 анықтаңыз // OUTPUT LATCH REGISTER 0 #deatine OLAT1 0x03 // OUTPUT LATCH REHISTER 1 #define IPOL0 0x04 // INPUT POLARITY PORT REHISTER 0 #IPOL1 0x0AR PIR 0 INPUTE INPUTE /I/O БАҒЫТ ТІРКЕУІ 0 #анықтау IODIR1 0x07 // I/O БАҒЫТТАМА ТІРКЕУШІ 1 #INTCAP0 0x08 интерьерін тіркеу 0 #анықтау INTCAP1 0x09 // үзіліс CAPTURE ТІРКЕЛУШІ 0 ТІРКЕУ 0 #анықтау IOCON1 0x0B // I/O кеңейту бақылауы ТІРКЕУШІ 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 pinos) configurePort (IODIR0, OUTPUT); // конфигурация GPIO1 комо INPUT o GP1.0 e out como OUTPUT os outros GP1 configurePort (IODIR1, 0x01); // LIO writeBlockData (GP0, B00000000) GPIO0 -мен байланыс орнатады; // GPIO1 арқылы LOW writeBlockData (GP1, B00000000) орнатылады; } void loop () {// verifica e o botão GP for pressionado checkButton (GP1); } // соңғы цикл

19 -қадам: Портты конфигурациялаңыз

Бұл қадамда біз GPIO түйреуіштерінің режимін конфигурациялаймыз және порттардың режимін анықтаймыз.

// GPIO конфигурациясы (GP0 немесе GP1) // комо параметрлері: // порт: GP0 немесе GP1 // реттелетін: INPUT парақтары GP -тің порттары сияқты // OUTPUT -тың порттары GP -тің порттары сияқты, сонымен қатар GP -ді қосады/ / 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 custom) {if (custom == INPUT) {writeBlockData (порт, 0xFF); } else if (custom == OUTPUT) {writeBlockData (порт, 0x00); } else {writeBlockData (порт, реттелетін); }}

20 -қадам: WriteBlockData & CheckButton

Мұнда біз деректерді i2c шинасы арқылы MCP23016 -ға жібереміз, түйменің күйін тексереміз және басу немесе баспау шартын ескере отырып келесі қадамды көрсетеміз.

// envia dados para mCP23016 através to barramento i2c // cmd: COMANDO (registrador) // деректер: dados (0-255) жарамсыз writeBlockData (uint8_t cmd, uint8_t деректер) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (деректер); Wire.endTransmission (); кешіктіру (10); }

// GPU параметрі: GP0 немесе GP1 жарамсыздығын тексеру CheckButton (uint8_t GP) {// фаза мен ойын 0 жоқ GP fornecido uint8_t btn = readPin (0, GP); // GP0, егер (btn) {writeBlockData (GP0, B11111111) порттары ретінде HIGH параметрін орнатыңыз; } // LOW else {writeBlockData (GP0, B00000000); }}

21 -қадам: ReadPin & ValueFromPin

Біз мұнда белгілі бір түйреуішті оқумен және бит мәнін қажетті орынға қайтарумен айналысамыз.

// pin a: pino desejado (0-7) // gp: GP0 ou GP1 // retorno: 0 немесе 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); // lip do chip 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-де қолданған бағдарламаның қалай жасалғанын көреміз, бұл олардың арасындағы айырмашылықтардың қаншалықты аз екенін түсінуге мүмкіндік береді.

Біз тек 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 pinos) configurePort (IODIR0, OUTPUT); // GPIO1 арқылы OUTPUT конфигурациясы (to os os pinos) configurePort (IODIR1, OUTPUT); // LIO writeBlockData (GP0, B00000000) GPIO0 -мен байланыс орнатады; // GPIO1 арқылы LOW writeBlockData (GP1, B00000001) орнатуға болады; }

Цикл

Ілмекте біз түйреуіштерді әр 1 секунд сайын ауыстырып отырамыз. Осылайша, GP0 pin0 қосулы кезде, GP1 түйреуіштері сөнеді. GP1 pin0 қосулы кезде, GP0 түйреуіштері өшірулі болады.

void loop () {// set up o pino 7 to GP0 como HIGH ЖОҚ демек, LOW writeBlockData (GP0, B10000000); // GPIO1 арқылы LOW writeBlockData (GP1, B00000000) орнатылады; кешіктіру (1000); // LIO writeBlockData (GP0, B00000000) GPIO0 -мен байланыс орнатады; // сценарий 0 -ден GP1 -ге дейін жоғары және жоғары LOW writeBlockData (GP1, B00000001); кешіктіру (1000); } // соңғы цикл

23 -қадам: МАҢЫЗДЫ

Қолданылатын айнымалылар мен кітапхана біз ESP32 үшін жасаған бағдарламамен, сондай -ақ configurePort және writeBlockData әдістерімен бірдей.

24 -қадам: файлдар

Файлдарды жүктеңіз:

PDF

INO (ESP8266)

INO (ESP32)

Ұсынылған: