Table des matières:

Automatisation à faible coût avec ESP01 : 19 étapes
Automatisation à faible coût avec ESP01 : 19 étapes

Vidéo: Automatisation à faible coût avec ESP01 : 19 étapes

Vidéo: Automatisation à faible coût avec ESP01 : 19 étapes
Vidéo: How to Program ESP01 WiFi Module | Arduino IDE | DIY 2024, Novembre
Anonim
Image
Image
MCP23016
MCP23016

Aujourd'hui, nous allons discuter de l'automatisation à l'aide d'ESP01 avec 16 relais. Il s'agit d'un modèle de conception très bon marché où vous pouvez multiplier les modules et obtenir jusqu'à 128 relais, car il est possible de mettre jusqu'à huit extensions de ports dans ce microcontrôleur.

Dans notre circuit, vous aurez une application sur un smartphone qui communique avec l'ESP01. Il disposera d'un expandeur avec 16 ports, chacun connecté à un relais. Nous avons également une source réglable en 3v3. Nous allons donc piloter un module relais 16 canaux à l'aide d'ESP01 via l'application Android que je mets à votre disposition.

Étape 1: Conseil à retenir

Il est important de noter, mes amis, que j'ai utilisé cette puce dans un circuit appelé MCP23016. Il est également important pour vous de regarder la vidéo EXPANSEUR D'IOS POUR ESP32, ESP8266 ET ARDUINO, dans laquelle je teste l'appareil et montre qu'il fonctionne pour ces trois types de cartes.

Étape 2: MCP23016

Ici, nous avons une image du MCP23016, qui est une puce à 28 broches. Il est important de mentionner qu'il existe également le modèle MCP23017, qui est plus courant et ne nécessite ni résistance ni condensateur, car il possède une horloge interne. Cela facilite les choses, mais son épinglage est différent de ce que nous montrons dans cette vidéo.

Étape 3: Adresse

Adresse
Adresse

Pour définir l'adresse du MCP23016, nous utilisons les broches A0, A1 et A2. Vous pouvez simplement les laisser à HIGH ou LOW pour le changement d'adresse.

L'adresse sera formée comme suit:

Adresse_MCP = 20 + (A2 A1 A0)

Où A2 A1 A0 peut prendre des valeurs HAUT/BAS, un nombre binaire de 0 à 7 se forme.

Par exemple:

A2> GND, A1> GND, A0> GND (signifie 000, alors 20 + 0 = 20)

Ou autrement, A2> HIGH, A1> GND, A0> HIGH (signifie 101, alors 20 + 5 = 25)

Étape 4: Commandes

Commandes
Commandes

Voici un tableau avec les commandes de communication:

Étape 5: Catégories

GP0 / GP1 - Registres de port de données

Il y a deux registres qui donnent accès aux deux ports GPIO.

La lecture du registre fournit l'état des broches sur ce port.

Bit = 1> HAUT Bit = 0> BAS

IODIR0 / IODIR1

Il y a deux registres qui contrôlent le mode pin. (Entrée ou Sortie)

Bit = 1> ENTREE Bit = 0> SORTIE

Étape 6: Structure de communication

Structure de communication
Structure de communication

Ici, nous parlons de l'adresse de la puce, et accédons à la commande et aux données, qui est une sorte de protocole qui doit être fait pour envoyer des informations.

Étape 7: programmer

Programme
Programme

Nous allons faire un programme qui consiste à communiquer l'ESP01 avec le MCP23016 afin d'avoir plus de GPIO à utiliser. Ces 16 nouveaux GPIO que nous aurons vont contrôler un module relais 16 canaux.

Les commandes seront envoyées à ESP01 via une application Android.

Étape 8: MCP23016

MCP23016
MCP23016

Étape 9: ESP-01

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

Il s'agit d'une carte à 16 relais.

Étape 10: Montage de l'ESP01

Montage ESP01
Montage ESP01

Étape 11: Bibliothèques et variables

Nous inclurons les bibliothèques responsables de la communication i2c et de la création du point d'accès et du serveur Web. Nous définissons l'adresse de la puce et des ports. Enfin, nous définissons les variables pour stocker les valeurs des broches 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 //ENDEREÇOS DE REGISTRADORES 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 faire MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Étape 12: Configuration

Nous initialisons l'ESP01 et configurons les ports. Nous configurons également le point d'accès et initialisons le serveur.

void setup() { Serial.begin(9600); retard(1000); Fil.begin(0, 2); //ESP01 Wire.setClock(200000); configurePort(IODIR0, SORTIE); configurePort(IODIR1, SORTIE); writeBlockData(GP0, 0x00); writeBlockData(GP1, 0x00); configurationWiFi(); //configuração do Access Point server.begin();//inicializa o server }

Étape 13: boucle

Ici, je vérifie si des clients ont été connectés au serveur. Nous lisons également la première ligne de requête. Nous extrayons les données pour la manipulation, définissons l'en-tête de réponse par défaut et envoyons cette réponse au client.

void loop() { WiFiClient client = server.available(); // Verifica se um cliente fo 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); //à partir de la demande supplémentaire pour la manipulation } else{ Serial.println("requête invalide"); revenir; } client.flush(); Chaîne 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); } // fin de boucle

Étape 14: ParserData

ParserData
ParserData

A partir de la requête, nous recherchons les données liées aux relais. Nous envoyons ensuite les données au MCP23016.

//à partir de la demande d'informations sur les données de référence, ainsi que parserData(String data) { uint8_t relay = -1; uint8_t gp = -1; valeur 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(on/off) { gp = data[index+3]-'0'; relais = données[index+4]-'0'; valeur = données[index+6]-'0'; //envia os dados para o MCP23016 //[relay-1] porque o MCP va de 0-7 os pins writePinData(relay-1, value, gp); } }

Étape 15: Configurer le port

Nous définissons le mode de broche GPIO (GP0 ou 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, o restante como saida void configurePort (port uint8_t, uint8_t personnalisé) { if(personnalisé == INPUT) { writeBlockData(port, 0xFF); } else if(custom == OUTPUT) { writeBlockData(port, 0x00); } else { writeBlockData (port, personnalisé); } }

Étape 16: EcrirePinData

Dans cette partie du code, nous modifions l'état d'une broche souhaitée et envoyons les données au MCP.

//muda o estado de um pino desejado, passando como parametro://pin = pino desejado; valeur = 0/1 (marche/arrê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; sinon statusGP = currentValueGP1; if (valeur == 0) { statusGP &= ~(B00000001 << (broche)); // muda o pino para LOW } else if (value == 1) { statusGP |= (B00000001 << (pin)); // muda o pino para HIGH } if(gp == GP0) currentValueGP0 = statusGP; sinon currentValueGP1 = statusGP; //envia les données pour le MCP writeBlockData(gp, statusGP); retard(10); }

Étape 17: WriteBlockData & SetupWiFi

Ici, nous envoyons des données au MCP23016 via le bus i2c. Ensuite, nous configurons les propriétés pour activer le point d'accès. Enfin, nous avons configuré le WiFi pour le mode Point d'accès et créé un AP avec le SSID et le MOT DE PASSE.

//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(port); Wire.write(données); Wire.endTransmission(); retard(10); }

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

Étape 18: Appli

Application
Application
Application
Application
Application
Application
Application
Application

Pour créer l'application, nous utilisons MIT App Inventor 2, accessible via le lien:

ai2.appinventor.mit.edu/

L'application se compose de deux écrans contenant chacun huit paires de boutons, indiquant l'état de chaque relais.

Voici quelques-uns des blocs de programmation utilisés:

IMPORTANT: L'adresse IP par défaut de l'ESP, car le point d'accès est 192.168.4.1

1. Lorsque l'écran s'initialise, nous stockons l'IP en mémoire et appelons la procédure pour récupérer l'état des boutons (ON / OFF).

2. Appelez l'autre écran

1. En cliquant sur le bouton ON de l'un des relais, nous apporterons des modifications visuelles au bouton (blocs verts). WebViewer1. GoToUrl fait une demande pour notre ESP01 en liant les données MR01/1 dans l'URL.

2. En cliquant sur le bouton OFF de l'un des relais, nous apporterons des modifications visuelles au bouton (blocs verts). WebViewer1. GoToUrl fait une demande à notre ESP01 en liant les données MR01/0 dans l'URL.

Cette procédure permet de récupérer l'état des boutons (relais), car lors du changement d'écran, on revient au motif de création.

Le bloc jaune se répète pour chacune des paires de boutons.

Étape 19: Télécharger

Voici les fichiers du projet à télécharger:

Fichier de projet MIT App Inventor 2 - télécharger

Application APK à installer sur android - télécharger

Téléchargez les autres fichiers:

PDF

INO

Conseillé: