Барометр на ардуино

Барометр — это устройство, которое измеряет атмосферное давление. То есть давление воздуха, который давит на нас со всех сторон. Еще со школы мы знаем, что первый барометр представлял собой тарелку с ртутью, и перевернутой пробиркой в ней. Автором этого устройства был Эванджели́ста Торриче́лли — итальянский физик и математик. Снять показания ртутного барометра можно так же просто, как и показания спиртового термометра: чем давление снаружи колбы больше, тем выше столбик ртути внутри неё. Пары ртути, как известно, весьма ядовиты. Позже, появился более безопасный прибор — барометр-анероид. В этом барометре ртуть была заменена на гофрированную коробку из тонкой жести, в которой создано разрежение. Под воздействием атмосферы, коробочка сжимается и через систему рычагов поворачивает стрелку на циферблате. Вот так выглядят эти два барометра. Слева — анероид, справа — барометр Торричелли. Зачем нам может понадобиться барометр? Чаще всего, этот прибор используют на летательных аппаратах для определения высоты полета. Чем выше аппарат поднимается над уровнем моря, тем меньшее давление испытывает бортовой барометр. Зная эту зависимость, легко определить высоту. Другой распространенный вариант использования — самодельная погодная станция. В этом случае мы можем использовать известные зависимости грядущей погоды от атмосферного давления. Помимо барометра, на такие станции ставят датчики влажности и температуры.

4. Программа

Для работы с датчиком нам понадобится библиотека: BMP180_Breakout_Arduino_Library Скачиваем её из репозитория, и устанавливаем в Arduino IDE. Теперь все готово для написания первой программы. Попробуем получить сырые данные из датчика, и вывести их в монитор COM порта. #include <SFE_BMP180.h> #include <Wire.h> SFE_BMP180 pressure; void setup(){ Serial.begin(9600); pressure.begin(); } void loop(){ double P; P = getPressure(); Serial.println(P, 4); delay(100); } double getPressure(){ char status; double T,P,p0,a; status = pressure.startTemperature(); if (status != 0){ // ожидание замера температуры delay(status); status = pressure.getTemperature(T); if (status != 0){ status = pressure.startPressure(3); if (status != 0){ // ожидание замера давления delay(status); status = pressure.getPressure(P,T); if (status != 0){ return(P); } } } } } Процедура получения заветного давления из датчика не такая тривиальная, и состоит из нескольких этапов. В упрощенном виде алгоритм выглядит так:

  1. запрашиваем у барометра показания встроенного датчика температуры;
  2. ждем время A, пока датчик оценивает температуру;
  3. получаем температуру;
  4. запрашиваем у барометра давление;
  5. ждем время B, пока датчик оценивает давление;
  6. получаем значение давления;
  7. возвращаем значение давления из функции.

Время B зависит от точности измерений, которая задается в функции startPressure. Единственный аргумент этой функции может принимать значения от 0 до 3, где 0 — самая грубая и самая быстрая оценка, 3 — самая точная оценка давления. Загружаем программу на Ардуино Уно, и наблюдаем поток измерений атмосферного давления. Попробуем поднять датчик над головой, и опустить до уровня пола. Показания будут немного меняться. Осталось только разобраться, как нам преобразовать эти непонятные числа в высоту над уровнем моря.

5. Преобразование давления в высоту над уровнем моря

Датчик BMP180 возвращает величину давления в гектопаскалях (гПа). Именно в этих единицах принято измерять атмосферное давление. 1 гПа = 100 Паскалей. Известно, что на уровне моря давление в среднем составляет 1013 гПа, и каждый дополнительный метр над уровнем моря будет уменьшать это давление всего на 0.11 гПа (примерно). Таким образом, если мы вычтем из результата функции getPressure число 1013, и разделим оставшуюся разность на 0.11, то мы получим значение высоты над уровнем моря в метрах. Вот так изменится наша программа: void loop(){ double P, Alt; P = getPressure(); Alt = (P — 1013)/0.11; Serial.println(Alt, 2); delay(100); } В действительности, давление зависит от высоты над уровнем моря нелинейно, и наша формула годится лишь для высот на которых мы с вами обычно живем. Благо, человечеству известная более точная зависимость давления от высоты, которую мы можем применить для получения более точных результатов.Здесь p — измеренное в данной точке давление, p0 — давление относительно которого идет отсчет высоты. В библиотеке SFE_BMP180 уже есть функция, которая использует указанную. формулу для получения точной высоты. Используем её в нашей программе. #include <SFE_BMP180.h> #include <Wire.h> SFE_BMP180 pressure; double P0 = 0; void setup(){ Serial.begin(9600); pressure.begin(); P0 = pressure.getPressure(); } void loop(){ double P, Alt; P = getPressure(); Alt = pressure.altitude(P,P0) Serial.println(Alt, 2); delay(100); } double getPressure(){ … } Я не стал полностью копировать функцию getPressure, чтобы сохранить читабельность текста. В программе появилась еще одна переменная P0 — это давление, которое мы измерим на старте программы. В случае летательного аппарата, P0 будет давлением на взлетной площадке, относительно которой мы начнем набор высоты.

7. Заключение

Как мы уяснили из урока, определение высоты над уровнем моря не такая тривиальная задача. Мало того, что давление зависит от высоты нелинейно, так еще картину портят различные внешние факторы. Например, давление у нас дома постоянно меняется с течением времени. Даже за несколько минут, высота измеренная нашим прибором может варьироваться в диапазоне 0.5 — 1 метра. Температура так же сильно влияет на качество измерений, поэтому нам приходится учитывать её при расчете давления. Для летательных аппаратов рекомендуется использовать датчики повышенной точности, такие как MS5611. У этого барометра точность измерений может достигать 0,012 гПа, что в 5 раз лучше, чем у BMP180. Также, для уточнения барометрической высоты полета применяют координаты GPS. Успехов в наблюдении за атмосферой! 🙂 Вконтакте Facebook Twitter Google+ 1+

/****************************************************************** * 2018-05-27 Mr.ALB Тренировка в программировании Ардуино * * BMP280 I2C: * SCL — A5 * SDA — A4 * VCC — +3.3V * GND — GND * * 2018-07-17 v1.2 Добавлен датчик влажности DHT22: * между контактом OUT и VCC подключить 10к * * 2018-08-24 v3.0 Подключение дисплея TFT ST7735 128*160 1,8 дюйма * 2018-09-05 v3.1 Автономная работа от батареии Li-Ion +3.7В * 2018-09-08 v3.2 Перерисовка только меняющихся значений * 2018-11-02 v3.2.1 Минимальная яркость = 1 * 2018-11-11 v3.2.2 Прогрессбар подсветки на главной странице * * 2019-05-09 v3.3 Использование модуля BME280 * BME280 I2C: * SCL — A5 * SDA — A4 * VCC — +5V * GND — GND * * Аппаратное подключение TFT: * TFT ST7735 ARDUINO * Pin 1 RST — PIN 10 * Pin 2 CS — PIN 9 * Pin 3 DC — PIN 8 * Pin 4 DIN — PIN 11 * Pin 5 CLK — PIN 13 * Pin 6 VCC — PIN VCC +5V * Pin 7 BL — PIN 3 — для регулировки подсветки (ШИМ) * Pin 8 GND — PIN GND * * Контакты TFT 1-5 подключать через резисторы 1к…2к * ******************************************************************/ #include <Wire.h> // Подключение библиотеки для I2C /* Графический дисплей TFT ST7735 1.8″ */ #include <Adafruit_GFX.h> // Ядро графической библиотеки #include <Adafruit_ST7735.h> // Библиотека для ST7735 #define TFT_RST 10 #define TFT_CS 9 #define TFT_DC 8 // Аппаратное подключение TFT // Создаём объект tft Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); #include <Adafruit_BME280.h> // Подключение библиотеки BME280 /* Чтобы всё заработало необходимо: * 1. Сканером I2C найти адрес BME280 и указать при инициализации * или * 2. В библиотеке <Adafruit_BME280.h>: * 1) Изменить адрес #define BME280_ADDRESS (0x77) * на адрес #define BME280_ADDRESS (0x76) * 2) Закоментировать библиотеку #include <Adafruit_Sensor.h> */ // Создаём объект барометра Adafruit_BME280 bme; /* мБар — мм рт. ст. * 1013.2472 — 760 k=1.33322 * 1005.24788 — 754 */ double null_level = 1005.24788; // Нулевой уровень для 754 мм рт.ст. float kp = 133.322; // Коэффициент для перевода Па в мм рт.ст. // переменные давления float press_now, press_last, press_tmp, altit; // переменные температуры float temp, temp_last, temp_correct = -1; // переменные влажности float humidity_now, humidity_last, humidity_correct = 0; #include <Button_2.h> // Подключение библиотеки кнопок #define BUTTON_SET_LEVEL 6 // Кнопка обнуления текущего давления #define BUTTON_LIGHT 5 // Кнопка подсветки дисплея #define LIGHT_PIN 3 // Вывод PWM для подсветки дисплея #define VCC_PIN A0 // Ввод VCC батареи питания, через резистор 1к // Создание объектов для кнопок Button_2 buttonSetLevel(BUTTON_SET_LEVEL,21); Button_2 buttonLight(BUTTON_LIGHT,21); uint8_t bxlz = 2 * 6; // Позиция заставки uint8_t byinfo = 27; // Позиция вывода информации по y uint8_t bxinfo = 10 * 6; // Позиция вывода информации по х // Уровень подсветки 0…10; uint8_t count_level_light = 1; // Значение подсветки 0…250; int level_light = count_level_light * 25; // Для обновления экрана по времени boolean flagcheck = false; // Для вывода надписей после установки яркости boolean flagSetLight = true; // Строка прогресс-бара подсветки uint8_t light_str = 15; // Для обновления экрана по времени unsigned long time_now, time_check, time_delta = 27000; char prog_title1 = «BME280»; // Название программы char author = «Mr.ALB»; // Автор char vers = «v3.3»; // Версия программы char vers_date = «2019-05-09″; // Дата версии #define SCREEN_W 160 // Ширина экрана в рх #define SCREEN_H 128 // Высота экрана в рх uint8_t font_size = 1; // Размер шрифта /***********************/ /* Настройка программы */ /***********************/ void setup() { pinMode(LIGHT_PIN,OUTPUT);// Порт управления подсветкой экрана pinMode(VCC_PIN,INPUT); // Порт для измерения батареи питания analogReference(DEFAULT); // Опорный источник — внутренний // Инициируем работу с дисплеем 1.8» TFT tft.initR(INITR_BLACKTAB);// initialize a ST7735S chip, black tab fnClrScreen(); // Очистить экран tft.setRotation(1); // Поворот экрана: // 0 — 0° книжный // 1 — 90° альбомный // 2 — 180° книжный // 3 — 270° альбомный analogWrite(LIGHT_PIN,level_light); // Установка яркости if(!bme.begin()) // Старт датчика давления { //Если ошибка запуска tft.setTextColor(ST7735_RED); tft.setTextSize(2); fnCenter(sizeof(«Error!»),2,1,0); tft.print(«Error!»); tft.setTextSize(1); fnCenter(sizeof(«Not find BME280 sensor!»),1,7,0); tft.print(«Not find BME280 sensor!»); fnCenter(sizeof(«Check contacts»),1,9,4); tft.print(«Check contacts»); fnCenter(sizeof(«Click Reset»),1,14,0); tft.setTextColor(ST7735_YELLOW); tft.print(«Click Reset»); while(1); } fnZastavka(); // Заставка fnPrintText(); // Вывод основного текста на экран } /***********************/ /* Рабочая программа */ /***********************/ void loop() { time_now=millis(); // Текущее время работы программы в мс // Проверка интервала времени if(time_now — time_check > time_delta) { time_check = time_now; flagcheck = true; } buttonSetLevel.scanState();// Считывание состояния кнопки уровня buttonLight.scanState(); // Считывание состояния кнопки подсветки if(buttonLight.flagClick == true) // Было нажатие кнопки подсветки { buttonLight.flagClick = false; // Сброс признака клика count_level_light++; // Шаг яркости if(count_level_light > 10) { count_level_light = 0; // Выключаем подсветку level_light = 3; // Минимальная яркость tft.fillRect(0, light_str * 8 + 2, 160, 3, ST7735_BLACK); } else { level_light=count_level_light * 25; } analogWrite(LIGHT_PIN,level_light); // Установка яркости /* Прогресс бар яркости подсветки */ uint8_t bar_step = 0; uint8_t bar_step_const = 8 * 2; tft.setTextSize(1); for(uint8_t ip = 0; ip < count_level_light; ip++) { tft.fillRect ( 1 + bar_step, light_str * 8 + 2, bar_step_const — 2, 3, ST7735_WHITE ); bar_step += bar_step_const; } flagSetLight = true; } // Измерение параметров press_now = bme.readPressure()/kp; // Давление в мм рт. ст. temp = bme.readTemperature(); // Температура в °С humidity_now = bme.readHumidity(); // Влажность в % //Применение коррекции влажности if(humidity_correct != 0) humidity_now += humidity_correct; //Применение коррекции температуры if(temp_correct != 0) temp += temp_correct; /* * Если давление изменилось больше чем на 0,2 мм рт.ст., * то выводим на дисплей… * или нажата кнопка обнуления высоты… * или температура изменилась больше чем на 0,1°С */ if( (press_now < (press_last — .2)) || (press_now > (press_last + .2)) || (temp < (temp_last — .1)) || (temp > (temp_last + .1)) || buttonSetLevel.flagClick == true || flagcheck == true ) { flagcheck = false; // Сброс флага проверки по времени if(flagSetLight) // Если была настройка яркости { tft.fillRect(0, light_str * 8 + 2, 160, 3, ST7735_BLACK); flagSetLight=false; } // Было нажатие кнопки «Set Level 0 m» if(buttonSetLevel.flagClick == true) { buttonSetLevel.flagClick = false; // Сброс признака клика null_level=press_now * kp/100; // Обнуляем значение высоты } altit = bme.readAltitude(null_level); // Высота в метрах tft.setTextColor(ST7735_YELLOW); // Вывод значения давления tft.fillRect(bxinfo, byinfo — 2, 6 * 12, 16, ST7735_BLACK); tft.setTextSize(2); tft.setCursor(10 * 6, byinfo — 2); tft.print(press_now); tft.setTextSize(1); // Вывод высоты tft.setTextColor(ST7735_WHITE); tft.fillRect(bxinfo, byinfo + 20, 6 * 7, 8, ST7735_BLACK); tft.setCursor(bxinfo, byinfo + 20); tft.print(altit); // Вывод значения температуры tft.setTextColor(ST7735_ORANGE); tft.fillRect(bxinfo, byinfo + 36, 6 * 6, 8, ST7735_BLACK); tft.setCursor(bxinfo, byinfo + 36); if(temp > 0) tft.print(«+»); tft.print(temp); /* Вывод влажности */ /* Раскрашиваем значение в зависимости от % влажности */ if(humidity_now < 30.0) // Сушь tft.setTextColor(ST7735_RED); if(humidity_now >= 30.0 && humidity_now < 60.0) // Сухо tft.setTextColor(ST7735_YELLOW); if(humidity_now >= 60.0 && humidity_now < 75.0) // Влажно tft.setTextColor(ST7735_GREEN); if(humidity_now >= 75.0) // Сыро tft.setTextColor(ST7735_BLUE); //Очистка места под значение tft.setTextColor(ST7735_BLUE); tft.fillRect(bxinfo, byinfo + 56, 6 * 12, 16, ST7735_BLACK); tft.setTextSize(2); tft.setCursor(bxinfo, byinfo + 56); tft.print(humidity_now); // Проверка напряжения питания int v = analogRead(VCC_PIN); float vcc = v * 5.0 / 1024; // Перевод бит в вольты // Вывод значения напряжения питания батареи if(vcc > 2.5) // Выводим, если запитываемся от батареи { uint8_t x_vcc = 20 * 6 + 3, y_vcc = 14; tft.fillRect(x_vcc, y_vcc, 6 * 6, 8, ST7735_BLACK); tft.setCursor(x_vcc, y_vcc); tft.setTextSize(1); if(vcc < 3.7) tft.setTextColor(ST7735_YELLOW); if(vcc < 3.3) tft.setTextColor(ST7735_RED); if(vcc >= 3.7) tft.setTextColor(ST7735_GREEN); tft.print(«+»); tft.print(vcc); tft.print(«V»); fnBattary(23 * 6, 3, vcc);//Вывод пиктограммки } // Перезаписываем бывшие значения temp_last = temp; press_last = press_now; humidity_last = humidity_now; delay(30); } } /* Функция — Вывод °С */ void fnChrDegree(int16_t x, int16_t y, uint16_t color) { uint8_t radius = 2; tft.drawCircle(x += radius*2, y += radius*2 — 1, radius, color); tft.setCursor(x + 3, y); tft.setTextColor(color); tft.print(«C»); } /* Функция символа батарейки */ void fnBattary(int16_t x, int16_t y, float vcc) { int16_t w = 19, h = 8; tft.drawRect(x, y, w, h, ST7735_WHITE); // Контур батарейки tft.fillRect(x + w, y + 2, 2, 4, ST7735_WHITE); // Пимпочка // Вывод квадратиков наполнения if(vcc < 3.3) fnPrintFillRect(x,y,1,ST7735_RED); if(vcc >= 3.3 && vcc < 3.5) fnPrintFillRect(x,y,1,ST7735_YELLOW); if(vcc >= 3.5 && vcc < 3.7) fnPrintFillRect(x,y,2,ST7735_YELLOW); if(vcc >= 3.7 && vcc < 3.9) fnPrintFillRect(x,y,3,ST7735_GREEN); if(vcc >= 3.9) fnPrintFillRect(x, y, 4, ST7735_GREEN); } /* Функция вывода квадратиков для символа батарейки */ void fnPrintFillRect ( int16_t x, int16_t y, uint8_t max_i, int16_t color ) { tft.fillRect(x + 1, y + 1, 17, 6, ST7735_BLACK); for(uint8_t i = 0; i < max_i; i++) { tft.fillRect(x + 2 + i * 4, y + 2, 3, 4, color); } } /* Функция — Заставка */ void fnZastavka() { fnClrScreen(); // Очистить экран tft.setTextWrap(false); tft.setTextColor(ST7735_ORANGE); font_size = 3; tft.setTextSize(font_size); fnCenter(sizeof(prog_title1) — 1, font_size, 1, 0); tft.print(prog_title1); font_size = 2; tft.setTextSize(font_size); fnCenter(sizeof(author) — 1, font_size, 4, 0); tft.setTextColor(ST7735_DARKGREEN); tft.print(author); font_size = 1; tft.setTextSize(font_size); fnCenter(sizeof(vers) — 1, font_size, 11, 0); tft.setTextColor(ST7735_GRAY); tft.println(vers); fnCenter(sizeof(vers_date) — 1, font_size, 12, 2); tft.println(vers_date); delay(3000); fnClrScreen(); // Очистить экран } /* Функция — Вывод основных надписей на экран */ void fnPrintText() { fnClrScreen(); // Очистить экран tft.setTextSize(1); tft.setCursor(8, 3); tft.setTextColor(ST7735_GREEN); tft.print(«BME280 «); tft.println(vers); tft.setTextColor(ST7735_LIGHTGRAY); /* Вывод давления */ tft.setCursor(0, byinfo);//24 tft.print(«Pressure:»); tft.setCursor(bxinfo + 6 * 12, byinfo); tft.setTextSize(1); tft.print(» mm»); // Вывод размерности давления /* Вывод высоты */ tft.setCursor(0, byinfo + 20); tft.print(«Altitude:»); tft.setCursor(bxinfo + 6 * 8, byinfo + 20); tft.print(«m»); // Вывод размерности высоты /* Вывод температуры */ tft.setCursor(0, byinfo + 36); tft.print(«Temper. :»); // Вывод размерности температуры fnChrDegree(bxinfo + 6 * 7, 60, ST7735_LIGHTGRAY); /* Вывод влажности */ tft.setCursor(0, byinfo + 56); tft.print(«Humidity:»); tft.setTextSize(1); tft.setCursor(bxinfo + 6 * 12, byinfo + 56); tft.print(«%»); // Вывод размерности влажности //Разделитель давления и влажности tft.drawFastHLine(0, byinfo + 50, 160, ST7735_DARKGRAY); } /* Функция — центрирование строки */ void fnCenter ( uint8_t lenght, uint8_t fntsize, uint8_t row, uint8_t offset ) { tft.setCursor ( (SCREEN_W — lenght * fntsize * 6)/2 + fntsize * 6/2, fntsize * 8 * row + offset ); } /* Функция — Cтирание экрана чёрным цветом, * т.е. закрасить чёрным */ void fnClrScreen() { tft.fillScreen(ST7735_BLACK); tft.setCursor(0, 0); // Курсор в начало экрана }

Урок 8. Arduino погодная станция на базе барометра BMP180 термометра DS18B20

В прошлом уроке Мы научились делать термометр, используя для этого цифровой датчик температуры DS18B20, и выводить данные на OLED дисплей.

В этом уроке мы расширим возможности и добавим к проекту еще барометр BMP180, это даст нам возможность следить не только за температурой, но и за атмосферным давлением.

В этом уроке нам понадобится:

  • Датчик температуры DS18B20 1 метр. (Герметичный)
  • Экран 0.96 128X64 OLED,
  • Breadboard
  • Набор проводов Папа-Папа
  • Микроконтроллер Arduino
  • Резистор
  • Барометр BMP180 GY-68

Для реализации проекта нам необходимо установить сразу несколько библиотек:

  • OneWire Arduino Library
  • OLED I2C OLED_I2C с поддержкой Русского и Украинского языка.
  • Dallas Temperature
  • Adafruit BMP085 Библиотека для работы с датчиком давления BMP085

Сборка:

1) OLED дисплей подключаем к arduino следующим образом:

Arduino Uno Экран 0.96 128X64 OLED
5V или 3.3V VCC
GND GND
Pin 9 SCL
Pin 8 SDA

Для удобства подключения можно использовать макетную плату.

2) Датчик температуры DS18B20 подключается к arduino следующим образом:

Распиновка для влагозащитного датчика DS18B20 с метровым проводом:

Arduino UNO Влагозащитный датчика
DS18B20
5V или 3.3V Красный провод ( 5V)
GND Черный провод (GND)
Pin 10 Желтый провод (Сигнальный) (Необходимо подтянуть резистором 4,7кОм к 5V

3) Барометр BMP180 GY-68 подключается к Arduino следующим образом:

Arduino UNO Барометр BMP180

3.3V !

Vin
GND GND
A5 SCL
A4 SDA

В нашем случае, для удобства мы подключили все модули к питанию 3.3 Вольта. Более наглядную схемы подключения можно посмотреть на фотографии ниже.

Теперь, когда мы подключили все модули, можно приступить к написанию скетча для Arduino. Предварительно необходимо установить библиотеки указанные выше.

#include <Wire.h> #include <Adafruit_BMP085.h> // Библиотека для работы с барометром float P; // В данную переменную мы будем пересчитывать давление в милиметры ртутного столба Adafruit_BMP085 bmp; #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 10 // номер пина к которому подключен DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); char buffer; char buffer1; #include <OLED_I2C.h> OLED myOLED(8, 9, 8); // Подключение дисплея, 8pin — SDA , 9pin — SCL extern uint8_t RusFont; // Русский шрифт extern uint8_t MegaNumbers; // Подключение больших шрифтов extern uint8_t SmallFont; // Базовый шрифт без поддержки русскийх символов. void setup() { sensors.begin(); myOLED.begin(); bmp.begin(); myOLED.setFont(RusFont); } void loop() { // Выводим на экран показания температуры sensors.requestTemperatures(); myOLED.clrScr(); // очищаем экран myOLED.setFont(RusFont); myOLED.print(«Ntvgthfnehf», CENTER, 0); // вывод текста русскими буквами myOLED.setFont(SmallFont); myOLED.print(«iarduino.ru», CENTER, 55); // вывод текста myOLED.setFont(MegaNumbers); myOLED.print(String(sensors.getTempCByIndex(0) , 1), CENTER, 10); // Отображение значения температуры, с точностью до десятых myOLED.update(); delay(2000); // Пауза 2 секунды // Выводим на экран показания атмосферного давления myOLED.clrScr(); // очищаем экран myOLED.setFont(RusFont); myOLED.print(«Lfdktybt», CENTER, 0); // вывод текста русскими буквами myOLED.setFont(SmallFont); myOLED.print(«iarduino.ru», CENTER, 55); // вывод текста P=bmp.readPressure(); P=(float)0.0075*P; // пересчитываем давления в привычные нам мм ртутного столба. myOLED.setFont(MegaNumbers); myOLED.print(String(P , 1), CENTER, 10); // Отображение значения давления, с точностью до десятых myOLED.update(); delay(2000); }

Данный скетч можно скачать по следующей ссылке: Скетч урока №8.

В результате наше устройство отображает сперва температуру, которую фиксирует датчик DS18B20, а спустя 2 секунды он выводит на экран текущее давление, зафиксированное с помощью барометра BMP180.