Мазмұны:
- 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 орнату NodeMCU-32S ESP-WROOM-32
- 17 -қадам: Кітапханалар мен айнымалылар
- 18 -қадам: Орнату
- 19 -қадам: Портты конфигурациялаңыз
- 20 -қадам: WriteBlockData & CheckButton
- 21 -қадам: ReadPin & ValueFromPin
- 22 -қадам: ESP8266 бағдарламасы
- 23 -қадам: МАҢЫЗДЫ
- 24 -қадам: файлдар
Бейне: ESP32, ESP8266 және Arduino үшін IO Expander: 24 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
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 көмегімен қолдану, ол тек екі 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)
Егер 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 түйінін көрсетемін.
12 -қадам: ESP01 орнату
Бұл мысалда бізде SDA -да GPIO0 қосылған, ал SCIO -да GPIO2 қосылған. Бізде реле тақтасы, дыбыстық сигнал және жарық диоды бар. Басқа портта, GP1.0 -де бізде резисторы бар тағы бір жарық диоды бар.
13-қадам: NodeMCU ESP-12E
Мұнда бізде NodeMCU ESP-12E түйіні бар.
14-қадам: NodeMCU ESP-12E орнату
Бұл жағдайда бірінші мысалдан айырмашылығы - сіз сәйкесінше SDA мен SCL -де D1 мен D2 байланыстырдыңыз.
15-қадам: WiFi NodeMCU-32S ESP-WROOM-32
Міне, WiFi NodeMCU-32S ESP-WROOM-32 түйреуіші.
16-қадам: WiFi орнату NodeMCU-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 -қадам: файлдар
Файлдарды жүктеңіз:
INO (ESP8266)
INO (ESP32)
Ұсынылған:
ESP8266 және ESP32 үшін Python -ды бастау: 6 қадам
ESP8266 және ESP32 үшін Python-ды бастау: Bacground ESP8266 және оның үлкен ағасы ESP32-бұл толық TCP/IP стегі мен микроконтроллер мүмкіндігі бар Wi-Fi микрочиптері. ESP8266 чипі өндірушілер қауымдастығының назарына алғаш рет 2014 жылы келді. Содан бері төмен баға (
MicroPython арзан 3 долларлық ESP8266 WeMos D1 Mini үшін 2x температураны тіркеу, Wi -Fi және мобильді статистика: 4 қадам
MicroPython арзан 3 долларлық ESP8266 WeMos D1 Mini үшін 2x температураны тіркеу, Wi -Fi және мобильді статистика: Кішкене арзан ESP8266 чипі / құрылғысымен сіз температура деректерін сыртта, бөлмеде, жылыжайда, зертханада, салқындату бөлмесінде немесе кез келген басқа жерде тегін тіркей аласыз. Бұл мысалды біз бөлмедегі температураны ішкі және сыртқы салқындату үшін қолданамыз
ESP8266 NodeMCU кіру нүктесі (AP) DT11 температура сенсоры бар веб -сервер үшін және шолуда температура мен ылғалдылықты басып шығару: 5 қадам
Браузерде DT11 температура сенсоры мен баспа температурасы мен ылғалдылығы бар веб -серверге арналған ESP8266 NodeMCU кіру нүктесі (AP): Сәлеметсіздер ме, біз ESP8266 пайдаланатын жобалардың көпшілігінде және жобалардың көпшілігінде біз ESP8266 -ды веб -сервер ретінде қолданамыз, осылайша деректерге қол жеткізуге болады. ESP8266 орналастырған веб -серверге кіру арқылы Wi -Fi арқылы кез келген құрылғы, бірақ жалғыз мәселе - бізге жұмыс маршрутизаторы қажет
Тұрақты және DHCP IP параметрлерін конфигурациялау үшін ESP32 Captive Portal: 8 қадам
Тұрақты және DHCP IP параметрлерін конфигурациялау үшін ESP32 Captive Portal: ESP 32 - бұл кіріктірілген WiFi және BLE бар құрылғы. Бұл IoT жобалары үшін жақсы нәрсе. Тек SSID, пароль мен IP конфигурациясын беріңіз және заттарды бұлтқа біріктіріңіз. Бірақ IP параметрлері мен пайдаланушының тіркелгі деректерін басқару басты болуы мүмкін
Arduino - Servo және MPU6050 Gyro көмегімен GoPro үшін ролл мен қадам осі Гимбал: 4 қадам
GoPro үшін Arduino - Servo және MPU6050 Gyro пайдаланатын Roll and Pitch Axis Gimbal: Бұл нұсқаулық Оңтүстік Флорида университетінің Makecourse жобасының талаптарын орындау үшін жасалған (www.makecourse.com) Бұл жобаның мақсаты - GoPro үшін 3 осьтік Gimbal Arduino нано + 3 серво қозғалтқыштарын қолдану арқылы