اینترنت اشیا IOT برد Esp32 پلتفرم ThingSpeak

پروژه مانیتورینگ ضربان قلب با ESP32 سنسور پوستی و پلتفرم ThingSpeak

نوشته شده توسط CiferTech

در پروژه مانیتورینگ ضربان قلب با استفاده برد nodemcu که از تراشه ESP32 استفاده می کند، سنسور ضربان قلب را راه‌اندازی می‌کنیم. سپس اطلاعات دریافتی از سنسور را به پلتفرم اینترنت اشیا منتقل می‌کنیم. البته به دفعات راه‌اندازی این سنسور را با بردهای مختلف از جمله آردوینو مشاهده کرده‌اید. اما این پروژه با دیگر نمونه‌ها متفاوت است. در این پروژه با استفاده از برد ESP32 و قابلیت WiFi این تراشه تمام مقادیر خروجی را در پلتفرم اینترنت اشیا ThingSpeak نمایش خواهیم داد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

 


پلتفرم اینترنت اشیا ThingSpeak


برای مانیتورینگ و ذخیره دیتاها در اینترنت اشیا بایستی از پلتفرم مناسب آن استفاده کنیم. پلتفرم ThingSpeak پلتفرم اینترنت اشیا open source است. API برای ذخیره و بازیابی اطلاعات از طریق پروتکل‌های HTTP و MQTT با اینترنت و یا با استفاده از شبکه محلی است. پلتفرم Thingspeak به شما امکان می دهد داده‌های سنسورها را جمع آوری، ذخیره و تجزیه و تحلیل کنید. همچنین با استفاده از امکانات موجود در دشبورد IOT این سایت می توانیم نمودارهایی بر اساس مقادیر بدست آمده رسم کنیم. ThingSpeak یک سرویس پلتفرم تجزیه و تحلیل اینترنت اشیا است که به شما امکان می دهد جریان های داده زنده را در کلاود جمع آوری، تجسم و تجزیه و تحلیل کنید. می توانید از طریق دستگاه های خود داده ها را به ThingSpeak ارسال کنید، ایجاد تصویری فوری از داده‌های زنده و با استفاده از سرویس های وب مانند Twitter و Twilio هشدار ارسال کنید. ThingSpeak مهندسان و دانشمندان را قادر می سازد تا نمونه های اولیه و ساخت سیستم های اینترنت اشیا را بدون تنظیم سرورها یا توسعه نرم افزارهای وب ایجاد کنند.

پروژه مانیتورینگ ضربان قلب در پلتفرم اینترنت اشیا - دیجی اسپارک

 


برد Nodemcu برپایه ESP32


در پروژه‌های اینترنت اشیا بایستی از بردهای تحت وای فای استفاده کنیم. در پروژه مانیتورینگ ضربان قلب از برد ESP32 مدل Nodemcu استفاده می‌کنیم. وقتی از بردهای ESP32 صحبت می‌کنیم، از مصرف انرژی کمتر، قدرت پردازش بهتر، تکنولوژی بروز صحبت می‌کنیم، یعنی نسل جدیدی از تراشه های WIFI که در ادامه نسل قبل یعنی ESP8266 به بازار معرفی شدند، که علاوه بر WIFI از بلوتوث نیز پشتیبانی می‌کنند. از برد های کمکی که برای این تراشه عرضه شده می‌توان به NodeMCU و ESP32-CAM اشاره کرد. این تراشه در سه نوع wroom , wrover و solo تولید می‌شود.

پروژه مانیتورینگ ضربان قلب با برد ESP32 - دیجی اسپارک

 


توضیحات تکمیلی


در پروژه مانیتورینگ ضربان قلب از پلتفرم IOT به نام ThingSpeak استفاده کرده‌ایم، در واقع این پلتفرم به ما اجازه ساخت یک دشبورد با قابلیت مانیتورینگ مقادیر ورودی را به روش های مختلف را می‌دهد. و در این پروژه با استفاده از این قابلیت، ضربان قلب فرد مورد نظر را با سنسور مربوط اندازه‌گیری و با این دشبورد به صورت گراف نمایش خواهیم داد. سنسور مورد استفاده در این پروژه از نوع پوستی است. کافیست سنسور را روی سطح پوست دست قرار دهیم.

 


وسایل موردنیاز


سنسور ضربان قلب

برد nodemcu ESP32

 


کتابخانه‌های موردنیاز


برای راه اندازی پروژه مانیتورینگ ضربان قلب ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مرجع PulseSensor و ThingSpeak می پردازیم. مراحل زیر را دنبال کنید:

  1. این مسیر را دنبال کنید Sketch Include Library > Manage Libraries
  2. کلمه PulseSensor و ThingSpeak را جستجو کنید.
  3. کتابخانه ها را نصب کنید.

نصب کتابخانه ضربان قلب در آردوینو - دیجی اسپارک

نصب کتابخانه Thingspeak در نرم افزار آردوینو - دیجی اسپارک

 


راه اندازی دشبورد ThingSpeak


این بخش در آموزش قبلی هم توضیح داده شده است. ولی مجددا برای افزایش سرعت آموزش در پروژه مانیتورینگ ضربان قلب هم توضیح خواهم داد. ابتدا به آدرس thingspeak.com مراجعه کنید و یک یک اکانت جدید ایجاد کنید، سپس در قسمت Channels و در ادامه مانند تصویر زیر New Channel، اقدام به ساخت یک چنل یا دشبورد کنید.

راه اندازی پلتفرم ThingSpeak و پروژه مانیتورینگ ضربان قلب - دیجی اسپارک

 

در ادامه صفحه ای مانند تصویر زیر را مشاهده خواهید کرد، اطلاعات اسم و توضیحات را به دلخواه پر کنید و در انتهای صفحه گزینه save channel را انتخاب کنید.

راه اندازی New Channel در پلتفرم ThingSpeak - دیجی اسپارک

 

در ادامه با صفحه زیر روبرو خواهید شد که می‌توانید مقادیر دریافت شده را مشاهده کنید

پروژه مانیتورینگ ضربان قلب با ThingSpeak - دیجی اسپارک

 

همچنین با استفاده از گزینه Add Widgets، می‌توانید، المان های دلخواه خود برای نمایش مقادیر را اضافه کنید.

راه اندازی ویجت ها در پروژه مانیتورینگ ضربان قلب - دیجی اسپارک

 


دریافت API پلتفرم ThingSpeak


در بخش API keys و در باکس مشخص شده می‌توانید API مورد نیاز برای پروژه را پیدا کنید، از این API در ادامه استفاده خواهیم کرد.

 


شماتیک و اتصالات


در این پروژه تنها از سنسور ضربان قلب و برد ESP32 استفاده کرده‌ایم که تنها با اتصال پین Signal از سنسور ضربان قلب به پین D32 به برد ESP32 و البته با تغذیه کردن یک ماژول میتوانیم اقدام به راه‌اندازی نهایی این برد بکنیم.

اتصالت سنسور ضربان قلب به برد Nodemcu - دیجی اسپارک

  • شماتیک اتصالات پروژه مانیتورینگ ضربان قلب با ThingSpeak

 


کد و راه‌اندازی مدار


در این پروژه همانطور که قبل تر ذکر شد و آموزش های لازم داده شد از کتابخانه های PulseSensorPlayground و ThingSpeak استفاده می‌کنیم. در این کد ابتدا مقادیری که از ماژول ضربان قلب دریافت می‌شود را در سریال مانیتور نمایش خواهیم داد و سپس مقادیر را به سرور های ThingSpeak ارسال خواهیم کرد. در این بخش از آموزش بخش هایی از کد این آموزش را بررسی می‌کنیم، در بخش اول کتابخانه ها را فراخوانی می‌کنیم.

#include <PulseSensorPlayground.h>
#include <WiFi.h>
#include <ThingSpeak.h>

 

در ادامه اطلاعات شبکه WiFi مورد نظر برای اتصال برد ESP32 به اینترنت را وارد می‌کنیم.

const char ssid[] = "نام شبکه وای فای شما";
const char password[] = "رمز وای فای شما";

 

در این بخش ID چنل ایجاد شده را وارد کنیو این ID در  بخش اطلاعات هر چنل در Thingspeak نمایش داده می‌شود.

const long CHANNEL = Your ThingSpeak Channel ID;

 

در مراحل قبل آموزش دریافت API را دیدید در این مرحله این API را در این بخش وارد کنید.

const char *WRITE_API = "شناسه دشبور شما";

 

در این خط مقادیر پالس را از سنسور ضربان دریافت می‌کنیم.

pulseSensor.analogInput(PULSE_INPUT);

 

کد کامل پروژه مانیتورینگ ضربان قلب با ThingSpeak

#define USE_ARDUINO_INTERRUPTS false
#include <PulseSensorPlayground.h>
#include <WiFi.h>
#include <ThingSpeak.h>


const char ssid[] = "نام شبکه وای فای شما";
const char password[] = "رمز وای فای شما";
WiFiClient client;

const long CHANNEL = Your ThingSpeak Channel ID;  //در این قسمت id دشبورد ایجاد شده را وارد کنید
const char *WRITE_API = "شناسه دشبور شما";

long prevMillisThingSpeak = 0;
int intervalThingSpeak = 20000; // 15 ثانیه برای ارسال دیتا به دشبورد


const int OUTPUT_TYPE = SERIAL_PLOTTER;
const int PULSE_INPUT = 32;   
const int PULSE_BLINK = 21;    
const int PULSE_FADE = 5;
const int THRESHOLD = 550;   

byte samplesUntilReport;
const byte SAMPLES_PER_SERIAL_SAMPLE = 10;


PulseSensorPlayground pulseSensor;

void setup() {

  Serial.begin(115200);
  
  pulseSensor.analogInput(PULSE_INPUT);
  pulseSensor.blinkOnPulse(PULSE_BLINK);
  pulseSensor.fadeOnPulse(PULSE_FADE);

 
  pulseSensor.setSerial(Serial);
  pulseSensor.setOutputType(OUTPUT_TYPE);
  pulseSensor.setThreshold(THRESHOLD);

  samplesUntilReport = SAMPLES_PER_SERIAL_SAMPLE;
  
  if (!pulseSensor.begin()) {
  
    for(;;) {
      digitalWrite(PULSE_BLINK, LOW);
      delay(50);
      digitalWrite(PULSE_BLINK, HIGH);
      delay(50);
    }
  }
  WiFi.mode(WIFI_STA);
  ThingSpeak.begin(client);  
  
  if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    while (WiFi.status() != WL_CONNECTED) {
      WiFi.begin(ssid, password);
      Serial.print(".");
      delay(5000);
    }
    Serial.println("\nConnected.");
  } 

}

void loop() {

  
  if (pulseSensor.sawNewSample()) {
  
    if (--samplesUntilReport == (byte) 0) {
      samplesUntilReport = SAMPLES_PER_SERIAL_SAMPLE;

      pulseSensor.outputSample();

      if (pulseSensor.sawStartOfBeat()) {
        pulseSensor.outputBeat();
        
      }
    }
    int myBPM = pulseSensor.getBeatsPerMinute();

    if (myBPM < 100 && myBPM > 50){
      if (millis() - prevMillisThingSpeak > intervalThingSpeak) {

      ThingSpeak.setField(1, myBPM);
    
      int x = ThingSpeak.writeFields(CHANNEL, WRITE_API);
      if (x == 200) {
        Serial.println("Channel update successful.");
      }
      else {
        Serial.println("Problem updating channel. HTTP error code " + String(x));
      }

        prevMillisThingSpeak = millis();
      }        
    }    
  }
}

 

پروژه مانیتورینگ ضربان قلب در ThingSpeak - دیجی اسپارک

 


جمع بندی


در پروژه مانیتورینگ ضربان قلب با استفاده از سنسور pulse sensor یا سنسور ضربان قلب مقادیر ضربان قلب را بدست آوردیم و با استفاده از برد ESP32 این مقادیر را تحلیل و در سریال مانیتور نمایش دادیم. در ادامه با فراخوانی کتابخانه ThingSpeak مقادیر بدست آمده را به سرور های ThinkSpeak ارسال خواهیم کرد و با معرفی دشبورد ساخته شده به کد های برنامه مقادیر در دشبورد ما نمایش داده خواهند شد.

راه اندازی پروژه مانیتورینگ ضربان قلب با Thingspeak - دیجی اسپارک

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۱ دیدگاه

  • سلام مهندس اموزش جالبی بود
    میشه این پروژه را ارتقا داد و بشه همزمان کنترل چند رله و دما و رطوبت را بدست گرفت و از هرجا بتونیم هم رله را کنترل و هم دما و رطوبت را ببینیم

    • با سلام، بله این امکان وجود دارد تا تمام مقادیر را به دشبورد خود ارسال کنیم تا از نقاط مختلف قابل دسترسی باشد.

  • سلام ببخشید من داخل پروگرام کردن مشکل دارم اصن برد رو نمیشناسه
    همه توابع esp32 هم دان کردم بازم نشد

  • من میخوام این پروژه رو درست کنم الان ب جز سنسور و برد به مقاومت و پتانسیومترو و… احتیاج ندارم؟؟ ننوشتین بقیه چیزاش رو

  • سلام مهندس:برای ارسال اطلاعات سنسور ضربان قلب ،سنسور نیرو و سنسور زاویه سنج از چه ماژولی برای ارسال اطلاعات به نرم افزار گوشی اندروید استفاده کنیم لطفا راهنمایی کنید

  • سلام خسته نباشید
    کد برای من همچین اروری میده
    Arduino: 1.8.19 (Windows 10), Board: “NodeMCU-32S, 80MHz, 921600”
    C:\Users\RahaSystem\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp: In member function ‘void PulseSensor::initializeLEDs()’:
    C:\Users\RahaSystem\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp:218:27: error: ‘analogWrite’ was not declared in this scope
    analogWrite(FadePin, 0); // turn off the LED. ^
    C:\Users\RahaSystem\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp: In member function ‘void PulseSensor::updateLEDs()’:
    C:\Users\RahaSystem\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp:234:49: error: ‘analogWrite’ was not declared in this scope
    analogWrite(FadePin, FadeLevel / FADE_SCALE);
    Multiple libraries were found for “WiFi.h”
    Used: C:\Users\RahaSystem\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.5\libraries\WiFi
    Not used: C:\Users\RahaSystem\Documents\Arduino\libraries\WiFiNINA
    Not used: D:\Arduino\1.8.19\Arduino\libraries\WiFi
    exit status 1
    Error compiling for board NodeMCU-32S.
    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    لطفا کمک کنید !!!!!!!!!!!!

  • سلام و وقت بخیر
    دلیل و راه حل این خطا رو میفرمایید؟

    c:\Users\amira\OneDrive\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp: In member function ‘void PulseSensor::initializeLEDs()’:
    c:\Users\amira\OneDrive\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp:217:27: error: ‘analogWrite’ was not declared in this scope
    analogWrite(FadePin, 0); // turn off the LED.
    ^
    c:\Users\amira\OneDrive\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp: In member function ‘void PulseSensor::updateLEDs()’:
    c:\Users\amira\OneDrive\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp:232:49: error: ‘analogWrite’ was not declared in this scope
    analogWrite(FadePin, FadeLevel / FADE_SCALE);
    ^

    exit status 1

    Compilation error: exit status 1

  • سلام وقت بخیر
    برای استفاده از سرور think speak که نیاز به تغییر ای پی هستش . چه راهکاری براش دارید ؟ و اینکه برای ارسال داده هم این محدودیت هست؟

  • سلام من میخواستم از سنسور max30102 استفاده کنم و داده های ضربان قلب و اکسیژن رو به thingspeak ارسال کنم
    امکانش وجود داره؟

  • سلام مهندس
    ایا امکانش هست به جای pulse sensor از max 30102 استفاده کرد تا بتوان در کنار امواج و تعداد ضربان قلب، اکسیژن خون را نیز نمایش داد
    ممنون میشم پاسخ بدهید