Mục lục:

Tự động hóa chi phí thấp với ESP01: 19 bước
Tự động hóa chi phí thấp với ESP01: 19 bước

Video: Tự động hóa chi phí thấp với ESP01: 19 bước

Video: Tự động hóa chi phí thấp với ESP01: 19 bước
Video: [Lập trình ESP 32]Bài 10 - Hướng dẫn kết nối server blynk và điều khiển thiết bị qua internet 2024, Tháng mười một
Anonim
Image
Image
MCP23016
MCP23016

Hôm nay, chúng ta sẽ thảo luận về tự động hóa bằng cách sử dụng ESP01 với 16 rơ le. Đây là một mô hình thiết kế siêu rẻ, nơi bạn có thể nhân các mô-đun và nhận được tối đa 128 rơ le, vì có thể đặt tối đa tám bộ mở rộng cổng trong bộ vi điều khiển này.

Trong mạch của chúng tôi, bạn sẽ có một ứng dụng trên điện thoại thông minh giao tiếp với ESP01. Nó sẽ có một bộ mở rộng với 16 cổng, mỗi cổng được kết nối với một rơ le. Chúng tôi cũng có một nguồn điều chỉnh 3v3. Do đó, chúng tôi sẽ điều khiển mô-đun chuyển tiếp 16 kênh bằng ESP01 thông qua ứng dụng Android mà tôi cung cấp cho bạn.

Bước 1: Mẹo cần nhớ

Điều quan trọng cần lưu ý, các bạn của tôi, rằng tôi đã sử dụng chip này trong một mạch có tên MCP23016. Bạn cũng nên xem video MỞ RỘNG CỦA IOS CHO ESP32, ESP8266 VÀ ARDUINO, trong đó tôi kiểm tra thiết bị và cho thấy rằng nó hoạt động với ba loại bảng này.

Bước 2: MCP23016

Ở đây chúng ta có hình ảnh của MCP23016, là một con chip có 28 chân. Điều quan trọng cần đề cập là còn có kiểu MCP23017, phổ biến hơn và không cần điện trở và tụ điện vì nó có đồng hồ bên trong. Điều này làm cho nó dễ dàng hơn, nhưng cách ghim của nó khác với những gì chúng tôi hiển thị trong video này.

Bước 3: Địa chỉ

Địa chỉ nhà
Địa chỉ nhà

Để xác định địa chỉ của MCP23016, chúng tôi sử dụng các chân A0, A1 và A2. Bạn chỉ có thể để chúng ở mức CAO hoặc THẤP để thay đổi địa chỉ.

Địa chỉ sẽ được hình thành như sau:

MCP_Address = 20 + (A2 A1 A0)

Trong đó A2 A1 A0 có thể nhận các giá trị CAO / THẤP, một số nhị phân từ 0 đến 7 có dạng.

Ví dụ:

A2> GND, A1> GND, A0> GND (nghĩa là 000, sau đó 20 + 0 = 20)

Hay nói cách khác, A2> CAO, A1> GND, A0> CAO (nghĩa là 101, sau đó 20 + 5 = 25)

Bước 4: Lệnh

Lệnh
Lệnh

Đây là một bảng với các lệnh để giao tiếp:

Bước 5: Danh mục

GP0 / GP1 - Thanh ghi cổng dữ liệu

Có hai thanh ghi cung cấp quyền truy cập vào hai cổng GPIO.

Việc đọc thanh ghi cung cấp trạng thái của các chân trên cổng đó.

Bit = 1> Bit CAO = 0> THẤP

IODIR0 / IODIR1

Có hai thanh ghi điều khiển chế độ pin. (Đầu vào hoặc Đầu ra)

Bit = 1> INPUT Bit = 0> OUTPUT

Bước 6: Cấu trúc giao tiếp

Cấu trúc giao tiếp
Cấu trúc giao tiếp

Ở đây chúng ta nói về địa chỉ của chip và truy cập lệnh và dữ liệu, đây là một loại giao thức cần được thực hiện để gửi thông tin.

Bước 7: Chương trình

Chương trình
Chương trình

Chúng tôi sẽ thực hiện một chương trình bao gồm giao tiếp ESP01 với MCP23016 để có nhiều GPIO hơn để sử dụng. 16 GPIO mới này mà chúng tôi sẽ có sẽ điều khiển mô-đun chuyển tiếp 16 kênh.

Các lệnh sẽ được gửi đến ESP01 thông qua một ứng dụng Android.

Bước 8: MCP23016

MCP23016
MCP23016

Bước 9: ESP-01

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

Đây là một bảng 16 rơ le.

Bước 10: Gắn ESP01

Gắn ESP01
Gắn ESP01

Bước 11: Thư viện và biến

Chúng tôi sẽ bao gồm các thư viện chịu trách nhiệm về giao tiếp i2c và tạo Access Point và máy chủ web. Chúng tôi xác định địa chỉ của chip và các cổng. Cuối cùng, chúng tôi xác định các biến để lưu trữ giá trị của các chân MCP.

#include // responseável pela comunicação i2c. # include // responseá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 // ENDEREÇORES # ĐĂNG KÝ định nghĩa GP0 0x00 // ĐĂNG KÝ CỔNG DỮ LIỆU 0 #define GP1 0x01 // ĐĂNG KÝ CỔNG DỮ LIỆU 1 #define IODIR0 0x06 // ĐĂNG KÝ HƯỚNG I / O 0 #define IODIR1 0x07 // ĐĂNG KÝ HƯỚNG I / O 1 // Guarda os valores dos pinos làm MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Bước 12: Thiết lập

Chúng tôi khởi tạo ESP01 và cấu hình các cổng. Chúng tôi cũng định cấu hình Điểm truy cập và khởi tạo máy chủ.

void setup () {Serial.begin (9600); chậm trễ (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configPort (IODIR0, OUTPUT); configPort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // configuração do Access Point server.begin (); // inicializa o server}

Bước 13: Vòng lặp

Ở đây tôi kiểm tra xem có bất kỳ máy khách nào đã được kết nối với máy chủ hay không. Chúng tôi cũng đọc dòng yêu cầu đầu tiên. Chúng tôi trích xuất dữ liệu để thao tác, xác định tiêu đề phản hồi mặc định và gửi phản hồi này đến máy khách.

void loop () {WiFiClient client = server.available (); // Verifica se um cliente foi conectado if (! Client) {return; } String req = client.readStringUntil ('\ r'); // Faz a leitura da primeira linha da recisição / * / MR é o header prefixo para saber se a suggestição é a esperada para os relés * / if (req.indexOf ("/ MR")! = -1) {parserData (req); // a partr da muoição extrai os dados para dictulação} else {Serial.println ("yêu cầu không hợp lệ"); trở lại; } client.flush (); Chuỗi 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); } // kết thúc vòng lặp

Bước 14: ParserData

ParserData
ParserData

Từ yêu cầu, chúng tôi tìm kiếm dữ liệu liên quan đến các rơ le. Sau đó, chúng tôi gửi dữ liệu đến MCP23016.

// a Partr da muoição busca os dados referencente aos relésvoid parserData (Dữ liệu chuỗi) {uint8_t relay = -1; uint8_t gp = -1; giá trị 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 (bật / tắt) {gp = data [index + 3] - '0'; relay = data [index + 4] - '0'; value = data [index + 6] - '0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relay-1, value, gp); }}

Bước 15: Định cấu hình

Chúng tôi đặt chế độ chân GPIO (GP0 hoặc 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 as portas do GP trabalharem como saida // tùy chỉnh um valor de 0-255 indicando o modo das portas (1 = INPUT, 0 = OUTPUT) // ví dụ: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, o restante como saida void configPort (uint8_t port, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (custom == OUTPUT) {writeBlockData (port, 0x00); } else {writeBlockData (port, custom); }}

Bước 16: WritePinData

Trong phần này của mã, chúng tôi thay đổi trạng thái của một chân mong muốn và gửi dữ liệu đến MCP.

// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; giá trị = 0/1 (bật / tắt); gp = 0/1 (PORT do MCP) void writePinData (int pin, int value, uint8_t gp) {uint8_t statusGP = 0; if (gp == GP0) statusGP = currentValueGP0; else statusGP = currentValueGP1; if (value == 0) {statusGP & = ~ (B00000001 << (pin)); // muda o pino para LOW} else if (value == 1) {statusGP | = (B00000001 << (pin)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; else currentValueGP1 = statusGP; // envia os dados para o MCP writeBlockData (gp, statusGP); chậm trễ (10); }

Bước 17: WriteBlockData & SetupWiFi

Ở đây, chúng tôi gửi dữ liệu đến MCP23016 thông qua bus i2c. Tiếp theo, chúng tôi định cấu hình các thuộc tính để kích hoạt Điểm truy cập. Cuối cùng, chúng tôi đã định cấu hình WiFi cho chế độ Điểm truy cập và tạo một AP với SSID và MẬT KHẨU.

// envia dados para o MCP23016 através do barramento i2c // reg: REGISTRADOR // data: dados (0-255) void writeBlockData (uint8_t port, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cổng); Wire.write (dữ liệu); Wire.endTransmission (); chậm trễ (10); }

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

Bước 18: Ứng dụng

Ứng dụng
Ứng dụng
Ứng dụng
Ứng dụng
Ứng dụng
Ứng dụng
Ứng dụng
Ứng dụng

Để tạo ứng dụng, chúng tôi sử dụng MIT App Inventor 2, có thể được truy cập thông qua liên kết:

ai2.appinventor.mit.edu/

Ứng dụng này bao gồm hai màn hình chứa tám cặp nút trong mỗi nút, cho biết trạng thái của mỗi rơ le.

Sau đây là một số khối lập trình được sử dụng:

QUAN TRỌNG: Địa chỉ IP mặc định của ESP, như Điểm truy cập là 192.168.4.1

1. Khi màn hình khởi tạo, chúng ta lưu IP vào bộ nhớ và gọi thủ tục khôi phục trạng thái của các nút (ON / OFF).

2. Gọi màn hình khác

1. Khi nhấp vào nút BẬT của một trong các rơ le, chúng ta sẽ thực hiện các thay đổi trực quan trong nút (các khối màu xanh lá cây). WebViewer1. GoToUrl thực hiện yêu cầu cho ESP01 của chúng tôi bằng cách liên kết dữ liệu MR01 / 1 trong URL.

2. Khi nhấp vào nút TẮT của một trong các rơ le, chúng tôi sẽ thực hiện các thay đổi trực quan trong nút (các khối màu xanh lá cây). WebViewer1. GoToUrl thực hiện yêu cầu tới ESP01 của chúng tôi bằng cách liên kết dữ liệu MR01 / 0 trong URL.

Thủ tục này được sử dụng để khôi phục trạng thái của các nút (rơ le), vì khi thay đổi màn hình, nó sẽ quay trở lại mẫu tạo.

Khối màu vàng lặp lại cho mỗi cặp nút.

Bước 19: Tải xuống

Dưới đây là các tệp dự án để tải xuống:

Tệp dự án MIT App Inventor 2 - tải xuống

APK ứng dụng để cài đặt trên Android - Tải xuống

Tải xuống các tệp khác:

PDF

NS

Đề xuất: