Mündəricat:
- Addım 1: Giriş
- Addım 2: Xüsusiyyətlər
- Addım 3: ESP01 128 GPIO -ya sahib ola bilər
- Addım 4: MCP23016
- Addım 5: SAAT
- Addım 6: Ünvan
- Addım 7: Əmrlər
- Addım 8: Kateqoriyalar:
- Addım 9: Ünsiyyət quruluşu
- Addım 10: Proqram
- Addım 11: ESP01
- Addım 12: ESP01 -in quraşdırılması
- Addım 13: NodeMCU ESP-12E
- Addım 14: NodeMCU ESP-12E montajı
- Addım 15: WiFi NodeMCU-32S ESP-WROOM-32
- Addım 16: WiFi Montaj NodeMCU-32S ESP-WROOM-32
- Addım 17: Kitabxanalar və Dəyişənlər
- Addım 18: Quraşdırma
- Addım 19: Portu konfiqurasiya edin
- Addım 20: WriteBlockData və CheckButton
- Addım 21: ReadPin və ValueFromPin
- Addım 22: ESP8266 Proqramı
- Addım 23: Vacibdir
- Addım 24: Fayllar
Video: ESP32, ESP8266 və Arduino üçün IO Expander: 24 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
ESP32, ESP8266 və ya Arduino'nun IO'larını genişləndirmək istərdinizmi? I2C avtobusu ilə idarə oluna bilən 16 yeni GPIO -nun mümkünlüyü barədə düşünmüsünüzmü? Yaxşı bu gün sizi GPIO genişləndirici MCP23016 ilə tanış edəcəyəm. Ayrıca, MCP23016 ilə bir mikro nəzarətçi ilə necə əlaqə quracağınızı göstərəcəyəm. Genişləndirici ilə ünsiyyət qurmaq üçün bu mikro nəzarətçinin yalnız 2 sancağından istifadə edəcəyimiz bir proqram yaratmaq haqqında danışacağam. Bunları LEDləri və düyməni idarə etmək üçün istifadə edəcəyik.
Addım 1: Giriş
MCP23016 cihazı, I2C avtobusundan istifadə edərək GPIO genişləndirilməsi üçün 16 bit təmin edir. Hər bir bit fərdi olaraq konfiqurasiya edilə bilər (giriş və ya çıxış).
MCP23016, giriş, çıxış və polarite seçimi üçün bir çox 8 bitlik parametrlərdən ibarətdir.
Genişləndiricilər, digər nümunələr arasında açarlar, sensorlar, düymələr və LEDlər üçün IO -lara ehtiyac olduqda sadə bir həll təmin edir.
Addım 2: Xüsusiyyətlər
16 Giriş / Çıxış pinləri (16 giriş standartı)
Sürətli I2C avtobus saat tezliyi (0-400 kbit/s)
Üç hardware ünvan pinləri səkkiz cihaza qədər istifadə etməyə imkan verir
Port Capture Recorder -ı kəsin
Giriş port məlumatlarının polaritesini təyin etmək üçün polariteyi geri çevirən reyestr
Əksər mikrokontrolörlərə uyğundur
Addım 3: ESP01 128 GPIO -ya sahib ola bilər
Bu genişləndiricinin böyüklüyünü göstərən bir nümunə, ESP01 ilə istifadəsidir, bu, yalnız iki IOS ilə səkkizə qədər genişləndiriciyə qoşula bilər və 128 GPIO -ya çatır.
Addım 4: MCP23016
Burada, səkkiz bitdən ibarət iki qrupu olan genişləndiricinin sxeminə sahibik. Bu, ümumilikdə 16 limanı təşkil edir. Bir kəsmə pininə əlavə olaraq, daxili bir məntiq portuna bağlanan kondansatörü və rezistoru birləşdirən CLK pininə malikdir. Bu, 1MHz saata ehtiyacı olan bir kristal osilator ideyasından istifadə edərək saatı formalaşdırmaqdır. TP pin, saatı ölçmək üçün istifadə olunur. A0, A1 və A2 sancaqları ikili ünvanlardır.
Addım 5: SAAT
Buna görə MCP23016, daxili Saatın sürətini təyin etmək üçün xarici bir RC dövrəsindən istifadə edir. Cihazın düzgün işləməsi üçün (ümumiyyətlə) 1 MHz -lik daxili saat tələb olunur. Daxili saat TP pinində ölçülə bilər. REXT və CEXT üçün tövsiyə olunan dəyərlər aşağıda göstərilmişdir.
Addım 6: Ünvan
MCP23016 ünvanını təyin etmək üçün A0, A1 və A2 sancaqlarından istifadə edirik. Onları ünvan dəyişikliyi üçün YÜKSƏLİ və ya DÜŞÜK olaraq buraxın.
Ünvan aşağıdakı kimi formalaşacaq:
MCP_Address = 20 + (A0 A1 A2)
A0 A1 A2 -nin YÜKSEK / DÜŞÜK dəyərləri götürə biləcəyi yerdə, 0 -dan 7 -yə qədər olan ikili ədəd əmələ gətirir.
Misal üçün:
A0> GND, A1> GND, A2> GND (000 deməkdir, sonra 20 + 0 = 20)
Yoxsa, A0> YÜKSEK, A1> GND, A2> YÜKSÜZ (mənası 101, sonra 20 + 5 = 25)
Addım 7: Əmrlər
Aşağıda ünsiyyət əmrləri olan bir cədvəl var. GP0 və GP1, eləcə də IODIR0 və IODIR1 istifadə edək.
Addım 8: Kateqoriyalar:
GP0 / GP1 - Məlumat Portu Qeydləri
İki GPIO limanına çıxışı təmin edən iki qeyd var.
Qeyd oxunuşu həmin limandakı sancaqların vəziyyətini təmin edir.
Bit = 1> HIGH Bit = 0> LOW
OLAT0 / OLAT1 - Çıxış LACTCH QEYDİYYATÇILARI
İki limanın çıxış limanlarına çıxışı təmin edən iki qeyd var.
IPOL0 / IPOL1 - Giriş Qütblülük Qeydləri
Bu qeydlər istifadəçiyə giriş port məlumatlarının (GP0 və GP1) polaritesini konfiqurasiya etməyə imkan verir.
IODIR0 / IODIR1
Pin rejimini idarə edən iki qeyd var. (Giriş və ya Çıxış)
Bit = 1> GİRİŞ Bit = 0> Çıxış
INTCAP0 / INTCAP1 - Capture Registrləri kəsin
Bunlar kəsilməni yaradan portun dəyərini ehtiva edən qeydlərdir.
IOCON0 / IOCON1 - I / O Genişləndirici Nəzarət Qeydiyyatı
Bu, MCP23016 funksiyasını idarə edir.
0 bitini təyin etmək (IARES> Fəaliyyəti kəsmək) GP port sancaqlarının seçmə tezliyini idarə edir.
Bit0 = 0> (standart) Maksimum liman aktivliyi aşkarlama müddəti 32 ms-dir (aşağı enerji istehlakı)
Bit0 = 1> limanda maksimum aktivlik aşkarlama müddəti 200usec (daha yüksək enerji istehlakı)
Addım 9: Ünsiyyət quruluşu
Burada genişləndiricinin Arduino Uno və Mega ilə işləməsinə imkan verən əsas Arduino -dakı I2C ünsiyyəti olan Wire sinifini göstərirəm. Ancaq sonuncunun artıq bir neçə IO var. Burada çipin ünvanları, qeydlərin kodları olan giriş nəzarəti və məlumatlarla məşğul oluruq.
Addım 10: Proqram
Proqramımız, daha çox GPIO istifadə etmək üçün ESP32 ilə MCP23016 ilə əlaqə qurmaqdan ibarətdir. Daha sonra bir düymə və MCP23016 -ya bağlı bəzi LEDlərimiz olacaq. Yalnız I2C avtobusundan istifadə edərək hamısına nəzarət edəcəyik. Beləliklə, yalnız iki ESP32 sancağı istifadə ediləcək. Aşağıdakı şəkil sxemini videoda görə bilərsiniz.
Addım 11: ESP01
Burada ESP01 Pinoutunu göstərirəm.
Addım 12: ESP01 -in quraşdırılması
Bu nümunədə, SDA -ya bağlı GPIO0 və SCL -ə bağlı GPIO2 var. Həm də bir relay lövhəsi, səs siqnalı və bir LED var. Digər portda, GP1.0 -da bir rezistorlu daha bir LED var.
Addım 13: NodeMCU ESP-12E
Burada NodeMCU ESP-12E Pinout var.
Addım 14: NodeMCU ESP-12E montajı
Bu vəziyyətdə, ilk nümunədən yeganə fərq, sırasıyla SDA və SCL -də D1 və D2 -ni birləşdirdiyinizdir.
Addım 15: WiFi NodeMCU-32S ESP-WROOM-32
Budur WiFi NodeMCU-32S ESP-WROOM-32-nin Pinout.
Addım 16: WiFi Montaj NodeMCU-32S ESP-WROOM-32
Bu dəfə digər iki nümunədən əsas fərq düymə və üç yanıb -sönən LED -dir. Burada SDA GPIO19 -a, SCL isə GPIO23 -ə qoşulur.
Addım 17: Kitabxanalar və Dəyişənlər
Birincisi, i2c ünsiyyətindən məsul olan Wire.h, həmçinin MCP23016 -nın i2c ünvanını təyin edəcəyik. Bu layihədə istifadə etmədiyimiz bir neçə əmr göstərirəm.
#include // Wire.h kitabxanasının istifadəsini göstərin. // endereço I2C do MCP23016 #MCPAddress 0x20 təyin edin // İLİŞKİLƏRİ QEYDİYYAT ETMƏK ÜÇÜN BAYT: Cədvəl: 1-3 Microchip MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // DATA PORT QEYDİYYATCI 0 #dex PORT QEYDİYYATI 1 #OLAT0 0x02 təyin edin // Çıxış LATCH QEYDİYYATI 0 #müəyyən OLAT1 0x03 // ÇIXIŞ KİLİDİ QEYDİYYATI 1 #IPOL0 0x04 daxil edin // GİRİŞ POLARİTİ PORT QEYDİYYATI 0 #IPOL1 0x0AR PİTİF 1 İNDİRİN /I/O YÖN QAYDASI 0 #IODIR1 0x07 təyin edin // I/O YÖN QEYDİYYATI 1 #INTCAP0 müəyyən edin 0x08 // KESİNTİ CAPTURE QEYDİYYATI 0 #müəyyən INTCAP1 0x09 // ARALIQ YAZMA QEYDİYYAT 1 QEYD QAYDI 1 QEYDİYYAT 0 #define IOCON1 0x0B // I/O EXPANDER NƏZARƏT QEYDİYYATI 1
Addım 18: Quraşdırma
Burada dörd fərqli mikrokontrolörün işə salınması funksiyasına sahibik. Həm də tezliyi yoxlayırıq, GPIO qururuq və sancaqlar qururuq. Döngədə düymənin vəziyyətini yoxlayırıq.
void setup () {Serial.begin (9600); gecikmə (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // tezlik // konfiqurasiya və ya GPIO0 ilə ÇIXIŞ (əlaqəli işlər) configurePort (IODIR0, ÇIXIŞ); // konfiqurasiya və ya GPIO1 girişi GP1.0 və ya GP1 configurePort (IODIR1, 0x01) üzərində ÇIXIŞ; // GPIO0 üçün LOW writeBlockData (GP0, B00000000) ilə əlaqəli işlər; // GPIO1 ilə LOW writeBlockData (GP1, B00000000) arasındakı əlaqəni təyin edin; } void loop () {// checkButton (GP1) düyməsini basdıqdan sonra GP -ni yoxlayın; } // son döngə
Addım 19: Portu konfiqurasiya edin
Bu addımda GPIO sancaqlar rejimini konfiqurasiya edirik və limanların rejimini təyin edirik.
// GPIO konfiqurasiyası (GP0 və ya GP1) // komanda parametrləri: // port: GP0 və ya GP1 // xüsusi: GP -lərin daxil olduğu kimi girişlər daxil edin/GP -lərin Çıxışları GP -lərin olduğu kimi, trabalharem komo 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 port, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } başqa if (xüsusi == ÇIXIŞ) {writeBlockData (port, 0x00); } başqa {writeBlockData (port, xüsusi); }}
Addım 20: WriteBlockData və CheckButton
Burada məlumatları i2c avtobusu ilə MCP23016 -a göndəririk, düymənin vəziyyətini yoxlayırıq və basıldığını və ya olmamasını nəzərə alaraq növbəti addımı göstəririk.
// MCP23016 através to barramento i2c // cmd: COMANDO (registrador) // data: dados (0-255) writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (məlumatlar); Wire.endTransmission (); gecikmə (10); }
// parametrləri GP: parametrləri GP: GP0 və ya GP1 etibarsız checkButton (uint8_t GP) {// faz a leitura do pino 0 no GP fornecido uint8_t btn = readPin (0, GP); // yuxarıya basaraq, GP0 kimi yüksək olaraq təyin edin (btn) {writeBlockData (GP0, B11111111); } // LOW else {yazmaBlockData (GP0, B00000000); }}
Addım 21: ReadPin və ValueFromPin
Burada müəyyən bir pin oxunması və bit dəyərinin istədiyiniz mövqeyə qaytarılması ilə məşğul oluruq.
// 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 ünvanı); Wire.write (gp); Wire.endTransmission (); Wire.requestFrom (MCPA ünvanı, 1); // çip 1 bayt statusGP = Wire.read (); qaytarılma dəyəriFromPin (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 << pin)) == 0? 0: 1; }
Addım 22: ESP8266 Proqramı
Buradan, ESP-01-də və nodeMCU ESP-12E-də istifadə etdiyimiz proqramın necə yaradıldığını görəcəyik ki, bu da aralarındakı fərqlərin minimal olduğunu anlamağa imkan verir.
Yalnız Wire obyektinin başlanğıc metodu olan i2c rabitə qurucusunun xəttini dəyişdirəcəyik.
Sadəcə tərtib edəcəyimiz lövhəyə uyğun olaraq xətti açın.
// Tel.başla (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Qurmaq
Qurucunun hələ də şərh edildiyinə diqqət yetirin. Buna görə lövhənizə görə şərh yazmayın (ESP-01 və ya nodeMCU ESP12-E).
void setup () {Serial.begin (9600); gecikmə (1000); // Tel.başla (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // tezlik // konfiqurasiya və ya GPIO0 ilə ÇIXIŞ (əlaqəli işlər) configurePort (IODIR0, ÇIXIŞ); // konfiqurasiya və ya GPIO1 ilə Çıxış (əlaqəli işlər) configurePort (IODIR1, Çıxış); // GPIO0 üçün LOW writeBlockData (GP0, B00000000) ilə əlaqəli işlər; // GPIO1 ilə LOW writeBlockData (GP1, B00000001) arasındakı əlaqəni təyin edin; }
Döngə
Döngədə, pinləri hər 1 saniyədə bir dəyişdiririk. Beləliklə, GP0 pin0 açıldığında, GP1 pinləri sönür. GP1 pin0 aktiv olduqda, GP0 pinləri sönür.
void loop () {// set up o pino 7 to GP0 como HIGH və ya LOW writeBlockData (GP0, B10000000); // GPIO1 ilə LOW writeBlockData (GP1, B00000000) arasındakı əlaqəni təyin edin; gecikmə (1000); // GPIO0 üçün LOW writeBlockData (GP0, B00000000) ilə əlaqəli işlər; // müəyyən etmək üçün GP1 -ni YÜKSEK və ya aşağı yazınBlockData (GP1, B00000001); gecikmə (1000); } // son döngə
Addım 23: Vacibdir
İstifadə olunan dəyişənlər və kitabxana, ESP32 üçün etdiyimiz proqramla, configurePort və writeBlockData metodları ilə eynidir.
Addım 24: Fayllar
Faylları yükləyin:
INO (ESP8266)
INO (ESP32)
Tövsiyə:
Wi-Fi yönlendiriciniz üçün saatlarla işləmək üçün UPS-ni Steam Punk: 4 addım (şəkillərlə)
Wi-Fi yönlendiriciniz üçün saatlarla işləmək üçün UPS-ni Steam Punk: UPS-in 12V DC batareya gücünü 220V AC gücünə çevirməsi ilə bağlı əsaslı olaraq razı olmayan bir şey var ki, routerinizi və fiber ONT-ni işlədən transformatorlar onu yenidən 12V DC! Siz də [adətən
Arduino istifadə edərək robotdan qaçınmaq üçün əngəl yaratmaq üçün necə: 5 addım
Arduino istifadə edərək robotdan qaçınmaq üçün əngəl yaratma: Bu təlimatda sizə Arduino ilə işləyən robotdan qaçaraq maneə yaratmağı öyrədəcəyəm. Arduino ilə tanış olmalısınız. Arduino, atmega mikro nəzarətçisini istifadə edən bir idarəetmə lövhəsidir. Arduinonun hər hansı bir versiyasından istifadə edə bilərsiniz, amma
Arduino üçün 6 Düymə üçün 1 Analog Girişdən istifadə edin: 6 addım
Arduino üçün 6 Düymə üçün 1 Analog Girişdən istifadə edin: Arduino üçün necə daha çox Rəqəmsal Giriş əldə edə biləcəyimi tez -tez düşünürəm. Bu yaxınlarda ağlıma gəldi ki, birdən çox rəqəmsal giriş gətirmək üçün Analog Girişlərdən birini istifadə etməliyəm. Sürətli bir axtarış apardım və insanların harada olduğunu tapdım
Ultrasonik Sensorlar üçün 3.3V Mod (ESP32/ESP8266, Particle Photon və s. Üzrə 3.3V Logic üçün HC-SR04 hazırlayın): 4 Addım
Ultrasonik Sensorlar üçün 3.3V Modu (ESP32/ESP8266, Particle Photon və s. Üzrə 3.3V Logic üçün HC-SR04 hazırlayın): TL; DR: Sensorda izi Echo pininə kəsin, sonra gərginlik bölücü (Echo trace -> 2.7kΩ -> Exo pin -> 4.7kΩ -> GND). Düzəliş: ESP8266 -nın GPIO -da əslində 5V -a dözümlü olub -olmaması ilə bağlı bəzi mübahisələr olub
Arduino üçün L298 2Amp Motor Sürücü Qalxanı üçün təlimat: 6 addım
Arduino üçün L298 2Amp Motor Sürücü Qalxanı üçün təlimat: Təsvir Arduino üçün L298 2Amp Motor Sürücü Qalxanı, tam körpülü motor sürücüsü L298 motor sürücüsünün inteqral sxeminə əsaslanır. İki ayrı 2A DC mühərriki və ya 1 2A pilləli motoru idarə edə bilər. Motorun sürəti və istiqamətləri ayrı -ayrılıqda idarə oluna bilər