Სარჩევი:

ბიბლიოთეკა BMP280 და BME280: 7 ნაბიჯი
ბიბლიოთეკა BMP280 და BME280: 7 ნაბიჯი

ვიდეო: ბიბლიოთეკა BMP280 და BME280: 7 ნაბიჯი

ვიდეო: ბიბლიოთეკა BMP280 და BME280: 7 ნაბიჯი
ვიდეო: Arduino Nano, BME280 და SSD1306 OLED ამინდის სადგური 2024, ივლისი
Anonim
ბიბლიოთეკა BMP280 და BME280
ბიბლიოთეკა BMP280 და BME280
ბიბლიოთეკა BMP280 და BME280
ბიბლიოთეკა BMP280 და BME280
ბიბლიოთეკა BMP280 და BME280
ბიბლიოთეკა BMP280 და BME280

შესავალი

მე არ დამიწყია ამ ბიბლიოთეკის დაწერა. ეს "მოხდა" როგორც დაწყებული პროექტის გვერდითი ეფექტი, რომელიც იყენებს BMP280- ს. ეს პროექტი ჯერ არ დასრულებულა, მაგრამ ვფიქრობ, ბიბლიოთეკა მზადაა სხვებს გაუზიაროს. შემდგომში დამჭირდა BME280- ის გამოყენება, რაც ტენიანობის გაზომვას მატებს BMP280- ის წნევისა და ტემპერატურის შესაძლებლობას. BME280 "უკანაა თავსებადი" BMP280– თან - ანუ ყველა რეგისტრი და ნაბიჯი, რომელიც საჭიროა BME280– დან წნევისა და ტემპერატურის წასაკითხად იგივეა, რაც BMP280– ისთვის. ტენიანობის წასაკითხად საჭიროა დამატებითი რეგისტრები და ნაბიჯები, რომლებიც ვრცელდება მხოლოდ BME280– ზე. ეს ბადებს კითხვას, ერთი ბიბლიოთეკა ორივესთვის, ან ორი ცალკე ბიბლიოთეკა. აპარატურის ორი ტიპის მოწყობილობა სრულად ცვალებადია. ბევრი მოდულიც კი, რომელიც იყიდება (მაგალითად, Ebay– ზე და AliExpress– ზე) არის წარწერით BME/P280. იმის გასარკვევად, თუ რომელი ტიპია ის, თქვენ უნდა შეხედოთ სენსორზე დაწერილ (მცირე ზომის) ჩანაწერს, ან შეამოწმოთ მოწყობილობის ID ბაიტი. გადავწყვიტე ერთი ბიბლიოთეკაში წასვლა. როგორც ჩანს, ყველაფერი კარგად დასრულდა.

გამოხმაურება, განსაკუთრებით გაუმჯობესების ნებისმიერი წინადადება, დაფასდება.

ბიბლიოთეკის მახასიათებლები და შესაძლებლობები

ბიბლიოთეკა არის პროგრამული უზრუნველყოფის ნაწილი, რომელიც უზრუნველყოფს პროგრამირების პროგრამის ინტერფეისს (API) პროგრამისტებისთვის, რათა განახორციელოს მოწყობილობის შესაძლებლობები, ყოველგვარი წვრილმანი დეტალების გატარების გარეშე. სასურველია, რომ API დამწყებთათვის მარტივი იყოს მარტივი მოთხოვნების დასაწყებად, ხოლო უზრუნველყოს მოწყობილობის შესაძლებლობების სრული გამოყენება. ბიბლიოთეკა სასურველია დაიცვას მოწყობილობის მწარმოებლის ნებისმიერი კონკრეტული მითითება, ასევე პროგრამული უზრუნველყოფის კარგი პრაქტიკა. მე ვცდილობდი ამ ყველაფრის მიღწევას. BMP280– ით მუშაობის დაწყებისას აღმოვაჩინე 3 განსხვავებული ბიბლიოთეკა: Adafruit_BMP280; ნახეს_ BMP280; და ერთი მოუწოდა BMP280 მოწყობილობის მწარმოებლისგან. არც Adafruit და არც Seeed არ უზრუნველყოფდნენ გაფართოებულ შესაძლებლობებს, თუმცა ისინი კარგად მუშაობდნენ და ადვილად გამოსაყენებელი იყო ძირითადი პროგრამებისთვის. მე ვერ გავიგე როგორ გამოვიყენოთ ის, რაც აწარმოებს მოწყობილობის მწარმოებელს (Bosch Sensortec). ეს შეიძლება იყოს ჩემი დეფიციტი და არა მათი. თუმცა ბიბლიოთეკა ბევრად უფრო რთული იყო, ვიდრე დანარჩენი ორი, მე ვერ ვიპოვე რაიმე ინსტრუქცია ან გამოყენების მაგალითები (შემდგომში აღმოვაჩინე მაგალითები ფაილში "bmp280_support.c", თუმცა ეს არ იყო ჩემთვის განსაკუთრებით გამოსადეგი).

ამ ფაქტორების შედეგად, მე გადავწყვიტე დამეწერა ჩემი ბიბლიოთეკა BMP280– ისთვის.

BME280– ის ბიბლიოთეკის მდგომარეობის შესწავლისას ვიპოვე ცალკე ბიბლიოთეკები Adafruit_BME280, Seed_BME280 და კიდევ ერთი BME280_MOD-1022, რომელიც დაწერილია Embedded Adventures– ის მიერ. არცერთ მათგანს არ აქვს გაერთიანებული BMP280 ფუნქციები ბიბლიოთეკაში, რომელსაც შეუძლია გამოიყენოს BME280. არცერთ მათგანს პირდაპირ არ უჭერს მხარს მოწყობილობების უნარი შეინახოს რამდენიმე ბიტი მონაცემები, სანამ მოწყობილობა და მისი მაკონტროლებელი მიკროპროცესორი მძინავს (ეს უნარი აშკარაა მონაცემთა ფურცელში და მხარს უჭერს ბიბლიოთეკაში, რომელიც მე დავწერე და აღწერილი აქ).

კომბინირებულ ბიბლიოთეკას უნდა ჰქონდეს მხარდაჭერა BME280– ის ყველა შესაძლებლობისთვის, მაგრამ BMP280– ით გამოყენებისას ის არ უნდა აწესებდეს ზედმეტ ხარჯებს გამოუყენებელი ფუნქციებისაგან. კომბინირებული ბიბლიოთეკის უპირატესობები მოიცავს ნაკლებ ბიბლიოთეკურ ფაილებს, ერთსა და იმავე პროექტში სხვადასხვა მოწყობილობების ადვილად შერევას და გამარტივებულ ცვლილებებს შენარჩუნების ან განახლების მიზნით, რაც მხოლოდ ერთ ადგილას უნდა მოხდეს, ვიდრე ორზე. ეს ყველაფერი ალბათ უმნიშვნელოა, თუნდაც უმნიშვნელო, მაგრამ…

მოწყობილობის შესაძლებლობები

BMP280 და BME280 არის ზედაპირზე დამონტაჟებული მოწყობილობები დაახლოებით 5 მმ კვადრატულ და 1 მმ სიმაღლეზე. არსებობს 8 ინტერფეისის ბალიში, მათ შორის 2 ცალკე შეყვანის ბალიში და ორი სახმელეთო ბალიში. ისინი ხელმისაწვდომია eBay– ზე, როგორც მოდული, ამოღებულია 4 ან 6 ქინძისთავით. 4 პინიან მოდულს აქვს ფიქსირებული I2C მისამართი და მისი კონფიგურაცია შეუძლებელია SPI პროტოკოლის გამოსაყენებლად.

6 პინიანი მოდული ან შიშველი მოწყობილობა შეიძლება გამოყენებულ იქნას I2C ან SPI პროტოკოლებით. I2C რეჟიმში მას შეიძლება ჰქონდეს ორი განსხვავებული მისამართი, მიღწეული SDO პინის შეერთებით Ground- თან (საბაზო მისამართისთვის = 0x76) ან Vdd (საბაზო მისამართისთვის +1 = 0x77). SPI რეჟიმში მას აქვს ჩვეულებრივი განლაგება 1 საათი, 2 მონაცემი (თითო თითოეული მიმართულებით) და მოწყობილობის არჩევის პინი (CS).

ბიბლიოთეკა, რომელიც აქ დავწერე და აღვწერე, მხოლოდ I2C- ს უჭერს მხარს. Adafruit_BMP280 და BME_MOD-1022 ბიბლიოთეკას აქვს როგორც i2C, ასევე SPI მხარდაჭერა.

ბიბლიოთეკის ჩამოტვირთვა შესაძლებელია აქ:

github.com/farmerkeith/BMP280-library

ნაბიჯი 1: აპარატურის დაყენება

აპარატურის დაყენება
აპარატურის დაყენება

სანამ ბიბლიოთეკა იქნება სასარგებლო, აუცილებელია მიკროკონტროლის დაკავშირება BMP280 (ან სურვილის შემთხვევაში ორ მათგანთან).

მე გამოვიყენე WeMos D1 mini pro, ამიტომ მე ვაჩვენებ მის კავშირებს. სხვა მიკროკონტროლერები მსგავსი იქნება, თქვენ უბრალოდ გჭირდებათ SDA და SCL ქინძისთავების სწორად დაკავშირება.

WeMos D1 mini pro– ს შემთხვევაში, კავშირებია:

ფუნქცია WeMos pin BMP280 pin შენიშვნები

SDA D2 SDA SCL D1 SCL Vdd 3V3 Vin ნომინალური 3.3V Ground GND მისამართების კონტროლი SDO Ground ან Vdd I2C აირჩიეთ CSB Vdd (GND ირჩევს SPI)

გაითვალისწინეთ, რომ MPO80 მოდულის ზოგიერთ SDO პუნქტს ეწოდება SDD, ხოლო Vdd pin შეიძლება იყოს VCC. შენიშვნა: SDA და SCL ხაზებს უნდა ჰქონდეთ გამწევი რეზისტორები ხაზსა და Vin pin- ს შორის. როგორც წესი, ღირებულება 4.7K უნდა იყოს OK. ზოგიერთ BMP280 და BME280 მოდულს აქვს მოდულში შემავალი 10K გამყვანი რეზისტორები (რაც არ არის კარგი პრაქტიკა, ვინაიდან I2C ავტობუსზე მრავალი მოწყობილობის დაყენებამ შეიძლება ზედმეტად დატვირთოს). ამასთან, 2 BME/P280 მოდულის გამოყენება, თითოეული 10K რეზისტორით, არ უნდა იყოს პრობლემა პრაქტიკაში, რადგან იმავე ავტობუსში არ არის ძალიან ბევრი სხვა მოწყობილობა, ასევე გამწევი რეზისტენტებით.

მას შემდეგ რაც აპარატურა დაუკავშირდება, თქვენ მარტივად შეგიძლიათ შეამოწმოთ თქვენი მოწყობილობა არის BMP280 თუ BME280 ესკიზის I2CScan_ID გაშვებით, რომელსაც ნახავთ აქ:

თქვენ ასევე შეგიძლიათ შეამოწმოთ გაქვთ BMP280 ან BME280 თავად მოწყობილობის დათვალიერებით. საჭიროდ ჩავთვალე ციფრული მიკროსკოპის გამოყენება, მაგრამ თუ თქვენი მხედველობა ძალიან კარგია, თქვენ ამას შეძლებთ ყოველგვარი დახმარების გარეშე. მოწყობილობის გარსზე არის დაბეჭდვის ორი ხაზი. გასაღები არის პირველი ასო მეორე სტრიქონზე, რომელიც BMP280 მოწყობილობების შემთხვევაში არის "K" და BME280 მოწყობილობების შემთხვევაში არის "U".

ნაბიჯი 2: ბიბლიოთეკის მიერ მოწოდებული API

API მოწოდებულია ბიბლიოთეკის მიერ
API მოწოდებულია ბიბლიოთეკის მიერ
API მოწოდებულია ბიბლიოთეკის მიერ
API მოწოდებულია ბიბლიოთეკის მიერ

ბიბლიოთეკის ჩართვა ესკიზში

ბიბლიოთეკა შედის ჩანახატში სტანდარტული ფორმით განცხადების გამოყენებით

#მოიცავს "farmerkeith_BMP280.h"

ეს განცხადება უნდა შეიცავდეს ესკიზის ადრეულ ნაწილს setup () ფუნქციის დაწყებამდე.

BME ან BMP პროგრამული ობიექტის შექმნა

არსებობს 3 დონე BMP280 პროგრამული უზრუნველყოფის ობიექტის შესაქმნელად. უმარტივესი არის უბრალოდ

bme280 ობიექტის სახელი; ან bmp280 ობიექტის სახელი;

მაგალითად, BMP280 bmp0;

ეს ქმნის პროგრამულ ობიექტს ნაგულისხმევი მისამართით 0x76 (ანუ SDO მიწასთან დაკავშირებული).

BME280 ან BMP280 პროგრამული ობიექტის შესაქმნელად მომდევნო დონეს აქვს პარამეტრი 0 ან 1, შემდეგნაირად:

bme280 objectNameA (0);

bmp280 objectNameB (1);

პარამეტრი (0 ან 1) ემატება I2C საბაზისო მისამართს, ასე რომ ორი BME280 ან BMP280 მოწყობილობა შეიძლება გამოყენებულ იქნას ერთსა და იმავე I2C ავტობუსში (თითოეული მათგანის ჩათვლით).

BME ან BMP280 პროგრამული ობიექტის შესაქმნელად მესამე დონეს აქვს ორი პარამეტრი. პირველი პარამეტრი, რომელიც არის 0 ან 1, არის მისამართისთვის, ისევე როგორც წინა შემთხვევაში. მეორე პარამეტრი აკონტროლებს გამართვის ბეჭდვას. თუ ის დაყენებულია 1 -ზე, პროგრამული უზრუნველყოფის ობიექტთან თითოეული გარიგება იწვევს Serial.print შედეგებს, რაც პროგრამისტს საშუალებას აძლევს დაინახოს გარიგების დეტალები. Მაგალითად:

bmp280 objectNameB (1, 1);

თუ გამართვის ბეჭდვის პარამეტრი არის 0, პროგრამული უზრუნველყოფის ობიექტი უბრუნდება ნორმალურ ქცევას (ბეჭდვის გარეშე).

ეს განცხადება ან განცხადებები უნდა შეიცავდეს #მოიცავს შემდეგ და setup () ფუნქციის შემდეგ.

BME ან BMP პროგრამული უზრუნველყოფის ობიექტის ინიციალიზაცია

გამოყენებამდე აუცილებელია მოწყობილობიდან დაკალიბრების პარამეტრების წაკითხვა და მისი კონფიგურაცია ნებისმიერი გაზომვის რეჟიმის, გადაღების და ფილტრის პარამეტრების შესაბამისი.

მარტივი, ზოგადი დანიშნულების ინიციალიზაციისთვის, განცხადება არის:

objectName.begin ();

დაწყების ეს ვერსია () კითხულობს მოწყობილობიდან დაკალიბრების პარამეტრებს და ადგენს osrs_t = 7 (16 ტემპერატურის გაზომვა), osrs_p = 7 (16 წნევის გაზომვა), რეჟიმი = 3 (უწყვეტი, ნორმალური), t_sb = 0 (0.5 ms ძილი შორის გაზომვის კომპლექტი), ფილტრი = 0 (K = 1, ასე რომ არ არის გაფილტვრა) და spiw_en = 0 (SPI გამორთულია, ამიტომ გამოიყენეთ I2C). BME280- ის შემთხვევაში, არის დამატებითი პარამეტრი osrs_h = 7 ტენიანობის 16 გაზომვისთვის.

არსებობს begin () - ის კიდევ ერთი ვერსია, რომელიც იღებს ექვსივე (ან 7) პარამეტრს. ზემოაღნიშნული განცხადების ექვივალენტია

objectName.begin (7, 7, 3, 0, 0, 0); // osrs_t, osrs_p, რეჟიმი, t_sb, ფილტრი, spiw_en

ან objectName.begin (7, 7, 3, 0, 0, 0, 7); // osrs_t, osrs_p, რეჟიმი, t_sb, ფილტრი, spiw_en, osrs_h

კოდების სრული ჩამონათვალი და მათი მნიშვნელობა მოცემულია BME280 და BMP280 მონაცემთა ფურცელში, ასევე ბიბლიოთეკაში.cpp ფაილში არსებულ კომენტარებში.

ტემპერატურისა და წნევის მარტივი გაზომვა

ტემპერატურის გაზომვის მისაღებად ყველაზე მარტივი გზაა

ორმაგი ტემპერატურა = objectName.readTemperature (); // ტემპერატურის გაზომვა

წნევის გაზომვის უმარტივესი გზაა

ორმაგი წნევა = objectName.readPressure (); // წნევის გაზომვა

ტენიანობის გაზომვის უმარტივესი გზაა

ორმაგი ტენიანობა = objectName.readHumidity (); // ტენიანობის გაზომვა (მხოლოდ BME280)

ტემპერატურისა და წნევის მისაღებად ზემოაღნიშნული ორი განცხადება შეიძლება გამოყენებულ იქნას ერთმანეთის მიყოლებით, მაგრამ არსებობს კიდევ ერთი ვარიანტი, რომელიც არის:

ორმაგი ტემპერატურა;

ორმაგი წნევა = objectName.read წნევა (ტემპერატურა); // წნევის და ტემპერატურის გაზომვა

ეს განცხადება კითხულობს მონაცემებს BME280 ან BMP280 მოწყობილობიდან მხოლოდ ერთხელ და აბრუნებს როგორც ტემპერატურას, ასევე წნევას. ეს არის ოდნავ უფრო ეფექტური გამოყენება I2C ავტობუსი და უზრუნველყოფს, რომ ორი კითხვა შეესაბამება ერთსა და იმავე გაზომვის ციკლს.

BME 280– სთვის კომბინირებული განცხადება, რომელიც იღებს სამივე მნიშვნელობას (ტენიანობა, ტემპერატურა და წნევა) არის:

ორმაგი ტემპერატურა, წნევა; ორმაგი ტენიანობა = objectName.readHumidity (ტემპერატურა, წნევა); // გაზომეთ ტენიანობა, წნევა და ტემპერატურა

ეს განცხადება კითხულობს მონაცემებს BMP280 მოწყობილობიდან მხოლოდ ერთხელ და აბრუნებს სამივე მნიშვნელობას. ეს არის ოდნავ უფრო ეფექტური გამოყენება I2C ავტობუსი და უზრუნველყოფს, რომ სამი კითხვა შეესაბამება იგივე გაზომვის ციკლს. გაითვალისწინეთ, რომ ცვლადების სახელები შეიძლება შეიცვალოს ყველაფერში, რაც მომხმარებელს მოსწონს, მაგრამ მათი თანმიმდევრობა ფიქსირდება - ტემპერატურა პირველ რიგში მოდის, ხოლო წნევა - მეორე.

ეს გამოყენების შემთხვევები დაფარულია ბიბლიოთეკით მოწოდებული ესკიზებით, როგორიცაა BasicTemperature.ino, basicPressure.ino, basicHumidity.ino, basicTemperatureAndPressure.ino და basicHumidityAndTemperatureAndPressure.ino.

უფრო დახვეწილი ტემპერატურისა და წნევის გაზომვა

მიუხედავად იმისა, რომ ზემოხსენებული განცხადებების სერია იმუშავებს უპრობლემოდ, არის რამდენიმე საკითხი:

  1. მოწყობილობა მუშაობს უწყვეტად და, შესაბამისად, მოიხმარს ენერგიას მის მაქსიმალურ დონეზე. თუ ენერგია მოდის ბატარეიდან, შეიძლება საჭირო გახდეს ამის შემცირება.
  2. მოხმარებული ენერგიის გამო, მოწყობილობა განიცდის დათბობას და, შესაბამისად, გაზომილი ტემპერატურა უფრო მაღალი იქნება, ვიდრე გარემოს ტემპერატურა. ამას უფრო დეტალურად განვიხილავ შემდგომ ეტაპზე.

შედეგი, რომელიც მოიხმარს ნაკლებ ენერგიას და იძლევა ტემპერატურას, რომელიც უფრო ახლოსაა გარემოსთან, შეიძლება მივიღოთ begin () - ის გამოყენებით პარამეტრებით, რომლებიც მას აძინებს (მაგ. რეჟიმი = 0). Მაგალითად:

objectName.begin (1, 1, 0, 0, 0, 0 [, 1]); // osrs_t, osrs_p, რეჟიმი, t_sb, ფილტრი, spiw_en [, osrs_h]

შემდეგ, როდესაც გაზომვაა საჭირო, გააღვიძეთ მოწყობილობა კონფიგურაციის ბრძანებით, რათა დაარეგისტრიროს F2 (საჭიროების შემთხვევაში) და F4, რომელიც ადგენს osrs_h, osrs_t და osrs_p შესაბამის მნიშვნელობებს, პლუს რეჟიმს = 1 (ერთი გასროლის რეჟიმი). Მაგალითად:

[objectName.updateF2Control (1);] // osrs_h - არასოდეს მჭირდება BMP280, // და არ არის საჭირო BME280– ისთვის, თუ გაზომვების ნომერი არ იცვლება // დასაწყისში მითითებული მნიშვნელობიდან (). objectName.updateF4Control (1, 1, 1); // osrs_t, osrs_p, რეჟიმი

მოწყობილობის გაღვიძებისთანავე ის დაიწყებს გაზომვას, მაგრამ შედეგი არ იქნება ხელმისაწვდომი რამდენიმე მილიწამში - მინიმუმ 4 ms, შესაძლოა 70 ms ან მეტი, დამოკიდებულია განსაზღვრული გაზომვების რაოდენობაზე. თუ წაკითხვის ბრძანება დაუყოვნებლივ იგზავნება, მოწყობილობა დააბრუნებს წინა გაზომვის მნიშვნელობებს - რაც შეიძლება მისაღები იყოს ზოგიერთ პროგრამაში, მაგრამ უმეტეს შემთხვევაში ალბათ სჯობს გადადოთ ახალი გაზომვის გაკეთებამდე.

ეს შეფერხება შეიძლება გაკეთდეს რამდენიმე გზით.

  1. დაელოდეთ განსაზღვრულ დროს, რომ დაფაროთ ყველაზე ხანგრძლივი მოსალოდნელი შეფერხება
  2. დაელოდეთ დროის გაზომვას გაზომვის მაქსიმალური დროდან (ანუ 2.3 ms) გამრავლებული გაზომვების რაოდენობაზე, პლუს ზედნადები, პლუს ზღვარი.
  3. დაელოდეთ უფრო მოკლე დროს გამოთვლილ ზემოთ, მაგრამ გამოიყენეთ ნომინალური გაზომვის დრო (ანუ 2 ms) პლუს ზედნადები და შემდეგ დაიწყეთ სტატუსის რეესტრში "მე ვზომავ" ბიტის შემოწმება. როდესაც სტატუსის ბიტი კითხულობს 0 (ანუ არ იზომება), მიიღეთ ტემპერატურა და წნევის მაჩვენებლები.
  4. დაუყოვნებლივ დაიწყეთ სტატუსის რეესტრის შემოწმება და მიიღეთ ტემპერატურა და წნევის მაჩვენებლები, როდესაც სტატუსის ბიტი კითხულობს 0 -ს,

მე ვაჩვენებ მაგალითს, თუ როგორ უნდა გავაკეთოთ ეს ცოტა მოგვიანებით.

კონფიგურაციის რეგისტრაციის ოპერაციები

იმისათვის, რომ ეს ყველაფერი მოხდეს, ჩვენ გვჭირდება რამდენიმე ინსტრუმენტი, რომელიც მე ჯერ არ მაქვს დანერგილი. Ისინი არიან:

ბაიტი წაკითხვის რეგისტრაცია (reg)

void განახლება რეგისტრაცია (reg, მნიშვნელობა)

თითოეულ მათგანს აქვს რამდენიმე მიღებული ბრძანება ბიბლიოთეკაში, რაც პროგრამას კონკრეტული მოქმედებებისათვის ოდნავ ამარტივებს.

მაგალითი powerSaverPressureAndTemperature.ino იყენებს მეთოდს No3. კოდის ხაზი, რომელიც ახორციელებს განმეორებით შემოწმებას, არის

ხოლო (bmp0.readRegister (0xF3) >> 3); // მარყუჟი untl F3bit 3 == 0

გაითვალისწინეთ, რომ ესკიზი განკუთვნილია ESP8266 მიკროკონტროლისთვის. მე გამოვიყენე WeMos D1 მინი პრო. ესკიზი არ იმუშავებს ატმეგა მიკროკონტროლერებთან, რომლებსაც აქვთ ძილის განსხვავებული მითითებები. ეს ესკიზი ასრულებს რამდენიმე სხვა ბრძანებას, ამიტომ მე გავაცნობ მათ ყველა მათგანს, სანამ ესკიზი უფრო დეტალურად აღვწერ.

როდესაც მიკროკონტროლერს სძინავს BMP280 სენსორის პარალელურად, სენსორის კონფიგურაცია საჭირო გაზომვებისათვის შეიძლება განხორციელდეს start () ბრძანებაში, 6 პარამეტრის გამოყენებით. თუმცა, თუ მიკროკონტროლერი არ სძინავს, მაგრამ სენსორი სძინავს, მაშინ გაზომვის დროს სენსორი უნდა გაიღვიძოს და მიაწოდოს გაზომვის კონფიგურაცია. ეს შეიძლება გაკეთდეს პირდაპირ

განახლებარეგისტრირება (რეგისტრაცია, მნიშვნელობა)

მაგრამ ოდნავ ადვილია შემდეგი სამი ბრძანებით:

განახლება F2Control (osrs_h); // მხოლოდ BME280

updateF4Control (osrs_t, osrs_p, რეჟიმი); განახლება F5Config (t_sb, filter, spi3W_en);

გაზომვის დასრულების შემდეგ, თუ გამოყენებული რეჟიმი არის ერთი გასროლა (იძულებითი რეჟიმი), მაშინ მოწყობილობა ავტომატურად დაუბრუნდება ძილს. თუმცა, თუ გაზომვის ნაკრები მოიცავს მრავალ გაზომვას უწყვეტი (ნორმალური) რეჟიმის გამოყენებით, მაშინ BMP280 უნდა დაიძინოს. ეს შეიძლება გაკეთდეს შემდეგი ორი ბრძანებიდან რომელიმედან:

განახლება F4Control16xSleep ();

updateF4ControlSleep (მნიშვნელობა);

ორივე მათგანი აყენებს რეჟიმის ბიტებს 00 -ზე (ანუ ძილის რეჟიმში). თუმცა პირველი ადგენს osrs_t და osrs_p 111 (ანუ 16 გაზომვას), ხოლო მეორე ინახავს დაბალ 6 ბიტს "მნიშვნელობიდან" 0xF4 რეგისტრის ბიტებში 7: 2.

ანალოგიურად, შემდეგი განცხადება ინახავს "ღირებულების" დაბალ ექვს ბიტს 0xF5 რეგისტრის ბიტებში 7: 2.

updateF5ConfigSleep (მნიშვნელობა);

ამ უკანასკნელი ბრძანებების გამოყენება საშუალებას გაძლევთ შეინახოთ 12 ბიტიანი ინფორმაცია BMP280 რეგისტრებში F4 და F5. ყოველ შემთხვევაში ESP8266– ის შემთხვევაში, როდესაც მიკროკონტროლერი იღვიძებს ძილის პერიოდის შემდეგ, ის იწყება ესკიზის დასაწყისში ძილის ბრძანებამდე მისი მდგომარეობის ცოდნის გარეშე. ძილის ბრძანების წინ მისი მდგომარეობის შესანახად, მონაცემები შეიძლება ინახებოდეს ფლეშ მეხსიერებაში, EEPROM ფუნქციების გამოყენებით ან SPIFFS– ის გამოყენებით ფაილის ჩაწერით. თუმცა ფლეშ მეხსიერებას აქვს წერის ციკლის რაოდენობის შეზღუდვა, 10 000-დან 100 000-მდე. ეს ნიშნავს, რომ თუ მიკროკონტროლერი გადის ძილისა და გაღვიძების ციკლს ყოველ რამდენიმე წამში, ის შეიძლება აღემატებოდეს დასაშვებ მეხსიერებას. ლიმიტი რამდენიმე თვეში. BMP280– ში მონაცემთა რამდენიმე ბიტის შენახვას არ აქვს ასეთი შეზღუდვა.

F4 და F5 რეგისტრებში შენახული მონაცემები შეიძლება აღდგეს, როდესაც მიკროკონტროლერი იღვიძებს ბრძანებების გამოყენებით

readF4Sleep ();

readF5Sleep ();

ეს ფუნქციები კითხულობს შესაბამის რეგისტრს, ცვლის შინაარსს, ამოიღებს 2 LSB- ს და აბრუნებს დანარჩენ 6 ბიტს. ეს ფუნქციები გამოიყენება მაგალითად ესკიზის powerSaverPressureAndTemperatureESP.ino შემდეგნაირად:

// წაიკითხეთ EventCounter– ის მნიშვნელობა bmp0– დან

ბაიტი bmp0F4 მნიშვნელობა = bmp0.readF4Sleep (); // 0 -დან 63 ბაიტამდე bmp0F5 მნიშვნელობა = bmp0.readF5Sleep (); // 0 -დან 63 eventCounter = bmp0F5 მნიშვნელობა*64+bmp0F4 მნიშვნელობა; // 0 -დან 4095 წლამდე

ეს ფუნქციები კითხულობს შესაბამის რეგისტრს, ცვლის შინაარსს 2 LSB- ის მოსაშორებლად და დარჩენილი 6 ბიტის დასაბრუნებლად. ეს ფუნქციები გამოიყენება მაგალითად ესკიზის powerSaverPressureAndTemperature.ino შემდეგნაირად:

// წაიკითხეთ EventCounter– ის მნიშვნელობა bmp1– დან

ბაიტი bmp1F4 მნიშვნელობა = bmp1.readF4Sleep (); // 0 -დან 63 ბაიტამდე bmp1F5 მნიშვნელობა = bmp1.readF5Sleep (); // 0 -დან 63 eventCounter = bmp1F5 მნიშვნელობა*64+bmp1F4 მნიშვნელობა; // 0 -დან 4095 წლამდე

უხეში ტემპერატურისა და წნევის ფუნქციები

ძირითადი კითხვის ტემპერატურა, წაკითხვის წნევა და წაკითხვის ტენიანობის ფუნქციები ორი კომპონენტისგან შედგება. ჯერ ნედლი 20 ბიტიანი ტემპერატურისა და წნევის მნიშვნელობები მიიღება BME/P280– დან, ან ნედლი 16 – ბიტიანი ტენიანობის მნიშვნელობა მიიღება BME280– დან. შემდეგ კომპენსაციის ალგორითმი გამოიყენება გამომავალი მნიშვნელობების შესაქმნელად ცელსიუს გრადუსში, hPa ან %RH.

ბიბლიოთეკა უზრუნველყოფს ცალკეულ ფუნქციებს ამ კომპონენტებისთვის, ასე რომ ნედლი ტემპერატურის, წნევისა და ტენიანობის მონაცემების მიღება და შესაძლოა რაიმე გზით მანიპულირება შესაძლებელია. ასევე გათვალისწინებულია ალგორითმი ტემპერატურის, წნევისა და ტენიანობის ამ ნედლი მნიშვნელობებისაგან. ბიბლიოთეკაში ეს ალგორითმები ხორციელდება ორმაგი სიგრძის მცურავი წერტილის არითმეტიკის გამოყენებით. ის კარგად მუშაობს ESP8266– ზე, რომელიც არის 32 ბიტიანი პროცესორი და იყენებს 64 ბიტს „ორმაგი“მცურავი ცვლადებისთვის. ამ ფუნქციების ხელმისაწვდომობა შეიძლება სასარგებლო იყოს სხვა პლატფორმებისთვის გამოთვლის შესაფასებლად და შესაძლოა შესაცვლელად.

ეს ფუნქციებია:

readRawPressure (ნედლეული); // კითხულობს ნედლი წნევისა და ტემპერატურის მონაცემებს BME/P280readRawHumidity (rawTemperature, rawPressure); // კითხულობს ნედლი ტენიანობის, ტემპერატურისა და წნევის მონაცემებს BME280 calcTemperature (ნედლეული ტემპერატურა, t_fine); calcPressure (ნედლი წნევა, t_fine); calcHumidity (ნედლეული ტენიანობა, t_fine)

ამ ფუნქციების "t-fine" არგუმენტი ცოტა ახსნა ღირს. წნევისა და ტენიანობის კომპენსაციის ალგორითმები მოიცავს ტემპერატურაზე დამოკიდებულ კომპონენტს, რომელიც მიიღწევა t_fine ცვლადის საშუალებით. CalcTemperature ფუნქცია წერს მნიშვნელობას t_fine- ში ტემპერატურის კომპენსაციის ალგორითმის ლოგიკის საფუძველზე, რომელიც შემდეგ გამოიყენება როგორც შეყვანის როგორც calcPressure, ასევე calcHumidity.

ამ ფუნქციების გამოყენების მაგალითი შეგიძლიათ ნახოთ ესკიზის rawPressureAndTemperature.ino მაგალითში, ასევე ბიბლიოთეკის.cpp ფაილში readHumidity () ფუნქციის კოდში.

სიმაღლე და ზღვის დონის წნევა

ატმოსფერულ წნევასა და სიმაღლეს შორის ცნობილია ურთიერთობა. ამინდი ასევე ახდენს ზეწოლას. როდესაც ამინდის ორგანიზაციები აქვეყნებენ ინფორმაციას ატმოსფერული წნევის შესახებ, ისინი ჩვეულებრივ ადაპტირებენ მას სიმაღლეზე და ასე რომ "სინოპტიკური დიაგრამა" აჩვენებს იზობარებს (მუდმივი წნევის ხაზებს), რომლებიც სტანდარტიზირებულია ზღვის დონიდან. ამ ურთიერთობაში ნამდვილად არის 3 მნიშვნელობა და ორი მათგანის ცოდნა საშუალებას იძლევა გამოვიტანოთ მესამე. სამი მნიშვნელობა არის:

  • სიმაღლე ზღვის დონიდან
  • ჰაერის რეალური წნევა ამ სიმაღლეზე
  • ზღვის ეკვივალენტური წნევა ზღვის დონეზე (უფრო მკაცრად, ნიშნავს ზღვის დონეს, რადგან ზღვის მყისიერი დონე მუდმივად იცვლება)

ეს ბიბლიოთეკა უზრუნველყოფს ორ ურთიერთობას ამ ურთიერთობისათვის, შემდეგნაირად:

calcAltitude (წნევა, ზღვის LevelhPa);

ნორმალური ნორმალიზებული წნევა (წნევა, სიმაღლე);

ასევე არსებობს გამარტივებული ვერსია, რომელიც ითვალისწინებს ზღვის დონის სტანდარტულ წნევას 1013.15 hPa.

calcAltitude (წნევა); // სტანდარტული seaLevelPressure ვარაუდი

ნაბიჯი 3: BMP280 მოწყობილობის დეტალები

BMP280 მოწყობილობის დეტალები
BMP280 მოწყობილობის დეტალები

აპარატურის შესაძლებლობები

BMP280– ს აქვს კონფიგურაციის მონაცემების 2 ბაიტი (რეგისტრაციის მისამართებზე 0xF4 და 0xF5), რომელიც გამოიყენება გაზომვისა და მონაცემთა გამომავალი პარამეტრების გასაკონტროლებლად. ის ასევე იძლევა სტატუსის შესახებ ინფორმაციის 2 ბიტს და დაკალიბრების პარამეტრების 24 ბაიტს, რომლებიც გამოიყენება ნედლი ტემპერატურისა და წნევის მნიშვნელობების გადაქცევისთვის ჩვეულებრივი ტემპერატურისა და წნევის ერთეულებად. BME280– ს აქვს დამატებითი მონაცემები შემდეგნაირად:

  • კონფიგურაციის მონაცემების 1 დამატებითი ბაიტი რეგისტრაციის მისამართზე 0xF2 გამოიყენება ტენიანობის მრავალჯერადი გაზომვის გასაკონტროლებლად;
  • 8 დამატებითი ბაიტი დაკალიბრების პარამეტრი, რომელიც გამოიყენება ნედლი ტენიანობის მნიშვნელობის ფარდობითი ტენიანობის პროცენტულად გარდაქმნისას.

BME280– ის ტემპერატურის, წნევისა და სტატუსის რეგისტრატორები იგივეა, რაც BMP280– სთვის მცირე გამონაკლისების გარდა, შემდეგნაირად:

  • BME280- ის "ID" ბიტები დაყენებულია 0x60- ზე, ასე რომ ის შეიძლება გამოირჩეოდეს BMP280- დან, რომელიც შეიძლება იყოს 0x56, 0x57 ან 0x58
  • ძილის დროის კონტროლი (t_sb) იცვლება ისე, რომ BMP280– ში ორი გრძელი დრო (2000 ms და 4000 ms) იცვლება BME280– ში, მოკლე დროით 10 ms და 20 ms. BME280– ში ძილის მაქსიმალური დროა 1000 ms.
  • BME280– ში ტემპერატურისა და წნევის ნედლეულის ღირებულებები ყოველთვის 20 ბიტია, თუ ფილტრაცია გამოიყენება. 16 -დან 19 -ბიტიანი მნიშვნელობების გამოყენება შემოიფარგლება იმ შემთხვევებით, როდესაც არ არის გაფილტრული (ანუ ფილტრი = 0).

ტემპერატურა და წნევა არის თითოეული 20 ბიტიანი მნიშვნელობა, რომელიც უნდა გადავიდეს ჩვეულებრივ ტემპერატურასა და წნევაზე საკმაოდ რთული ალგორითმის გამოყენებით ტემპერატურის 3 16 ბიტიანი კალიბრაციის პარამეტრების და 9 16 ბიტიანი დაკალიბრების პარამეტრების პლუს ტემპერატურა წნევისთვის. ტემპერატურის გაზომვის გრანულაცია არის 0.0003 გრადუსი ცელსიუსით უმცირესი მნიშვნელოვანი ცვლილებისათვის (20 ბიტიანი წაკითხვა), იზრდება 0.0046 გრადუსამდე ცელსიუსამდე თუ 16 ბიტიანი წაკითხვისას გამოიყენება.

ტენიანობა არის 16 ბიტიანი მნიშვნელობა, რომელიც უნდა გადაიქცეს ფარდობით ტენიანობაში სხვა რთული ალგორითმის საშუალებით 6 კალიბრაციის პარამეტრების გამოყენებით, რომლებიც შერეულია 8, 12 და 16 ბიტიდან.

მონაცემების ფურცელი გვიჩვენებს ტემპერატურის აბსოლუტური სიზუსტეს, როგორც +-0.5 C 25 C- ზე და +-1 C 0-დან 65 C- მდე დიაპაზონში.

წნევის გაზომვის მარცვლოვანება არის 0.15 პასკალი (ანუ 0.0015 ჰექტოპასკალი) 20 ბიტიანი გარჩევადობით, ან 2.5 პასკალი 16 ბიტიანი გარჩევადობით. ნედლეული წნევის მნიშვნელობაზე გავლენას ახდენს ტემპერატურა, ასე რომ დაახლოებით 25C, ტემპერატურის 1 გრადუსით მატება ამცირებს წნევას 24 პასკალით. ტემპერატურის მგრძნობელობა აღირიცხება კალიბრაციის ალგორითმში, ამიტომ მიწოდებული წნევის მნიშვნელობები უნდა იყოს ზუსტი სხვადასხვა ტემპერატურაზე.

მონაცემთა ფურცელი გვიჩვენებს წნევის წაკითხვის აბსოლუტურ სიზუსტეს +1 hPa ტემპერატურაზე 0 C- დან 65 C- მდე.

ტენიანობის სიზუსტე მონაცემებში მოცემულია +-3% RH და +-1% ჰისტერეზი.

Როგორ მუშაობს

ტემპერატურისა და წნევის დაკალიბრების მონაცემების 24 ბაიტი, ასევე BME280- ის შემთხვევაში ტენიანობის დაკალიბრების მონაცემების 8 ბაიტი უნდა წაიკითხოთ მოწყობილობიდან და შეინახოთ ცვლადებში. ეს მონაცემები ინდივიდუალურად არის დაპროგრამებული მოწყობილობაში ქარხანაში, ამიტომ სხვადასხვა მოწყობილობას აქვს განსხვავებული მნიშვნელობა - ყოველ შემთხვევაში, ზოგიერთი პარამეტრისთვის. BME/P280 შეიძლება იყოს ორი მდგომარეობიდან ერთში. ერთ მდგომარეობაში ის იზომება. მეორე მდგომარეობაში ელოდება (სძინავს).

რომელ მდგომარეობაშია ის შეიძლება გადამოწმდეს 0xF3 რეგისტრის ბიტის 3 -ე ნახვით.

უახლესი გაზომვის შედეგები შეგიძლიათ მიიღოთ ნებისმიერ დროს შესაბამისი მონაცემების მნიშვნელობის წაკითხვით, იმისდა მიუხედავად, სძინავს თუ გაზომავს მოწყობილობა.

ასევე არსებობს BME/P280– ის მუშაობის ორი გზა. ერთი არის უწყვეტი რეჟიმი (მონაცემთა ფურცელში ეწოდება ნორმალური რეჟიმი), რომელიც არაერთხელ ციკლდება გაზომვისა და ძილის მდგომარეობას შორის. ამ რეჟიმში მოწყობილობა ასრულებს გაზომვების ერთობლიობას, შემდეგ იძინებს, შემდეგ იღვიძებს გაზომვების სხვა ნაკრებისთვის და ასე შემდეგ. ინდივიდუალური გაზომვების რაოდენობა და ციკლის ძილის ნაწილის ხანგრძლივობა შეიძლება კონტროლდებოდეს კონფიგურაციის რეგისტრების საშუალებით.

BME/P280– ის მუშაობის სხვა გზა არის ერთჯერადი გადაღების რეჟიმი (მონაცემთა ფურცელში ეწოდება იძულებითი რეჟიმი). ამ რეჟიმში მოწყობილობა იღვიძებს ძილისგან გაზომვის ბრძანებით, იგი აკეთებს გაზომვებს, შემდეგ ისევ ძილს უბრუნდება. კომპლექტში ინდივიდუალური გაზომვების რაოდენობა კონტროლდება კონფიგურაციის ბრძანებაში, რომელიც იღვიძებს მოწყობილობას.

BMP280– ში, თუ ერთი გაზომვა განხორციელდა, ღირებულების 16 ყველაზე მნიშვნელოვანი ბიტი დასახლებულია, ხოლო მნიშვნელობის წაკითხვის ოთხი ყველაზე უმნიშვნელო ბიტი არის ნული. გაზომვების რაოდენობა შეიძლება დაინიშნოს 1, 2, 4, 8 ან 16 -ზე და გაზომვების რაოდენობის გაზრდისთანავე იზრდება მონაცემებით დასახლებული ბიტების რაოდენობა, ასე რომ 16 გაზომვით ყველა 20 ბიტი დასახლებულია გაზომვის მონაცემებით. მონაცემთა ფურცელი აღნიშნავს ამ პროცესს, როგორც გადაჭარბებული შერჩევა.

BME280– ში იგივე შეთანხმება მოქმედებს მანამ, სანამ შედეგი არ არის გაფილტრული. თუ გაფილტვრა გამოიყენება, მნიშვნელობები ყოველთვის 20 ბიტია, მიუხედავად იმისა, თუ რამდენი გაზომვა ხდება თითოეულ გაზომვის ციკლში.

თითოეული ინდივიდუალური გაზომვა იღებს დაახლოებით 2 მილიწამს (ტიპიური მნიშვნელობა; მაქსიმალური მნიშვნელობა არის 2.3 ms). ამას დავამატებთ დაახლოებით 2 ms (ჩვეულებრივ ოდნავ ნაკლებ) ფიქსირებულ ხარჯს, რაც იმას ნიშნავს, რომ გაზომვის თანმიმდევრობა, რომელიც შეიძლება შედგებოდეს 1 -დან 32 ცალკეულ გაზომვამდე, შეუძლია მიიღოს 4 ms– დან 66 ms– მდე.

მონაცემთა ფურცელი გთავაზობთ ტემპერატურისა და წნევის გადაჭარბებული შერჩევის კომბინაციებს სხვადასხვა პროგრამებისთვის.

კონფიგურაციის კონტროლის რეგისტრები

BMP280– ის ორი კონფიგურაციის კონტროლის რეგისტრატორი არის რეგისტრის მისამართებზე 0xF4 და 0xF5 და ასახულია 6 ინდივიდუალური კონფიგურაციის კონტროლის მნიშვნელობებზე. 0xF4 შედგება:

  • 3 ბიტი osrs_t (გაზომეთ ტემპერატურა 0, 1, 2, 4, 8 ან 16 ჯერ);
  • 3 ბიტი osrs_p (გაზომეთ წნევა 0, 1, 2, 4, 8 ან 16 ჯერ); და
  • 2 ბიტიანი რეჟიმი (ძილი, იძულებითი (ანუ ერთჯერადი კადრი), ნორმალური (ანუ უწყვეტი).

0xF5 შედგება:

  • 3 ბიტი t_sb (ლოდინის დრო, 0.5ms დან 4000 ms);
  • 3 ბიტიანი ფილტრი (იხ. ქვემოთ); და
  • 1 ბიტიანი spiw_en რომელიც ირჩევს SPI ან I2C.

ფილტრის პარამეტრი აკონტროლებს ექსპონენციალური დაშლის ალგორითმის ტიპს, ან უსასრულო იმპულსზე რეაგირების (IIR) ფილტრს, რომელიც გამოიყენება ნედლი წნევისა და ტემპერატურის გაზომვის მნიშვნელობებზე (მაგრამ არა ტენიანობის მნიშვნელობებზე). განტოლება მოცემულია მონაცემების ცხრილში. კიდევ ერთი პრეზენტაციაა:

მნიშვნელობა (n) = მნიშვნელობა (n-1) * (K-1) / K + გაზომვა (n) / K

სადაც (n) მიუთითებს უახლესი გაზომვისა და გამომავალი მნიშვნელობის შესახებ; და K არის ფილტრის პარამეტრი. ფილტრის პარამეტრი K და მისი დაყენება შესაძლებელია 1, 2, 4, 8 ან 16. თუ K არის 1, განტოლება უბრალოდ ხდება მნიშვნელობა (n) = გაზომვა (n). ფილტრის პარამეტრის კოდირებაა:

  • ფილტრი = 000, K = 1
  • ფილტრი = 001, K = 2
  • ფილტრი = 010, K = 4
  • ფილტრი = 011, K = 8
  • ფილტრი = 1xx, K = 16

BME 280 ამატებს დამატებით კონფიგურაციის კონტროლის რეგისტრს 0xF2 მისამართზე, "ctrl_hum" ერთი 3 ბიტიანი პარამეტრით osrs_h (გაზომეთ ტენიანობა 0, 1, 2, 4, 8 ან 16 ჯერ).

ნაბიჯი 4: გაზომვა და წაკითხვის დრო

მე ვგეგმავ ამის დამატებას მოგვიანებით, სადაც ნაჩვენებია ბრძანებების დრო და გაზომვის პასუხები.

Iddt - მიმდინარე ტემპერატურა ტემპერატურის გაზომვისას. ტიპიური მნიშვნელობა 325 uA

Iddp - მიმდინარე წნევის გაზომვისას. ტიპიური ღირებულება 720 uA, მაქს 1120 uA

Iddsb - მიმდინარე ლოდინის რეჟიმში. ტიპიური მნიშვნელობა 0.2 uA, max 0.5 uA

Iddsl - ძილის რეჟიმში მიმდინარე. ტიპიური მნიშვნელობა 0.1 uA, მაქს 0.3 uA

ნაბიჯი 5: პროგრამული უზრუნველყოფის მითითებები

პროგრამული უზრუნველყოფის მითითებები
პროგრამული უზრუნველყოფის მითითებები
პროგრამული უზრუნველყოფის მითითებები
პროგრამული უზრუნველყოფის მითითებები

I2C ადიდებული რეჟიმი

BMP280 მონაცემთა ფურცელი იძლევა მითითებებს მონაცემების წაკითხვის შესახებ (ნაწილი 3.9). მასში ნათქვამია: "მკაცრად რეკომენდირებულია გამოიყენოს ადიდებული კითხვა და არა თითოეული რეგისტრი ცალკე. ეს ხელს შეუშლის სხვადასხვა გაზომვების კუთვნილი ბაიტების შესაძლო შერევას და შეამცირებს ინტერფეისის ტრაფიკს." არ არის მითითებული კომპენსაციის/დაკალიბრების პარამეტრების წაკითხვის შესახებ. სავარაუდოდ, ეს არ არის საკითხი, რადგან ისინი სტატიკურია და არ იცვლება.

ეს ბიბლიოთეკა კითხულობს ყველა თანმიმდევრულ მნიშვნელობას ერთი წაკითხვის ოპერაციისას - 24 ბაიტი ტემპერატურისა და წნევის კომპენსაციის პარამეტრების შემთხვევაში, 6 ბაიტი ტემპერატურისა და წნევის კომბინირებული და 8 ბაიტი ტენიანობის, ტემპერატურისა და წნევის კომბინაციაში. როდესაც მარტო ტემპერატურა შემოწმდება, მხოლოდ 3 ბაიტი იკითხება.

მაკროების გამოყენება (#განსაზღვრეთ და ა.შ.)

ამ ბიბლიოთეკაში არ არსებობს მაკრო, გარდა ჩვეულებრივი ბიბლიოთეკისა "მოიცავს მცველის" მაკრო, რომელიც ხელს უშლის დუბლირებას.

ყველა მუდმივი განისაზღვრება const საკვანძო სიტყვის გამოყენებით, ხოლო გამართვის ბეჭდვა კონტროლდება სტანდარტული C ფუნქციით.

ეს იყო ჩემთვის გარკვეული გაურკვევლობის წყარო, მაგრამ რჩევა, რომელსაც ვიღებ ამ თემაზე მრავალი პოსტის წაკითხვისას, არის ის, რომ #განსაზღვრების გამოყენება მუდმივების (მინიმუმ) და (ალბათ) გამართვის დაბეჭდვის კონტროლისათვის არის არასაჭირო და არასასურველი.

Const– ის გამოყენების ნაცვლად #განსაზღვრება საკმაოდ ნათელია - const იყენებს იგივე რესურსებს, რაც #define (ანუ ნულოვანი) და შედეგად მიღებული მნიშვნელობები იცავენ სფეროს განსაზღვრის წესებს, რითაც ამცირებენ შეცდომების შანსს.

გამოსწორების დაბეჭდვის კონტროლის საქმე ოდნავ ნაკლებად ნათელია, რადგან მე როგორც ეს გავაკეთე ნიშნავს, რომ საბოლოო კოდი შეიცავს ლოგიკას გამართვის ბეჭდვის განცხადებებში, მიუხედავად იმისა, რომ ისინი არასოდეს გამოიყენება. თუ ბიბლიოთეკა უნდა იქნას გამოყენებული დიდ პროექტში მიკროკონტროლერზე ძალიან შეზღუდული მეხსიერებით, ეს შეიძლება გახდეს პრობლემა. ვინაიდან ჩემი განვითარება იყო ESP8266– ზე დიდი ფლეშ მეხსიერებით, ეს არ იყო ჩემთვის პრობლემა.

ნაბიჯი 6: ტემპერატურის შესრულება

ამის დამატებას მოგვიანებით ვგეგმავ.

ნაბიჯი 7: წნევის შესრულება

ამის დამატებას მოგვიანებით ვგეგმავ.

გირჩევთ: