Isi kandungan:
- Langkah 1: Pengenalan
- Langkah 2: Ciri-ciri
- Langkah 3: ESP01 Boleh Memiliki 128 GPIO
- Langkah 4: MCP23016
- Langkah 5: JAM
- Langkah 6: Alamat
- Langkah 7: Perintah
- Langkah 8: Kategori:
- Langkah 9: Struktur untuk Komunikasi
- Langkah 10: Program
- Langkah 11: ESP01
- Langkah 12: Pemasangan ESP01
- Langkah 13: NodeMCU ESP-12E
- Langkah 14: Pemasangan NodeMCU ESP-12E
- Langkah 15: Node WiFiMCU-32S ESP-WROOM-32
- Langkah 16: Node Pemasangan WiFiMCU-32S ESP-WROOM-32
- Langkah 17: Perpustakaan dan Pembolehubah
- Langkah 18: Persediaan
- Langkah 19: ConfigurePort
- Langkah 20: WriteBlockData & CheckButton
- Langkah 21: ReadPin & ValueFromPin
- Langkah 22: Program ESP8266
- Langkah 23: PENTING
- Langkah 24: Fail
Video: IO Expander untuk ESP32, ESP8266, dan Arduino: 24 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:11
Adakah anda ingin mengembangkan IO ESP32, ESP8266, atau Arduino anda? Dan adakah anda sudah memikirkan kemungkinan 16 GPIO baru yang dapat dikawal menggunakan bas I2C? Baiklah hari ini, saya akan memperkenalkan anda kepada GPIO expander MCP23016. Juga, saya akan menunjukkan kepada anda cara berkomunikasi mikrokontroler dengan MCP23016. Saya juga akan bercakap mengenai membuat program di mana kita hanya akan menggunakan 2 pin mikrokontroler ini untuk berkomunikasi dengan pengembang. Kami akan menggunakannya untuk mengawal LED dan butang.
Langkah 1: Pengenalan
Peranti MCP23016 menyediakan 16 bit untuk pengembangan GPIO menggunakan bas I2C. Setiap bit boleh dikonfigurasi secara individu (input atau output).
MCP23016 terdiri daripada beberapa tetapan 8-bit untuk pemilihan input, output, dan polaritas.
Pengembang memberikan penyelesaian mudah apabila IO diperlukan untuk suis, sensor, butang, dan LED, antara contoh lain.
Langkah 2: Ciri-ciri
16 pin Input / Output (16 input standard)
Kekerapan jam bas I2C pantas (0-400 kbits / s)
Tiga pin alamat perkakasan membenarkan penggunaan sehingga lapan peranti
Ganggu Perakam Tangkap Port
Daftar pembalikan polariti untuk menetapkan polaritas data port input
Sesuai dengan kebanyakan mikrokontroler
Langkah 3: ESP01 Boleh Memiliki 128 GPIO
Contoh yang menunjukkan besarnya pengembang ini adalah penggunaannya dengan ESP01, yang dapat disambungkan ke sehingga lapan pembesar dengan hanya dua IOS, mencapai 128 GPIO.
Langkah 4: MCP23016
Di sini, kita mempunyai skema pengembang, yang mempunyai dua kumpulan lapan bit. Ini menjadikan sejumlah 16 port. Selain pin interrupt, ia mempunyai pin CLK, yang menghubungkan kapasitor dan perintang, yang disambungkan secara dalaman dalam port logik. Ini untuk membentuk jam, menggunakan idea pengayun kristal, yang memerlukan jam 1MHz. Pin TP digunakan untuk mengukur jam. Pin A0, A1, dan A2 adalah alamat binari.
Langkah 5: JAM
Oleh itu, MCP23016 menggunakan litar RC luaran untuk menentukan kelajuan Jam dalaman. Jam dalaman 1 MHz diperlukan (biasanya) agar peranti berfungsi dengan baik. Jam dalaman boleh diukur pada pin TP. Nilai yang disyorkan untuk REXT dan CEXT ditunjukkan di bawah.
Langkah 6: Alamat
Untuk menentukan alamat MCP23016, kita kemudian menggunakan pin A0, A1, dan A2. Biarkan mereka pada TINGGI atau RENDAH untuk pertukaran alamat.
Alamatnya akan dibentuk seperti berikut:
MCP_Address = 20 + (A0 A1 A2)
Di mana A0 A1 A2 dapat mengambil nilai TINGGI / RENDAH, ini membentuk nombor binari dari 0 hingga 7.
Sebagai contoh:
A0> GND, A1> GND, A2> GND (bermaksud 000, kemudian 20 + 0 = 20)
Atau yang lain, A0> TINGGI, A1> GND, A2> TINGGI (bermaksud 101, kemudian 20 + 5 = 25)
Langkah 7: Perintah
Berikut adalah jadual dengan arahan untuk komunikasi. Mari gunakan GP0 dan GP1, serta IODIR0 dan IODIR1.
Langkah 8: Kategori:
GP0 / GP1 - Daftar Port Data
Terdapat dua daftar yang menyediakan akses ke dua port GPIO.
Bacaan daftar memberikan status pin pada port tersebut.
Bit = 1> Bit TINGGI = 0> RENDAH
OLAT0 / OLAT1 - DAFTAR LACTCH Keluaran
Terdapat dua register yang menyediakan akses ke port output dari dua port tersebut.
IPOL0 / IPOL1 - Daftar Polariti Input
Daftar ini membolehkan pengguna mengkonfigurasi polaritas data port input (GP0 dan GP1).
IODIR0 / IODIR1
Terdapat dua register yang mengawal mod pin. (Input atau Output)
Bit = 1> INPUT Bit = 0> OUTPUT
INTCAP0 / INTCAP1 - Interrupt Capture Register
Ini adalah daftar yang mengandungi nilai port yang menghasilkan gangguan.
IOCON0 / IOCON1 - Daftar Kawalan Expander I / O
Ini mengawal fungsi MCP23016.
Setting bit 0 (IARES> Interrupt Activity Resolution) mengawal kekerapan pensampelan pin port GP.
Bit0 = 0> (lalai) Masa pengesanan aktiviti port maksimum ialah 32ms (penggunaan kuasa rendah)
Bit0 = 1> masa pengesanan aktiviti maksimum di port adalah 200usec (penggunaan kuasa lebih tinggi)
Langkah 9: Struktur untuk Komunikasi
Saya tunjukkan di sini kelas Wire, yang merupakan komunikasi I2C dalam Arduino teras kami, yang juga membolehkan pengembang bekerja dengan Arduino Uno dan Mega. Walau bagaimanapun, yang terakhir sudah mempunyai beberapa IO. Kami berurusan di sini dengan alamat cip, kawalan akses, yang merupakan kod daftar, dan juga data.
Langkah 10: Program
Program kami terdiri daripada menyampaikan ESP32 dengan MCP23016 agar lebih banyak GPIO dapat digunakan. Kami kemudian akan mempunyai butang dan beberapa LED disambungkan ke MCP23016. Kami akan mengawal semuanya menggunakan bas I2C sahaja. Oleh itu, hanya dua pin ESP32 yang akan digunakan. Anda dapat melihat litar gambar di bawah dalam video.
Langkah 11: ESP01
Di sini, saya menunjukkan Pinout ESP01.
Langkah 12: Pemasangan ESP01
Dalam contoh ini, kita mempunyai GPIO0 yang tersambung di SDA, dan GPIO2 disambungkan di SCL. Kami juga mempunyai papan geganti, buzzer, dan LED. Di port lain, di GP1.0, kami mempunyai satu LED lagi dengan perintang.
Langkah 13: NodeMCU ESP-12E
Di sini, kita mempunyai Pinout NodeMCU ESP-12E.
Langkah 14: Pemasangan NodeMCU ESP-12E
Dalam kes ini, satu-satunya perbezaan dari contoh pertama ialah anda masing-masing telah menghubungkan D1 dan D2 di SDA dan SCL.
Langkah 15: Node WiFiMCU-32S ESP-WROOM-32
Inilah Pinout WiFi NodeMCU-32S ESP-WROOM-32.
Langkah 16: Node Pemasangan WiFiMCU-32S ESP-WROOM-32
Kali ini, perbezaan utama dari dua contoh lain adalah butang, dan tiga LED berkelip. Di sini, SDA disambungkan ke GPIO19, sementara SCL disambungkan ke GPIO23.
Langkah 17: Perpustakaan dan Pembolehubah
Pertama, kami akan memasukkan Wire.h, yang bertanggungjawab untuk komunikasi i2c, serta menetapkan alamat i2c MCP23016. Saya menunjukkan beberapa arahan, bahkan beberapa yang tidak kita gunakan dalam projek ini.
#masuk // tentukan penggunaan perpustakaan Wire.h // endereço I2C do MCP23016 #define MCPAddress 0x20 // COMMAND BYTE UNTUK MENDAFTAR HUBUNGAN: Jadual: 1-3 Microchip MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // DATA PORT REGISTER 0 #define 0 #define PORT REGISTER 1 #define OLAT0 0x02 // OUTPUT LATCH REGISTER 0 #define OLAT1 0x03 // OUTPUT LATCH REGISTER 1 #define IPOL0 0x04 // INPUT POLARITY PORT DAFTAR 0 # tentukan IPOL1 0x05 // INPUT PORPOR 0 0 / I / O DAFTAR PENDAFTARAN 0 #definisi IODIR1 0x07 // I / O DAFTAR ARAH 1 #tentukan INTCAP0 0x08 // INTERRUPT CAPTURE REGISTER 0 #define INTCAP1 0x09 // INTERRUPT CAPTURE REGISTER 1 #definisi I / OLEH DAFTAR 0 #tentukan IOCON1 0x0B // DAFTAR PENGAWAL PENDAPATAN I / O 1
Langkah 18: Persediaan
Di sini kita mempunyai fungsi untuk menginisialisasi empat jenis mikrokontroler yang berbeza. Kami juga memeriksa frekuensi, mengatur GPIO, dan menetapkan pin. Di Gelung, kami memeriksa status butang.
batal persediaan () {Serial.begin (9600); kelewatan (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // freencia // configura o GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // configura o GPIO1 como INPUT o GP1.0 e como OUTPUT os outros GP1 configurePort (IODIR1, 0x01); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); } gelung void () {// verifica e o botão GP juga pressionado checkButton (GP1); } // gelung akhir
Langkah 19: ConfigurePort
Pada langkah ini, kita mengkonfigurasi mod pin GPIO dan mengenal pasti mod port.
// configura o GPIO (GP0 ou GP1) // como parametro passamos: // port: GP0 ou GP1 // custom: INPUT para todos as portas do GP trabalharem como entrada // OUTPUT para todos seperti portas do GP trabalharem como 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, o restando como saida void configurePort (port uint8_t, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } lain jika (custom == OUTPUT) {writeBlockData (port, 0x00); } lain {writeBlockData (port, custom); }}
Langkah 20: WriteBlockData & CheckButton
Di sini, kami menghantar data ke MCP23016 melalui bas i2c, memeriksa status butang, dan menunjukkan langkah seterusnya sambil mengambil kira keadaan ditekan atau tidak.
// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (registrador) // data: dados (0-255) void writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (data); Wire.endTransmission (); kelewatan (10); }
// verifica se o botão foi pressionado // parametro GP: GP0 ou GP1 void checkButton (uint8_t GP) {// faz a leitura do pino 0 no GP fornecido uint8_t btn = readPin (0, GP); // se botão pressionado, seta para HIGH sebagai portas GP0 jika (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado RENDAH yang lain {writeBlockData (GP0, B00000000); }}
Langkah 21: ReadPin & ValueFromPin
Kami berurusan di sini dengan membaca pin tertentu, dan pengembalian nilai bit ke kedudukan yang diinginkan.
// faz a leitura de um pino específico // pin: pino desejado (0-7) // gp: GP0 ou GP1 // retorno: 0 ou 1 uint8_t readPin (pin uint8_t, uint8_t gp) {status uint8_tGP = 0; Wire.beginTransmission (MCPAddress); Wire.write (gp); Wire.endTransmission (); Wire.requestFrom (MCPAddress, 1); // ler do chip 1 bait statusGP = Wire.read (); nilai pulanganFromPin (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) nilai uint8_tFromPin (pin uint8_t, status uint8_tGP) {return (statusGP & (0x0001 << pin)) == 0? 0: 1; }
Langkah 22: Program ESP8266
Dari sini, kita akan melihat bagaimana program yang kita gunakan di ESP-01 dan di nodeMCU ESP-12E dibuat, yang membolehkan kita memahami bagaimana perbezaan di antara mereka adalah minimum.
Kami hanya akan mengubah baris konstruktor komunikasi i2c, yang merupakan kaedah permulaan objek Wire.
Cukup melepaskan garis mengikut plat yang akan kami susun.
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Persediaan
Perhatikan bahawa pembina masih diberi komen. Oleh itu, ketidakpuasan mengikut papan anda (ESP-01 atau nodeMCU ESP12-E).
batal persediaan () {Serial.begin (9600); kelewatan (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // freencia // configura o GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // configura o GPIO1 como OUTPUT (todos os pinos) configurePort (IODIR1, OUTPUT); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000001); }
Gelung
Dalam gelung, kami menukar pin setiap 1 saat. Oleh itu, apabila pin0 GP0 dihidupkan, pin GP1 mati. Apabila pin0 GP1 dihidupkan, pin GP0 mati.
gelung void () {// seta o pino 7 do GP0 como HIGH e os demais como LOW writeBlockData (GP0, B10000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); kelewatan (1000); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta o pino 0 do GP1 como HIGH e os demais como LOW writeBlockData (GP1, B00000001); kelewatan (1000); } // gelung akhir
Langkah 23: PENTING
Pemboleh ubah dan perpustakaan yang digunakan sama dengan program yang kami lakukan untuk ESP32, begitu juga dengan kaedah configurePort dan writeBlockData.
Langkah 24: Fail
Muat turun fail:
INO (ESP8266)
INO (ESP32)
Disyorkan:
Pemasangan Kabinet untuk Langkah ESP32 dan ESP8266: 7
Pemasangan Kabinet untuk ESP32 dan ESP8266: Kadang-kadang berguna untuk memasang projek berasaskan ESP32 atau ESP8266 anda di kabinet dan memberikan penampilan profesional. Kit kandang kecil ini akan membantu anda membawa projek berasaskan ESP anda pada rel DIN. Kit ini merangkumi prototaip PCB dengan
Mod 3.3V untuk Sensor Ultrasonik (sediakan HC-SR04 untuk Logik 3.3V pada ESP32 / ESP8266, Foton Partikel, dan lain-lain): 4 Langkah
Mod 3.3V untuk Sensor Ultrasonik (sediakan HC-SR04 untuk Logik 3.3V pada ESP32 / ESP8266, Foton Partikel, dan lain-lain): TL; DR: Pada sensor, potong jejak ke pin Echo, kemudian sambungkan semula dengan menggunakan pembahagi voltan (Jejak gema - > 2.7kΩ - > Pin gema - > 4.7kΩ - > GND). Edit: Terdapat beberapa perbahasan mengenai sama ada ESP8266 sebenarnya bertoleransi 5V pada GPIO dalam
Panduan Permulaan untuk ESP8266 dan Tweet Menggunakan ESP8266: 17 Langkah (dengan Gambar)
Panduan Pemula untuk ESP8266 dan Tweeting Menggunakan ESP8266: Saya belajar tentang Arduino 2 tahun yang lalu. Oleh itu, saya mula bermain-main dengan barang-barang mudah seperti LED, butang, motor dan lain-lain. Kemudian saya fikir tidak akan senang untuk berhubung dengan melakukan perkara seperti memaparkan cuaca hari, harga saham, waktu kereta api di paparan LCD. Saya
NODEMCU LUA ESP8266 Dengan MCP23008 8 Bit Port Expander IC: 6 Langkah
NODEMCU LUA ESP8266 Dengan MCP23008 8 Bit Port Expander IC: MCP23008 adalah 8-Bit I / O Expander dengan Serial Interface dan beroperasi antara 1.8 dan 5.5 volt, jadi sangat sesuai untuk ESP8266, Arduino, Raspberry Pi, PIC Chips dan banyak lagi. Sekiranya anda telah melihat Instructable saya yang lain di MCP23017, anda mungkin tertanya-tanya
Meyakinkan Diri Anda untuk Hanya Menggunakan Inverter talian 12V-ke-AC untuk String Lampu LED, dan bukannya Menyalurkannya semula untuk 12V .: 3 Langkah
Meyakinkan Diri Anda untuk Hanya Menggunakan Inverter talian 12V-ke-AC untuk String Lampu LED, dan bukannya Menukar Mereka semula untuk 12V: Rancangan saya adalah mudah. Saya mahu memotong rentetan lampu LED yang bertenaga dinding menjadi kepingan kemudian memasangkannya semula untuk melepaskan 12 volt. Alternatifnya adalah dengan menggunakan power inverter, tetapi kita semua tahu bahawa mereka sangat tidak cekap, bukan? Betul? Atau adakah mereka?