İçindekiler:
- Adım 1: Giriş
- 2. Adım: Özellikler
- Adım 3: ESP01 128 GPIO'ya Sahip Olabilir
- Adım 4: MCP23016
- Adım 5: SAAT
- 6. Adım: Adres
- 7. Adım: Komutlar
- Adım 8: Kategoriler:
- Adım 9: İletişim Yapısı
- Adım 10: Program
- Adım 11: ESP01
- Adım 12: ESP01'i Monte Etme
- Adım 13: NodeMCU ESP-12E
- Adım 14: NodeMCU ESP-12E'yi Monte Etme
- Adım 15: WiFi NodeMCU-32S ESP-WROOM-32
- Adım 16: WiFi Montaj NodeMCU-32S ESP-WROOM-32
- Adım 17: Kitaplıklar ve Değişkenler
- Adım 18: Kurulum
- Adım 19: ConfigurePort
- Adım 20: WriteBlockData & CheckButton
- Adım 21: ReadPin ve ValueFromPin
- Adım 22: ESP8266 Programı
- Adım 23: ÖNEMLİ
- Adım 24: Dosyalar
Video: ESP32, ESP8266 ve Arduino için IO Genişletici: 24 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
ESP32, ESP8266 veya Arduino'nuzun IO'larını genişletmek ister misiniz? Ve I2C veri yolu kullanılarak kontrol edilebilecek 16 yeni GPIO olasılığını düşündünüz mü? Bugün sizi GPIO genişletici MCP23016 ile tanıştıracağım. Ayrıca size MCP23016 ile bir mikrodenetleyiciyi nasıl iletişim kuracağınızı göstereceğim. Ayrıca genişletici ile haberleşmek için bu mikrodenetleyicinin sadece 2 pinini kullanacağımız bir program oluşturmaktan bahsedeceğim. Bunları LED'leri ve düğmeyi kontrol etmek için kullanacağız.
Adım 1: Giriş
MCP23016 cihazı, I2C veri yolunu kullanarak GPIO genişletmesi için 16 bit sağlar. Her bit ayrı ayrı konfigüre edilebilir (giriş veya çıkış).
MCP23016, giriş, çıkış ve polarite seçimi için çoklu 8 bitlik ayarlardan oluşur.
Genişleticiler, diğer örneklerin yanı sıra anahtarlar, sensörler, düğmeler ve LED'ler için IO'lara ihtiyaç duyulduğunda basit bir çözüm sunar.
2. Adım: Özellikler
16 Giriş / Çıkış pini (16 giriş standardı)
Hızlı I2C veri yolu saat frekansı (0-400 kbit/s)
Üç donanım adres pimi, sekiz adede kadar cihazın kullanımına izin verir
Bağlantı Noktası Yakalama Kaydedicisini Kesinti
Giriş portu verilerinin polaritesini ayarlamak için polarite ters çevirme kaydı
Çoğu mikrodenetleyici ile uyumlu
Adım 3: ESP01 128 GPIO'ya Sahip Olabilir
Bu genişleticinin büyüklüğünü gösteren bir örnek, yalnızca iki IOS ile sekiz adede kadar genişleticiye bağlanabilen ve 128 GPIO'ya ulaşan ESP01 ile kullanılmasıdır.
Adım 4: MCP23016
Burada, sekiz bitlik iki gruba sahip genişleticinin şemasına sahibiz. Bu, toplam 16 bağlantı noktası yapar. Bir kesme pinine ek olarak, dahili olarak bir mantık portuna bağlı olan kondansatörü ve rezistörü birbirine bağlayan CLK pinine sahiptir. Bu, 1MHz saate ihtiyaç duyan bir kristal osilatör fikrini kullanarak saati oluşturmaktır. TP pini saati ölçmek için kullanılır. A0, A1 ve A2 pinleri ikili adreslerdir.
Adım 5: SAAT
Bu nedenle MCP23016, dahili Saatin hızını belirlemek için harici bir RC devresi kullanır. Cihazın düzgün çalışması için (genellikle) 1 MHz'lik bir dahili saat gereklidir. Dahili saat TP pininde ölçülebilir. REXT ve CEXT için önerilen değerler aşağıda gösterilmiştir.
6. Adım: Adres
MCP23016'nın adresini tanımlamak için A0, A1 ve A2 pinlerini kullanırız. Adres değişikliği için onları YÜKSEK veya DÜŞÜK olarak bırakın.
Adres aşağıdaki gibi oluşturulacaktır:
MCP_Adresi = 20 + (A0 A1 A2)
A0 A1 A2 YÜKSEK / DÜŞÜK değerleri alabildiğinde, bu 0 ile 7 arasında bir ikili sayı oluşturur.
Örneğin:
A0> GND, A1> GND, A2> GND (000 anlamına gelir, sonra 20 + 0 = 20)
Yoksa, A0> YÜKSEK, A1> GND, A2> YÜKSEK (101 anlamına gelir, sonra 20 + 5 = 25)
7. Adım: Komutlar
Aşağıda iletişim komutlarını içeren bir tablo bulunmaktadır. GP0 ve GP1'in yanı sıra IODIR0 ve IODIR1'i kullanalım.
Adım 8: Kategoriler:
GP0 / GP1 - Veri Bağlantı Noktası Kayıtları
İki GPIO bağlantı noktasına erişim sağlayan iki kayıt vardır.
Kayıt okuması, o port üzerindeki pinlerin durumunu sağlar.
Bit = 1> YÜKSEK Bit = 0> DÜŞÜK
OLAT0 / OLAT1 - Çıkış LACTCH KAYITLARI
İki bağlantı noktasının çıkış bağlantı noktalarına erişim sağlayan iki kayıt vardır.
IPOL0 / IPOL1 - Giriş Polarite Kayıtları
Bu kayıtlar, kullanıcının giriş bağlantı noktası verilerinin (GP0 ve GP1) polaritesini yapılandırmasına izin verir.
IODIR0 / IODIR1
Pin modunu kontrol eden iki kayıt vardır. (Giriş veya Çıkış)
Bit = 1> GİRİŞ Bit = 0> ÇIKIŞ
INTCAP0 / INTCAP1 - Yakalama Kayıtlarını Kesinti
Bunlar, kesmeyi oluşturan bağlantı noktasının değerini içeren kayıtlardır.
IOCON0 / IOCON1 - G / Ç Genişletici Kontrol Kaydı
Bu, MCP23016'nın işlevselliğini kontrol eder.
Bit 0'ı (IARES> Kesinti Etkinliği Çözünürlüğü) ayarlamak, GP bağlantı noktası pinlerinin örnekleme frekansını kontrol eder.
Bit0 = 0> (varsayılan) Maksimum bağlantı noktası etkinliği algılama süresi 32 ms'dir (düşük güç tüketimi)
Bit0 = 1> bağlantı noktasında maksimum etkinlik algılama süresi 200usec'dir (daha yüksek güç tüketimi)
Adım 9: İletişim Yapısı
Burada, genişleticinin Arduino Uno ve Mega ile çalışmasına izin veren çekirdek Arduino'muzdaki I2C iletişimi olan Wire sınıfını gösteriyorum. Ancak, ikincisi zaten birkaç GÇ'ye sahiptir. Burada çipin adresleri, kayıtların kodları olan erişim kontrolü ve verilerle ilgileniyoruz.
Adım 10: Program
Programımız, kullanılacak daha fazla GPIO'ya sahip olmak için ESP32'yi MCP23016 ile iletişim kurmaktan oluşur. Daha sonra bir düğmemiz ve MCP23016'ya bağlı bazı LED'lerimiz olacak. Hepsini sadece I2C bus kullanarak kontrol edeceğiz. Böylece sadece iki adet ESP32 pini kullanılacaktır. Aşağıdaki videoda resim devresini görebilirsiniz.
Adım 11: ESP01
Burada ESP01'in Pinout'unu gösteriyorum.
Adım 12: ESP01'i Monte Etme
Bu örnekte, SDA'ya bağlı GPIO0'a ve SCL'ye bağlı GPIO2'ye sahibiz. Ayrıca bir röle kartımız, bir zilimiz ve bir LED'imiz var. Diğer bağlantı noktasında, GP1.0'da dirençli bir LED'imiz daha var.
Adım 13: NodeMCU ESP-12E
Burada NodeMCU ESP-12E'nin Pinout'u var.
Adım 14: NodeMCU ESP-12E'yi Monte Etme
Bu durumda, ilk örnekten tek fark, sırasıyla SDA ve SCL'de D1 ve D2'yi bağlamış olmanızdır.
Adım 15: WiFi NodeMCU-32S ESP-WROOM-32
İşte WiFi NodeMCU-32S ESP-WROOM-32'nin Pinout'u.
Adım 16: WiFi Montaj NodeMCU-32S ESP-WROOM-32
Bu sefer, diğer iki örnekten temel fark, düğme ve üç yanıp sönen LED'dir. Burada SDA, GPIO19'a bağlıyken SCL, GPIO23'e bağlıdır.
Adım 17: Kitaplıklar ve Değişkenler
İlk olarak, MCP23016'nın i2c adresini ayarlamanın yanı sıra i2c iletişiminden sorumlu Wire.h'yi ekleyeceğiz. Bazılarını bu projede kullanmadığımız bile birkaç komut gösteriyorum.
#include // Wire.h kitaplığının kullanımını belirtin. //endereço I2C do MCP23016 #define MCPAddress 0x20 // İLİŞKİ KAYDI İÇİN KOMUT BYTE: Tablo: 1-3 of Microchip MCP23016 - DS20090A //ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // DATA PORT REGISTER 0 #define GPATA 0x01 // PORT KAYIT 1 #define OLAT0 0x02 // ÇIKIŞ KİLİT KAYDI 0 #tanım OLAT1 0x03 // ÇIKIŞ KİLİT KAYDI 1 #define IPOL0 0x04 // GİRİŞ POLARİTESİ PORT REGISTER 0 #define IPOL1 0x05 // GİRİŞ POLARİTESİ PORT REGISTER0 #define /IO / G/Ç YÖN KAYDI 0 #define IODIR1 0x07 // G/Ç YÖNÜ KAYDI 1 #define INTCAP0 0x08 // KESİNTİ YAKALAMA KAYDI 0 #define INTCAP1 0x09 // KESME YAKALAMA KAYDI 1 #define IOCON0 0x0A // I/O GENİŞLETİCİ KAYIT 0 #define IOCON1 0x0B // G/Ç GENİŞLETİCİ KONTROL KAYIT 1
Adım 18: Kurulum
Burada dört farklı tipte mikrodenetleyiciyi başlatma fonksiyonlarına sahibiz. Ayrıca frekansı kontrol ediyoruz, GPIO'ları kuruyoruz ve pinleri ayarlıyoruz. Döngüde butonun durumunu kontrol ediyoruz.
geçersiz kurulum() { Serial.begin(9600); gecikme(1000); tel.başla(19, 23); //ESP32 // Wire.begin(D2, D1); //nodemcu ESP8266 // Wire.begin(); //arduino // Wire.begin(0, 2);//ESP-01 Wire.setClock(200000); //frekans //yapılandırma o GPIO0 ortak ÇIKIŞ (todos işletim sistemi pinos)configPort(IODIR0, OUTPUT); //configura o GPIO1 ortak GİRİŞ o GP1.0 ve ortak ÇIKIŞ çıkışları GP1 configurationPort(IODIR1, 0x01); // GPIO0'da LOW writeBlockData(GP0, B00000000); // GPIO1 como LOW writeBlockData(GP1, B00000000); } void loop() { //verifica e o botão GP foi pressionado checkButton(GP1); } // döngüyü sonlandır
Adım 19: ConfigurePort
Bu adımda GPIO pinlerinin modunu yapılandırıyoruz ve portların modunu belirliyoruz.
// GPIO (GP0 veya GP1) yapılandırması//parametro geçişleri: //port: GP0 veya GP1 //özel: GP trabalharem como girişleri için INPUT para todos // GP trabalharem como dedia gibi portlar olarak ÇIKIŞ para todos / / özel değer 0-255 portları o modo das göstergesi (1=GİRİŞ, 0=ÇIKIŞ) // örn: 0x01 veya B00000001 veya 1: göstergeler o GPX.0 trabalhará como giriş, o restando komo dedia void configurationPort(uint8_t bağlantı noktası, uint8_t özel) { if(özel == GİRİŞ) { writeBlockData(bağlantı noktası, 0xFF); } else if(özel == OUTPUT) { writeBlockData(port, 0x00); } else { writeBlockData(port, özel); } }
Adım 20: WriteBlockData & CheckButton
Burada i2c bus üzerinden MCP23016'ya veri gönderiyoruz, butonun durumunu kontrol ediyoruz ve basılıp basılmadığını dikkate alarak bir sonraki adımı belirtiyoruz.
//envia dados para o MCP23016 barramento i2c//cmd'ye bakın: COMANDO (kayıt şirketi) //veri: dados (0-255) void writeBlockData(uint8_t cmd, uint8_t verisi) { Wire.beginTransmission(MCPAddress); Wire.write(cmd); Wire.write(veri); Wire.endTransmission(); gecikme(10); }
//basınç denetimi için geçerli//parametro GP: GP0 veya GP1 geçersiz checkButton(uint8_t GP) { //faz a leitura do pino 0 GP fornecido uint8_t btn = readPin(0, GP); //se botão pressionado, seta para HIGH as portas GP0 if(btn) { writeBlockData(GP0, B111111); } //caso contrario deixa todas em estado DÜŞÜK başka{ writeBlockData(GP0, B00000000); } }
Adım 21: ReadPin ve ValueFromPin
Burada belirli bir pinin okunması ve bit değerinin istenen konuma geri döndürülmesi ile ilgileniyoruz.
//çok özel bir temel nokta//pin: pino desejado (0-7) //gp: GP0 veya GP1 //retorno: 0 veya 1 uint8_t readPin(uint8_t pin, uint8_t gp) { uint8_t statusGP = 0; Wire.beginTransmission(MCPAAdresi); Wire.write(gp); Wire.endTransmission(); Wire.requestFrom(MCPAAdresi, 1); // ler çip 1 baytlık durumGP = Wire.read(); dönüş değeriFromPin(pin, statusGP); } //gereğini yerine getirme ya da değiştirme //pin: doğru bit (0-7) //statusGP: GP değeri (0-255) uint8_t valueFromPin(uint8_t pin, uint8_t statusGP) { return (statusGP & (0x0001 << pin)) == 0 ? 0: 1; }
Adım 22: ESP8266 Programı
Buradan ESP-01'de ve nodeMCU ESP-12E'de kullandığımız programın nasıl oluşturulduğunu göreceğiz, bu da aralarındaki farkların ne kadar az olduğunu anlamamızı sağlıyor.
Sadece Wire nesnesinin başlangıç yöntemi olan i2c iletişim kurucusunun satırını değiştireceğiz.
Derleyeceğimiz plakaya göre satırın yorumunu kaldırmanız yeterlidir.
// Tel.başla(D2, D1); //nodemcu ESP8266// Wire.begin(0, 2); //ESP-01
Kurmak
Oluşturucunun hala yorumlandığına dikkat edin. Bu nedenle, kartınıza göre yorum yapın (ESP-01 veya nodeMCU ESP12-E).
geçersiz kurulum() { Serial.begin(9600); gecikme(1000); // Tel.başla(D2, D1); //nodemcu ESP8266 // Wire.begin(0, 2); //ESP-01 Wire.setClock(200000); //frekans //yapılandırma o GPIO0 ortak ÇIKIŞ (todos işletim sistemi pinos)configPort(IODIR0, OUTPUT); //configura o GPIO1 ortak ÇIKIŞ (todos işletim sistemi pinleri) configurePort(IODIR1, OUTPUT); // GPIO0'da LOW writeBlockData(GP0, B00000000); // GPIO1 como LOW writeBlockData(GP1, B00000001); }
Döngü
Döngüde pinleri her 1 saniyede bir değiştiriyoruz. Böylece, GP0'ın pin0'ı açıkken, GP1'in pinleri kapalıdır. GP1'in pin0'ı açıkken, GP0 pinleri kapalıdır.
void loop() { // GP0 ortak noktası YÜKSEK ve ortak kullanım DÜŞÜK writeBlockData(GP0, B10000000); // GPIO1 como LOW writeBlockData(GP1, B00000000); gecikme(1000); // GPIO0'da LOW writeBlockData(GP0, B00000000); // seta o pino 0 GP1 komo YÜKSEK e os demais komo DÜŞÜK writeBlockData(GP1, B00000001); gecikme(1000); } // döngüyü sonlandır
Adım 23: ÖNEMLİ
Kullanılan değişkenler ve kitaplık, ESP32 için yaptığımız programınkilerle aynı olduğu gibi, configurePort ve writeBlockData yöntemleriyle de aynıdır.
Adım 24: Dosyalar
Dosyaları indirin:
INO (ESP8266)
INO (ESP32)
Önerilen:
I2C ile Birçok Nixie Tüpünü Kontrol Etmek için Çok Yönlü I/O Genişletici PCB: 9 Adım (Resimlerle)
I2C ile Birçok Nixie Tüpünü Kontrol Etmek için Çok Yönlü I/O Genişletici PCB: Şu anda eski nixie tüplerini hayata geçirme konusunda çok fazla ilgi var. Piyasada çok sayıda nixie tüp saat kiti mevcuttur. Eski Rus nixie tüpleri stoğu üzerinde bile canlı bir ticaret olduğu ortaya çıktı. Ayrıca burada Eğitilebilirler'de orada
Ultrasonik Sensörler için 3.3V Modu (ESP32/ESP8266, Particle Photon, vb. üzerinde 3.3V Logic için HC-SR04'ü hazırlayın): 4 Adım
Ultrasonik Sensörler için 3.3V Modu (ESP32/ESP8266, Particle Photon, vb. üzerinde 3.3V Logic için HC-SR04'ü hazırlayın): TL;DR: Sensörde, Echo pinine giden izi kesin, ardından bir voltaj bölücü (Yankı izi -> 2.7kΩ -> Yankı pimi -> 4.7kΩ -> GND). Düzenleme: ESP8266'nın aslında GPIO'da 5V toleranslı olup olmadığı konusunda bazı tartışmalar oldu
NODEMCU LUA ESP8266, MCP23008 8 Bit Port Genişletici IC ile: 6 Adım
NODEMCU LUA ESP8266 MCP23008 8 Bit Bağlantı Noktası Genişletici IC ile: MCP23008, Seri Arabirimli 8-Bit G/Ç Genişleticidir ve 1.8 ile 5.5 volt arasında çalışır, bu nedenle ESP8266, Arduino, Raspberry Pi, PIC Chips ve daha fazlası için idealdir. MCP23017'deki diğer Talimatımı gördüyseniz, merak ediyor olabilirsiniz
NODEMCU LUA ESP8266, MCP23017 ile 16 Bit Port Genişletici IC: 6 Adım (Resimlerle)
NODEMCU LUA ESP8266 MCP23017 ile 16 Bit Port Genişletici IC: MCP23017, çipin her iki tarafında Port A ve B'ye sahip olduğu ve pinler sıralı olduğu için bir kart yapmak için nispeten kolay bir IC'dir. Benzer şekilde I2C adres veriyolu hepsi bir arada. Bu IC üzerinde kullanılmayan 2 pin var
IoT için Ucuz WiFi Menzil Genişletici: 8 Adım
IoT için Ucuz WiFi Menzil Genişletici: 2-8 $'lık ucuz bir ESP8266 WiFi modülünden kendi WiFi genişleticinizi nasıl oluşturabilirsiniz*** DÜZENLEME: Bu talimat yazıldığından bu yana, bir GUI ayarları sayfasının eklenmesiyle ürün yazılımı büyük ölçüde geliştirildi (normal bir yönlendirici gibi), güvenlik duvarı, güç adamı