Πίνακας περιεχομένων:

Αυτοματοποίηση χαμηλού κόστους με ESP01: 19 βήματα
Αυτοματοποίηση χαμηλού κόστους με ESP01: 19 βήματα

Βίντεο: Αυτοματοποίηση χαμηλού κόστους με ESP01: 19 βήματα

Βίντεο: Αυτοματοποίηση χαμηλού κόστους με ESP01: 19 βήματα
Βίντεο: Μείωσε το λογαριασμό ρεύματος με ενέργειες χαμηλού κόστους 2024, Νοέμβριος
Anonim
Image
Image
MCP23016
MCP23016

Σήμερα, θα συζητήσουμε την αυτοματοποίηση χρησιμοποιώντας το ESP01 με 16 ρελέ. Αυτό είναι ένα εξαιρετικά φθηνό μοντέλο σχεδιασμού όπου μπορείτε να πολλαπλασιάσετε τις μονάδες και να λάβετε έως και 128 ρελέ, καθώς είναι δυνατό να τοποθετήσετε έως και οκτώ επεκτάσεις θύρας σε αυτόν τον μικροελεγκτή.

Στο κύκλωμά μας, θα έχετε μια εφαρμογή σε smartphone που επικοινωνεί με το ESP01. Θα έχει διαστολέα με 16 θύρες, η κάθε μία συνδεδεμένη σε ρελέ. Έχουμε επίσης μια ρυθμιζόμενη πηγή 3v3. Επομένως, θα ελέγξουμε μια μονάδα αναμετάδοσης 16 καναλιών χρησιμοποιώντας το ESP01 μέσω της εφαρμογής Android, την οποία σας διαθέτω.

Βήμα 1: Συμβουλή για να θυμάστε

Είναι σημαντικό να σημειώσετε, φίλοι μου, ότι χρησιμοποίησα αυτό το τσιπ σε ένα κύκλωμα που ονομάζεται MCP23016. Είναι επίσης σημαντικό για εσάς να παρακολουθήσετε το βίντεο EXPANSOR OF IOS FOR ESP32, ESP8266 AND ARDUINO, στο οποίο δοκιμάζω τη συσκευή και δείχνω ότι λειτουργεί για αυτούς τους τρεις τύπους πλακετών.

Βήμα 2: MCP23016

Εδώ έχουμε μια εικόνα του MCP23016, το οποίο είναι ένα τσιπ με 28 ακίδες. Είναι σημαντικό να αναφέρουμε ότι υπάρχει επίσης το μοντέλο MCP23017, το οποίο είναι πιο συνηθισμένο και δεν χρειάζεται αντίσταση και πυκνωτή, επειδή έχει εσωτερικό ρολόι. Αυτό το διευκολύνει, αλλά το καρφίτσωμά του είναι διαφορετικό από αυτό που δείχνουμε σε αυτό το βίντεο.

Βήμα 3: Διεύθυνση

Διεύθυνση
Διεύθυνση

Για να ορίσουμε τη διεύθυνση του MCP23016, χρησιμοποιούμε τις ακίδες A0, A1 και A2. Μπορείτε απλά να τα αφήσετε στο HIGH ή LOW για αλλαγή διεύθυνσης.

Η διεύθυνση θα διαμορφωθεί ως εξής:

MCP_Address = 20 + (A2 A1 A0)

Όπου το A2 A1 A0 μπορεί να λάβει τιμές HIGH / LOW, σχηματίζεται ένας δυαδικός αριθμός από 0 έως 7.

Για παράδειγμα:

A2> GND, A1> GND, A0> GND (σημαίνει 000, στη συνέχεια 20 + 0 = 20)

Ή αλλιώς, A2> HIGH, A1> GND, A0> HIGH (σημαίνει 101, μετά 20 + 5 = 25)

Βήμα 4: Εντολές

Εντολές
Εντολές

Ακολουθεί ένας πίνακας με εντολές για επικοινωνία:

Βήμα 5: Κατηγορίες

GP0 / GP1 - Καταχωρητές θύρας δεδομένων

Υπάρχουν δύο καταχωρητές που παρέχουν πρόσβαση στις δύο θύρες GPIO.

Η ανάγνωση καταχωρητή παρέχει την κατάσταση των ακίδων σε αυτήν τη θύρα.

Bit = 1> HIGH Bit = 0> LOW

IODIR0 / IODIR1

Υπάρχουν δύο καταχωρητές που ελέγχουν τη λειτουργία pin. (Είσοδος ή Έξοδος)

Bit = 1> ΕΙΣΟΔΟΣ Bit = 0> OUTPUT

Βήμα 6: Δομή για την Επικοινωνία

Δομή για την Επικοινωνία
Δομή για την Επικοινωνία

Εδώ μιλάμε για τη διεύθυνση του τσιπ και έχουμε πρόσβαση στην εντολή και τα δεδομένα, τα οποία είναι ένα είδος πρωτοκόλλου που πρέπει να γίνει για την αποστολή πληροφοριών.

Βήμα 7: Πρόγραμμα

Πρόγραμμα
Πρόγραμμα

Θα κάνουμε ένα πρόγραμμα που συνίσταται στην επικοινωνία του ESP01 με το MCP23016 για να έχουμε περισσότερους GPIO για χρήση. Αυτά τα 16 νέα GPIO που θα έχουμε πρόκειται να ελέγξουν μια μονάδα ρελέ 16 καναλιών.

Οι εντολές θα σταλούν στο ESP01 μέσω μιας εφαρμογής Android.

Βήμα 8: MCP23016

MCP23016
MCP23016

Βήμα 9: ESP-01

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

Αυτός είναι ένας πίνακας 16 ρελέ.

Βήμα 10: Τοποθέτηση ESP01

Τοποθέτηση ESP01
Τοποθέτηση ESP01

Βήμα 11: Βιβλιοθήκες και μεταβλητές

Θα συμπεριλάβουμε τις βιβλιοθήκες που είναι υπεύθυνες για την επικοινωνία i2c και για τη δημιουργία του σημείου πρόσβασης και του διακομιστή ιστού. Ορίζουμε τη διεύθυνση του τσιπ και τις θύρες. Τέλος, ορίζουμε τις μεταβλητές για να αποθηκεύσουμε τις τιμές των ακίδων MCP.

#include // responsável pela comunicação i2c. #include // responsável por criar o accesspoint eo webserver WiFiServer server (80); // webserver για περισσότερες εφαρμογές για εφαρμογή // endereço I2C do MCP23016 #define MCPAddress 0XOR // ENDEREE 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 κάνει MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Βήμα 12: Ρύθμιση

Αρχικοποιούμε το ESP01 και διαμορφώνουμε τις θύρες. Διαμορφώνουμε επίσης το Σημείο Πρόσβασης και προετοιμάζουμε τον διακομιστή.

void setup () {Serial.begin (9600); καθυστέρηση (1000)? Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // configuração do Access Point server.begin (); // inicializa o server}

Βήμα 13: Βρόχος

Εδώ ελέγχω αν έχουν συνδεθεί πελάτες στον διακομιστή. Διαβάζουμε επίσης την πρώτη γραμμή αιτήματος. Εξάγουμε τα δεδομένα για χειρισμό, ορίζουμε την προεπιλεγμένη κεφαλίδα απόκρισης και στέλνουμε αυτήν την απάντηση στον πελάτη.

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 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 ("μη έγκυρο αίτημα"); ΕΠΙΣΤΡΟΦΗ; } client.flush (); String 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) · } // βρόχος τερματισμού

Βήμα 14: ParserData

ParserData
ParserData

Από το αίτημα, αναζητούμε τα δεδομένα που σχετίζονται με τα ρελέ. Στη συνέχεια, στέλνουμε τα δεδομένα στο MCP23016.

// a partir da requisição busca os dados referente aos relésvoid parserData (String data) {uint8_t ρελέ = -1; uint8_t gp = -1; 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 (ενεργοποίηση/απενεργοποίηση) {gp = data [index+3]-'0'; ρελέ = δεδομένα [δείκτης+4]-'0'; value = data [index+6]-'0'; // envia os dados para o MCP23016 // [ρελέ-1] porque o MCP vai de 0-7 os pinos writePinData (ρελέ-1, τιμή, gp); }}

Βήμα 15: ConfigurePort

Ρυθμίζουμε τη λειτουργία καρφιτσών GPIO (GP0 ή 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 // 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, or restante como saida void configurePort (θύρα uint8_t, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (custom == OUTPUT) {writeBlockData (θύρα, 0x00); } else {writeBlockData (θύρα, προσαρμοσμένο); }}

Βήμα 16: WritePinData

Σε αυτό το μέρος του κώδικα, αλλάζουμε την κατάσταση ενός επιθυμητού pin και στέλνουμε τα δεδομένα στο MCP.

// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; τιμή = 0/1 (ενεργοποίηση/απενεργοποίηση) gp = 0/1 (PORT έως MCP) void writePinData (int pin, int value, uint8_t gp) {uint8_t statusGP = 0; εάν (gp == GP0) statusGP = currentValueGP0; else statusGP = currentValueGP1; if (τιμή == 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); καθυστέρηση (10)? }

Βήμα 17: WriteBlockData & SetupWiFi

Εδώ, στέλνουμε δεδομένα στο MCP23016 μέσω του διαύλου i2c. Στη συνέχεια, διαμορφώνουμε τις ιδιότητες για να ενεργοποιήσουμε το Σημείο Πρόσβασης. Τέλος, διαμορφώσαμε το WiFi για λειτουργία σημείου πρόσβασης και δημιουργήσαμε ένα AP με SSID και PASSWORD.

// 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 (θύρα); Wire.write (δεδομένα); Wire.endTransmission (); καθυστέρηση (10)? }

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

Βήμα 18: Εφαρμογή

Εφαρμογή
Εφαρμογή
Εφαρμογή
Εφαρμογή
Εφαρμογή
Εφαρμογή
Εφαρμογή
Εφαρμογή

Για να δημιουργήσουμε την εφαρμογή, χρησιμοποιούμε το MIT App Inventor 2, στο οποίο μπορείτε να έχετε πρόσβαση μέσω του συνδέσμου:

ai2.appinventor.mit.edu/

Η εφαρμογή αποτελείται από δύο οθόνες που περιέχουν οκτώ ζεύγη κουμπιών σε κάθε μία, υποδεικνύοντας την κατάσταση κάθε ρελέ.

Τα παρακάτω είναι μερικά από τα μπλοκ προγραμματισμού που χρησιμοποιούνται:

ΣΗΜΑΝΤΙΚΟ: Η προεπιλεγμένη διεύθυνση IP του ESP, καθώς το Σημείο Πρόσβασης είναι 192.168.4.1

1. Όταν η οθόνη αρχικοποιηθεί, αποθηκεύουμε το IP στη μνήμη και καλούμε τη διαδικασία ανάκτησης της κατάστασης των κουμπιών (ON / OFF).

2. Καλέστε την άλλη οθόνη

1. Όταν κάνουμε κλικ στο κουμπί ON ενός από τα ρελέ, θα κάνουμε οπτικές αλλαγές στο κουμπί (πράσινα μπλοκ). Το WebViewer1. GoToUrl υποβάλλει ένα αίτημα για το ESP01 μας συνδέοντας τα δεδομένα MR01 / 1 στη διεύθυνση URL.

2. Όταν κάνουμε κλικ στο κουμπί OFF ενός από τα ρελέ, θα κάνουμε οπτικές αλλαγές στο κουμπί (πράσινα μπλοκ). Το WebViewer1. GoToUrl υποβάλλει ένα αίτημα στο ESP01 μας συνδέοντας τα δεδομένα MR01 / 0 στη διεύθυνση URL.

Αυτή η διαδικασία χρησιμοποιείται για την ανάκτηση της κατάστασης των κουμπιών (ρελέ), επειδή κατά την αλλαγή της οθόνης, επιστρέφει στο μοτίβο δημιουργίας.

Το κίτρινο μπλοκ επαναλαμβάνεται για καθένα από τα ζεύγη κουμπιών.

Βήμα 19: Λήψη

Ακολουθούν τα αρχεία του έργου για λήψη:

Αρχείο έργου MIT App Inventor 2 - λήψη

Εφαρμογή APK για εγκατάσταση σε Android - λήψη

Κατεβάστε τα άλλα αρχεία:

PDF

ΕΓΩ ΔΕΝ

Συνιστάται: