Isi kandungan:

Automasi Kos Rendah Dengan ESP01: 19 Langkah
Automasi Kos Rendah Dengan ESP01: 19 Langkah

Video: Automasi Kos Rendah Dengan ESP01: 19 Langkah

Video: Automasi Kos Rendah Dengan ESP01: 19 Langkah
Video: ESP8266 + Google Assistant = IoT👍 | Tutorial 2024, November
Anonim
Image
Image
MCP23016
MCP23016

Hari ini, kita akan membincangkan automasi menggunakan ESP01 dengan 16 relay. Ini adalah model reka bentuk yang sangat murah di mana anda dapat melipatgandakan modul dan mendapatkan sehingga 128 relai, kerana mungkin untuk menempatkan sehingga lapan pengembang port dalam mikrokontroler ini.

Di litar kami, anda akan mempunyai aplikasi pada telefon pintar yang berkomunikasi dengan ESP01. Ia akan mempunyai expander dengan 16 port, masing-masing disambungkan ke relay. Kami juga mempunyai sumber laras 3v3. Oleh itu, kami akan mengawal modul relay 16 saluran menggunakan ESP01 melalui aplikasi Android, yang saya sediakan untuk anda.

Langkah 1: Petua untuk Ingat

Penting untuk diperhatikan, kawan-kawan, bahawa saya menggunakan cip ini dalam litar yang disebut MCP23016. Anda juga perlu menonton video EXPANSOR OF IOS FOR ESP32, ESP8266 AND ARDUINO, di mana saya menguji peranti dan menunjukkan bahawa ia berfungsi untuk ketiga-tiga jenis papan ini.

Langkah 2: MCP23016

Di sini kita mempunyai gambar MCP23016, yang merupakan cip dengan 28 pin. Penting untuk disebutkan bahawa terdapat juga model MCP23017, yang lebih biasa dan tidak memerlukan perintang dan kapasitor, kerana ia mempunyai jam dalaman. Ini menjadikannya lebih mudah, tetapi penyematannya berbeza dengan yang kami tunjukkan dalam video ini.

Langkah 3: Alamat

Alamat
Alamat

Untuk menentukan alamat MCP23016, kami menggunakan pin A0, A1, dan A2. Anda boleh membiarkannya pada TINGGI atau RENDAH untuk pertukaran alamat.

Alamatnya akan dibentuk seperti berikut:

MCP_Address = 20 + (A2 A1 A0)

Di mana A2 A1 A0 dapat mengambil nilai TINGGI / RENDAH, nombor binari dari 0 hingga 7 bentuk.

Sebagai contoh:

A2> GND, A1> GND, A0> GND (bermaksud 000, kemudian 20 + 0 = 20)

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

Langkah 4: Perintah

Perintah
Perintah

Berikut adalah jadual dengan arahan untuk komunikasi:

Langkah 5: 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

IODIR0 / IODIR1

Terdapat dua register yang mengawal mod pin. (Input atau Output)

Bit = 1> INPUT Bit = 0> OUTPUT

Langkah 6: Struktur untuk Komunikasi

Struktur untuk Komunikasi
Struktur untuk Komunikasi

Di sini kita membincangkan alamat chip, dan mengakses perintah dan data, yang merupakan sejenis protokol yang perlu dilakukan untuk menghantar maklumat.

Langkah 7: Program

Program
Program

Kami akan melakukan program yang terdiri daripada menyampaikan ESP01 dengan MCP23016 agar lebih banyak GPIO dapat digunakan. 16 GPIO baru yang akan kita ada akan mengawal modul relay 16-saluran.

Perintah akan dihantar 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: Pemasangan ESP01

Pemasangan ESP01
Pemasangan ESP01

Langkah 11: Perpustakaan dan Pemboleh ubah

Kami akan memasukkan perpustakaan yang bertanggungjawab untuk komunikasi i2c, dan untuk membuat Titik Akses dan pelayan web. Kami menentukan alamat cip dan port. Akhirnya, kami menentukan pemboleh ubah untuk menyimpan nilai-nilai pin MCP.

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

Langkah 12: Persediaan

Kami memulakan ESP01 dan mengkonfigurasi port. Kami juga mengkonfigurasi Titik Akses dan memulakan pelayan.

batal persediaan () {Serial.begin (9600); kelewatan (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); tulisBlockData (GP0, 0x00); tulisBlockData (GP1, 0x00); persediaanWiFi (); // configuração do Access Point server.begin (); // inicializa o server}

Langkah 13: Gelung

Di sini saya periksa sama ada pelanggan telah disambungkan ke pelayan. Kami juga membaca baris permintaan pertama. Kami mengekstrak data untuk manipulasi, menentukan tajuk respons lalai, dan mengirimkan respons ini kepada klien.

gelung void () {WiFiClient client = server.available (); // Verifica se um cliente juga conectado sekiranya (! Client) {return; } 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} yang lain {Serial.println ("permintaan tidak sah"); kembali; } pelanggan.flush (); Rentetan s = "HTTP / 1.1 200 OK / r / n"; // cabeçalho padrão de resposta client.print (s); // envia a resposta para o cliente delay (1); } // gelung akhir

Langkah 14: ParserData

ParserData
ParserData

Dari permintaan tersebut, kami mencari data yang berkaitan dengan relay. Kami kemudian menghantar data ke MCP23016.

// a partir da requisição busca os dados referente aos relésvoid parserData (String data) {uint8_t relay = -1; uint8_t gp = -1; nilai uint8_t = -1; int index = 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'; relay = data [indeks + 4] - '0'; nilai = data [indeks + 6] - '0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relay-1, nilai, gp); }}

Langkah 15: ConfigurePort

Kami menetapkan mod pin GPIO (GP0 atau GP1).

// configura o modo dos pinos GPIO (GP0 ou GP1) // como parametro passamos: // port: GP0 ou GP1 // 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 restante 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 16: WritePinData

Di bahagian kod ini, kami mengubah keadaan 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 do MCP) batal writePinData (pin int, nilai int, uint8_t gp) {uint8_t statusGP = 0; jika (gp == GP0) statusGP = currentValueGP0; status lainGP = currentValueGP1; jika (nilai == 0) {statusGP & = ~ (B00000001 << (pin)); // muda o pino para LOW} lain jika (nilai == 1) {statusGP | = (B00000001 << (pin)); // muda o pino para TINGGI} jika (gp == GP0) currentValueGP0 = statusGP; lain-lain currentValueGP1 = statusGP; // envia os dados para o MCP writeBlockData (gp, statusGP); kelewatan (10); }

Langkah 17: WriteBlockData & SetupWiFi

Di sini, kami menghantar data ke MCP23016 melalui bas i2c. Seterusnya, kami mengkonfigurasi sifat untuk mengaktifkan Titik Akses. Akhirnya, kami mengkonfigurasi WiFi untuk mod Titik Akses dan membuat AP dengan SSID dan PASSWORD.

// envia dados para o 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); Wire.write (data); Wire.endTransmission (); kelewatan (10); }

// configura as propriedades para habilitar o ACCESS POINHindari setupWiFi () {WiFi.mode (WIFI_AP); WiFi.softAP ("ESP01_RELAY", "12345678"); }

Langkah 18: Aplikasi

Aplikasi
Aplikasi
Aplikasi
Aplikasi
Aplikasi
Aplikasi
Aplikasi
Aplikasi

Untuk membuat aplikasi, kami menggunakan MIT App Inventor 2, yang dapat diakses melalui pautan:

ai2.appinventor.mit.edu/

Aplikasi ini terdiri daripada dua skrin yang mengandungi lapan pasang butang di masing-masing, menunjukkan status setiap geganti.

Berikut adalah beberapa blok pengaturcaraan yang digunakan:

PENTING: Alamat IP lalai ESP, kerana Titik Akses adalah 192.168.4.1

1. Apabila skrin dimulakan, kita menyimpan IP dalam memori dan memanggil prosedur untuk memulihkan keadaan butang (ON / OFF).

2. Panggil skrin lain

1. Apabila mengklik butang ON salah satu relay, kita akan membuat perubahan visual pada butang (blok hijau). WebViewer1. GoToUrl membuat permintaan untuk ESP01 kami dengan menghubungkan data MR01 / 1 dalam URL.

2. Apabila mengklik butang OFF salah satu relay, kita akan membuat perubahan visual pada butang (blok hijau). WebViewer1. GoToUrl membuat permintaan ke ESP01 kami dengan menghubungkan data MR01 / 0 di URL.

Prosedur ini digunakan untuk memulihkan keadaan butang (relay), kerana ketika mengubah layar, ia kembali ke pola penciptaan.

Blok kuning berulang untuk setiap pasangan butang.

Langkah 19: Muat turun

Berikut adalah fail projek untuk dimuat turun:

Fail projek MIT App Inventor 2 - muat turun

APK Aplikasi untuk dipasang di android - muat turun

Muat turun fail lain:

PDF

INO

Disyorkan: