• EUR€
  • £GBP
  • $USD

Portable/Wearable Health Monitoring IoT System

DFRobot Aug 17 2018 1056

*Created by Salah Uddin

This project presents a prototype of wearable health monitoring device, which is supported by DFRobot.

Things used in this project

DFRobot FireBeetle Board
ProtoCentral Pulse Oximeter & Heart Rate Sensor based on MAX30100
USB-A to Micro-USB Cable
Li-Ion Battery 1000mAh 
Jumper wires (generic)
Thinger.io Platform
Evothings Studio


This system continuously monitors the health status of a person. The application of this system is remotely monitoring the babies or old person who lives in alone. The system is directly connected to the IoT cloud, as a result, anyone can (such as doctors, relatives etc) monitor their health condition remotely in real-time. The health parameters of a person that we monitor using this device are heart rate in BPM, temperature, SPO2 level, and humidity. Please note that temperature and humidity sensors are not presents in this project; of course, it's possible to add them. I have used some random value while demonstrating the application.

The FireBeetle development board along with heart rate sensor is used here. The FireBeetle board collects the sensors data and sends them to the iot-cloud. The board uses WiFi connectivity for maintaining the cloud communication with Thinger.io. Thinger.io is an opensource IoT-cloud platform. A mobile application for real-time data visualization is developed. The application directly connected to the IoT cloud and shows the real-time data that comes from health monitoring device.T he application is helpful for monitoring babies and older people.

System Block Diagram

Mobile App for Remote Monitoring


Circuit Diagram


#include <WiFiClientSecure.h> #include <ThingerESP32.h> #define USERNAME "YOUR_USER_NAME" #define DEVICE_ID "YOUR_DEVICE_ID" #define DEVICE_CREDENTIAL "YOUR_DEVICE_CREDENTIAL" #define SSID "YOUR_WIFI_SSID" #define SSID_PASSWORD "YOUR_WIFI_PASSWORD" ThingerESP32 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL); int bpm; int spo2; unsigned long currentMillis; //hold the current time //pulse oximeter time period #define REPORTING_PERIOD_MS 1000 PulseOximeter pox; uint32_t tsLastReport = 0; // Callback (registered below) fired when a pulse is detected void onBeatDetected() { Serial.println("Beat!"); } //pulse sensor callback function void measured_pulse(){ // Make sure to call update as fast as possible pox.update(); if (millis() - tsLastReport > REPORTING_PERIOD_MS) { bpm=pox.getHeartRate(); tsLastReport = millis(); } } void setup() { Serial.begin(115200); Serial.println("Initializing MAX30100"); // Initialize the PulseOximeter instance and register a beat-detected callback pox.begin(); pox.setOnBeatDetectedCallback(onBeatDetected); pinMode(LED_BUILTIN, OUTPUT); thing.add_wifi(SSID, SSID_PASSWORD); thing["spo2"] >> [](pson& out){out= pox.getSpO2();}; thing["bpm"] >> [](pson& out){out = bpm ;}; // more details at http://docs.thinger.io/arduino/ } void loop() { thing.handle(); currentMillis = millis(); measured_pulse(); }