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

Les maladies cardiovasculaires constituent un problème majeur de santé publique depuis de nombreuses années. Une étude de l'Organisation mondiale de la Santé (OMS) montre également que la plupart des décès sont dus à des maladies cardiovasculaires. Par conséquent, il est crucial de ne pas prendre cette maladie à la légère ; c'est pourquoi des dispositifs médicaux et des systèmes de surveillance sont conçus pour un suivi professionnel.

Nous savons que ces maladies peuvent être prévenues par l'analyse et la surveillance du signal ECG dès les premiers stades. C'est pourquoi j'ai décidé de participer à ce projet afin de commencer à surveiller mon propre signal ECG grâce à la plateforme de développement IoT Ubidots .

Dans cet article, nous allons vous montrer comment démarrer et utiliser le moniteur de fréquence cardiaque AD8232 . Nous verrons ensuite comment le connecter à votre microcontrôleur préféré et comment créer des visualisations à l'aide d'une plateforme IoT

Qu'est-ce que l'AD8232 ?

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

Le plan consiste à configurer la carte AD8232 pour qu'elle reçoive le signal ECG et génère un signal de sortie d'environ 1,5 volt, avec une fréquence d'échantillonnage de 1 kHz. Ce signal sera ensuite transmis via USB depuis l'Arduino afin d'être visualisable sur le moniteur série et Ubidots.

Sans plus tarder, commençons !

Exigences

  • Compte Ubidots
  • Arduino Uno / Mega / Nano
  • Module ECG (AD8232)
  • Électrodes ECG - 3 pièces
  • Connecteur d'électrode ECG - 3,5 mm
  • Câble de données
  • fils de connexion

Câblage

Suivez le schéma et le tableau ci-dessous pour commencer le câblage des appareils nécessaires :

Une fois votre matériel correctement câblé, passons à la configuration de l'ESP32.

Configuration de l'ESP32 avec l'IDE Arduino

Veuillez suivre les étapes ci-dessous, puis vous pourrez programmer l'ESP32 avec l'IDE Arduino.

1. Cliquez sur Fichier > Préférences

2. Dans le « URL supplémentaires du gestionnaire de tableau », saisissez 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. Ajoutez maintenant la ESP32 dans l'IDE Arduino. Pour ce faire, cliquez sur Outils > Carte > Gestionnaire de cartes.

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

Téléverser le code source

1. Après avoir correctement configuré 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 Wi-Fi
  • MOT DE PASSE : Votre mot de passe Wi-Fi
  • JETON : Vos Ubidots JETON
  • MQTT_CLIENT_NAME : Votre propre chaîne ASCII de 8 à 12 caractères alphanumériques.

Code source

Pour consulter cet exemple de code, ainsi que d'autres IoT , consultez ce dépôt .

/**************************************** * Inclure les bibliothèques ****************************************/ #include<WiFi.h> #inclure<PubSubClient.h> #define WIFISSID "votre nom wifi" // Indiquez votre SSID Wifi ici #define PASSWORD "votre mot de passe wifi" // Indiquez votre mot de passe wifi ici #define TOKEN "votre jeton" // Indiquez votre jeton Ubidots#define MQTT_CLIENT_NAME "1234a5d6798" // Nom du client MQTT, veuillez saisir une chaîne alphanumérique ASCII de 8 à 12 caractères ; // Il doit s'agir d'une chaîne ASCII aléatoire et unique, différente de celle de tous les autres appareils /******************************************* * Définition des constantes ****************************************/ #define VARIABLE_LABEL "capteur" // Attribution du libellé de la variable #define DEVICE_LABEL "esp32" // Attribution du libellé de l'appareil #define SENSOR A0 // Définition de A0 comme SENSOR char mqttBroker[] = "ubidots"; char payload[100]; char topic[150]; // Espace pour stocker les valeurs à envoyer char str_sensor[10]; /**************************************** * Fonctions auxiliaires ****************************************/ WiFiClient ubidots; PubSubClient client(ubidots); void callback(char* topic, byte* payload, unsigned int length) { char p[length + 1]; memcpy(p, payload, length); p[length] = NULL; Serial.write(payload, length); Serial.println(topic); } void reconnect() { // Boucle jusqu'à la reconnexion while (!client.connected()) { Serial.println("Tentative de connexion MQTT..."); // Tentative de connexion if (client.connect(MQTT_CLIENT_NAME, TOKEN, "")) { Serial.println("Connecté"); } else { Serial.print("Échec, rc="); Serial.print(client.state()); Serial.println(" Réessayer dans 2 secondes"); // Attendre 2 secondes avant de réessayer delay(2000); } } } /**************************************** * Fonctions principales ****************************************/ void setup() { Serial.begin(115200); WiFi.begin(WIFISSID, PASSWORD); // Attribuer la broche comme entrée pinMode(SENSOR, INPUT); Serial.println(); Serial.print("En attente du WiFi..."); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(""); Serial.println("WiFi connecté"); Serial.println("Adresse IP : "); Serial.println(WiFi.localIP()); client.setServer(mqttBroker, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } sprintf(topic, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(payload, "%s", ""); // Nettoie la charge utile sprintf(payload, "{\"%s\":", VARIABLE_LABEL); // Ajoute l'étiquette de la variable float sensor = analogRead(SENSOR); /* 4 est la largeur minimale, 2 est la précision ; la valeur flottante est copiée dans str_sensor*/ dtostrf(sensor, 4, 2, str_sensor); sprintf(payload, "%s {\"value\": %s}}", payload, str_sensor); // Ajoute la valeur Serial.println("Publication des données sur le cloud Ubidots "); client.publish(topic, payload); client.loop(); delay(500); }

 Coche  en haut à gauche de l'IDE Arduino pour valider votre code.

3. Téléversez le code dans votre « ESP32 Dev Kit ». Pour ce faire, choisissez l’ icône  flèche vers la 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 Wi-Fi et au courtier MQTT.

Mettons en place Ubidots

Créons un Dashboard Ubidots Ubidots Pour ce faire, accédez à 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, j'ai choisi le « Graphique linéaire » :

3. Ensuite, sélectionnez la variable dont vous souhaitez afficher les données. Ubidots vous permet de personnaliser le nom du widget, sa couleur, la période à afficher et bien plus encore. Je vous invite à explorer toutes les options disponibles pour les différents types de widgets. Pour terminer la création du widget, appuyez sur l'icône verte.

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