Construisez un système IoT ECG (électrocardiogramme) avec un AD8232 + ESP32 pour enregistrer l'activité électrique de votre cœur

Les maladies cardiaques constituent une maladie qui touche une grande partie de la population depuis de nombreuses années. L’étude de l’Organisation mondiale de la santé (OMS) montre également que la plupart des gens meurent de maladies cardiaques. Par conséquent, cette maladie ne peut pas être prise à la légère, c’est pourquoi les appareils de santé et les systèmes de surveillance sont conçus pour suivre la maladie de manière professionnelle.

Nous savons que ces maladies peuvent être évitées en analysant et en surveillant le signal ECG dès le stade initial. Sur cette base, j'ai décidé de travailler dans ce projet pour commencer à surveiller mon signal ECG à l'aide de la plateforme de développement IoT Ubidots .

Dans cet article, nous allons déployer les étapes très basiques de démarrage et d'exécution du moniteur de fréquence cardiaque AD8232 . Nous vous montrerons ensuite comment le connecter à votre microcontrôleur préféré et comment créer des visualisations à l'aide d'une IoT .

Qu'est-ce que l'AD8232 ?

L'AD8232 est une petite puce soignée qui mesure l'activité électrique du cœur. Cette activité électrique peut être exprimée sous forme d'ECG ou d'électrocardiogramme. Un électrocardiogramme est utilisé pour aider à diagnostiquer diverses maladies cardiaques. (Plus d'informations : la fiche technique peut être trouvée ici. )

Le plan est de configurer la carte AD8232 pour percevoir le signal ECG, afin de commencer à produire le signal de sortie de la carte AD8232. Le signal de sortie donnera environ 1,5 volts, produisant un échantillon de 1 000/seconde. Ensuite, ces signaux seront envoyés via USB depuis l'Arduino, afin que nous puissions les vérifier via le moniteur série et Ubidots .

Sans rien dire de plus, commençons !

Exigences

  • Compte Ubidots
  • Arduino Uno/Méga/Nano
  • Module ECG (AD8232)
  • Électrode ECG - 3 pièces
  • Connecteur d'électrode ECG - 3,5 mm
  • Câble de DONNÉES
  • Fils de liaison

Câblage

Suivez le schéma et le tableau ci-dessous pour commencer à câbler les appareils requis :

Une fois que votre matériel est correctement câblé. Continuons avec la configuration ESP32.

Configuration de l'ESP32 avec l'IDE Arduino

Veuillez suivre les étapes ci-dessous pour pouvoir programmer l'ESP32 avec l'IDE Arduino.

1. Cliquez sur Fichier > Préférences

2. dans le « URL supplémentaires du gestionnaire de forums », attribuez l'URL ci-dessous. Vous pouvez ajouter plusieurs URL, en les séparant par des virgules si nécessaire.

https://dl.espressif.com/dl/package_esp32_index.json

3. Pour enregistrer les modifications apportées, assurez-vous d'appuyer sur le bouton OK.

4. Maintenant, ajoutez la ESP32 dans l'IDE Arduino. Pour ce faire, cliquez sur Outil > Tableau > Gestionnaire de tableaux

5. Dans la barre de recherche, écrivez « ESP32 » et installez le dernier package.

Télécharger le code source

1. Avec la configuration appropriée de l'ESP32 dans l'IDE Arduino, téléchargez le code suivant sur la carte après lui avoir attribué les paramètres requis.

  • WIFISSID : votre SSID WiFi
  • MOT DE PASSE : Votre mot de passe WiFi
  • JETON : Vos Ubidots JETON
  • MQTT_CLIENT_NAME : votre propre chaîne ASCII de 8 à 12 caractères alphanumériques.

Code source

Pour faire référence à cet exemple de code, ainsi qu'à d'autres IoT consultez ce référentiel .

/****************************************** * Inclure les bibliothèques ****** **********************************/ #inclure<WiFi.h> #inclure<PubSubClient.h> #define WIFISSID "votre nom wifi" // Mettez votre WifiSSID ici #define PASSWORD "votre mot de passe wifi" // Mettez votre mot de passe wifi ici #define TOKEN "votre token" // Mettez votre TOKEN d' Ubidots #define MQTT_CLIENT_NAME "1234a5d6798" / / Nom du client MQTT, veuillez entrer votre propre chaîne ASCII de 8 à 12 caractères alphanumériques ; //il doit s'agir d'une chaîne ascii aléatoire et unique et différente de tous les autres appareils /******************************** ******** * Définir les constantes ************************************** */ #define VARIABLE_LABEL "sensor" // Assigner l'étiquette de la variable #define DEVICE_LABEL "esp32" // Assigner l'étiquette de l'appareil #define SENSOR A0 // Définir l'A0 comme SENSOR char mqttBroker[] = "industrial.api. ubidots .com " ; charge utile de caractères[100] ; sujet de caractères[150] ; // Espace pour stocker les valeurs à envoyer char str_sensor[10]; /****************************************** * Fonctions auxiliaires ****** **********************************/ WiFiClient ubidots ; Client PubSubClient ( ubidots ) ; void callback (sujet char*, charge utile octet*, longueur int non signée) { char p[longueur + 1]; memcpy(p, charge utile, longueur); p[longueur] = NULL; Serial.write (charge utile, longueur); Serial.println(sujet); } void reconnect() { // Boucle jusqu'à ce que nous soyons reconnectés while (!client.connected()) { Serial.println("Tentative de connexion MQTT..."); // Tentative de connexion if (client.connect(MQTT_CLIENT_NAME, TOKEN, "")) { Serial.println("Connected"); } else { Serial.print("Échec, rc="); Serial.print(client.state()); Serial.println(" réessayez dans 2 secondes "); // Attendez 2 secondes avant de réessayer delay(2000); } } } /****************************************** * Fonctions principales *** *************************************/ void setup() { Serial.begin(115200); WiFi.begin(WIFISSID, MOT DE PASSE); // Attribue la broche comme INPUT pinMode(SENSOR, INPUT); Serial.println(); Serial.print("En attente du WiFi..."); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); retard (500); } Serial.println(""); Serial.println("Connecté au Wi-Fi"); Serial.println("Adresse IP : "); Serial.println(WiFi.localIP()); client.setServer(mqttBroker, 1883); client.setCallback(rappel); } void loop() { if (!client.connected()) { reconnect(); } sprintf(sujet, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(charge utile, "%s", ""); // Nettoie la charge utile sprintf(payload, "{\"%s\":", VARIABLE_LABEL); // Ajoute le label variable float sensor = analogRead(SENSOR); /* 4 est la largeur minimale, 2 est la précision ; la valeur float est copiée sur str_sensor*/ dtostrf(sensor, 4, 2, str_sensor) ; sprintf(charge utile, "%s {\"value\": %s}}", charge utile, str_sensor); // Ajoute la valeur Serial.println("Publishing data to Ubidots Cloud"); client.publish (sujet, charge utile); client.loop(); retard (500); }

2. Vérifiez votre code dans l'IDE Arduino. Pour ce faire, dans le coin supérieur gauche de notre IDE Arduino, vous verrez l'icône « Coche » ; appuyez dessus pour vérifier votre code.

3. Téléchargez le code dans votre « Kit de développement ESP32 ». Pour ce faire, choisissez l' icône flèche droite coche ».

4. Après avoir téléchargé le code, ouvrez le moniteur série et vous verrez comment les appareils établissent la connexion au WiFi et au courtier MQTT.

Configureons Ubidots

Configurons un Dashboard d' Ubidots . Pour le créer, rendez-vous dans la section Dashboard (Données > Dashboard )

1. Ensuite, appuyez sur « Ajouter un nouveau widget », et sélectionnez votre widget :

2. Sélectionnez le type de widget que vous souhaitez afficher. Dans mon cas, je choisis le « Line Chart » :

3. Sélectionnez ensuite la variable souhaitée pour afficher les données. Ubidots vous permet d'attribuer un nom de widget personnalisé, une couleur, une période de données à afficher et bien plus encore. Je vous invite à explorer toutes les options des différents types de widgets. Pour terminer la création du widget, appuyez sur l'icône verte.

Vous pouvez désormais surveiller votre signal ECG et d'autres variables à distance grâce à la plateforme de développement d'applications IoT Ubidots :