Daftar Isi:

Otomatisasi Biaya Rendah Dengan ESP01: 19 Langkah
Otomatisasi Biaya Rendah Dengan ESP01: 19 Langkah

Video: Otomatisasi Biaya Rendah Dengan ESP01: 19 Langkah

Video: Otomatisasi Biaya Rendah Dengan ESP01: 19 Langkah
Video: Raspberry Pi: Home Automation Using WiFi ESP8266 2024, November
Anonim
Image
Image
MCP23016
MCP23016

Hari ini, kita akan membahas otomatisasi menggunakan ESP01 dengan 16 relay. Ini adalah model desain super murah di mana Anda dapat melipatgandakan modul dan mendapatkan hingga 128 relai, karena dimungkinkan untuk memasang hingga delapan port expander di mikrokontroler ini.

Di sirkuit kami, Anda akan memiliki aplikasi pada smartphone yang berkomunikasi dengan ESP01. Ini akan memiliki expander dengan 16 port, masing-masing terhubung ke relai. Kami juga memiliki sumber yang dapat disesuaikan 3v3. Karena itu kami akan mengontrol modul relai 16 saluran menggunakan ESP01 melalui aplikasi Android, yang saya sediakan untuk Anda.

Langkah 1: Kiat untuk Diingat

Penting untuk dicatat, teman-teman, bahwa saya menggunakan chip ini di sirkuit yang disebut MCP23016. Penting juga bagi Anda untuk menonton video EXPANSOR IOS UNTUK ESP32, ESP8266 DAN ARDUINO, di mana saya menguji perangkat dan menunjukkan bahwa itu berfungsi untuk ketiga jenis papan ini.

Langkah 2: MCP23016

Di sini kita memiliki gambar MCP23016, yang merupakan chip dengan 28 pin. Penting untuk disebutkan juga ada model MCP23017, yang lebih umum dan tidak memerlukan resistor dan kapasitor, karena memiliki jam internal. Ini membuatnya lebih mudah, tetapi penyematannya berbeda dengan yang kami tampilkan di video ini.

Langkah 3: Alamat

Alamat
Alamat

Untuk menentukan alamat MCP23016, kami menggunakan pin A0, A1, dan A2. Anda bisa membiarkannya di TINGGI atau RENDAH untuk perubahan alamat.

Alamat akan terbentuk sebagai berikut:

MCP_Address = 20 + (A2 A1 A0)

Di mana A2 A1 A0 dapat mengambil nilai TINGGI / RENDAH, angka biner dari 0 hingga 7.

Sebagai contoh:

A2> GND, A1> GND, A0> GND (berarti 000, maka 20 + 0 = 20)

Atau sebaliknya, A2> TINGGI, A1> GND, A0> TINGGI (berarti 101, lalu 20 + 5 = 25)

Langkah 4: Perintah

Perintah
Perintah

Berikut adalah tabel dengan perintah untuk komunikasi:

Langkah 5: Kategori

GP0/ GP1 - Register Port Data

Ada dua register yang menyediakan akses ke dua port GPIO.

Pembacaan register memberikan status pin pada port tersebut.

Bit = 1> TINGGI Bit = 0> RENDAH

IODIR0 / IODIR1

Ada dua register yang mengontrol mode pin. (Masukan atau Keluaran)

Bit = 1> INPUT Bit = 0> OUTPUT

Langkah 6: Struktur untuk Komunikasi

Struktur untuk Komunikasi
Struktur untuk Komunikasi

Di sini kita berbicara tentang alamat chip, dan mengakses perintah dan data, yang merupakan semacam protokol yang perlu dilakukan untuk mengirim informasi.

Langkah 7: Program

Program
Program

Kami akan melakukan program yang terdiri dari mengkomunikasikan ESP01 dengan MCP23016 agar memiliki lebih banyak GPIO untuk digunakan. 16 GPIO baru yang akan kita miliki ini akan mengontrol modul relai 16 saluran.

Perintah akan dikirim ke ESP01 melalui aplikasi Android.

Langkah 8: MCP23016

MCP23016
MCP23016

Langkah 9: ESP-01

ESP-01
ESP-01
ESP-01
ESP-01

Ini adalah papan 16-relay.

Langkah 10: Memasang ESP01

Memasang ESP01
Memasang ESP01

Langkah 11: Pustaka dan Variabel

Kami akan menyertakan perpustakaan yang bertanggung jawab untuk komunikasi i2c, dan untuk membuat Titik Akses dan server web. Kami menentukan alamat chip dan port. Akhirnya, kami mendefinisikan variabel untuk menyimpan nilai pin MCP.

#include // responsável pela comunicação i2c.#include //respons por criar o accesspoint eo webserver WiFiServer server(80);//webserver para acessarmos através do aplicativo //endereço I2C do MCP23016 #define MCPAddressÇ0x20 DE REENDERTRAEDORESOS define GP0 0x00 // DATA PORT REGISTER 0 #define GP1 0x01 // DATA PORT REGISTER 1 #define IODIR0 0x06 // I/O DIRECTION REGISTER 0 #define IODIR1 0x07 // I/O DIRECTION REGISTER 1 // guarda os valores dos pinos lakukan MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Langkah 12: Pengaturan

Kami menginisialisasi ESP01 dan mengkonfigurasi port. Kami juga mengkonfigurasi Access Point dan menginisialisasi server.

void setup() { Serial.begin(9600); penundaan (1000); Kawat.begin(0, 2); //ESP01 Kawat.setJam(2000000); configurePort(IODIR0, OUTPUT); configurePort(IODIR1, OUTPUT); writeBlockData(GP0, 0x00); writeBlockData(GP1, 0x00); setupWiFi(); //konfigurasi untuk melakukan Access Point server.begin();//inisialisasi server }

Langkah 13: Putaran

Di sini saya memeriksa apakah ada klien yang telah terhubung ke server. Kami juga membaca baris permintaan pertama. Kami mengekstrak data untuk manipulasi, menentukan header respons default, dan mengirimkan respons ini ke klien.

void loop() { klien WiFiClient = server.available(); // Verifikasi se um klien untuk koneksi jika (!klien) { kembali; } String req = client.readStringUntil('\r');// Faz a leitura da primeira linha da requisição /* /MR é o header prefixo para saber se a requisição é a esperada para os relés */ if(req.indexOf ("/MR") != -1) { parserData(req); //a partir da requisição extrai os dados para manipulação } else{ Serial.println("permintaan tidak valid"); kembali; } klien.flush(); String s = "HTTP/1.1 200 OK\r\n"; // cabeçalho padrão de resposta client.print(s); // envia a resposta para o klien delay(1); } // akhiri putaran

Langkah 14: ParserData

ParserData
ParserData

Dari request tersebut, kita mencari data yang berhubungan dengan relay. Kami kemudian mengirim data ke MCP23016.

//a partir da requisição busca os dados referente aos relésvoid parserData(Data string) { uint8_t relai = -1; uint8_t gp = -1; nilai uint8_t = -1; int indeks = data.indexOf("/MR"); //busca o index do prefixo MR if(data[index+5] == '/') // /MR01/1, onde 0 = GP; 1 = RELE; 1 = ESTADO(hidup/mati) { gp = data[indeks+3]-'0'; relai = data[indeks+4]-'0'; nilai = data[indeks+6]-'0'; //envia os dados para o MCP23016 //[relay-1] porque o MCP dengan 0-7 os pinos writePinData(relay-1, nilai, gp); } }

Langkah 15: Konfigurasi Port

Kami mengatur mode pin GPIO (GP0 atau GP1).

//konfigurasi untuk modo dos pinos GPIO (GP0 ou GP1)//como parametro passamos: // port: GP0 atau GP1 // INPUT para todos as portas do GP trabalharem como entrada // OUTPUT para todos as 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, atau restante como saida void configurePort (port uint8_t, uint8_t custom) { if(custom == INPUT) { writeBlockData(port, 0xFF); } else if(custom == OUTPUT) { writeBlockData(port, 0x00); } else { writeBlockData(port, custom); } }

Langkah 16: WritePinData

Di bagian kode ini, kami mengubah status pin yang diinginkan dan mengirim data ke MCP.

//muda o estado de um pino desejado, passando como parametro://pin = pino desejado; nilai = 0/1 (hidup/mati); gp = 0/1 (PORT melakukan MCP) void writePinData(int pin, int value, uint8_t gp) { uint8_t statusGP = 0; if(gp == GP0) statusGP = currentValueGP0; lain statusGP = currentValueGP1; if (nilai == 0) { statusGP &= ~(B0000001 << (pin)); // muda o pino para LOW } else if (nilai == 1) { statusGP |= (B0000001 << (pin)); // muda o pino para HIGH } if(gp == GP0) currentValueGP0 = statusGP; lain currentValueGP1 = statusGP; //envia os dados para o MCP writeBlockData(gp, statusGP); penundaan (10); }

Langkah 17: WriteBlockData & SetupWiFi

Di sini, kami mengirim data ke MCP23016 melalui bus i2c. Selanjutnya, kita mengkonfigurasi properti untuk mengaktifkan Access Point. Terakhir, kami mengkonfigurasi WiFi untuk mode Access Point dan membuat AP dengan SSID dan PASSWORD.

//envia dados untuk MCP23016 através do barramento i2c//reg: REGISTRADOR //data: dados (0-255) void writeBlockData(port uint8_t, data uint8_t) { Wire.beginTransmission(MCPAddress); Wire.write(port); Kawat.tulis(data); Kawat.endTransmisi(); penundaan (10); }

//konfigurasi sebagai proprieades para habilitar o ACCESS POINTvoid setupWiFi() { WiFi.mode(WIFI_AP); WiFi.softAP("ESP01_RELAY", "12345678"); }

Langkah 18: Aplikasi

Aplikasi
Aplikasi
Aplikasi
Aplikasi
Aplikasi
Aplikasi
Aplikasi
Aplikasi

Untuk membuat aplikasinya, kami menggunakan MIT App Inventor 2 yang dapat diakses melalui link:

ai2.appinventor.mit.edu/

Aplikasi ini terdiri dari dua layar yang masing-masing berisi delapan pasang tombol, yang menunjukkan status masing-masing relai.

Berikut ini adalah beberapa blok pemrograman yang digunakan:

PENTING: Alamat IP default ESP, karena Access Point adalah 192.168.4.1

1. Saat layar diinisialisasi, kami menyimpan IP dalam memori dan memanggil prosedur untuk memulihkan status tombol (ON / OFF).

2. Panggil layar lain

1. Saat mengklik tombol ON salah satu relai, kami akan membuat perubahan visual pada tombol (blok hijau). WebViewer1. GoToUrl membuat permintaan untuk ESP01 kami dengan menautkan data MR01 / 1 di URL.

2. Saat mengklik tombol OFF dari salah satu relay, kami akan membuat perubahan visual pada tombol (blok hijau). WebViewer1. GoToUrl membuat permintaan ke ESP01 kami dengan menautkan data MR01 / 0 di URL.

Prosedur ini digunakan untuk memulihkan status tombol (relai), karena saat mengubah layar, ia kembali ke pola pembuatan.

Blok kuning berulang untuk setiap pasangan tombol.

Langkah 19: Unduh

Berikut adalah file proyek untuk diunduh:

File proyek MIT App Inventor 2 - unduh

Aplikasi APK untuk diinstal di android - unduh

Unduh file lainnya:

PDF

SAYA TIDAK

Direkomendasikan: