Arduino Mega + WiFi = Automation: 5 étapes

Arduino Mega + WiFi = Automation: 5 étapes

Table des matières:

Anonim

Aujourd'hui, je vais parler d'un assemblage suggéré par de nombreux adeptes: Arduino Mega + ESP. Cela inclura un projet d’automatisation avec 16 relais, trois capteurs et un smartphone. Nous allons créer un serveur Web pour Arduino Mega en utilisant une communication série avec l’ESP8266, dans la version ESP-01. Je vais également montrer une page avec les valeurs des capteurs et des boutons pour modifier l'état des relais.

Provisions:

Étape 1: Assemblage

J'ai placé ici le schéma, qui montre le DHT22, le Ds18b20 et un troisième capteur (la lumière), qui sont tous reliés aux relais par les broches 36 à 51.

Étape 2: démonstration

Voir la démonstration vidéo du projet en cours. Dans l'assemblage, vous recevez une carte à 16 fils, qui est connectée directement aux ports d'un Arduino Uno. Cette Uno que j’utilisais était uniquement destinée à alimenter le 3v3 de l’ESP-01. J'ai toujours un LDR (qui est mon capteur de lumière), un thermomètre Ds18b20 et le DHT22, qui collecte les données d'humidité et de température. Nous avons une application sur le smartphone qui affiche les données collectées par ces capteurs et les envoie au téléphone portable depuis l'Arduino Mega, via l'ESP, qui constituerait le pont série (le WiFi).

Dans l'assemblage, nous avons des voyants qui, lorsqu'ils sont allumés, indiquent que les relais respectifs sont désactivés. Ce processus est également contrôlé par le smartphone.

Étape 3: Bibliothèques

Pour notre projet aujourd'hui, nous aurons besoin de certaines bibliothèques:

Bibliothèque WiFiEsp

Dans l'IDE Arduino, sélectionnez Esquisse-> Inclure la bibliothèque-> Gérer les bibliothèques …

Installer WiFiEsp

Bibliothèque DallasTempérature

Dans l'IDE Arduino, sélectionnez Esquisse-> Inclure la bibliothèque-> Gérer les bibliothèques …

Installer DallasTempérature

Bibliothèque OneWire

Dans l'IDE Arduino, sélectionnez Esquisse-> Inclure la bibliothèque-> Gérer les bibliothèques …

Installez OneWire

Bibliothèque de capteurs DHT par Adafruit

Dans l'IDE Arduino, sélectionnez Esquisse-> Inclure la bibliothèque-> Gérer les bibliothèques …

Installer la bibliothèque de capteurs DHT par Adafruit

Étape 4: Code source

MEGAESP_01.ino

Nous commençons par inclure les bibliothèques et définir les broches attachées aux capteurs. Nous indiquons également la broche où sera le premier relais et combien de broches (à partir de celle-ci) seront utilisées.

#comprendre

#comprendre #comprendre #comprendre // Aidez-nous à comprendre #define PIN_DS18B20 7 #define PIN_DHT22 8 #define PIN_LUMINOSITY A0 #define FIRST_PIN 36 // Identifiez-vous pour plus de détails #define PINS_COUNT 16 // Nombre d'objets par jour désirés

Nous continuons avec le capteur de température DS18B20 et le capteur de température et d'humidité DHT22. Nous avons ensuite défini les définitions impliquant le réseau WiFi, telles que le SSID et le mot de passe permettant à l'ESP de se connecter. Nous indiquons le serveur qui recevra les demandes sur le port 80 (port standard http), ainsi que les variables pour stocker les valeurs des capteurs.

// Capteur de température DS18B20

OneWire oneWire (PIN_DS18B20); Sondes de température Dallas (& oneWire); Détecteur DeviceAddress; // Capteur de température et d'erreur DHT22 DHT dht (PIN_DHT22, DHT22); // SSID et connexion Wi-Fi au-dessus de l'ESP se conectar char ssid = "SSID"; char pass = "12345678"; char ip = "192.168.0.109"; // Serveur que vous souhaitez utiliser sur le port 80 (port http) WiFiEspServer server (80); // Variations pour l'armement des ressources détectent les températures de flottement DS18B20 = 0; température de flottementDHT22 = 0; floathumiditéDHT22 = 0; int luminosité = 0; // affiche les dates (HIGH ou LOW) int pinsStatus PINS_COUNT;

MEGAESP_01.ino - configuration

Nous initialisons les moniteurs série et série où se trouve l'ESP-01 avec le micrologiciel AT, en plus des broches et des capteurs DS18B20 et DHT22. Pour le capteur de luminosité, il suffit de lire la broche analogique. Nous initialisons également le WiFi et nous nous connectons au réseau. Enfin, nous initialisons le serveur.

void setup()

{// Série pour moniteur série serial.begin (115200); // Le numéro de série est le micrologiciel ESP-01 avec AT Serial1.begin (115200); // Iniciiza os pinos setupPins (); // Iniciiza o sensor DS18B20 setupDS18B20 (); // Iniciiza o capteur DHT22 dht.begin (); // Capteur de luminosite apenas precisamos ler o pino analógico pinMode (A0, INPUT); // Accès WiFi et connexion à l'installation setupWiFi (); // Iniciiza o server server.begin (); }

MEGAESP_01.ino - setupPins

Dans cette étape, nous plaçons les broches connectées aux relais en tant que sorties.

void setupPins ()

{// Colo is pinos que esto ligados os rel Com saída pour (int i = 0; i

MEGAESP_01.ino - setupWiFi

Ici, nous effectuons une fonction qui initialise la série où l’ESP-01 est avec le micrologiciel AT déjà installé. Nous attendons de nous connecter au réseau WiFi, de configurer l’IP et de vérifier la même adresse IP.

annuler setupWiFi ()

{// Le numéro de série est ESP-01 ou le firmware est installé WiFi.init (& Serial1); Serial.print ("Conectando a"); Serial.println (ssid); int status = WL_IDLE_STATUS; // affiche le réseau WiFi tandis que (status! = WL_CONNECTED) {status = WiFi.begin (ssid, pass); } Serial.println (); Serial.println ("Conectado"); // Configuration o IP IPAddress ipAddress; ipAddress.fromString (ip); WiFi.config (ipAddress); // Veririca o IP IPAddress localIP = WiFi.localIP (); Serial.print ("IP:"); Serial.println (IP local); }

MEGAESP_01.ino - setupDS18B20

Initialisez le capteur DS18B20.

// Iniciiza o capteur DS18B20

void setupDS18B20 () {sensors.begin (); if (! sensors.getAddress (sensor, 0)) {Serial.println ("Sensor não encontrado!"); }}

MEGAESP_01.ino - Boucle

Dans la boucle, nous recherchons un nouveau client. Nous lisons la demande et, si la demande ne concerne pas le favicon, nous exécutons l'action avec la valeur transmise dans la demande. Nous lisons ensuite les capteurs et envoyons la réponse au client. Nous déterminons l'heure à laquelle le navigateur reçoit les données et ferme la connexion avec le client.

boucle vide ()

{Client WiFiEspClient = server.available (); // Vérifie que le client est novateur si (client) {Serial.println ("Novo cliente conectou"); // Cliquez sur le mot-clé requis * request = readRequest (client); // Demande de connexion pour favicon if (strstr (demande, "favicon") == NULL) {// Exécute une action avec une valeur de passe pour une demande d'exécution (getAction (demande), getValue (demande)); // Fais une leçon dos sensores readSensorDS18B20 (); readSensorDHT22 (); readSensorLuminosity (); // Envoie une réponse à un client sendResponse (client); // Tempo para o navegador recebos os dados delay (100); } // Cliquez ici pour consulter le client client.stop (); }}

MEGAESP_01.ino - readRequest

Ici, nous avons une fonction très importante. Qu'est ce que ça fait? Lorsque nous appuyons sur un bouton du smartphone, la fonction envoie la commande HTTP à ESP8266, en utilisant uniquement la première ligne, comme illustré dans l'exemple ci-dessous. J'insiste sur le fait que même après la lecture de la première ligne, il est important de la lire jusqu'à la fin, sinon la bibliothèque WiFiESP donne un délai d'attente.

GET /? On = 1 HTTP / 1.1 r n

Hôte: 192.168.3.154 r n

Connexion: garder en vie r n

Cache-Control: max-age = 0 r n

Requêtes non sécurisées de mise à niveau: 1 r n

Agent utilisateur: Mozilla / 5.0 (Linux; Android 8.0.0; SM-G955F Build / R16N) AppleWebKit / 537.36 (KHTML, comme Gecko) Chrome / 68.0.3440.91 Mobile Safari / 537.36 r n

Accepter: text / html, application / xhtml + xml, application / xml; q = 0,9, image / webp, image / apng, * / *; q = 0,8 r n

Référent:

Accept-Encoding: gzip, deflate r n

Accept-Language: en-US, en; q = 0.9 r n

r n

Ici, nous avons la lecture de la première ligne de la demande.

// cliquez ici pour lire la suite

char * readRequest (client WiFiEspClient) {bool currentLineIsBlank = true; demande de caractère 50; int i = 0; bool firstLine = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); Serial.write (c); // Lancez-vous d'abord sur les requêtes if (firstLine) {request i = c; i ++; }

Nous voyons que la dernière ligne de la requête est: r n seul, r n. Et, après la ligne précédente, c’est: r nso. Si nous arrivons ici, c'est parce que la demande a été lue intégralement. De même, si vous lisez un caractère autre que n et r, cela signifie que la ligne n'est pas vide.

si (c == ' n') {

// Une liste de réquisitions minimale est requise, après la suppression d'une réévaluation antérieure (actuelleLineIsBlank) {// Voir aussi une réévaluation pour une suppression complète; } currentLineIsBlank = true; firstLine = false; } else if (c! = ' r') {// Vous pouvez en savoir plus sur ce que vous voulez faire n u0026 # 39; est important que votre linha soit pas encore branché currentLineIsBlank = false; }}} demande de retour; }

MEGAESP_01.ino - sendResponse

Cette fonction envoie le code HTML au client. Il envoie également l'en-tête HTTP, ainsi que l'en-tête et le corps HTML.

// Envia o HTML para o cliente

void sendResponse (client WiFiEspClient) {// Envia o client HTTP.print ("HTTP / 1.1 200 OK r n" "Content-Type: text / html; charset = UTF-8 r n" "Connexion: close r n "" Refresh: 10; URL = / r n "// Il est nécessaire de s’enregistrer sur le serveur pour obtenir une base de données 10 secondes" r n "); client.println (""); client.println (""); head (client); // Envia o cabeçalho do corps HTML (client); // Envia o corpo do HTML client.println ("');

}

MEGAESP_01.ino - tête

Nous avons envoyé le CSS pour modifier l'apparence de la page.

// Envia o CSS para modificar a aparência da página

void head (client WiFiEspClient) {client.println (F ("' ''

''));

}

MEGAESP_01.ino - corps

Nous procédons ensuite à l’affichage des données du capteur et à la création de boutons pour chaque broche dotée d’un relais.

// Exercice sur les sens et le sens des mots

corps vide (client WiFiEspClient) {client.println (""" DS18B20 Temperature: "+ String (temperatureDS18B20) +" ° C "" "" DHT22 Temperature: "+ String (temperatureDHT22) +" ° C "" "" DHT22 Humidity: "+ String (humiditéDHT22) +"% "" "); String buttons =" ​​"; // Appelez-nous aussi pour savoir ce que vous voulez (int i = 0; i

{

boutons.concat (bouton (i));

}

client.println (boutons);

client.println ("');

}

MEGAESP_01.ino - bouton

Nous créons un bouton avec l'apparence et l'action correspondant à l'état actuel du relais.

// Vous êtes ici pour en savoir plus sur les adresses et les adresses correspondantes

Bouton String (int number) {Libellé de la chaîne = String (nombre + 1); String className = "bouton"; className + = pinsStatus nombre == HAUT? "button_on": "button_off"; Action chaîne = pinsStatus nombre == HAUT? "éteint allumé"; revenir "