{"id":4359,"date":"2018-08-22T20:00:37","date_gmt":"2018-08-22T18:00:37","guid":{"rendered":"https:\/\/msalamon.pl\/?p=4359"},"modified":"2025-12-27T20:36:34","modified_gmt":"2025-12-27T19:36:34","slug":"bmp180-bmp280-bme280-on-stm32-part-1","status":"publish","type":"post","link":"https:\/\/msalamon.pl\/en\/bmp180-bmp280-bme280-on-stm32-part-1\/","title":{"rendered":"BMP180, BMP280, BME280 on STM32 &#8211; Part 1"},"content":{"rendered":"\n<p>Environmental parameters such as temperature, atmospheric pressure, and air humidity are undoubtedly the most frequently measured quantities. Every year, a mass of home weather stations is created around the world, decorating the areas around the windows of our houses and <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>apartments.<\/p>\n\n\n\n<p>Just like with the LCD display, I will check how much time it takes the MCU to handle these popular sensors. As a base for the library supporting these chips, I used Bosch and Adafruit libraries for Arduino available on the internet.<\/p>\n\n\n\n<p>However, I will be working with popular Chinese modules. They are very cheap and have the necessary resistors on board. Some of them can also be powered from 5 V thanks to the onboard regulator. Remember, however, that communication is still in the 3.3 V domain, although it still works on Arduino. My test platform will be the Nucleo64-F401RE, and I will check operation times for I\u00b2C bus clocking at 100 kHz and 400 kHz. Let\u2019s get to it!<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">BMP180<\/h1>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/sklep.msalamon.pl\/produkt\/bmp180-czujnik-cisnienia\/?utm_source=blog&amp;utm_medium=banner&amp;utm_campaign=bmp180&amp;utm_content=Text\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/09\/BMP180_baner-1024x341.jpg\" alt=\"\" class=\"wp-image-955\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/09\/BMP180_baner-1024x341.jpg 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/09\/BMP180_baner-300x100.jpg 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/09\/BMP180_baner-768x256.jpg 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/09\/BMP180_baner-24x8.jpg 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/09\/BMP180_baner-36x12.jpg 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/09\/BMP180_baner-160x53.jpg 160w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/09\/BMP180_baner.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><a data-e-disable-page-transition=\"true\" class=\"download-link\" title=\"\" href=\"https:\/\/msalamon.pl\/download\/231\/?tmstv=1766862103\" rel=\"nofollow\" id=\"download-link-231\" data-redirect=\"false\"><br>BMP180 datasheet<\/a><\/p>\n\n\n\n<p>A patient measuring 3.6 x 3.8 x 0.93 mm is capable of measuring temperature and atmospheric pressure.<\/p>\n\n\n\n<p>We read the temperature at 16-bit resolution, but it is not given directly. It must be calculated according to the algorithm shown in the datasheet. We obtain the result with a resolution of 0.1 \u00b0<span>C, with the sensor\u2019s measurement accuracy being \u00b10.5 \u00b0C at room temperature, and \u00b11 \u00b0C over the full measurement range (0\u00f765 \u00b0C).<\/span><\/p>\n\n\n\n<p>The information about the measured pressure occupies from 16 to 19 bits and depends on the selected measurement mode, which has a significant impact on conversion time. As with temperature, the value obtained from the sensor must be calculated according to the algorithm. Only after calculation do we obtain the actual quantity we are interested in. We get the result with a precision of 0.01 hPa. The absolute accuracy of the pressure sensor is typically \u00b11 hPa over the entire measurement range (300<span>\u00f71100 hPa). Relative accuracy is at the level of \u00b10.12 hPa.<\/span><\/p>\n\n\n\n<p>In the note we also find interesting information about current consumption for 1 Hz sampling depending on the selected mode. The visible <em>Advanced res. mode<\/em> is not available just like that from, for example, initialization. For this reason I will not count it as an accuracy\/consumption mode \ud83d\ude42<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_currents_ds.png\"><img loading=\"lazy\" decoding=\"async\" width=\"524\" height=\"110\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_currents_ds.png\" alt=\"\" class=\"wp-image-168\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_currents_ds.png 524w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_currents_ds-300x63.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_currents_ds-24x5.png 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_currents_ds-36x8.png 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_currents_ds-160x34.png 160w\" sizes=\"auto, (max-width: 524px) 100vw, 524px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>These are averaged data. The \u201cpeak\u201d during conversion is as high as 650 \u00b5A, and in standby the sensor is satisfied with only 0.1 microamp. All these values allow the use of this type of sensor in battery-powered devices. Great \ud83d\ude42<\/p>\n\n\n\n<p>You will find the rest of the interesting information in the documentation. I encourage you to read it \u2014 it doesn\u2019t hurt at all, and you can learn so much.<\/p>\n\n\n\n<p>The connection diagram to the <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/nucleo-f401re\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=bmp180&amp;utm_content=Text\">Nucleo F401RE<\/a> and the STM32CubeMX configuration is simple. I will use the first I\u00b2C interface. The GY-68 module already has pull-up resistors for the I\u00b2C lines, so that\u2019s off my plate.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/sklep.msalamon.pl\/kategoria-produktu\/dev-boardy\/stm32-nucleo\/?utm_source=blog&amp;utm_medium=banner&amp;utm_campaign=bmp180&amp;utm_content=nucleo\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"400\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/07\/Nucleo-64-baner.jpg\" alt=\"\" class=\"wp-image-1593\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/07\/Nucleo-64-baner.jpg 1200w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/07\/Nucleo-64-baner-300x100.jpg 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/07\/Nucleo-64-baner-1024x341.jpg 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/07\/Nucleo-64-baner-768x256.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_KiCad.png\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"420\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_KiCad.png\" alt=\"\" class=\"wp-image-170\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_KiCad.png 960w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_KiCad-300x131.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_KiCad-768x336.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_KiCad-24x11.png 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_KiCad-36x16.png 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_KiCad-160x70.png 160w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMXX80_Cube.png\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"600\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMXX80_Cube.png\" alt=\"\" class=\"wp-image-171\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMXX80_Cube.png 600w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMXX80_Cube-300x300.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMXX80_Cube-150x150.png 150w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMXX80_Cube-24x24.png 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMXX80_Cube-36x36.png 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMXX80_Cube-80x80.png 80w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>First, I will check the operation of the sensor at an I\u00b2C clock speed of 100 kHz. This sensor only supports forced conversion mode, which involves waiting for the measurement to complete. While creating my library I noticed that Adafruit, for example, hard-coded the wait times for conversion completion with a plain, crude <em>delay<\/em>. Its value is the maximum declared conversion time contained in the documentation. Not nice\u2026 But ok\u2026 I checked this variant in the <em>Standard<\/em> conversion mode.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_100k.png\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"273\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_100k.png\" alt=\"\" class=\"wp-image-172\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_100k.png 960w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_100k-300x85.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_100k-768x218.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_100k-24x7.png 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_100k-36x10.png 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_100k-160x46.png 160w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>The conversion time and temperature calculation according to the algorithm is 5.69 ms. Pressure conversion takes much longer \u2014 it also includes a temperature conversion, which is needed to calculate the pressure. So why measure temperature separately? Firstly \u2014 because the sensor allows it. Secondly \u2014 maybe someday you will need temperature alone?<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_400k.png\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"270\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_400k.png\" alt=\"\" class=\"wp-image-174\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_400k.png 960w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_400k-300x84.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_400k-768x216.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_400k-24x7.png 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_400k-36x10.png 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_400k-160x45.png 160w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>At 400 kHz I\u00b2C it looks a tad better, but I still don\u2019t like these long, empty wait times.<\/p>\n\n\n\n<p>Maybe it can be faster? Why insert artificial waiting here when BMP180 registers allow you to peek at the conversion status? Let\u2019s check!<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_100k.png\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"273\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_100k.png\" alt=\"\" class=\"wp-image-175\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_100k.png 960w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_100k-300x85.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_100k-768x218.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_100k-24x7.png 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_100k-36x10.png 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_100k-160x46.png 160w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>100 kHz<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_400k.png\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"276\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_400k.png\" alt=\"\" class=\"wp-image-176\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_400k.png 960w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_400k-300x86.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_400k-768x221.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_400k-24x7.png 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_400k-36x10.png 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_times_without-delays_400k-160x46.png 160w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>400 kHz<\/p>\n\n\n\n<p>Better? Of course! Remember \u2014 life is too short to use <em>delay<\/em>. I ran a series of tests for all pressure conversion modes. The results are in the tables.<\/p>\n\n\n\n<p>Temperature conversion times<\/p>\n\n\n\n<figure class=\"wp-block-table tablepress tablepress-id-2\"><table class=\"has-fixed-layout\"><tbody><tr><td><\/td><td>100 kHz (delay)<\/td><td>400 kHz (delay)<\/td><td>100 kHz<\/td><td>400 kHz<\/td><\/tr><tr><td>All modes<\/td><td>5,69 ms<\/td><td>5,14 ms<\/td><td>4,31 ms<\/td><td>3,47 ms<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Temperature and pressure conversion times<\/p>\n\n\n\n<figure class=\"wp-block-table tablepress tablepress-id-3\"><table class=\"has-fixed-layout\"><tbody><tr><td><\/td><td>100 kHz (delay)<\/td><td>400 kHz (delay)<\/td><td>100 kHz<\/td><td>400 kHz<\/td><\/tr><tr><td>Ultra Low Power<\/td><td>11,79 ms<\/td><td>10,38 ms<\/td><td>9,03 ms<\/td><td>7,04 ms<\/td><\/tr><tr><td>Standard<\/td><td>14,76 ms<\/td><td>13,35 ms<\/td><td>11 ms<\/td><td>9,03 ms<\/td><\/tr><tr><td>Highres<\/td><td>20,72 ms<\/td><td>19,26 ms<\/td><td>14,94 ms<\/td><td>12,9 ms<\/td><\/tr><tr><td>Ultrahighres<\/td><td>32,6 ms<\/td><td>31,18 ms<\/td><td>22,82 ms<\/td><td>20,75 ms<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>I would immediately discard versions with a fixed <em>delay<\/em>. They are clearly slower than polling the sensor to see if the conversion has already finished. With infrequent reads from the sensor you generally wait for the measurement to finish, so it\u2019s worth shortening that time by a few milliseconds. The differences between 100 kHz and 400 kHz clocking are roughly constant and are about 2 ms. This implies that the conversion time does not depend on the communication speed, but with this amount of data to transfer you can still shave off a bit. It\u2019s worth using 400 kHz if the microcontroller and other devices on the I\u00b2C bus allow it. BMP180 supports I\u00b2C up to the high-speed standard, i.e., 3.4 Mbit\/s.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/08\/BMP180_circuit.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"640\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/08\/BMP180_circuit.jpg\" alt=\"\" class=\"wp-image-259\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/08\/BMP180_circuit.jpg 960w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/08\/BMP180_circuit-300x200.jpg 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/08\/BMP180_circuit-768x512.jpg 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/08\/BMP180_circuit-360x240.jpg 360w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/08\/BMP180_circuit-24x16.jpg 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/08\/BMP180_circuit-36x24.jpg 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/08\/BMP180_circuit-120x80.jpg 120w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Altitude a.s.l.<\/h2>\n\n\n\n<p>The <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/bmp180-czujnik-cisnienia\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=bmp180&amp;utm_content=Text\">BMP180<\/a> documentation includes an interesting feature: determining altitude above sea level based on the measured pressure.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_npm.png\"><img loading=\"lazy\" decoding=\"async\" width=\"312\" height=\"109\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_npm.png\" alt=\"\" class=\"wp-image-192\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_npm.png 312w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_npm-300x105.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_npm-24x8.png 24w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_npm-36x13.png 36w, https:\/\/msalamon.pl\/wp-content\/uploads\/2018\/07\/BMP180_npm-160x56.png 160w\" sizes=\"auto, (max-width: 312px) 100vw, 312px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>This formula requires us to provide the parameter <em>p0<\/em> \u2014 the pressure at sea level expressed in Pa. Wikipedia defines it as 101325 Pa and that\u2019s the value I will use. Unfortunately, the calculations are a bit off and it comes out as 29 meters below sea level, which is not true for Gdynia. I can see the sea from my window and I\u2019m sure I am above it \ud83d\ude42 Entering the current pressure given online (1018 hPa) yields 10 m a.s.l., which is closer to the truth. As you can see, without up-to-date knowledge of the pressure at sea level, we can only use these calculations as a curiosity.<\/p>\n\n\n\n<p>I do not rule out that I don\u2019t know how to use this function \ud83d\ude00 Maybe someone can enlighten me?<\/p>\n\n\n\n<p><a href=\"http:\/\/msalamon.pl\/bmp180-bmp280-bme280-na-stm32-cz-2\/\">In the next part<\/a> I take a look at the younger brother of the <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/bmp180-czujnik-cisnienia\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=bmp180&amp;utm_content=Text\">BMP180<\/a>, i.e., the <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/bmp280-czujnik-cisnienia\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=bmp180&amp;utm_content=Text\">BMP280<\/a>, as well as its extended version, the <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/bme280-czujnik-cisnienia-srodowiskowy\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=bmp180&amp;utm_content=Text\">BME280<\/a>.&nbsp;<\/p>\n\n\n\n<p>If you like the sensor, you can buy it <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/bmp180-czujnik-cisnienia\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=bmp180&amp;utm_content=Text\">in my shop<\/a>.<\/p>\n\n\n\n<p>The complete code for this series of posts is on my GitHub: <a href=\"https:\/\/github.com\/lamik\/BMXX80_STM32_HAL\" target=\"_blank\" rel=\"noopener\">link<\/a><\/p>\n\n\n\n<p>To wrap up this post, I encourage you to discuss handling the BMP180 sensor on STM32 in the comments. Do you think I made a mistake somewhere? Do you have an interesting idea for what could be improved? Share it in a comment! Remember that the discussion should be polite and in accordance with the rules of the Polish language.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;4359&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;0&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;0\\\/5 - (0 votes)&quot;,&quot;size&quot;:&quot;24&quot;,&quot;title&quot;:&quot;BMP180, BMP280, BME280 on STM32 - Part 1&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} - ({count} {votes})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 19.2px;\">\n            <span class=\"kksr-muted\"><\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Environmental parameters such as temperature, atmospheric pressure, and air humidity are undoubtedly the most frequently measured quantities. Every year, a mass of home weather stations is created around the world, decorating the areas around the windows of our houses and<\/p>\n","protected":false},"author":1,"featured_media":2961,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[160],"tags":[175,176,174,177],"class_list":["post-4359","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-stm32","tag-electronics","tag-programming","tag-stm32","tag-stm32cubemx"],"_links":{"self":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts\/4359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/comments?post=4359"}],"version-history":[{"count":3,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts\/4359\/revisions"}],"predecessor-version":[{"id":4471,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts\/4359\/revisions\/4471"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/media\/2961"}],"wp:attachment":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/media?parent=4359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/categories?post=4359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/tags?post=4359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}