Mundarija:
- 1 -qadam: kirish
- 2 -qadam: Xususiyatlar
- 3 -qadam: ESP01 128 ta GPIOga ega bo'lishi mumkin
- 4 -qadam: MCP23016
- 5 -qadam: soat
- 6 -qadam: Manzil
- 7 -qadam: Buyruqlar
- 8 -qadam: toifalar:
- 9 -qadam: Aloqa tuzilishi
- 10 -qadam: Dastur
- 11 -qadam: ESP01
- 12 -qadam: ESP01 -ni o'rnatish
- 13-qadam: NodeMCU ESP-12E
- 14-qadam: NodeMCU ESP-12E ni o'rnatish
- 15-qadam: WiFi NodeMCU-32S ESP-WROOM-32
- 16-qadam: Wi-Fi-ni o'rnatish tuguniMCU-32S ESP-WROOM-32
- 17 -qadam: Kutubxonalar va o'zgaruvchilar
- 18 -qadam: sozlash
- 19 -qadam: Portni sozlash
- 20 -qadam: WriteBlockData va CheckButton
- 21 -qadam: ReadPin va ValueFromPin
- 22 -qadam: ESP8266 dasturi
- 23 -qadam: MUHIM
- 24 -qadam: fayllar
Video: ESP32, ESP8266 va Arduino uchun IO Expander: 24 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
ESP32, ESP8266 yoki Arduino -ning IO -larini kengaytirmoqchimisiz? Siz I2C avtobusi yordamida boshqariladigan 16 ta yangi GPIO imkoniyatlari haqida o'ylab ko'rganmisiz? Bugun men sizni GPIO kengaytiruvchisi MCP23016 bilan tanishtirmoqchiman. Shuningdek, men sizga MCP23016 bilan mikrokontroller bilan qanday bog'lanishni ko'rsataman. Men, shuningdek, kengaytiruvchi bilan bog'lanish uchun ushbu mikrokontrolderning 2 ta pinidan foydalanadigan dastur yaratish haqida gaplashaman. Biz ularni LED va tugmani boshqarish uchun ishlatamiz.
1 -qadam: kirish
MCP23016 qurilmasi I2C avtobusi yordamida GPIO kengayishi uchun 16 bitni ta'minlaydi. Har bir bitni alohida sozlash mumkin (kirish yoki chiqish).
MCP23016 kirish, chiqish va kutupluluğu tanlash uchun bir nechta 8 bitli sozlamalardan iborat.
Kengaytirgichlar, boshqa misollar qatorida, kalitlarga, datchiklarga, tugmachalarga va LEDlarga IO kerak bo'lganda oddiy echimni taklif qiladi.
2 -qadam: Xususiyatlar
16 ta kirish / chiqish pimi (16 ta kirish standarti)
Tez I2C avtobus soat chastotasi (0-400 kbit/s)
Uchta apparat manzil pinlari sakkiztagacha qurilmadan foydalanishga imkon beradi
Portni yozib oluvchi uzilish
Kirish porti ma'lumotlarining qutblanishini sozlash uchun qutbni qaytaruvchi registr
Ko'p mikrokontroller bilan mos keladi
3 -qadam: ESP01 128 ta GPIOga ega bo'lishi mumkin
Bu kengaytirgichning kattaligini ko'rsatadigan misol - bu ESP01 -dan foydalanish, u sakkiztagacha kengaytirgichga faqat ikkita IOS bilan ulanishi mumkin, bu esa 128 GPIOga etadi.
4 -qadam: MCP23016
Bu erda biz sakkiz bitli ikkita guruhga ega bo'lgan kengaytirgichning sxemasiga egamiz. Bu jami 16 ta portga to'g'ri keladi. O'chirish pinidan tashqari, u mantiqiy portga ichki ulangan kondansatör va rezistorni bog'laydigan CLK piniga ega. Bu 1MGts soatga muhtoj bo'lgan kristalli osilator g'oyasidan foydalanib, soatni yaratishdir. TP -pin soatni o'lchash uchun ishlatiladi. A0, A1 va A2 pinlari ikkilik manzillardir.
5 -qadam: soat
Shuning uchun MCP23016 ichki Soat tezligini aniqlash uchun tashqi RC sxemasidan foydalanadi. Qurilmaning to'g'ri ishlashi uchun 1 MGts chastotali ichki soat talab qilinadi. Ichki soatni TP pinida o'lchash mumkin. REXT va CEXT uchun tavsiya etilgan qiymatlar quyida ko'rsatilgan.
6 -qadam: Manzil
MCP23016 manzilini aniqlash uchun biz A0, A1 va A2 pinlaridan foydalanamiz. Manzil o'zgarishi uchun ularni "YUQORI" yoki "LOW" da qoldiring.
Manzil quyidagicha shakllantiriladi:
MCP_Address = 20 + (A0 A1 A2)
Qaerda A0 A1 A2 HIGH / LOW qiymatlarini olishi mumkin, bu 0 dan 7 gacha bo'lgan ikkilik raqamni hosil qiladi.
Masalan:
A0> GND, A1> GND, A2> GND (000 degan ma'noni anglatadi, keyin 20 + 0 = 20)
Yoki yana, A0> YUQORI, A1> GND, A2> YUQORI (ma'nosi 101, keyin 20 + 5 = 25)
7 -qadam: Buyruqlar
Quyida aloqa uchun buyruqlar berilgan jadval mavjud. Keling, GP0 va GP1, shuningdek IODIR0 va IODIR1 dan foydalanaylik.
8 -qadam: toifalar:
GP0 / GP1 - Ma'lumot portlari registrlari
Ikkita GPIO portiga kirishni ta'minlaydigan ikkita registr mavjud.
Ro'yxatdan o'tish kitobi portdagi pinlarning holatini ko'rsatadi.
Bit = 1> HIGH Bit = 0> LOW
OLAT0 / OLAT1 - LACTCH Ro'yxatga oluvchilarini chiqarish
Ikkala portning chiqish portlariga kirishni ta'minlaydigan ikkita registr mavjud.
IPOL0 / IPOL1 - kirish qutblanish registrlari
Bu registrlar foydalanuvchiga kirish porti ma'lumotlarining qutblanishini sozlash imkonini beradi (GP0 va GP1).
IODIR0 / IODIR1
Pin rejimini boshqaruvchi ikkita registr mavjud. (Kirish yoki chiqish)
Bit = 1> INPUT Bit = 0> Chiqish
INTCAP0 / INTCAP1 - Ro'yxatga olishning uzilishlari
Bu uzilishni yaratgan port qiymatini o'z ichiga olgan registrlar.
IOCON0 / IOCON1 - kirish -chiqish kengaytirgichlarini nazorat qilish reestri
Bu MCP23016 funksiyasini nazorat qiladi.
0 -bitni sozlash (IARES> Faoliyatni uzish) GP port pinlarining namuna olish chastotasini nazorat qiladi.
Bit0 = 0> (standart) Maksimal port faolligini aniqlash vaqti-32 ms (kam quvvat sarfi)
Bit0 = 1> portdagi faollikni aniqlashning maksimal vaqti-200 us. (Yuqori quvvat sarfi)
9 -qadam: Aloqa tuzilishi
Men bu erda Wire sinfini ko'rsataman, bu bizning asosiy Arduino -dagi I2C aloqasi, bu ham kengaytiruvchiga Arduino Uno va Mega bilan ishlashga imkon beradi. Biroq, ikkinchisida allaqachon bir nechta IO mavjud. Biz bu erda chiplarning manzillari, registrlarning kodlari bo'lgan kirishni boshqarish, shuningdek ma'lumotlar bilan shug'ullanamiz.
10 -qadam: Dastur
Bizning dasturimiz ESP32 -ni MCP23016 bilan ko'proq GPIO -larga ega bo'lishdan iborat. Keyin bizda tugma va MCP23016 ga ulangan ba'zi LEDlar bo'ladi. Biz ularning barchasini faqat I2C avtobusi yordamida boshqaramiz. Shunday qilib, faqat ikkita ESP32 pin ishlatiladi. Videoda quyidagi rasm chizig'ini ko'rishingiz mumkin.
11 -qadam: ESP01
Bu erda men ESP01 pinoutini ko'rsataman.
12 -qadam: ESP01 -ni o'rnatish
Bu misolda bizda SDA -ga GPIO0, SCL -ga GPIO2 ulangan. Shuningdek, bizda o'rni taxtasi, ovozli signal va LED mavjud. Boshqa portda, GP1.0 -da, bizda rezistorli yana bitta LED bor.
13-qadam: NodeMCU ESP-12E
Bu erda bizda NodeMCU ESP-12E pinout bor.
14-qadam: NodeMCU ESP-12E ni o'rnatish
Bunday holda, birinchi misoldan farqi shundaki, siz D1 va D2 ni mos ravishda SDA va SCL -ga uladingiz.
15-qadam: WiFi NodeMCU-32S ESP-WROOM-32
Bu erda Wi-Fi NodeMCU-32S ESP-WROOM-32-ni ajratish.
16-qadam: Wi-Fi-ni o'rnatish tuguniMCU-32S ESP-WROOM-32
Bu safar boshqa ikkita misoldan asosiy farq - bu tugma va uchta miltillovchi LED. Bu erda SDA GPIO19 ga ulangan, SCL esa GPIO23 ga ulangan.
17 -qadam: Kutubxonalar va o'zgaruvchilar
Birinchidan, biz i2c aloqasi uchun javobgar bo'lgan Wire.h ni, shuningdek MCP23016 ning i2c manzilini o'rnatamiz. Men bir nechta buyruqlarni ko'rsataman, hatto biz bu loyihada ishlatmaymiz.
#include // Wire.h kutubxonasidan foydalanishni belgilang. // endereço I2C do MCP23016 #MCPAddress 0x20 ni belgilang // Aloqa registratsiya qilish uchun buyruq bayt: Jadval: 1-3 Microchip MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // DATA PORT Ro'yxatdan o'tuvchi1 0 PORT Ro'yxatdan o'tish 1 #OLAT0 0x02 ni belgilash // OUTPUT LATCH Ro'yxatdan o'tish 0 #ta'rif OLAT1 0x03 // OUTPUT LATCH Ro'yxatdan o'tish 1 #ta'rif IPOL0 0x04 // INPUT POLARITY PORT Ro'yxatdan o'tish /I/U YO'NALISH Ro'yxatga oluvchisi 0 #aniqlang IODIR1 0x07 // I/U YO'NALISH Ro'yxatga oluvchisi 1 #aniqlang INTCAP0 0x08 // O'RNATISH YO'LG'ILISH Ro'yxatga oluvchisi 0 #ta'riflangan INTCAP1 0x09 // O'RNATISH CAPTURE Ro'yxatdan o'tish 1 Yozuvchi REGISTER 0 #define IOCON1 0x0B // I/U EXPANDER CONTROL Ro'yxatdan o'tish 1
18 -qadam: sozlash
Bu erda biz to'rt xil turdagi mikrokontrolderlarni ishga tushirish funktsiyalariga egamiz. Shuningdek, biz chastotani tekshiramiz, GPIO -ni o'rnatamiz va pinlarni o'rnatamiz. Loopda biz tugma holatini tekshiramiz.
void setup () {Serial.begin (9600); kechikish (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // chastota // konfiguratsiya yoki GPIO0 bilan bir vaqtda chiqish (konfiguratsiya) port (IODIR0, OUTPUT); // konfiguratsiya yoki GPIO1 uchun kirish yoki GP1.0 va OUTPUT - bu GP1 configurePort (IODIR1, 0x01); // GPIO0 bilan bir qatorda, LOW writeBlockData (GP0, B00000000); // LIO writeBlockData (GP1, B00000000) GPIO1 bilan bir vaqtda bajarilishi kerak; } void loop () {// verifica e o botão GP foi pressionado checkButton (GP1); } // oxiri
19 -qadam: Portni sozlash
Ushbu bosqichda biz GPIO pinlari rejimini sozlaymiz va portlar rejimini aniqlaymiz.
// GPIO (GP0 yoki GP1) konfiguratsiyasi // passamos parametrlari: // port: GP0 yoki GP1 // maxsus: GPU -ning kirish nuqtasi sifatida GPU -ni kiriting // OUTPUT -ni amalga oshirishda, GP -ni yoki tr -ni ishlating. / 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 port, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } if if (custom == OUTPUT) {writeBlockData (port, 0x00); } boshqa {writeBlockData (port, maxsus); }}
20 -qadam: WriteBlockData va CheckButton
Bu erda biz ma'lumotlarni i2c avtobus orqali MCP23016 ga yuboramiz, tugma holatini tekshiramiz va bosish yoki bosmaslik shartini hisobga olgan holda keyingi qadamni ko'rsatamiz.
// envia dados para to MCP23016 através to barramento i2c // cmd: COMANDO (registrador) // ma'lumotlar: dados (0-255) yozilmagan BlockData (uint8_t cmd, uint8_t ma'lumotlar) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (ma'lumotlar); Wire.endTransmission (); kechikish (10); }
// parametrlar bo'yicha GP parametrlari: GP0 yoki GP1 void checkButton (uint8_t GP) {// faz a leitura do pino 0 no GP fornecido uint8_t btn = readPin (0, GP); // agar siz bostiradigan bo'lsak, GP0 port sifatida HIGH (agar btn) {writeBlockData (GP0, B11111111); } // LOW else {yozish blokirovkasi (GP0, B00000000); }}
21 -qadam: ReadPin va ValueFromPin
Biz bu erda ma'lum bir pinni o'qish va bit qiymatini kerakli joyga qaytarish bilan shug'ullanamiz.
// faz a leitura de um pino específico // pin: pino desejado (0-7) // gp: GP0 yoki GP1 // retorno: 0 yoki 1 uint8_t readPin (uint8_t pin, uint8_t gp) {uint8_t statusGP = 0; Wire.beginTransmission (MCPA manzili); Wire.write (gp); Wire.endTransmission (); Wire.requestFrom (MCPA manzili, 1); // chip 1 bayt statusGP = Wire.read (); qaytish qiymatiFromPin (pin, statusGP); } // retorna o valor do bit na posichã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 << pin)) == 0? 0: 1; }
22 -qadam: ESP8266 dasturi
Bu erda biz ESP-01 va nodeMCU ESP-12E dasturida qanday yaratilganligini ko'ramiz, bu esa ular orasidagi farqlar qanchalik minimal ekanligini tushunishga imkon beradi.
Biz faqat Wire ob'ektining boshlang'ich usuli bo'lgan i2c aloqa konstruktorining chizig'ini o'zgartiramiz.
Biz kompilyatsiya qilmoqchi bo'lgan plastinka bo'yicha chiziqni belgilang.
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Sozlash
E'tibor bering, quruvchi hali ham izohlanadi. Shuning uchun, taxtangizga ko'ra izoh qoldirmang (ESP-01 yoki nodeMCU ESP12-E).
void setup () {Serial.begin (9600); kechikish (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // chastota // konfiguratsiya yoki GPIO0 bilan bir vaqtda chiqish (konfiguratsiyaPort) configurePort (IODIR0, OUTPUT); // konfiguratsiya yoki GPIO1 uchun OUTPUT konfiguratsiyaPort (IODIR1, OUTPUT); // GPIO0 bilan bir qatorda, LOW writeBlockData (GP0, B00000000); // GPIO1 bilan bir qatorda LOW writeBlockData (GP1, B00000001); }
Loop
Loopda biz pinlarni har 1 soniyada almashtiramiz. Shunday qilib, GP0 pin0 yoqilganda, GP1 pinlari o'chadi. GP1 pin0 yoqilganda, GP0 pinlari o'chiriladi.
void loop () {// set up o pino 7 to GP0 como HIGH HIGH os demais como LOW writeBlockData (GP0, B10000000); // GPIO1 bilan bir qatorda LOW writeBlockData (GP1, B00000000); kechikish (1000); // GPIO0 bilan bir qatorda, LOW writeBlockData (GP0, B00000000); // yozib oling - bu GP1 -ni yoqish uchun juda yuqori, chunki LOW writeBlockData (GP1, B00000001); kechikish (1000); } // oxiri
23 -qadam: MUHIM
Amaldagi o'zgaruvchilar va kutubxona biz ESP32 uchun qilgan dastur bilan bir xil, shuningdek configurePort va writeBlockData usullari.
24 -qadam: fayllar
Fayllarni yuklab oling:
INO (ESP8266)
INO (ESP32)
Tavsiya:
Arduino, Esp8266 yoki Esp32 uchun past narxli E32 (sx1278/sx1276) qurilmali LoRa 3 km dan 8 km gacha simsiz aloqa: 15 qadam
Arduino, Esp8266 yoki Esp32 uchun past narxli E32 (sx1278/sx1276) qurilmasi bilan LoRa 3Km dan 8Kmgacha simsiz aloqa: Men LoBa qurilmasining Semtech seriyasiga asoslangan EBYTE E32 ni boshqarish uchun kutubxona yarataman, juda kuchli, sodda va arzon qurilma. Bu erda 3km versiya, bu erda 8km versiya Ular 3000 m dan 8000 m gacha masofani bosib o'tishlari mumkin va ular juda ko'p xususiyatlarga ega
GoPro uchun Arduino - Servo va MPU6050 Gyro -dan foydalanish uchun Roll va Pitch Axis Gimbal: 4 qadam
GoPro uchun Arduino - Servo va MPU6050 Gyro yordamida Roll and Pitch Axis Gimbal: Bu ko'rsatma Janubiy Florida universitetining Makecourse loyihasi talablarini bajarish uchun yaratilgan (www.makecourse.com) Ushbu loyihaning maqsadi - GoPro uchun 3 o'qli Gimbal Arduino nano + 3 servo dvigatellari yordamida
Arduino uchun 6 tugma uchun 1 ta analog kirishni ishlating: 6 qadam
Arduino uchun 6 tugma uchun 1 ta analog kirishni ishlating: men tez -tez Arduino uchun qanday qilib ko'proq raqamli kirishni olishim mumkinligi haqida o'ylardim. Yaqinda men bir nechta raqamli kirishni kiritish uchun Analog Kirishlardan birini ishlatishim kerak edi. Men tezda qidirib topdim va odamlar qaerda ekanligini topdim
Ultrasonik sensorlar uchun 3.3V mod (ESP32/ESP8266, zarracha foton va boshqalarda 3.3V mantiq uchun HC-SR04 ni tayyorlang): 4 qadam
Ultrasonik sensorlar uchun 3.3V mod (ESP32/ESP8266, Particle Photon va boshqalarda 3.3V Logic uchun HC-SR04 ni tayyorlang): TL; DR: Sensorda izni Echo piniga kesib oling, so'ng uni a yordamida qayta ulang. kuchlanish taqsimlagichi (Echo izi -> 2.7kΩ -> Echo pin -> 4.7kΩ -> GND). Tahrirlash: ESP8266 GPIO -da 5V ga toqat qila oladimi, degan munozaralar bo'lgan
Sevgi o'yinchilar uchun, Arduino loyihasi yakkaliklar uchun yaratilgan: 5 qadam
Sevgi O'yinchilar uchun, Arduino loyihasi yakkaliklar uchun yaratilgan: Bu ko'rsatma mening Arduino loyiham haqida " Sevgi o'yinchilar uchun " bu kulgilar va o'yin -kulgi vositasi sifatida boshlangan. Bu mukammal yoki boshqa narsa emas, lekin u ishlaydi