Koen Vervloesem, freelance journalist and writer specialized in Linux and open source, computer security, privacy, programming, artificial intelligence and Internet of Things
When I searched for a new LoRaWAN indoor gateway, my primary criterion was that it should be capable of running open-source firmware. The ChirpStack Gateway OS firmware caught my attention. It's based on OpenWrt and has regular releases . Its recent 4.7.0 release added support for the Seeed SenseCAP M2 Multi-Platform Gateway , which seemed like an interesting and affordable option for a LoRaWAN…
When I mindlessly unplugged a USB audio card from my laptop while viewing its mixer settings in AlsaMixer, I was surprised by the following poetic error message: [ 1 ] These lines are actually the final verse of Lewis Carroll's whimsical poem The Hunting of the Snark : In the midst of the word he was trying to say, In the midst of his laughter and glee, He had softly and suddenly vanished away—…
Last week my new book has been published, Building Wireless Sensor Networks with OpenThread: Developing CoAP Applications for Thread Networks with Zephyr . Thread is a protocol for building efficient, secure and scalable wireless mesh networks for the Internet of Things (IoT), based on IPv6. OpenThread is an open-source implementation of the Thread protocol, originally developed by Google. It…
When working with I²C devices in the Zephyr real-time operating system, a lot is configured behind the scenes using a devicetree , a hierarchical data structure that describes available hardware. It took me some time to figure out how to change the default I²C pins (SDA and SCL). Here are my notes. I tried this with Zephyr's BME280 Humidity and Pressure Sensor sample . My goal was to flash the…
ESPHome is an open-source program that allows you to create your own home-automation devices using an ESP32, ESP8266, or RP2040 microcontroller board that you connect to LEDs, sensors, or switches. What sets ESPHome apart from other solutions like Arduino or MicroPython is that you don't need to program. Instead, you define your components and their respective pin connections in a YAML…
The title of this article may seem trivial, but it represents the conclusion I reached after being astonished for a long time while debugging some issues related to decoding Bluetooth Low Energy (BLE) advertisements that rely on the device name. Like many solutions, the actual solution seemed simple in hindsight. For Theengs Decoder I wrote decoders for two of Shelly's devices: the ShellyBLU…
Zephyr , an open-source real-time operating system (RTOS) launched by the Linux Foundation in 2016, has made lots of progress seven years after its announcement, and it now has an active ecosystem surrounding it. It's used in Internet of Things (IoT) sensors, Bluetooth trackers, heart rate monitors, smartwatches, and embedded controllers. A few months ago I wrote an overview article for LWN.net…
The Python REPL (read-eval-print loop), which is Python's interactive interpreter, is a great way for quickly testing simple Python commands. I use it quite often as a powerful command-line calculator, but also for exploring new Python libraries. Many interesting Python libraries use asynchronous I/O with asyncio . This means that, instead of just calling a function directly, you have to await a…
Last year, I began using Textual to develop HumBLE Explorer , a cross-platform, command-line and human-friendly Bluetooth Low Energy scanner. Textual caught my attention because it promised to be a rapid application development framework for Python terminal user interface (TUI) applications. Thanks to Textual, I was able to create an application like this, including scroll bars, switches and…
For Theengs Gateway we regularly got bug reports that were difficult to debug, as they depend on the operating system, Python version, application configuration, and Bluetooth adapter. After some back and forth we got an idea of the user's environment and started to identify the issue (or not). Then I discovered that Textual has a convenient solution for this: a diagnose command that prints…