All blogs / Embedded / microcontrollers
lupyuen
IoT Techie and Educator
Embedded / microcontrollersOS / kernelDevOps / SRE / infrastructure
- Posts
- 273 from 27 Jun 2007 to 21 Apr 2026
- Posting
- monthly (19 in the last year)
- Kind
- personal blog
- Feed
- https://lupyuen.org/rss.xml
- Also at
- https://lupyuen.codeberg.page/
- Also at
- https://lupyuen.github.io/
2026 18
- Apache NuttX RTOS: CI Build Retry works OK yay!
- Apache NuttX RTOS: More Testing of Retry for CI Builds
- Apache NuttX RTOS: Build Monitor
- Apache NuttX RTOS: Parsing the GitHub Build Logs
- Apache NuttX RTOS: Building the PR Monitor + Most Expensive Apps PR
- Apache NuttX RTOS: PR Monitoring + Third Most Expensive PR
- Apache NuttX RTOS: NTFC Download Failure + Second Most Expensive PR
- Apache NuttX RTOS: Testing of Retry for CI Builds
- Apache NuttX RTOS: Building PRs in Our Own Repo
- Apache NuttX RTOS: Analysing the Most Expensive PR
- Apache NuttX RTOS: Cost of NuttX PRs vs NuttX Apps
- Apache NuttX RTOS: Most Expensive PR
- Apache NuttX RTOS: Dumping the GitHub Jobs
- Apache NuttX RTOS: Too Many GitHub Runners
- Apache NuttX RTOS: GitHub Runners and Mystery Spikes
- Is Apache NuttX RTOS really OK? Daily Routine for NuttX Monitoring
- GitHub Actions pull_request_target vs Apache NuttX RTOS
- Grafana Dashboard on Google Cloud VM for Apache NuttX RTOS
2025 13
- Uncle Nerd Runs A Marathon
- Creating the Unicorn Emulator for Avaota-A1 SBC (Apache NuttX RTOS)
- Inside Arm64 MMU: Unicorn Emulator vs Apache NuttX RTOS
- Porting Apache NuttX RTOS to Avaota-A1 SBC (Allwinner A527 SoC)
- PR Test Bot for PinePhone (Apache NuttX RTOS)
- StarPro64 EIC7700X RISC-V SBC: Maybe LLM on NPU on NuttX?
- QEMU Test Bot for Pull Requests: Beware of Semihosting Breakout (Apache NuttX RTOS)
- Test Bot for Pull Requests ... Tested on Real Hardware (Apache NuttX RTOS / Oz64 SG2000 RISC-V SBC)
- Auto-Rewind for Daily Test (Apache NuttX RTOS)
- Rust Standard Library on Apache NuttX RTOS
- Fixing a uname bug (Apache NuttX RTOS)
- Forgejo Git Forge for Apache NuttX RTOS (Experimental)
- Git Bisecting a Bug (Apache NuttX RTOS)
2024 26
- Mastodon Server for Continuous Integration (Apache NuttX RTOS)
- Buy a Coffee for Lup Yuen Lee
- Failing a Continuous Integration Test for Apache NuttX RTOS (QEMU RISC-V)
- Rewinding a Build for Apache NuttX RTOS (Docker)
- macOS Build Farm for Apache NuttX RTOS (Apple Silicon)
- Continuous Integration Dashboard for Apache NuttX RTOS (Prometheus and Grafana)
- Optimising the Continuous Integration for Apache NuttX RTOS (GitHub Actions)
- Your very own Build Farm for Apache NuttX RTOS
- LLM Bot that reviews Pull Requests for Apache NuttX RTOS
- Continuous Integration for Apache NuttX RTOS
- Early Days of Rust Apps on Apache NuttX RTOS
- RISC-V Emulator for Sophgo SG2000 SoC (Pine64 Oz64 / Milk-V Duo S)
- Daily Automated Testing for Milk-V Duo S RISC-V SBC (IKEA TRETAKT / Apache NuttX RTOS)
- Apache NuttX RTOS on Sophgo SG2000 RISC-V SoC (Milk-V Duo S / Oz64 SBC)
- Rust Apps on Ox64 BL808 RISC-V SBC and Apache NuttX RTOS
- Rust Custom Target for QEMU RISC-V on Apache NuttX RTOS
- Rust Apps on Apache NuttX RTOS and QEMU RISC-V
- Too many Embedded Logs? PureScript might help (Ox64 BL808 SBC / Apache NuttX RTOS)
- (Homage to MakeCode) Coding Ox64 BL808 SBC the Drag-n-Drop Way
- QuickJS JavaScript Engine on a Real-Time Operating System (Apache NuttX RTOS)
- Zig runs ROM FS Filesystem in the Web Browser (thanks to Apache NuttX RTOS)
- TCC RISC-V Compiler runs in the Web Browser (thanks to Zig Compiler)
- Automated Testing with Ox64 BL808 Emulator (Apache NuttX RTOS)
- Emulate Ox64 BL808 in the Web Browser: Experiments with TinyEMU RISC-V Emulator and Apache NuttX RTOS
- Apache NuttX RTOS in a Web Browser? Adventures with TinyEMU and VirtIO
- Nim on a Real-Time Operating System: Apache NuttX RTOS + Ox64 BL808 SBC
2023 50
- $8 RISC-V SBC on a Real-Time Operating System: Ox64 + NuttX
- Fixed the UART Interrupt and Platform-Level Interrupt Controller (Ox64 BL808)
- RISC-V Ox64 BL808 SBC: UART Interrupt and Platform-Level Interrupt Controller (PLIC)
- RISC-V Ox64 BL808 SBC: NuttX Apps and Initial RAM Disk
- RISC-V Ox64 BL808 SBC: Sv39 Memory Management Unit
- RISC-V Ox64 BL808 SBC: Starting Apache NuttX Real-Time Operating System
- Ox64 BL808 RISC-V SBC: Booting Linux and (maybe) Apache NuttX RTOS
- Star64 JH7110 RISC-V SBC: Experiments with OpenSBI (Supervisor Binary Interface)
- Strange Workaround for TFTP Timeout in U-Boot Bootloader (Star64 JH7110 RISC-V SBC)
- (Slides) Apache NuttX RTOS for PINE64 PinePhone
- (Video) Apache NuttX RTOS for PINE64 PinePhone
- (Slides) PinePhone Touchscreen on NuttX: Handling MIPI DSI, Display Engine and I2C Touch Input
- (Video) PinePhone Touchscreen on NuttX: Handling MIPI DSI, Display Engine and I2C Touch Input
- (Slides) LVGL in WebAssembly: Building NuttX Touchscreen Apps with Zig and testing them in the Web Browser
- (Video) LVGL in WebAssembly: Building NuttX Touchscreen Apps with Zig and testing them in the Web Browser
- RISC-V Star64 JH7110: Power Up the Display Controller with U-Boot Bootloader
- RISC-V Star64 JH7110: Inside the Display Controller
- (Slides) What's inside a Smartphone? Exploring the internals with Apache NuttX Real-Time Operating System
- (Video) What's inside a Smartphone? Exploring the internals with Apache NuttX Real-Time Operating System
- RTOS on a RISC-V SBC: Star64 JH7110 + Apache NuttX
- Star64 JH7110 + NuttX RTOS: Creating the First Release for the RISC-V SBC
- Star64 JH7110 + NuttX RTOS: RISC-V PLIC Interrupts and Serial I/O
- Star64 JH7110 + NuttX RTOS: RISC-V Semihosting and Initial RAM Disk
- Star64 JH7110 + NuttX RTOS: RISC-V Privilege Levels and UART Registers
- Star64 JH7110 RISC-V SBC: Boot from Network with U-Boot and TFTP
- Apache NuttX RTOS on RISC-V: Star64 JH7110 SBC
- Booting RISC-V Linux on Star64 JH7110 SBC
- Inspecting the RISC-V Linux Images for Star64 SBC
- 64-bit RISC-V with Apache NuttX Real-Time Operating System
- NuttX RTOS for PinePhone: The First Year
- (Slides) TinyEMU RISC-V Emulator for Apache NuttX RTOS
- (Video) TinyEMU RISC-V Emulator for Apache NuttX RTOS
- (Video) Adventures of Ox64 BL808 RISC-V SBC with Apache NuttX RTOS
- (Video) Analysis of Real-Time Logs for Apache NuttX RTOS with PureScript
- NuttX RTOS for PinePhone: Feature Phone UI in LVGL, Zig and WebAssembly
- (Possibly) LVGL in WebAssembly with Zig Compiler
- Recipe for Wholemeal Sourdough with Bread Machine
- Inside a Smartphone Accelerometer: PinePhone with NuttX RTOS
- NuttX RTOS for PinePhone: Phone Calls and Text Messages
- NuttX RTOS for PinePhone: 4G LTE Modem
- NuttX RTOS for PinePhone: Simpler USB with EHCI (Enhanced Host Controller Interface)
- (Clickable) Call Graph for Apache NuttX Real-Time Operating System
- (Possibly) Emulate PinePhone with Unicorn Emulator
- NuttX RTOS for PinePhone: Exploring USB
- NuttX RTOS for PinePhone: LVGL Terminal for NSH Shell
- Apache NuttX RTOS trips ChatGPT
- NuttX RTOS for PinePhone: Boot to LVGL
- NuttX RTOS for PinePhone: Touch Panel
- NuttX RTOS for PinePhone: What is it?
- NuttX RTOS for PinePhone: Framebuffer
2022 33
- NuttX RTOS for PinePhone: LCD Panel
- NuttX RTOS for PinePhone: Display Engine
- NuttX RTOS for PinePhone: MIPI Display Serial Interface
- Preparing a Pull Request for Apache NuttX RTOS
- NuttX RTOS for PinePhone: Render Graphics in Zig
- Rendering PinePhone's Display (DE and TCON0)
- NuttX RTOS for PinePhone: Display Driver in Zig
- Understanding PinePhone's Display (MIPI DSI)
- NuttX RTOS for PinePhone: Blinking the LEDs
- NuttX RTOS for PinePhone: UART Driver
- NuttX RTOS for PinePhone: Fixing the Interrupts
- PinePhone boots Apache NuttX RTOS
- Apache NuttX RTOS on Arm Cortex-A53: How it might run on PinePhone
- Visual Programming with Zig and NuttX Sensors
- Zig Visual Programming with Blockly
- Read NuttX Sensor Data with Zig
- Build an LVGL Touchscreen App with Zig
- Build a PinePhone App with Zig and zgt
- Build an IoT App with Zig and LoRaWAN
- Zig on RISC-V BL602: Quick Peek with Apache NuttX RTOS
- (Mostly) Automated Testing of Apache NuttX RTOS on PineDio Stack BL604 RISC-V Board
- NuttX GPIO Expander for PineDio Stack BL604
- NuttX Touch Panel Driver for PineDio Stack BL604
- PineDio Stack BL604 runs Apache NuttX RTOS
- ST7789 Display with LVGL Graphics on Apache NuttX RTOS
- Rust talks I2C on Apache NuttX RTOS
- Apache NuttX Driver for BME280 Sensor: Ported from Zephyr OS
- Connect IKEA Air Quality Sensor to Apache NuttX OS
- BL602 EFlash Loader: Reverse Engineered with Ghidra
- Auto Flash and Test NuttX on RISC-V BL602
- Rust on Apache NuttX OS
- Encode Sensor Data with CBOR on Apache NuttX OS
- LoRaWAN on Apache NuttX OS
2021 37
- LoRa SX1262 on Apache NuttX OS
- SPI on Apache NuttX OS
- Apache NuttX OS on RISC-V BL602 and BL604
- PineDio LoRa Gateway: Testing The Prototype
- Build a Linux Driver for PineDio LoRa SX1262 USB Adapter
- Monitor IoT Devices in The Things Network with Prometheus and Grafana
- CBOR Payload Formatter for The Things Network
- Internal Temperature Sensor on BL602
- IoT Digital Twin with Roblox and The Things Network
- Encode Sensor Data with CBOR on BL602
- Grafana Data Source for The Things Network
- The Things Network on PineDio Stack BL604 RISC-V Board
- LoRaWAN on PineDio Stack BL604 RISC-V Board
- Rust on RISC-V BL602: Rhai Scripting
- PineDio Stack BL604 RISC-V Board: Testing The Prototype
- Rust on RISC-V BL602: Simulated with WebAssembly
- Rust on RISC-V BL602: Is It Sunny?
- RISC-V BL706 Audio Video Board
- Reverse Engineering WiFi on RISC-V BL602
- Machine Learning on RISC-V BL602 with TensorFlow Lite
- BL602 Bootloader
- Simulate RISC-V BL602 with WebAssembly, uLisp and Blockly
- uLisp and Blockly on PineCone BL602 RISC-V Board
- PineCone BL602 Talks LoRaWAN
- Build a LoRaWAN Network with RAKwireless WisGate Developer Gateway
- Run Rust RISC-V Firmware with BL602 IoT SDK
- PineCone BL602 RISC-V Board Receives LoRa Packets
- RAKwireless WisBlock talks LoRa with PineCone BL602 RISC-V Board
- Connect PineCone BL602 to LoRa Transceiver
- The RISC-V BL602 Book
- PineCone BL602 Talks UART to Grove E-Ink Display
- PineCone BL602 Blasting Pixels to ST7789 Display with LVGL Library
- PineCone BL602 talks SPI too!
- PineCone BL602 talks to I2C Sensors
- Mynewt GPIO ported to PineCone BL602 RISC-V Board
- Control PineCone BL602 RGB LED with GPIO and PWM
- Flashing Firmware to PineCone BL602
2020 33
- Porting Mynewt to PineCone BL602
- Better Open Source Advocate
- Debug Rust on PineCone BL602 with VSCode and GDB
- Connect PineCone BL602 to OpenOCD
- Quick Peek of PineCone BL602 RISC-V Evaluation Board
- (UNFINISHED) Draw your own PineTime Watch Face... From WebAssembly to Embedded Rust
- Create Your Own PineTime Watch Face in Rust... And Publish on crates.io
- Bluetooth Time Sync and LVGL on PineTime Mynewt
- Porting PineTime Watch Face from C to Rust On RIOT with LVGL
- Safer, Simpler Embedded Programs with Rust on RIOT (Presentation)
- Safer, Simpler Embedded Programs with Rust on RIOT (Video)
- Preview PineTime Watch Faces in your Web Browser with WebAssembly
- Build PineTime Firmware in the Cloud with GitHub Actions
- Wayland and LVGL on PinePhone with Ubuntu Touch
- (UNFINISHED) Auto Convert Go to Dart with an Abstract Syntax Tree
- Flutter State Management with Bloc for PineTime Companion App
- PineTime doesn't run Linux... But that's OK!
- Your First GTK App with Go and VSCodium
- Convert Go to Flutter and Dart for PineTime Companion App
- Your First Bluetooth Low Energy App with Flutter
- Porting MicroPython and wasp-os to Mynewt on PineTime Smart Watch (nRF52)
- Wireless Firmware Update In Action on PineTime Smart Watch (nRF52)
- MCUBoot Bootloader for PineTime Smart Watch (nRF52)
- Configure Mynewt for SPI Flash on PineTime Smart Watch (nRF52)
- Firmware Update over Bluetooth Low Energy on PineTime Smart Watch
- CHIP-8 Game Emulator in Rust for PineTime Smart Watch
- Visual Rust for PineTime Smart Watch
- My First Week As Embedded FOSS Advocate
- Debug RIOT-OS on PineTime with VSCode
- If you’re in the East, please consider Rust!
- Debug Rust+Mynewt Firmware for PineTime on Raspberry Pi
- OpenOCD on Raspberry Pi: Better with SWD on SPI
- Build and Flash Rust+Mynewt Firmware for PineTime Smart Watch
2019 32
- Optimising PineTime’s Display Driver with Rust and Mynewt
- Porting [druid] Rust Widgets to PineTime Smart Watch
- My 5-Year IoT Mission
- Hey GD32 VF103 on RISC-V: I surrender… For now
- Building a Rust Driver for PineTime’s Touch Controller
- Sneak Peek of PineTime Smart Watch… And why it’s perfect for teaching IoT
- Porting Apache Mynewt OS to GigaDevice GD32 VF103 on RISC-V
- Bluetooth Mesh with nRF52 and Apache Mynewt
- Coding nRF52 with Rust and Apache Mynewt on Visual Studio Code
- Build an NB-IoT GPS Tracker on STM32 L476 with Apache Mynewt and Embedded Rust
- Quick Peek of Huawei LiteOS with NB-IoT on Ghostyu NB-EK-L476 Developer Kit (STM32L476RCT6)
- Low Power NB-IoT on STM32 Blue Pill with Apache Mynewt and Embedded Rust
- Visual Embedded Rust Programming with Visual Studio Code
- Advanced Topics for Visual Embedded Rust Programming
- Rust Rocks NB-IoT! STM32 Blue Pill with Quectel BC95-G on Apache Mynewt
- Connect STM32 Blue Pill to NB-IoT with Quectel BC95-G and Apache Mynewt
- Get Started with NB-IoT and Quectel modules
- Visual Programming with Embedded Rust? Yes we can with Apache Mynewt and Google Blockly!
- Safer, Simpler Embedded Rust with Apache Mynewt on STM32 Blue Pill
- Hosting Embedded Rust apps on Apache Mynewt with STM32 Blue Pill
- Build Your IoT Sensor Network — STM32 Blue Pill + nRF24L01 + ESP8266 + Apache Mynewt + thethings.io
- Super Blue Pill — Like STM32 Blue Pill, But Better!
- Connect STM32 Blue Pill to ESP8266 with Apache Mynewt
- Create your IoT gadget with Apache Mynewt and STM32 Blue Pill
- Push AWS IoT sensor data to Redshift with Kinesis Firehose
- Transform and Import a JSON file into Amazon Redshift with AWS Glue
- Connecting AWS Lambda Node.JS to Redshift or PostgreSQL? Try AWS Lambda Layers!
- STM32 Blue Pill — Bootloading the WebUSB Bootloader
- STM32 Blue Pill — Dissecting the WebUSB Bootloader for MakeCode
- STM32 Blue Pill — Unit Testing with Qemu Blue Pill Emulator
- STM32 Blue Pill – Shrink your math libraries with Qfplib
- STM32 Blue Pill — Analyse and Optimise Your RAM and ROM
2018 23
- STM32 Blue Pill USB Bootloader — How I fixed the USB Storage, Serial, DFU and WebUSB interfaces
- STM32 Blue Pill Visual Programming with MakeCode, CODAL and libopencm3
- Sigfox Teacher Answers Your Questions
- 以 thethings.iO 來將 BBC micro:bit 感測器圖形化
- Visualising BBC micro:bit sensors with thethings.iO
- 連接 BBC micro:bit 與 Sigfox 物聯網
- Connect BBC micro:bit to Sigfox
- 連接 STM32F103C8T6 Blue Pill 開發板與 Sigfox 物聯網
- Connect STM32 Blue Pill to Sigfox
- Watch STM32 Blue Pill Juggle Two SPI Sensors With DMA
- Program Your First FPGA With GOWIN GW1N-4
- Juggling STM32 Blue Pill For Arduino Jugglers
- Juggling Sigfox Downlink And Arduino Sensors With cocoOS
- Juggling Arduino Sensors With cocoOS
- Why use FPGA for IoT? Here’s what I think…
- Coding the STM32 Blue Pill with Rust and Visual Studio Code
- Making my first ever PCB with Seeed Fusion PCB assembly service
- Running Rust and FreeRTOS on the PADI IoT Stamp
- First Impressions of Alibaba Cloud (Aliyun)
- Multitasking on the Arduino with a Finite State Machine – And why you’ll need it for Sigfox Downlink
- Realtime sensor data processing with thethings.io and Amazon Web Services Kinesis
- I Teach IoT. Here’s what you’ll learn
- Developing cost-effective, energy efficient IoT solutions for outdoor as well as indoor applications