تحلیل کتابخانه

تحلیل و بررسی کتابخانه BME280 توسعه یافته ADAFRUIT

BME280-arduino-library-adafruit-digispark
نوشته شده توسط معین صابری

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

 


نصب کتابخانه BME280


 به منظور استفاده از کتابخانه BME280.h، ابتدا می بایست آن را نصب کنیم. در این قسمت به نصب کتابخانه سنسور شتاب سنج با جستجو در مخازن آردوینو می پردازیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به می شوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید.

Analysis of DFPlayerMini.h library

 

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

دانلود کتابخانه BME280.H آردوینو - دیجی اسپارک

 

توجه: در صورتیکه هنگام نصب این کتابخانه با پیغام زیر رو به رو شدید، لطفا مطابق تصویر زیر، گزینه مشخص شده در کادر قرمز رنگ را انتخاب کرده و کتابخانه های پیش نیاز را هم نصب نمایید.

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

 

ورژن کتابخانه مورد تحلیل در این آموزش، ۲٫۲٫۱ است. پس از نصب، به بررسی الزامات فنی می پردازیم.

 


الزامات و نکات فنی کتابخانه BME280 توسعه یافته ADAFRUIT


پس از نصب و پیش از بررسی توابع کلیدی کتابخانه، نگاهی نکات فنی کتابخانه خواهیم داشت. این کتابخانه تحت پلتفرم آردوینو قابل راه اندازی است. البته از آنجاییکه سنسور BME280 دارای رابط داده I2C و SPI بوده و کتابخانه نیز بر مبنای پورت سخت افزاری در I2C و سخت/نرم افزای در SPI عمل می کند، بنابراین برد مورد نظر شما باید از I2C و یا SPI سخت افزاری نیز پشتیبانی نماید. البته برای سادگی و اشغال پایه کمتر بهتر است از پورت I2C استفاده شود. پورت سریال I2C سخت افزاری در بردهای پرکاربرد به شرح زیر خواهد بود.

آردوینو UNO: A4,A5

ESP8266: GPIO4,GPIO5

بنابراین در هنگام راه اندازی و کار، از پورت I2C سخت افزاری می بایست استفاده گردد. در قسمت بعدی نیز توابع کلیدی و کاربردی کتابخانه را مورد بررسی قرار می دهیم.

 


توابع کلیدی کتابخانه BME280 توسعه یافته ADAFRUIT


 پس از بررسی الزامات و نصب کتابخانه، نوبت به توابع کلیدی و کاربردی می رسد. جدول زیر لیست توابع کلیدی و کاربردی را نمایش می دهد. توجه داشته باشید که در توابع زیر، ورودی ها از سمت چپ به راست، ورودی های اول، دوم، سوم و…. شناخته خواهد شد.

شرح ورودی ها تابع
این تابع، تابع سازنده کلاس کتابخانه است. به کمک این تابع سنسور با پورت I2C سخت افزاری راه اندازی می شود. بدون ورودی Adafruit_BME280()
این تابع، تابع سازنده دیگری از کلاس کتابخانه است. به کمک این تابع سنسور با پورت SPI سخت افزاری راه اندازی می شود. ووردی اول تابع پایه CS را تعیین می کند. ورودی دوم پورت سخت افزاری را تعیین می نماید. در صورتیکه ورودی دوم را خالی بگذارید، پورت SPI سخت افزاری برد به طور خودکار انتخاب و راه اندازی خواهد شد. ورودی اول از نوع بدون علامت ۸ بیتی

ورودی دوم اشاره گر به پورت I2C سخت افزاری

Adafruit_BME280(int8_t cspin, SPIClass *theSPI = &SPI)
این تابع سازنده هم ارتباط SPI را به صورت نرم افزاری فراهم می کند. ورودی های تابع تعیین کننده پایه های ارتباط SPI به صورت نرم افزاری هستند. ورودی اول از نوع بدون علامت ۸ بیتی برای پایه CS ارتباط SPI

———–

ورودی دوم از نوع ۸ بیتی بدون علامت برای پایه MOSI ارتباط SPI

———-

ورودی سوم از نوع بدون علامت ۸بیتی برای پایه MISO ارتباط SPI

———–

ورودی چهارم از نوع بدون علامت ۸ بیتی برای پایه SCK ارتباط I2C

 

 

Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin, int8_t sckpin)
به کمک این تابع ارتباط بین میکروکنترلر و سنسور راه اندازی می شود. ورودی اول آدرس I2C سنسور را تعیین می کند. با خالی گذاشتن این ورودی، آدرس به صورت پیشفرض قرار خواهد گرفت. ورودی دوم هم پورت I2C سخت افزاری را تعیین می کند. با خالی گذاشتن این ورودی، پورت I2C سخت افزاری به طور خودکار تشخیص داده شده و انتخاب خواهد شد. ورودی اول از نوع بدون علامت ۸ بیتی برای تعیین آدرس I2C سنسور

ورودی دوم اشاره گر به پورت I2C سخت افزاری

bool begin(uint8_t addr = BME280_ADDRESS, TwoWire *theWire = &Wire)
ورودی نخست مدهای کاری سنسور را تعیین می کند. این ورودی برای حالت کاری عادی به صورت MODE_NORMAL و برای ورود به حالت کاری کم مصرف به صورت MODE_SLEEP  تعریف می گردد. همچنین مد MODE_FORCED زمانیکه به ماژول درخواست ارسال شود، داده ها را ارسال کرده و سپس وارد مد sleep می شود.

ورودی دوم نرخ نمونه برداری سنسور دما را نشان می دهد. این مقادیر از سرعت x1 الی x 16 به صورت زیر تعریف می شوند. مقدار پیشفرض ۱۶x است.

SAMPLING_X1

SAMPLING_X2

SAMPLING_X4

SAMPLING_X8

SAMPLING_X16

**********

ورودی سوم نرخ نمونه برداری سنسور فشار را تعیین می کند. مقدار پیشفرض ۱۶x است. مقادیر معتبر این ورودی دقیقا همان مقادیر سنسور دما خواهد بود.

*************

ورودی چهارم نرخ نمونه برداری رطوبت را تعیین می کند. مقدار پیشفرض ۱۶x بوده و مقادیر معتبر برای این ورودی دقیقا همان مقادیر سنسور دما و فشار است.

**********

ورودی پنجم مخصوص فیلتر جهت افزایش دقت سنسور رطوبت است. با تغییر در نرخ نمونه برداری واحدهای دما و فشار می توان دقت رطوبت را افزایش داد. در حالت عادی این فیلتر خاموش است(ورودی تابع) اما مقادیر معتبر برای این ورودی عبارتند از:

FILTER_OFF

FILTER_X2

FILTER_X4

FILTER_X8

FILTER_X16

مقادیر فوق از x2 تا x16 سرعت نمونه برداری دو پارامتر فشار و دما را تعیین می کنند.

**********

ورودی ششم مدت زمان قرارگیری ماژول در مد sleep را تعیین می کند. این مقدار در حالت پیشفرض ۵ میلی ثانیه بوده و مقادیر معتبر به شرح زیر است.

 

 

 

STANDBY_MS_0_5

STANDBY_MS_10

STANDBY_MS_20

STANDBY_MS_62_5

STANDBY_MS_125

STANDBY_MS_250

STANDBY_MS_500

STANDBY_MS_1000

در مقادیر فوق، اعداد میزان تاخیر به میلی ثانیه را نشان می دهند.

 

ورودی اول جهت تعیین مد کاری سنسور

********

ورودی دوم جهت تعیین نرخ نمونه برداری دما

********

ورودی سوم جهت تعیین نرخ نمونه برداری فشار هوا

**********

ورودی چهارم تعیین نرخ نمونه برداری رطوبت

*********

ورودی پنجم جهت تعیین فیلتر سنسور

********

ورودی ششم جهت تعیین مدت زمان قرار گیری در حالت standby

 

 

void setSampling(sensor_mode mode = MODE_NORMAL,

sensor_sampling tempSampling = SAMPLING_X16,

sensor_sampling pressSampling = SAMPLING_X16,

sensor_sampling humSampling = SAMPLING_X16,

sensor_filter filter = FILTER_OFF,

standby_duration duration = STANDBY_MS_0_5)

این تابع مقدار دما را در خروجی خود قرار می دهد. بدون ورودی   float readTemperature(void)
این تابع فشار را محاسبه کرده و در خروجی قرار می دهد. بدون ورودی float readPressure(void)
این تابع رطوبت را محاسبه کرده و در خروجی خود قرار می دهد. بدون ورودی   float readHumidity(void)
این تابع ارتفاع را محاسبه کرده و در خروجی قرار می دهد. در ورودی این تابع می بایست ارتفاع از سطح دریا درج شود. ورودی از نوع اعشاری برای سطح دریا float readAltitude(float seaLevel)
به کمک این تابع می توانید سطح دریا را به کمک ورودی های ارتفاع و فشار، محاسبه کرده و در خروجی قرار دهید. ورودی اول از نوع اعشاری برای تعیین ارتفاع

ورودی دوم از نوع اعشاری جهت تعیین فشار

float seaLevelForAltitude(float altitude, float pressure)

 

پس از بررسی توابع کلیدی و کاربردی، نوبت به اجرای یک نمونه برنامه می رسد. قسمت بعدی مربوط به این موضوع است.

 


اجرای یک نمونه برنامه


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

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // راه اندازی سنسور با پورت I2C
void setup() {
    Serial.begin(9600);  //تنظیم باودریت
    while(!Serial);    // انتظار برای راه اندازی سریال
    unsigned status;  //تعریف متغیر جهت راه اندازی و تست سنسور
    status = bme.begin();    //راه اندازی سنسور
    if (!status) {   //چاپ اعلام خطا در صورتیکه سنسور راه اندازی نشود.
        Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
        while (1) delay(10);
    }
    
}
void loop() { 
    printValues();
    delay(1000);

}


void printValues() {
    Serial.print("Temperature = ");
    Serial.print(bme.readTemperature());  //خواندن دما
    Serial.println(" °C");

    Serial.print("Pressure = ");

    Serial.print(bme.readPressure() / 100.0F);  //خواندن فشار
    Serial.println(" hPa");

    Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());   //خواندن رطوبت
    Serial.println(" %");

    Serial.println();
}

 


لوازم متناسب با کتابخانه


انواع برد آردوینو

انواع برد ESP

سنسور BME280

 


جمع بندی


 در این آموزش به تحلیل و بررسی کتابخانه BME280 پرداختیم.  سنسور BME280 یک سنسور کاربردی جهت اندازه گیری دما، رطوبت و فشار محیط است. به کمک این سنسور می توان این سه پارامتر کلیدی را به سادگی اندازه گیری نمود. این سنسور دارای رابط ارتباطی SPI و I2C بوده و دارای مدهای کاری مختلف و امکانات بسیاری است. در این آموزش به تحلیل و بررسی کتابخانه این سنسور تحت آردوینو پرداختیم. در ابتدا نصب و نکات فنی کتابخانه مورد بررسی قرار گرفت. سپس توابع کلیدی و کاربردی تحلیل شد. در نهایت با ارائه مثالی، عملکرد توابع را در یک برنامه مشاهده نمودیم.

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

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