<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[floatingpoint]]></title><description><![CDATA[A seasoned embedded engineer, digital nomad, transitioning into freelancing — always floating, adapting, and exploring new horizons. 🚀]]></description><link>https://blog.tomaszmeyer.com</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 02:56:20 GMT</lastBuildDate><atom:link href="https://blog.tomaszmeyer.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Integration! Home Assistant & BME280]]></title><description><![CDATA[I think it's time to finally connect this sensor to Home Assistant so we can actually display the data nicely, instead of just seeing raw numbers on a screen.
The easiest way would probably be to just flash Home Assistant OS directly onto my Raspberr...]]></description><link>https://blog.tomaszmeyer.com/integration-home-assistant-and-bme280</link><guid isPermaLink="true">https://blog.tomaszmeyer.com/integration-home-assistant-and-bme280</guid><category><![CDATA[bmp280]]></category><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[Home Assistant]]></category><category><![CDATA[mqtt]]></category><category><![CDATA[mosquitto]]></category><dc:creator><![CDATA[Tomasz Meyer]]></dc:creator><pubDate>Thu, 03 Jul 2025 13:11:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751548216403/337c315c-98ac-42e5-a078-747b7b4d90ad.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I think it's time to finally connect this sensor to <strong>Home Assistant</strong> so we can actually display the data nicely, instead of just seeing raw numbers on a screen.</p>
<p>The easiest way would probably be to just flash Home Assistant OS directly onto my Raspberry Pi, but since I want to run a few other things on it, I decided to go with a containerized setup – because, let's be honest, I'm a big fan of containers!</p>
<p>Let's kick things off with the classic: installing <strong>Docker on Raspberry Pi OS (64-bit)</strong>. First up, we'll uninstall any old packages. You can find up to date instructions <a target="_blank" href="https://docs.docker.com/engine/install/debian/">HERE</a>!</p>
<pre><code class="lang-bash"><span class="hljs-keyword">for</span> pkg <span class="hljs-keyword">in</span> docker.io docker-doc docker-compose podman-docker containerd runc; <span class="hljs-keyword">do</span> sudo apt-get remove <span class="hljs-variable">$pkg</span>; <span class="hljs-keyword">done</span>
</code></pre>
<p>Next, let's add the Docker repositories to <strong>apt</strong>, which is what we'll use to pull down all the necessary packages:</p>
<pre><code class="lang-bash"><span class="hljs-comment"># Add Docker's official GPG key:</span>
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

<span class="hljs-comment"># Add the repository to Apt sources:</span>
<span class="hljs-built_in">echo</span> \
  <span class="hljs-string">"deb [arch=<span class="hljs-subst">$(dpkg --print-architecture)</span> signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  <span class="hljs-subst">$(. /etc/os-release &amp;&amp; echo <span class="hljs-string">"<span class="hljs-variable">$VERSION_CODENAME</span>"</span>)</span> stable"</span> | \
  sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt-get update
</code></pre>
<p>Let's install all the necessary packages:</p>
<pre><code class="lang-bash">sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
</code></pre>
<p>And finally, let's add the current user to the <strong>docker group</strong>:</p>
<pre><code class="lang-bash">sudo usermod -aG docker <span class="hljs-variable">$USER</span>;
newgrp docker
</code></pre>
<hr />
<p>Alright, <strong>Docker is installed</strong>, so now we can finally fire up the container with <strong>Home Assistant</strong> inside! (You can find more details <a target="_blank" href="https://www.home-assistant.io/installation/linux">here</a>). To get the container running, we'll need two things: a folder to store the configuration and our timezone. Let's start by creating that configuration folder for Home Assistant.</p>
<pre><code class="lang-bash">mkdir ho_configuration
</code></pre>
<p>Since I'm currently in Portugal, my timezone is <strong>Europe/Lisbon</strong>. Make sure you swap that out for your own – you can find yours <a target="_blank" href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones">here</a>. Also, remember to change <code>/home/tomasz/ho_configuration</code> to your preferred folder. Now that we have all the info, let's fire up the Home Assistant container!</p>
<pre><code class="lang-bash">docker run -d \
  --name homeassistant \
  --privileged \
  --restart=unless-stopped \
  -e TZ=Europe/Lisbon \
  -v /home/tomasz/ho_configuration:/config \
  -v /run/dbus:/run/dbus:ro \
  --network=host \
  ghcr.io/home-assistant/home-assistant:stable
</code></pre>
<p>Once all the layers of our Home Assistant image have been pulled and installed, you should be able to access the graphical interface by typing <a target="_blank" href="http://localhost:8123"><strong>localhost:8123</strong></a> into your browser. Just create an account, fill in the basic details, and you should see the Home Assistant main screen.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751547623876/88dfad09-de0e-4e11-bbf6-f4d3ec228745.jpeg" alt class="image--center mx-auto" /></p>
<p>Now we need to figure out how to bridge the gap between our console-based BME280 sensor readings and Home Assistant. There are a few ways to tackle this, but to brush up on my skills, I decided to go with a really neat communication standard called <strong>MQTT</strong>. It's super popular in the IoT world, already integrated with Home Assistant, and just plain simple to use.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751619195403/db01f30b-b6a2-4170-b79b-161efe2df46e.jpeg" alt class="image--center mx-auto" /></p>
<p><strong>MQTT</strong> is all about the <strong>Publish/Subscribe</strong> concept. My sensor will <strong>Publish</strong> two types of data – temperature and pressure – and Home Assistant will then <strong>Subscribe</strong> to that data and display it nicely. To handle all these subscribers and publishers, we need a central overseer, which is called a <strong>broker</strong>. I'll be using a super simple one called <strong>Mosquitto</strong>.</p>
<pre><code class="lang-bash">sudo apt update
sudo apt install mosquitto mosquitto-clients
sudo systemctl <span class="hljs-built_in">enable</span> mosquitto
sudo systemctl start mosquitto
</code></pre>
<p>The server's up and running, so now it's time to tweak that script I prepared in the previous post. The data we're collecting and displaying now needs to be published. You publish data to a <strong>topic</strong>, which is essentially just a string. Before we make any changes, let's install the Python package that supports MQTT, called <strong>paho-mqtt</strong> (you can find it <a target="_blank" href="https://pypi.org/project/paho-mqtt/">here</a>).</p>
<pre><code class="lang-bash">pip install paho-mqtt
</code></pre>
<p>My script will be publishing to <a target="_blank" href="http://localhost"><strong>localhost</strong></a>, where my Mosquitto server is running, using the default port <strong>1883</strong> and a default keepalive of <strong>60s</strong>. I'll be sending data to two topics: <code>bmp280/temp</code> and <code>bmp280/press</code> – we'll use these two strings when configuring Home Assistant in the next step. For now, I'm just running the script in a continuously open command line.</p>
<pre><code class="lang-bash"><span class="hljs-meta">#!/usr/bin/env python</span>

import time
from smbus2 import SMBus
from bmp280 import BMP280
from datetime import datetime
import paho.mqtt.client as mqtt

<span class="hljs-comment"># Initialise the BMP280</span>
bus = SMBus(1)
bmp280 = BMP280(i2c_dev=bus)

<span class="hljs-comment"># Initialise MQTT</span>
mqtt_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
mqtt_client.connect(<span class="hljs-string">"localhost"</span>, 1883, 60)
mqtt_client.loop_start()

<span class="hljs-keyword">while</span> True:
    now = datetime.now()
    formatted = now.strftime(<span class="hljs-string">"%y-%m-%d %H:%M:%S"</span>)
    temperature = bmp280.get_temperature()
    pressure = bmp280.get_pressure()
    <span class="hljs-built_in">print</span>(formatted,f<span class="hljs-string">" -  {temperature:05.2f}*C {pressure:05.2f}hPa"</span>)
    mqtt_client.publish(<span class="hljs-string">"bmp280/temp"</span>, round(temperature, 2))
    mqtt_client.publish(<span class="hljs-string">"bmp280/press"</span>, round(pressure, 2))
    time.sleep(60)
</code></pre>
<p>The data should be flowing to the broker every minute, so now we can dive into configuring <strong>Home Assistant</strong>, which, luckily, has plugin supporting <strong>MQTT</strong> . You'll need to head into <strong>Settings</strong>, then <strong>"Devices &amp; services"</strong>, click <strong>"Add Integration"</strong> in the bottom right corner, and search for <strong>MQTT</strong>. A basic configuration window will pop up where you just need to enter the hostname, which is simply <strong>"</strong><a target="_blank" href="http://localhost"><strong>localhost</strong></a><strong>"</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751547778567/dc1db103-56ca-45ba-8929-59b41530605c.jpeg" alt class="image--center mx-auto" /></p>
<p>Next, go into the MQTT integration, click the three dots next to "<a target="_blank" href="http://localhost">localhost</a>," and then select <strong>"Add MQTT Device."</strong> Choose a name like our sensor's name, <strong>"BME280."</strong> After moving forward, pick <strong>"sensor"</strong> as the entity type and add <strong>"Temperature"</strong> as the first reading, along with the reading in Celsius. (Once you type "C" and click next, it should automatically suggest the correct unit, <strong>°C</strong>.) And most importantly, for the topic name, enter <strong>"BME280/temp."</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751547827474/b02ed6be-97fe-4db7-b04f-3526d4b45671.jpeg" alt class="image--center mx-auto" /></p>
<p>Great, the measurement has been added correctly! You can add the pressure reading in a similar way. You'll see the option "Add another entity to BME280" in the current window, or you can do it directly from the MQTT integration window. When adding the pressure reading, just remember to use <strong>hPa</strong> as the unit and <strong>"BME280/press"</strong> as the topic name.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751547867719/5abf1f91-d0c2-44e5-8b67-69fd8ae7a6f5.jpeg" alt class="image--center mx-auto" /></p>
<p>Both measurements are now added! Let's try displaying them on the main screen. Go to the <strong>Overview</strong> tab and click the <strong>pencil icon</strong> in the top right corner. In the bottom right, select <strong>"Add Card."</strong> Then, under the <strong>"Entity"</strong> tab, find both <strong>Pressure</strong> and <strong>Temperature</strong> from your BME280 sensor. And just like that, we've successfully got our BME280 sensor readings into Home Assistant.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751547899784/98d561ad-f807-4a3d-9690-9b66df390839.jpeg" alt class="image--center mx-auto" /></p>
<hr />
<p>I really encourage you to play around with the widgets for displaying values. There's a ton of possibilities there that even I haven't fully explored yet.</p>
<p>I left the sensor running for two days of measurements. During that time, the readings froze for a few hours and only unfroze after I manually searched for the sensor on the I2C bus and restarted the script. Both the script and how it's launched will naturally be improved, but that's for the next post! Below, you can see the measurements from those two days.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751547927569/bf53b5a5-8f02-4c24-9fea-4c0e83c1d7cf.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Pressure and temperature reading from BMP280 sensor on Raspberry Pi]]></title><description><![CDATA[Raspberry OS is installed, everything booted up — now it’s time to breathe some life and meaning into this piece of silicon with an operating system. The reasons for starting this project, apart from learning the Raspberry platform with a long-term p...]]></description><link>https://blog.tomaszmeyer.com/pressure-and-temperature-reading-from-bmp280-sensor-on-raspberry-pi</link><guid isPermaLink="true">https://blog.tomaszmeyer.com/pressure-and-temperature-reading-from-bmp280-sensor-on-raspberry-pi</guid><category><![CDATA[bmp280]]></category><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[Temperature Sensor]]></category><category><![CDATA[Pressure Sensor]]></category><dc:creator><![CDATA[Tomasz Meyer]]></dc:creator><pubDate>Sun, 18 May 2025 12:04:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747569782286/937b2e1f-690b-4c4a-8b3e-69b0e7732ada.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Raspberry OS is installed, everything booted up — now it’s time to breathe some life and meaning into this piece of silicon with an operating system. The reasons for starting this project, apart from learning the Raspberry platform with a long-term plan of mastering Yocto, included monitoring weather conditions — especially atmospheric pressure. I’d like to keep a record of pressure in the places where I live to try and confirm or disprove my observations — my mood seems to fluctuate along with the pressure. Atmospheric pressure data should be available online, but I wasn’t able to find a site with very local data and easy access to historical records. In my opinion, learning for the sake of learning is pointless — personally, I find it hard to stay motivated if there’s no specific goal behind it. If there’s a strong desire to learn but no goal — find one. Let’s treat this goal as my motivator for learning — without diving into the details of whether the whole project even makes sense.</p>
<p>What are my assumptions about the sensor itself? Very simple - it has to be cheap, measure pressure, it would be nice if it also measured temperature, and it has to be widely used - I don't want to write controllers from scratch. I settled on the BMP280 sensor. It meets all the requirements!</p>
<p>The sensor can measure pressure from 300 to 11000 hPa and temperature from -40 to 85 °C. I can communicate with it via I2C and SPI interfaces. Libraries, examples and development boards are available.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747568916835/a68b7828-005f-4aae-a7d9-2a402fa33c6c.jpeg" alt="BME280 sensor" class="image--center mx-auto" /></p>
<p>I will connect the sensor to the Raspberry via the I2C bus, which is a serial and synchronous bus using two communication lines:</p>
<ul>
<li><p><strong>SCL</strong> - the clock line, which, like a conductor, sets the rythm of communication,</p>
</li>
<li><p><strong>SDA</strong> - the line on which the actual communication takes place.</p>
</li>
</ul>
<p>Besides the communication lines, the <strong>GND</strong> (ground) line must be connected — you need to know the reference point against which to measure the potentials on the lines.</p>
<p>The sensor needs to know which bus to use - there is a choice of I2C and SPI buses. The <strong>CSB</strong> line is used to select the bus: a logic 1 (3.3 V) state selects the I2C bus, while a logic 0 (0 V) state selects the SPI bus. Below I show the sensor connection from my Raspberry Pi to the I2C1 interface.</p>
<p><img src="https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2023/03/Raspberry-Pi-Pinout-Random-Nerd-Tutorials.png?quality=100&amp;strip=all&amp;ssl=1" alt="Raspberry Pi Pinout Guide: How to use the Raspberry Pi GPIOs ..." /></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>BMP280</strong></td><td><strong>Raspberry</strong></td></tr>
</thead>
<tbody>
<tr>
<td>VCC</td><td>01</td></tr>
<tr>
<td>GND</td><td>39</td></tr>
<tr>
<td>SCL</td><td>05</td></tr>
<tr>
<td>CDA</td><td>03</td></tr>
<tr>
<td>CSB</td><td>17</td></tr>
<tr>
<td>SDO</td><td>NC</td></tr>
</tbody>
</table>
</div><p>After connecting everything, we need to enable the I2C bus. We can do this in two ways — through the graphical interface:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747489267595/159511cd-d0f6-4f3f-af56-59a91d3b7209.png" alt /></p>
<p>Or via the command line:</p>
<pre><code class="lang-bash">sudo raspi-config
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747569503094/9372eb5d-0ffb-43d6-9563-f07735ea0052.jpeg" alt class="image--center mx-auto" /></p>
<p>I had some minor issues getting the sensor started, so I’d suggest rebooting the Raspberry after enabling the interface.</p>
<p>The next step should be to verify if we connected the sensor correctly and if we can find its address. For that, we’ll need the tool <strong>i2cdetect</strong>.</p>
<pre><code class="lang-bash">sudo apt update
sudo apt install -y i2c-tools
</code></pre>
<p>We connected the device to the I2C1 bus — dedicated for connecting external sensors. I2C0 is reserved for the Raspberry hat with EEPROM. To find the sensor on the I2C1 bus, use the following command:</p>
<pre><code class="lang-bash">i2cdetect -y 1
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747569594740/64c94b87-3c82-428f-92e0-c63dd3ca55b5.jpeg" alt class="image--center mx-auto" /></p>
<p>Success! The sensor is available at address <strong>0x76</strong>!</p>
<p>So let’s write some simple code to read the sensor’s parameters: pressure and temperature! Let’s create a project folder, start a virtual environment, install a <a target="_blank" href="https://pypi.org/project/bmp280/">ready-made Python library</a>, and create a script file:</p>
<pre><code class="lang-bash">mkdir temppressread
<span class="hljs-built_in">cd</span> temppressread/
python -m venv temppressread
<span class="hljs-built_in">source</span> temppressread/bin/activate
pip install bmp280
touch run.py
</code></pre>
<p>Using <a target="_blank" href="https://github.com/pimoroni/bmp280-python/tree/main/examples">the examples available on the library’s website</a>, let’s create a simple script to read temperature and pressure, then run it!</p>
<pre><code class="lang-python"><span class="hljs-comment">#!/usr/bin/env python</span>

<span class="hljs-keyword">import</span> time
<span class="hljs-keyword">from</span> smbus2 <span class="hljs-keyword">import</span> SMBus
<span class="hljs-keyword">from</span> bmp280 <span class="hljs-keyword">import</span> BMP280
<span class="hljs-keyword">from</span> datetime <span class="hljs-keyword">import</span> datetime

<span class="hljs-comment"># Initialise the BMP280</span>
bus = SMBus(<span class="hljs-number">1</span>)
bmp280 = BMP280(i2c_dev=bus)

<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
    now = datetime.now()
    formatted = now.strftime(<span class="hljs-string">"%y-%m-%d %H:%M:%S"</span>)
    temperature = bmp280.get_temperature()
    pressure = bmp280.get_pressure()
    print(formatted,<span class="hljs-string">f" -  <span class="hljs-subst">{temperature:<span class="hljs-number">05.2</span>f}</span>*C <span class="hljs-subst">{pressure:<span class="hljs-number">05.2</span>f}</span>hPa"</span>)
    time.sleep(<span class="hljs-number">1</span>)
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747569745720/601d4c22-9da3-4bf4-a7a5-32783471eebc.jpeg" alt class="image--center mx-auto" /></p>
<p>The sensor and the script are working! Next, I’ll try installing Home Assistant on the Raspberry and somehow connect this data so I can track it with nice charts and monitor the historical data!</p>
]]></content:encoded></item><item><title><![CDATA[Dedicated Linux for Raspberry - how easy it is!]]></title><description><![CDATA[I managed to gather all the components to start my fun with embedded Linux. It wasn't much, and most of the components can be bought in any store - completely different than with classic embedded systems. Let me present you my "impressive" developmen...]]></description><link>https://blog.tomaszmeyer.com/dedicated-linux-for-raspberry-how-easy-it-is</link><guid isPermaLink="true">https://blog.tomaszmeyer.com/dedicated-linux-for-raspberry-how-easy-it-is</guid><category><![CDATA[Raspberry Pi]]></category><dc:creator><![CDATA[Tomasz Meyer]]></dc:creator><pubDate>Wed, 14 May 2025 14:39:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747233542716/22964820-5f99-4987-a881-70654dc93b20.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I managed to gather all the components to start my fun with embedded Linux. It wasn't much, and most of the components can be bought in any store - completely different than with classic embedded systems. Let me present you my "impressive" development-testing-educational kit</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747233176013/8e118658-8287-4af1-8968-e42caa3589ec.jpeg" alt class="image--center mx-auto" /></p>
<p>My setup consists of a Raspberry Pi 4 Model B with 1 GB of RAM, a cute, mini, used 7-inch monitor, a classic HDMI cable with a micro HDMI adapter, and a standard USB-C charger.</p>
<p>After connecting everything, a screen appears informing me about the type of board, boot method, missing SD card, network interface information, and HDMI output connection. The board doesn't have the operating system that should be on the missing memory card. But other than that – everything works!</p>
<p>Let's go ahead and flash the dedicated operating system onto this device, which is Raspberry Pi OS. The easiest way will be to download the Raspberry Imager program – it prepares the SD card with the system. The program is very intuitive! I choose the board version, the system I want to install, and the storage device where I want to write the operating system – the SD card that will be inserted into the Raspberry. This is how it looks for me:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747233305098/978aeb7a-ae0a-409d-83b9-bdd43b5849f9.png" alt class="image--center mx-auto" /></p>
<p>After confirming that I’m aware of the data removal from the card and accepting the use of personalized data, such as the Wi-Fi password for the system, everything happens automatically, and it looks like it's working! Now I'll insert the card into the Raspberry, plug in the mouse and keyboard, and see how it all works!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747233271653/88af8274-78ef-4b5d-bbb6-ad14ca2b130b.jpeg" alt class="image--center mx-auto" /></p>
<p>After a few resets and obvious issues with setting up the display, the system booted up correctly!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747233395006/e77e93f3-63d8-4e03-8d08-c2482a60d34b.jpeg" alt class="image--center mx-auto" /></p>
<p>After the Raspberry Pi has booted up correctly, you need to go through the standard configuration – setting the username and password, and entering the Wi-Fi password. For this reason, I’m a bit disappointed – it looked like the Raspberry Pi Imager program would “burn” the Wi-Fi password I use, but that didn’t happen. After a reset and logging in – everything works! In the embedded world, that’s not obvious – that’s why I’m happy!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747233458116/0ca4db25-691f-4e45-9a24-8c093dd12d73.jpeg" alt class="image--center mx-auto" /></p>
<p>The user interface is simple and clear, and I can see the option to launch communication buses and general system configuration – all through the graphical interface! In the next step, I’ll try to connect an air quality sensor to one of the interfaces and attempt to read basic parameters around the device</p>
]]></content:encoded></item><item><title><![CDATA["Devgar" - the learning curve]]></title><description><![CDATA[Following ambition is not always the best strategy. Sometimes, the mountain you need to climb is simply too steep. I didn't realize what kind of technology I was trying to tackle alone, in a short time, with additional problems that I put on my own s...]]></description><link>https://blog.tomaszmeyer.com/devgar-the-learning-curve</link><guid isPermaLink="true">https://blog.tomaszmeyer.com/devgar-the-learning-curve</guid><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[buildroot]]></category><category><![CDATA[#yocto]]></category><dc:creator><![CDATA[Tomasz Meyer]]></dc:creator><pubDate>Fri, 07 Mar 2025 11:28:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1741346316056/7dac7782-6b1f-4f51-b106-b4dbab529591.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Following ambition is not always the best strategy. Sometimes, the mountain you need to climb is simply too steep. I didn't realize what kind of technology I was trying to tackle alone, in a short time, with additional problems that I put on my own shoulders.</p>
<p>What did I want to do? I wanted to create a containerized environment with Yocto inside. I wanted to build an application for <strong>Raspberry Pi</strong> that would run <strong>Home Automation</strong> and to which I could connect <strong>sensors</strong> via some yet undefined protocol.</p>
<p>The simplest solution was to use a ready-made distribution — <strong>Raspberry Pi OS</strong>. However, it is not widely used in professional projects. I wanted to learn what appears most frequently in job offers and, at the same time, solve my engineering problem. So, I decided on <strong>Yocto</strong>.</p>
<p>The first few days I struggled with container-related problems, which, of course, I had created myself. Then, after verifying that everything worked without the container, I started focusing on the configuration and managed to create the first image to upload.</p>
<p>But here came another fundamental problem — I had never had the pleasure of playing with Raspberry Pi before. I know what UART is and how it works; I built an image that should contain a full console, connected the device to a USB adapter, inserted the card, and what happened? Nothing. Silence. What's going on? I have no clue!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741346867583/b1c32a0c-8c93-4283-b915-94038b5da5a8.png" alt="My new learning curve" class="image--center mx-auto" /></p>
<p><strong>A mountain must be conquered in stages!</strong> I’ll start simple — I’ll install Raspberry Pi OS. I will check if the UART console is enough to play with this system. If so, I will install a Home Automation server, try to connect the first sensor, and link it to my system.</p>
<p><strong>What's next?</strong> I guess it’s time for Buildroot. I will try to do exactly the same but by creating my own image. Only after completing these two stages will I start working with Yocto. I’ve lost a lot of time and energy, but I think I’ve already learned a lot. In the next post, I will try to describe my interactions with this operating system.</p>
]]></content:encoded></item><item><title><![CDATA[Why Not Start with Raspberry Pi Now?]]></title><description><![CDATA[Most of my friends have touched on this topic, I keep seeing it in job offers, and I've been hearing about it for years. I'm waiting for future projects, and I want to add a very useful technology to my portfolio. Why not get into it right now? Ladie...]]></description><link>https://blog.tomaszmeyer.com/why-not-start-with-raspberry-pi-now</link><guid isPermaLink="true">https://blog.tomaszmeyer.com/why-not-start-with-raspberry-pi-now</guid><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[Docker]]></category><category><![CDATA[homeassistant]]></category><dc:creator><![CDATA[Tomasz Meyer]]></dc:creator><pubDate>Sun, 16 Feb 2025 21:30:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1739741364721/72718f21-e402-45e2-9f63-9147e2c93600.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most of my friends have touched on this topic, I keep seeing it in job offers, and I've been hearing about it for years. I'm waiting for future projects, and I want to add a very useful technology to my portfolio. Why not get into it right now? Ladies and gentlemen, hats off, presenting to you – His Majesty, Raspberry.</p>
<p>What do I want to run on this Raspberry? For now, I have only one idea: Home Assistant. If you've never heard of it, let me explain. Home Assistant is a service to which I can connect multiple sensors, it has a graphical interface, and in this interface, I can create real magic. Let’s take a simple example of a smart socket and a temperature sensor with connectivity. We connect both elements to Home Assistant. We plug a heater into the socket, and we display the temperature sensor in our welcome interface. Let’s add a simple automation: if the temperature drops below 20 degrees – turn on the socket, if the temperature rises above 25 degrees – turn off the socket. In a simple way, we've turned an analog heater into a smart heating system for our room, and on top of that, we can check the temperature on our phone.</p>
<p>To be completely honest with you, I’ve never done anything more complicated with Home Assistant and sensors – and that’s one of the reasons I want to launch this project.</p>
<p>I will definitely want to run more services in the future, and they will all rely on one technology: containers. I fell in love with them as soon as I started writing them myself. Containers are a technology that builds a system out of blocks to run a specific functionality. For example: the Home Assistant server. To run it, I will need a Linux system, a few installed packages, and the server itself. I create a file where I specify what I need, I define a sequence of actions that I would have to perform manually on my computer anyway, and everything should work. Usually, this takes much more time than running such a server locally, but there is one major advantage to this solution – you describe everything in a single text file, just a few lines. You run the same file on another computer, on a different operating system, and everything works.</p>
<p>This is the only technology where you can’t throw "it works on my machine" in your colleague’s face. Of course, there are exceptions, which I plan to describe in the future, but with a well-described container, the operating system on which you run it doesn’t matter.</p>
]]></content:encoded></item><item><title><![CDATA[A new rubber duck]]></title><description><![CDATA[My name is Tomasz Meyer, and I have decided to expand my hidden writing practice. Every evening, before going to bed, I write down how I felt, what I did, and what I observed in my behavior. My journal is the most personal possession I have – I never...]]></description><link>https://blog.tomaszmeyer.com/a-new-rubber-duck</link><guid isPermaLink="true">https://blog.tomaszmeyer.com/a-new-rubber-duck</guid><category><![CDATA[life]]></category><dc:creator><![CDATA[Tomasz Meyer]]></dc:creator><pubDate>Sat, 08 Feb 2025 21:22:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1739100657403/e4e1932a-a887-4869-a25d-95a4be03ab3a.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My name is Tomasz Meyer, and I have decided to expand my hidden writing practice. Every evening, before going to bed, I write down how I felt, what I did, and what I observed in my behavior. My journal is the most personal possession I have – I never lie in it, and I am never consciously ashamed to write anything down. This journal has often helped me find my way out of a dead end, like a true friend.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739049688362/8be7a087-52bb-490f-9fca-fe4060aee4a1.jpeg" alt class="image--center mx-auto" /></p>
<p>The life of an engineer is not the most exciting, and it never seemed to me that it was something worth sharing with the world. However, recent changes have made periodic reflection on my engineering endeavors feel necessary.</p>
<p>Since the beginning of February, I have embarked on my journey as a freelancer. I created this website, set up profiles on the most popular freelancing platforms, and mentally prepared myself. As a freelancer, I am not only my own captain but also the ship, the helmsman, and the deckhand. In a project company, there are many expert-islands – people you interact with daily, who help you bounce ideas off them. Often, a simple conversation over coffee, where you explain your challenges to a colleague, helps untangle a problem. A well-known concept in the engineering community: the rubber duck debugging method.</p>
<p>On a one-person ship, there is no one to bounce ideas off. You have to motivate yourself to explain your problems. And what better way to do this than through writing? Writing requires attention, careful word choice, and the ability to condense complex issues into simple sentences that are understandable to a less technical audience. That’s how I ended up here, writing a blog. I intend to occasionally describe the problems I face, share my freelancing journey, and organize the noise in my head.</p>
]]></content:encoded></item></channel></rss>