Bonjour et bienvenue à la deuxième partie de notre ligne de surveillance de l’usine.
Bien que notre garde d’usine fonctionne déjà très bien, je trouve un peu gênant en tant que fabricant de chercher le Led - "feu de circulation" pour voir si mon usine doit être arrosée. Je trouverais beaucoup plus pratique si je viens de regarder le téléphone mobile à tout moment et n’importe où pour savoir comment l’usine se porte à la maison.
Mais avant que quelqu’un pense: Ce n’est pas possible, c’est beaucoup trop compliqué, nous allons jeter un oeil de plus près à l’App Store à l’avance. Après tout, il y a une APP qui a déjà été conçue à nos fins, que nous n’avons qu’à ajuster ici, parce que nous devons ajouter un petit code et ensuite mettre le tout ensemble! Après cela, notre APP fonctionne exactement comme nous le voulons.
Alors allons-y ! Dans un premier temps, nous téléchargeons l’application "Blynk" de l’App Store à notre téléphone mobile. L’APP elle-même est gratuite et peut être exploitée pour notre cas d’utilisation décrit ici dans la deuxième partie du blog sans frais supplémentaires pour l’application.
Cependant, les unités "2000 Energy" de la version gratuite peuvent ne plus être suffisantes pour une expansion ultérieure de l’application dans la série de blogs.
Cependant, il ya des coûts pour la transmission des données de l’écran de l’usine au téléphone mobile, quel que soit l’étape d’expansion. S’il vous plaît prendre en compte ces coûts lors de la reproduction du projet!
Donc, après avoir téléchargé l’application Blynk à partir du magasin et de le démarrer pour la première fois, nous devons d’abord créer un compte. Pour ce faire, nous appuyez sur "Créer un nouveau compte"
Nous nous inscrivons avec notre propre adresse e-mail et assignons un mot de passe :
Ensuite, nous cliquons sur le nouveau projet:
Nous finissons dans le dialogue pour créer un nouveau projet. Ici, les données de base du projet, telles que le nom du projet, notre plate-forme de développement ESP32 et le formulaire de connexion souhaité, doivent être utilisées. Différents paramètres de connexion peuvent être fournis, tels que Bluetooth ou Wlan. Toutefois, afin de pouvoir recevoir des données en déplacement, le type de connexion GSM doit être sélectionné. Voici les paramètres que j’ai choisis pour mon projet :
Nous confirmons l’information avec "Créer" et nous nous retrouvons dans un projet vide. Nous ajouterons notre premier élément actif à notre application à l’aide de l’icône «Plus» dans la barre de titre :
Nous sélectionnons l’élément Gauge et configurons l’élément. Tout d’abord, nous attribuons un NAMEN pour l’article. J’ai choisi le nom "Soil Moisture Plant 1".
Ensuite, nous sélectionnons variable "V1" comme entrée, 0 comme une valeur minimale et 100 comme valeur maximale. Nous ajoutons un% au champ LABEL et définissons "Push" comme un taux de lecture. La conception vous permet de choisir n’importe quelle taille de couleur et de police.
Nous confirmons les réglages avec la flèche sur la gauche, puis atterrissons à nouveau dans la vue principale de l’APP:
Nous pouvons maintenant fermer l’application à nouveau, parce que nous devons maintenant adapter notre code ESP à notre APP. Pour ce faire, nous installons d’abord la bibliothèque Blynk dans la dernière version de l’Arduino via le directeur de la bibliothèque :
Ensuite, nous ajoutons le code suivant à l’IDE:
#include <Pilote/Adc.H (en)> #include <Wifi.H (en)> #include <WiFiClient (WiFiClient).H (en)> #include <BlynkSimpleEsp32.H (en)> Portedefination Led #define LED_Rot 18 LED rouge #define LED_Gelb 14 LED jaune #define LED_Gruen 15 Gruene LED Paramètres LED PWM #define PWMfreq 5000 5 Fréquence de base Khz #define PWMledChannelA 0 #define PWMledChannelB (en anglais) 1 #define PWMledChannelC (en anglais) 2 #define Résolution PWM 8 Résolution 8 Bit #define ADCAttenuation ADC_ATTEN_DB_11 ADC_ATTEN_DB_11 '0-3.6V atténuation ADC #define MoisureSens_Poll_Interval 60000 Intervalle entre deux mesures de l’humidité du sol en millisecondes #define MaxSensors (en) 1 #define BLYNK_PRINT Série #define BLYNK_NO_BUILTIN #define BLYNK_NO_FLOAT BLYNK_DEBUG #define Struct MoistureSensorCalibrationData { Int Données[MaxSensors (en)*2] = {1650,2840}; Données d’étalonnage pour capteur d’humidité. Veuillez observer le texte du projet et ajuster les valeurs en conséquence }; Struct MoistureSensorData (en) { Octet Pourcentage d’entre nous[MaxSensors (en)] = {0}; Données du capteur d’humidité en pourcentage Octet Old_Percent[MaxSensors (en)] = {0}; Données précédentes du capteur d’humidité en pourcentage (but : Enregistrer les donnéesQuantity.) }; Variables globales Char Char Auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; Entrez votre application Blynk ici (email) selon les instructions Auth Token. Vos informations d’identification WiFi. Char Char Ssid[] = "WLANSSID"; Char Char Passer[] = "XXXXXXXXXXXXX"; Définir mot de passe à "" pour les réseaux ouverts. MoistureSensorCalibrationData MCalib MCalib; MoistureSensorData (en) MMeasure (MMeasure); Octet AttachedMoistureSensors; Capteurs d’humidité active détectés (Compte) Unsigned Long Moisure_ServiceCall_Handler = 0; Limite de retard pour le retard entre les lectures de moisure Vide Configuration() { pinMode(LED_Rot,Sortie); pinMode(LED_Gelb,Sortie); pinMode(LED_Gruen,Sortie); Série.Commencer(115200); initialiser la communication en série à 115200 bits par seconde : ledcSetup(PWMledChannelA, PWMfreq, Résolution PWM); ledcSetup(PWMledChannelB (en anglais), PWMfreq, Résolution PWM); ledcSetup(PWMledChannelC (en anglais), PWMfreq, Résolution PWM); ledcAttachPin(LED_Rot, PWMledChannelA); attacher le canal au GPIO à contrôler ledcAttachPin(LED_Gelb, PWMledChannelB (en anglais)); ledcAttachPin(LED_Gruen, PWMledChannelC (en anglais)); SetLedConfig SetLedConfig SetLedConfig SetLed(255,255,255); Série.println(Q("Configuration du système:")); AttachedMoistureSensors = DétecterMoistureSenseurs(); Série.Imprimer(AttachedMoistureSensors); Série.println(Q(« Capteur d’humidité du sol(s) »)); Série.Imprimer(Q("Connexion au Wi-Fi")); Retard(500); Blynk Blynk.Commencer(Auth, Ssid, Passer); Initaliser WiFi Connection sur Blync Library Série.println(Q("Succès.")); SetLedConfig SetLedConfig SetLedConfig SetLed(0,0,0); Run_MoistureSensors(Vrai); } Octet DétecterMoistureSenseurs () { #define MinSensorValue 100 Octet Détecté = 0; Pour (Int Ⅰ. = 0;Ⅰ. < MaxSensors (en);Ⅰ.++) { Int MSensorRawValue (en anglais seulement) = ReadMoistureSensor_Raw_Val(Ⅰ.); Si ( MSensorRawValue (en anglais seulement) > MinSensorValue) { Détecté++; } Autre {Pause;} } Si (Détecté < 1) { Série.println(Q(« Aucun sonors d’humidité du sol n’a été détecté. système s’arrêta.)); esp_deep_sleep_start(); Tandis que(1) {} } Retour Détecté; } Bool SetLedConfig SetLedConfig SetLedConfig SetLed(Octet Rouge,Octet Jaune,Octet Vert) { ledcWrite(PWMledChannelA, Rouge); LED rouge ledcWrite(PWMledChannelB (en anglais), Jaune); LED jaune ledcWrite(PWMledChannelC (en anglais), Vert); Gruene LED Retour Vrai; } Int ReadMoistureSensor_Raw_Val(Octet Capteur) { Int Returnvalue,Ⅰ.; Long Somme = 0; #define NUM_READS 6 adc1_config_width(ADC_WIDTH_BIT_12); Gamme 0-4095 Interrupteur (Capteur) { Cas 0: { adc1_config_channel_atten(ADC1_CHANNEL_0,ADCAttenuation); Pour (Ⅰ. = 0; Ⅰ. < NUM_READS; Ⅰ.++){ Algorithme de moyenne Somme += adc1_get_raw( ADC1_CHANNEL_0 ); Lire analogique } Returnvalue = Somme / NUM_READS; Pause; } } Retour Returnvalue; } Bool Get_Moisture_DatainPercent() { Bool ReadisValid (en) = Vrai; Pour (Int Ⅰ. = 0;Ⅰ. < AttachedMoistureSensors;Ⅰ.++) { Si ((MCalib MCalib.Données[Ⅰ.] == 0) || (MCalib MCalib.Données[Ⅰ.+1] == 0)) Valeur De minADC maxADC Valeur ADC { ReadisValid (en) = Faux; Retour ReadisValid (en); } Int RawMoistureValue= ReadMoistureSensor_Raw_Val(Ⅰ.); RawMoistureValue= MCalib MCalib.Données[Ⅰ.+1] - RawMoistureValue; RawMoistureValue=MCalib MCalib.Données[Ⅰ.] + RawMoistureValue; Serial.println (MCalib.Data[i]); Serial.println (MCalib.Data[i-1]); Serial.println (RawMoistureValue); MMeasure (MMeasure).Pourcentage d’entre nous[Ⅰ.] = Carte(RawMoistureValue,MCalib MCalib.Données[Ⅰ.],MCalib MCalib.Données[Ⅰ.+1], 0, 100); Si (MMeasure (MMeasure).Pourcentage d’entre nous[Ⅰ.] > 100 ) { ReadisValid (en) = Faux; } } Retour ReadisValid (en); } Vide Run_MoistureSensors (Bool Init) Fonction principale pour l’utilisation de capteurs d’humidité du sol { Octet MinSensValue = 100; Si ((Millis() - Moisure_ServiceCall_Handler >= MoisureSens_Poll_Interval) | (Init)) { Moisure_ServiceCall_Handler = Millis(); Si (Get_Moisture_DatainPercent()) Recevez les données actuelles valides { Pour (Int Ⅰ. = 0;Ⅰ. < AttachedMoistureSensors;Ⅰ.++) { Si (MMeasure (MMeasure).Pourcentage d’entre nous[Ⅰ.] != MMeasure (MMeasure).Old_Percent[Ⅰ.]) { MMeasure (MMeasure).Old_Percent[Ⅰ.] = MMeasure (MMeasure).Pourcentage d’entre nous[Ⅰ.]; Si (MMeasure (MMeasure).Pourcentage d’entre nous[Ⅰ.] < MinSensValue ) { MinSensValue = MMeasure (MMeasure).Pourcentage d’entre nous[Ⅰ.]; }; Série.Imprimer(Q("Capteur de valeur d’humidité 1 en pourcentage :")); Série.Imprimer(MMeasure (MMeasure).Pourcentage d’entre nous[0]); Série.println(Q(" %")); Si (Ⅰ. == 0) {Blynk Blynk.virtualWrite (en)(V1 (V1),MMeasure (MMeasure).Pourcentage d’entre nous[Ⅰ.]); } Mettre à jour les valeurs des téléphones mobiles } } Si (MMeasure (MMeasure).Pourcentage d’entre nous[0] > 50) { SetLedConfig SetLedConfig SetLedConfig SetLed(0,0,20); } Autre Si (MMeasure (MMeasure).Pourcentage d’entre nous[0] > 10) { SetLedConfig SetLedConfig SetLedConfig SetLed(0,255,0); } Autre { SetLedConfig SetLedConfig SetLedConfig SetLed(255,0,0); } } Autre Ne recevez pas de données valides { Série.Imprimer(Q(« Le capteur d’humidité du sol ne s’étale pas. S’il vous plaît calibré. Données brutes du capteur 1:")); Série.println(ReadMoistureSensor_Raw_Val(0)); SetLedConfig SetLedConfig SetLedConfig SetLed(255,255,255); } } } Boucle principale Vide Boucle() { Run_MoistureSensors(Faux); Blynk Blynk.Courir(); Exécuter Blync Basic- Fonctions }
Maintenant, nous devons ajuster notre code un peu. D’une part, les informations d’identification WLAN (SSID et mot de passe) doivent être adaptées à la maison WLAN dans le code:
Vos informations d’identification WiFi.
char ssid[] - "WLANSSID";
char pass[] ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' Définir mot de passe à "" pour les réseaux ouverts.
D’autre part, nous avons reçu un jeton d’authentification lorsque nous avons installé notre projet dans l’AP:
Nous portons ce jeton dans le code dans la ligne:
Variables globales
char auth[] - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Entrez votre application Blynk ici (email) selon les instructions Auth Token.
et compiler le code. Ensuite, nous le téléchargeons à partir de notre ESP. Nous devrions maintenant obtenir une sortie similaire à cela sur l’interface sérielle:
Maintenant, l’application Blynk peut être lancée sur votre téléphone. Après s’être connecté et avoir lancé l’application nouvellement créée, l’application nous montre la valeur actuelle de l’humidité du capteur d’humidité du sol en pourcentage.
Pour plus d’informations sur l’APP Blynk et son utilisation dans les contrôleurs, veuillez visiter :
- Blynk Introduction - https://www.blynk.cc/getting-started
Documentation - http://docs.blynk.cc/
Générateur de croquis - https://examples.blynk.cc/
Dernière bibliothèque Blynk - https://github.com/blynkkk/blynk-library/releases/download/v0.6.1/Blynk_Release_v0.6.1.zip
- Dernier serveur Blynk - https://github.com/blynkkk/blynk-server/releases/download/v0.41.5/server-0.41.5.jar
- Blynk Home - -gt; https://www.blynk.cc
Je vous souhaite beaucoup de plaisir à recréer, et jusqu’à la prochaine fois.
1 commentaire
Max
Hallo, es wird hier von begrenztem Datenvolumen gesprochen!
Wo liegt hier die Begrenzung?
Am Datenvolumen des Handy´s oder am Serverdienst des Blynk-Token.
Mit welcher Datenmenge muss man rechnen, wenn alle 30 Min. bei voller Bestückung gesendet wird?
Danke schon mal
Gruß Max