Hands-on IoT advisor and educator. Passionate about helping everyone create IoT products that will make a difference.

Skills

Internet of Things (IoT)

Master
  • LoRaWAN
  • NB-IoT
  • Sigfox
  • Apache NuttX
  • Apache Mynewt
  • Embedded Zig
  • Embedded Rust
  • Embedded C
  • BL602
  • nRF52
  • STM32
  • AWS IoT
  • Google Cloud IoT

Cloud Computing

Master
  • AWS
  • Google Cloud
  • Azure
  • S3
  • SageMaker
  • RDS
  • DynamoDB
  • Lambda
  • API Gateway
  • Cloud Functions
  • AppEngine
  • TensorFlow
  • BigQuery
  • Node.js
  • Go

Mobile Application Development

Master
  • iOS
  • Android
  • Swift
  • React Native
  • Xcode
  • Responsive Mobile Web
  • Bootstrap

Work Experience (6)

Apache NuttX PMC (Project Management Committee)
Apache NuttX RTOS
September 2022 - Current
https://nuttx.apache.org/

Promoting IoT Education with Apache NuttX RTOS (Real-Time Operating System)

  • Ported Apache NuttX RTOS to PINE64 PinePhone (Allwinner A64 SoC / Arm Cortex-A53), PINE64 Star64 64-bit RISC-V Single-Board Computer (StarFive JH7110 SoC) and PINE64 Ox64 64-bit RISC-V Single-Board Computer (BouffaloLab BL808 SoC)

Adjunct Lecturer
Temasek Polytechnic
April 2015 - February 2019
(SG) Singapore http://www.tp.edu.sg

Responsible for teaching and mentoring the next generation of professionals in IoT technologies. He taught the following courses:

  • IoT Application Development: He prepared and presented lessons and labs for training working adults with IoT programming skills, based on AWS IoT, Sigfox, Ubidots and Arduino. He created the training platform with various AWS services: AWS IoT, Lambda, API Gateway, S3, DynamoDB, SNS, Elasticsearch, Kibana. His students included IT professionals from Agility, IBM, SAP, Ericsson, Canon and ITE.

  • IoT Project: He supervised the students in creating innovative IoT products (based on AWS IoT and Sigfox) that solve real-world problems like dementia patient tracking, elderly home monitoring, food safety, campus security, AED management, realtime asset tracking.

Chief Technology Officer
UnaBiz
August 2016 - April 2018
(SG) Singapore https://unabiz.com

As former CTO of UnaBiz, he was responsible for creating new tools and systems to help people get onboard with Sigfox the quickest way possible.

  • (1) UnaLocation - Enhanced Sigfox Geolocation with Machine Learning; (2) UnaRadar - Sigfox Network Finder mobile web app; (3) UnaMap - Sigfox Coverage Web Map; (4) UnaShield - Sigfox Shield for Arduino; (5) UnaBell - Smart Button on Sigfox; (6) sigfox-gcloud - Open Source Sigfox Server for Google Cloud; (7) sigfox-aws - Open Source Sigfox Server for Amazon Web Services

Principal Consultant
Konica Minolta Business Innovation Centre
November 2014 - September 2016
(SG) Singapore https://bic.konicaminolta.asia

He heads the software development/engineering team that architects, develops and executes proof-of-concept (POC) projects for incubating new businesses for Konica Minolta. He was also consulted for technical due diligence in investment projects and acquisitions.

  • (1) Straight-Through Food & Beverage Ordering System with iOS and Android mobile apps and Kitchen Display System; (2) Bluetooth Beacon Location Analytics for Android and iOS

Chief Technology Officer
SingTel L!feLabs
June 2009 - November 2014
(SG) Singapore https://singtel.com

Reports directly to CEO Group Digital L!fe, Mr Allen Lew. Responsible for scanning of innovative ICT technologies worldwide and executing proof-of-concept (POC) projects for the SingTel Group. He was also consulted for technical due diligence in SingTel Innov8 investment projects and SingTel Group Strategy acquisitions.

  • (1) Internet of Things (IoT); (2) Indoor Positioning; (3) Smart Retail; (4) Social Recommendation based on Facebook profiling; (5) Speech Recognition for Singapore English; (6) Image Recognition for Retail; (7) Motion Gesture User Experience; (8) Augmented Reality; (9) Cloud Gaming; (10) Virtual Reality; (11) Video Streaming and Distribution; (12) Home Automation

Principal Consultant
NCS Pte Ltd
September 1994 - September 2012
(SG) Singapore https://www.ncs.com.sg

Lead Enterprise Architect for Microsoft .NET technologies in Singapore's largest system integrator

  • (1) IRAS Inland Revenue Integrated System; (2) Singapore Health Services Outpatient Administrative System; (3) Digital library systems for National Library Board, Singapore Polytechnic, Temasek Polytechnic, Singapore Airlines Engineering, SASCO; (4) Web portals for IDA MyeCitizen Portal, MINDEF NS Portal, MediaCorp MOBTV Portal; (5) YW8, Singapore’s first mobile payment system by NETS, DBS, SingTel, M1, StarHub

Education (2)

Master of Science,
Computer Science
University of Illinois at Urbana-Champaign
1991 - 1992
(US) USA

Research Assistant for CHOICES Object-Oriented Operating System

Bachelor of Science,
Computer Science
University of Toronto - University College
1988 - 1990
(CA) Canada

Publications

29 September 2024

We’re experimenting with an LLM Bot (Large Language Model) that will review Pull Requests for Apache NuttX RTOS. This article explains how we created the Bot in One Week... By sheer accident!

11 September 2024

This article explains how Apache NuttX RTOS is running Continuous Integration with GitHub Actions. Every NuttX Pull Request will trigger 1,594 NuttX Builds!

19 August 2024

My student Rushabh Gala has just completed his project for Google Summer of Code, on creating Safer Rust Apps for Apache NuttX RTOS. In this article we walk through Rushabh’s contributions, and understand how we’re evolving Rust Apps for NuttX.

7 July 2024

Earlier this year we made a RISC-V Emulator for Ox64 BL808 SBC, thanks to our customised TinyEMU RISC-V Emulator. (Not the small flightless bird) Now that NuttX supports Sophgo SG2000 SoC: Let's create a similar emulator for Pine64 Oz64 SBC and Milk-V Duo S!

23 June 2024

Last week we upstreamed Milk-V Duo S SBC to Apache NuttX RTOS. (Based on Sophgo SG2000 RISC-V SoC) But NuttX Mainline changes every day. Will Milk-V Duo S suffer “Software Bit Rot”? And fail to boot NuttX someday? Let’s do Daily Automated Testing for NuttX on a Milk-V Duo S SBC, controlled by an IKEA Smart Power Plug with Home Assistant API.

(Slides) TinyEMU RISC-V Emulator for Apache NuttX RTOS in NuttX International Workshop 2024
13 June 2023

What if we could boot and test Apache NuttX RTOS inside a Web Browser? This presentation explains how we created a NuttX Emulator in WebAssembly, based on TinyEMU RISC-V Emulator.

(Video) TinyEMU RISC-V Emulator for Apache NuttX RTOS in NuttX International Workshop 2024
13 June 2023

What if we could boot and test Apache NuttX RTOS inside a Web Browser? This presentation explains how we created a NuttX Emulator in WebAssembly, based on TinyEMU RISC-V Emulator.

13 June 2023

We ported Apache NuttX RTOS to PINE64’s Ox64 BL808 64-bit Single-Board Computer. And we created an Emulator for Ox64 SBC that runs in the Web Browser, thanks to TinyEMU RISC-V Emulator. Today we run Daily Automated Testing of NuttX on the Ox64 Emulator. In this presentation we explain how we used the Ox64 Emulator in our experiments with WebAssembly and NuttX: (1) Testing the TCC RISC-V Compiler in WebAssembly (2) Porting the QuickJS JavaScript Engine to NuttX (3) Creating a Drag-n-Drop App Builder for NuttX

13 June 2023

We ported Apache NuttX RTOS to PINE64’s Ox64 BL808 64-bit Single-Board Computer. And we created an Emulator for Ox64 SBC that runs in the Web Browser, thanks to TinyEMU RISC-V Emulator. Today we run Daily Automated Testing of NuttX on the Ox64 Emulator. In this presentation we explain how we used the Ox64 Emulator in our experiments with WebAssembly and NuttX: (1) Testing the TCC RISC-V Compiler in WebAssembly (2) Porting the QuickJS JavaScript Engine to NuttX (3) Creating a Drag-n-Drop App Builder for NuttX

13 June 2023

Today we can get Real-Time NuttX Logs from our RISC-V Devices: Ox64 SBC (Web Serial API) and Ox64 Emulator (Term.js). What if we could analyse the RISC-V Logs in Real-Time? And show the results in the Web Browser? Let’s do it with PureScript, the Functional Language that compiles to JavaScript. We’ll also support Online Scripting of PureScript for Log Parsing. Can we enhance the NuttX Developer Experience with Functional Programming Tools like PureScript? Or newer hardware like PINE64 Ox64 SBC and Sophgo SG2000 / Milk-V Duo S? Let’s chat about this.

13 June 2023

Today we can get Real-Time NuttX Logs from our RISC-V Devices: Ox64 SBC (Web Serial API) and Ox64 Emulator (Term.js). What if we could analyse the RISC-V Logs in Real-Time? And show the results in the Web Browser? Let’s do it with PureScript, the Functional Language that compiles to JavaScript. We’ll also support Online Scripting of PureScript for Log Parsing. Can we enhance the NuttX Developer Experience with Functional Programming Tools like PureScript? Or newer hardware like PINE64 Ox64 SBC and Sophgo SG2000 / Milk-V Duo S? Let’s chat about this.

19 May 2024

Soon we'll see many new 64-bit RISC-V SBCs based on the Sophgo SG2000 RISC-V SoC. Will they work with Apache NuttX RTOS? Let's find out!

5 May 2024

Will Rust Apps run on a 64-bit RISC-V SBC? Like Ox64 BL808 SBC? Let's find out with Apache NuttX RTOS!

21 April 2024

Our Rust App compiles for Software Floating-Point, but Apache NuttX RTOS expects Hardware Floating-Point... Let's fix this with a Rust Custom Target for QEMU RISC-V

7 April 2024

Here's how we run Rust Apps on Apache NuttX RTOS and QEMU RISC-V Emulator.

3 March 2024

Troubleshooting Crash Dumps for Apache NuttX RTOS will become a little less painful... Thanks to our new NuttX Log Parser! This is how we created with PureScript, a Real-Time Parser and Explainer for RISC-V Exceptions and Stack Dumps.

25 February 2024

Remember Makecode? BBC micro:bit and its Drag-n-Drop App Builder? Let's give MakeCode a wholesome wholesale makeover... With Blockly, QuickJS JavaScript Engine, Apache NuttX RTOS and Ox64 BL808 64-bit RISC-V SBC

18 February 2024

Can we run QuickJS JavaScript Engine on Apache NuttX RTOS? And Blink the LED on Ox64 BL808 RISC-V SBC... In 4 lines of JavaScript? Let’s do it!

11 February 2024

We solve a hefty headache in our port of TCC Compiler to WebAssembly: Missing C Header Files... Thanks to the ROM FS Filesystem and the ROM FS Driver from Apache NuttX RTOS

4 February 2024

Today we're running Apache NuttX RTOS inside a Web Browser. What if we could compile and test NuttX Apps in the Web Browser? Let's explore with TCC 64-bit RISC-V Compiler, compiled to WebAssembly with Zig Compiler.

28 January 2024

Every day we're auto-building Apache NuttX RTOS for Ox64 BL808 SBC... Can we test NuttX on Ox64 Emulator automatically after building? Let's find out!

21 January 2024

Let's create a barebones Ox64 BL808 Emulator that runs in the Web Browser... By tweaking TinyEMU RISC-V Emulator and booting Apache NuttX RTOS without any modification

14 January 2024

Here's how we boot and run Apache NuttX RTOS in the Web Browser... Thanks to TinyEMU RISC-V Emulator, VirtIO Virtual Devices and OpenAMP Library

1 January 2024

Let's blink an LED on Pine64 Ox64 BL808 64-bit RISC-V Single-Board Computer... With Nim Programming Language and Apache NuttX Real-Time Operating System

17 December 2023

Bare Metal Experiments with Apache NuttX RTOS (Real-Time Operating System) on the affordable Pine64 Ox64 BL808 64-bit RISC-V SBC

10 December 2023

Weak Ordering in the Ox64 BL808 Memory Management Unit (T-Head C906)... Causes problems with UART Interrupts and the Platform-Level Interrupt Controller

3 December 2023

We dive into the Platform-Level Interrupt Controller (PLIC) for the tiny adorable Pine64 Ox64 BL808 64-bit Single-Board Computer... Using Apache NuttX Real-Time Operating System to explain the inner workings of PLIC

26 November 2023

(1) What's inside an Application for Apache NuttX RTOS (2) How it calls the NuttX Kernel (3) How NuttX Apps are bundled into the Initial RAM Disk for Pine64 Ox64 BL808 RISC-V SBC

19 November 2023

Let's boot Apache NuttX RTOS on Pine64 Ox64 64-bit RISC-V SBC... And figure out how the Sv39 Memory Management Unit works

12 November 2023

Let's boot a tiny bit of Apache NuttX Real-Time Operating System... On Pine64 Ox64 BL808 RISC-V SBC

5 November 2023

Let's boot Linux on Pine64 Ox64 BL808 RISC-V SBC... As we figure out how Apache NuttX RTOS might run on Ox64

29 October 2023

Let's boot Apache NuttX RTOS on the Star64 JH7110 RISC-V SBC (VisionFive5 too)... And experiment with the OpenSBI Supervisor Binary Interface

6 October 2023

Here's how we fixed TFTP Timeouts in the Star64 JH7110 U-Boot Bootloader... By sending every TFTP Data Packet twice

(Slides) Apache NuttX RTOS for PINE64 PinePhone in NuttX International Workshop 2023
29 September 2023

Smartphones are incredibly complex gadgets. What if we could learn the internals of smartphones... By booting Apache NuttX RTOS on our phone? Over the past year, we have ported NuttX to PINE64 PinePhone as an Educational Experiment. Today we can run NuttX Touchscreen Apps on PinePhone, based on Allwinner A64 SoC with Arm64 CPUs. NuttX on PinePhone will soon support Phone Calls and Text Messages on the 4G LTE Network. We hope NuttX will become a valuable tool for teaching the inner workings of modern smartphones.

(Video) Apache NuttX RTOS for PINE64 PinePhone in NuttX International Workshop 2023
29 September 2023

Smartphones are incredibly complex gadgets. What if we could learn the internals of smartphones... By booting Apache NuttX RTOS on our phone? Over the past year, we have ported NuttX to PINE64 PinePhone as an Educational Experiment. Today we can run NuttX Touchscreen Apps on PinePhone, based on Allwinner A64 SoC with Arm64 CPUs. NuttX on PinePhone will soon support Phone Calls and Text Messages on the 4G LTE Network. We hope NuttX will become a valuable tool for teaching the inner workings of modern smartphones.

29 September 2023

This presentation explains how we built the NuttX Drivers to support Touchscreen Apps on PINE64 PinePhone: (1) MIPI DSI on Allwinner A64 SoC (2) Allwinner Display Engine (3) Goodix I2C Touch Panel (4) Integration with LVGL Graphics Library. To derisk the development, we prototyped the NuttX Drivers in the Zig Programming Language, before rewriting to C.

29 September 2023

This presentation explains how we built the NuttX Drivers to support Touchscreen Apps on PINE64 PinePhone: (1) MIPI DSI on Allwinner A64 SoC (2) Allwinner Display Engine (3) Goodix I2C Touch Panel (4) Integration with LVGL Graphics Library. To derisk the development, we prototyped the NuttX Drivers in the Zig Programming Language, before rewriting to C.

29 September 2023

What if we could prototype and test Touchscreen Apps in the Web Browser, before running on a real device? In this presentation we explain how we compiled the LVGL Graphics Library to WebAssembly with Zig Compiler. We created a NuttX App in the Zig Programming Language that runs in the Web Browser, calling the LVGL Library in WebAssembly. We hope that this will someday enable NuttX Apps to be created and tested easily in the Web Browser.

29 September 2023

What if we could prototype and test Touchscreen Apps in the Web Browser, before running on a real device? In this presentation we explain how we compiled the LVGL Graphics Library to WebAssembly with Zig Compiler. We created a NuttX App in the Zig Programming Language that runs in the Web Browser, calling the LVGL Library in WebAssembly. We hope that this will someday enable NuttX Apps to be created and tested easily in the Web Browser.

2 September 2023

Let's power up the DC8200 Display Controller inside Star64 JH7110 RISC-V Single-Board Computer... By running simple commands in the U-Boot Bootloader

23 August 2023

Let's take a walk inside the Display Controller for Pine64's Star64 JH7110 RISC-V SBC... And find out how we'll create the Display Driver for Apache NuttX RTOS

19 August 2023

Smartphones are incredibly complex gadgets. What if we could learn the internals of smartphones... By booting Apache NuttX RTOS (Real-Time Operating System) on our phone? Over the past year, we have written a series of 24 articles explaining the inner workings of PINE64 PinePhone, and how we implemented the smartphone features with Apache NuttX RTOS. The articles cover the essential (and esoteric) topics on smartphone technology: MIPI DSI LCD Display, I2C Touch Panel, USB Controller, LTE Modem, Accelerometer / Gyroscope, Arm64 Interrupts and many more. We are also experimenting with newer, easier ways to create Smartphone Apps, with LVGL Graphics Library, Zig Programming Language, WebAssembly Simulation and Arm64 Emulation.

19 August 2023

Smartphones are incredibly complex gadgets. What if we could learn the internals of smartphones... By booting Apache NuttX RTOS (Real-Time Operating System) on our phone? Over the past year, we have written a series of 24 articles explaining the inner workings of PINE64 PinePhone, and how we implemented the smartphone features with Apache NuttX RTOS. The articles cover the essential (and esoteric) topics on smartphone technology: MIPI DSI LCD Display, I2C Touch Panel, USB Controller, LTE Modem, Accelerometer / Gyroscope, Arm64 Interrupts and many more. We are also experimenting with newer, easier ways to create Smartphone Apps, with LVGL Graphics Library, Zig Programming Language, WebAssembly Simulation and Arm64 Emulation.

8 August 2023

Here's how we boot a Real-Time Operating System (Apache NuttX) on the Star64 JH7110 64-bit RISC-V Single-Board Computer

7 August 2023

Pine64's Star64 JH7110 RISC-V SBC is now supported in Apache NuttX RTOS Mainline! Let's review how we created the first release of NuttX for Star64

2 August 2023

Apache NuttX RTOS on Pine64's Star64 JH7110 RISC-V SBC has a problem with Serial I/O Interrupts and the RISC-V Platform-Level Interrupt Controller (PLIC)... Let's fix this!

28 July 2023

Apache NuttX RTOS crashes on Pine64's Star64 JH7110 RISC-V SBC because there's no Semihosting. But no worries! We modified NuttX to boot with an Initial RAM Disk instead (initrd).

19 July 2023

We're porting Apache NuttX RTOS to Pine64's Star64 JH7110 RISC-V SBC... And we see interesting issues with RISC-V Privilege Levels and 16550 UART Registers

13 July 2023

Let's boot Apache NuttX RTOS (or Linux) over the Network with U-Boot Bootloader and TFTP... On Pine64's Star64 JH7110 RISC-V Single-Board Computer

9 July 2023

(Partially) Booting Apache NuttX Real-Time Operating System on Pine64's Star64 64-bit RISC-V Single-Board Computer, based on StarFive JH7110 SoC

4 July 2023

Watch what happens when we boot Yocto and Armbian Linux on Pine64's Star64 64-bit RISC-V Single-Board Computer, based on StarFive JH7110 SoC

30 June 2023

Let's look inside the Linux Images for Pine64's Star64 64-bit RISC-V Single-Board Computer: Armbian and Yocto

25 June 2023

Let's boot Apache NuttX Real-Time Operating System on a 64-bit RISC-V Device (QEMU Emulator) and explore the Boot Code inside NuttX

21 June 2023

2023 has been an awesome year for Apache NuttX RTOS on Pine64 PinePhone! Let's review the features that we've implemented... And what we'll do next

10 June 2023

How we created the LVGL Feature Phone UI for Pine64 PinePhone on Apache NuttX RTOS... By tweaking and testing in a Web Browser!

31 May 2023

Can we preview an LVGL App in the Web Browser... With WebAssembly and Zig Compiler? Let's find out!

22 May 2023

Yep it's a Sourdough Recipe

17 May 2023

When we tilt our Smartphone from Portrait to Landscape... How does it know that we're tilting our phone? Watch what happens when we snoop the MPU-6050 Accelerometer Data from PinePhone with Apache NuttX RTOS

4 May 2023

Making Phone Calls and Sending SMS Text Messages with PinePhone's Quectel EG25-G 4G LTE Modem... How we'll do it with Apache NuttX RTOS

12 April 2023

All about the Quectel EG25-G 4G LTE Modem inside Pine64 PinePhone... And how we'll control it with Apache NuttX RTOS

24 March 2023

Porting the Enhanced Host Controller Interface (EHCI) USB Driver... From Apache NuttX RTOS to Pine64 PinePhone

5 March 2023

Here's how Apache NuttX RTOS boots on Pine64 PinePhone... Visualised as a Call Graph with Unicorn Emulator and Rust

24 February 2023

To make PinePhone testing easier... Can we emulate Arm64 PinePhone with Unicorn Emulator? Let's find out! We'll call the Unicorn Emulator in Rust

20 February 2023

What's inside the USB Controller of Pine64 PinePhone... And how we'll create a USB Driver for Apache NuttX RTOS

3 February 2023

Let's build a Terminal App for PinePhone... With LVGL and Apache NuttX RTOS

Apache NuttX RTOS trips ChatGPT in lupyuen.github.io
29 January 2023

ChatGPT (the AI chatbot) will gladly answer questions about Apache NuttX RTOS! But the answers aren't always correct. Let's turn this into a learning opportunity, and understand why ChatGPT's answers are incorrect

22 January 2023

How we configure Apache NuttX RTOS to boot an LVGL Touchscreen App on Pine64 PinePhone

12 January 2023

All about the Capacitive Touch Panel inside Pine64 PinePhone... And how we created the PinePhone Touch Panel Driver for Apache NuttX RTOS

3 January 2023

Let's talk about Apache NuttX RTOS for Pine64 PinePhone: What is it? Why are we doing this? How will we use it?

1 January 2023

How NuttX Apps call the NuttX Framebuffer Interface to render graphics... And what's inside the Framebuffer Driver for Pine64 PinePhone

28 December 2022

Apache NuttX RTOS now boots with a Test Pattern on Pine64 PinePhone! Let's find out what's inside our new NuttX Driver for PinePhone's LCD Panel.

23 December 2022

Apache NuttX Kernel now supports Allwinner A64 Display Engine on Pine64 PinePhone! Here's how we call it to render graphics on PinePhone's LCD Display

15 December 2022

Apache NuttX Kernel has a driver for MIPI Display Serial Interface... Here's how it will be called for rendering PinePhone's LCD Display

28 November 2022

Here are the steps to prepare a Pull Request for Apache NuttX RTOS

15 November 2022

How we render graphics directly to PinePhone's Display Hardware... With the Zig Programming Language and Apache NuttX RTOS

30 October 2022

How does Pine64 PinePhone render graphics on its LCD Display? Let's find out about the Allwinner A64 SoC's Display Engine (DE) and Timing Controller (TCON0).

18 October 2022

Let's build a PinePhone Display Driver in Zig... That will run on Apache NuttX RTOS

2 October 2022

How does Pine64 PinePhone control its LCD Display over MIPI Display Serial Interface? Let's find out!

25 September 2022

Pine64’s PineDio Stack BL604 is a RISC-V board that’s packed with IoT features: Touchscreen, LoRa, WiFi, BLE, GPS and more. In this presentation we’ll talk about the porting of NuttX to PineDio Stack, how we simplified the developer onboarding, and our plans to support LoRaWAN and LVGL Apps in Zig.

Visual Programming with Zig and NuttX Sensors in NuttX Online Workshop 2022
24 September 2022

What if we could drag-and-drop NuttX Sensors to create IoT Apps? In this presentation we’ll explore Blockly, the web-based toolkit for Visual Programming, and how we might customise Blockly to create NuttX Sensor Apps. We’ll also discuss the Zig Programming Language, and why Blockly will generate NuttX Sensor Apps as Zig programs.

24 September 2022

Is there a simpler and safer way to code Touchscreen Apps with the LVGL Graphics Library? In this presentation we’ll talk about migrating a NuttX LVGL App from C to Zig, and the benefits that it brings.

22 September 2022

Let's experiment with the GPIO Hardware on Pine64 PinePhone... With a little help from Apache NuttX RTOS

9 September 2022

Our PinePhone Operating System will be awfully quiet if we don't implement UART Input and Output... Here's how we implemented the UART Driver for Apache NuttX RTOS

1 September 2022

How Pine64 PinePhone handles Arm64 Interrupts with the Generic Interrupt Controller... And how we implemented PinePhone Interrupt Handling in Apache NuttX RTOS

PinePhone boots Apache NuttX RTOS in lupyuen.github.io
28 August 2022

How we ported Apache NuttX RTOS to PinePhone... And what's inside the U-Boot Bootloader

25 August 2022

Apache NuttX RTOS now runs on 64-bit Arm Cortex-A53 with Multi-Core Symmetric Multi-Processing... Will it run on PinePhone? Let's find out!

19 August 2022

What if we could drag-and-drop NuttX Sensors... To create IoT Sensor Apps in Zig? Let's find out!

7 August 2022

How we create a Zig program visually with Blockly, the drag-n-drop way... And how we might use it to build Sensor IoT Apps for Apache NuttX RTOS

Read NuttX Sensor Data with Zig in lupyuen.github.io
29 July 2022

Using Zig to read Sensor Data on Apache NuttX RTOS... With Bosch BME280 Temperature / Humidity / Air Pressure Sensor

12 July 2022

Can we use Zig to build an LVGL Touchscreen App for Apache NuttX RTOS? Also wrap the LVGL API in Zig to build simpler, safer LVGL Apps? Let's find out!

25 June 2022

Can we use Zig to code PinePhone Apps? Maybe make them simpler and safer? Let's find out!

15 June 2022

Let's build a complex IoT App with Zig and LoRaWAN... And run it on RISC-V BL602 with Apache NuttX RTOS

2 June 2022

How we run Zig on the BL602 RISC-V SoC... With Apache NuttX RTOS

22 May 2022

Pine64 is about to launch the PineDio Stack BL604 RISC-V Board with LoRa and Touch Screen... Here's how we automatically flash and test every new release of Apache NuttX RTOS for PineDio Stack

3 May 2022

PineDio Stack BL604 RISC-V Board has an interesting problem on Apache NuttX RTOS... Too many GPIOs! Let's fix this with a GPIO Expander

21 April 2022

How we created the Apache NuttX RTOS Driver for Hynitron CST816S I2C Touch Panel... For PineDio Stack BL604 RISC-V Board

12 April 2022

Running Apache NuttX RTOS on PineDio Stack BL604 RISC-V board... With ST7789 Display, LVGL Graphics and LoRaWAN

2 April 2022

RISC-V BL602 SoC with ST7789 SPI Display and LVGL Graphics Library... Let's make it work on Apache NuttX RTOS!

22 March 2022

Reading the Bosch BME280 I2C Sensor with Rust Embedded HAL... On BL602 RISC-V SoC and Apache NuttX RTOS

10 March 2022

Apache NuttX OS talks I2C with Bosch BME280 Sensor on BL602 RISC-V SoC... Thanks to the BME280 Driver ported from Zephyr OS

12 February 2022

How we expose the UART Port on IKEA VINDRIKTNING Air Quality Sensor... And read the PM 2.5 data with PineDio Stack BL604 RISC-V Board

2 February 2022

What's inside the EFlash Loader that flashes all firmware to the BL602 RISC-V SoC

26 January 2022

How we automagically flash and test the daily build of Apache NuttX OS on BL602 RISC-V SoC

Rust on Apache NuttX OS in lupyuen.github.io
12 January 2022

How we run Rust programs on Apache NuttX OS... And transmit a LoRa Message with Rust

10 January 2022

Compressing Sensor Data with CBOR on Apache NuttX OS... By calling TinyCBOR Library

LoRaWAN on Apache NuttX OS in lupyuen.github.io
3 January 2022

Porting Semtech's LoRaWAN Stack to Apache NuttX OS... And testing it on PineDio Stack BL604 RISC-V Board

LoRa SX1262 on Apache NuttX OS in lupyuen.github.io
22 December 2021

Porting the LoRa Driver for Semtech SX1262 from Linux to Apache NuttX OS... And testing it on PineDio Stack BL604 RISC-V Board

SPI on Apache NuttX OS in lupyuen.github.io
13 December 2021

How we transmit and receive data over SPI on Apache NuttX OS... By coding a NuttX Device Driver

24 November 2021

How we build, flash and test the Apache NuttX operating system on BL602 and BL604 RISC-V SoCs

11 November 2021

How we test the pre-production PineDio LoRa Gateway by Pine64... And connect it to The Things Network

28 October 2021

How we build a LoRa SX1262 Driver for PineDio USB Adapter... And test it on Pinebook Pro

21 October 2021

How we monitor our IoT Sensor Devices connected to The Things Network... With Prometheus Time Series Database and Grafana Dashboards

18 October 2021

How we decode CBOR Sensor Data inside The Things Network... With a CBOR Payload Formatter

14 October 2021

How we read the Internal Temperature Sensor on the BL602 and BL604 RISC-V SoCs... And transmit to The Things Network

8 October 2021

Can we use Roblox to monitor and control an IoT Device... Through LoRaWAN and The Things Network?

5 October 2021

How we compress Sensor Data with CBOR... And transmit over LoRaWAN on the BL602 / BL604 RISC-V SoC

27 September 2021

How we visualise Sensor Data from The Things Network... With a Custom MQTT Data Source in Grafana

21 September 2021

How we join The Things Network and send data to the cloud on the new PineDio Stack BL604 RISC-V Board

16 September 2021

How we test LoRaWAN on the new PineDio Stack BL604 RISC-V Board

4 September 2021

Can we drag-and-drop Rhai Scripts... And run them on WebAssembly and BL602 RISC-V SoC?

29 August 2021

What's it like to create Open Source Software for brand new prototype hardware? Read on to find out!

16 August 2021

Can we run Rust Firmware for BL602 RISC-V SoC in a Web Browser... Simulated with WebAssembly?

Rust on RISC-V BL602: Is It Sunny? in lupyuen.github.io
3 August 2021

How we create Rust Firmware that reads Analog Inputs... With the Analog-to-Digital Converter on RISC-V BL602

RISC-V BL706 Audio Video Board in lupyuen.github.io
14 July 2021

What's inside the Bouffalo Lab RISC-V BL706 Audio Video Board... And how it differs from BL602

7 July 2021

What happens inside the WiFi Driver on RISC-V BL602... And how we found the incomplete source code for the driver

22 June 2021

How we run TensorFlow Lite on RISC-V BL602... To create a Glowing LED

BL602 Bootloader in lupyuen.github.io
9 June 2021

All about the BL602 RISC-V Bootloader... And how it loads the Application Firmware into XIP Flash Memory

27 May 2021

How we simulate the BL602 RISC-V SoC with uLisp in WebAssembly... And preview Blockly uLisp Apps in the Web Browser

14 May 2021

Porting the uLisp Interpreter to PineCone BL602 RISC-V Board... And writing graphical programs with Blockly (Scratch)

PineCone BL602 Talks LoRaWAN in lupyuen.github.io
11 May 2021

How we connect PineCone BL602 RISC-V Board to LoRaWAN... With the Pine64 RFM90 LoRa Module

30 April 2021

How we set up our own LoRaWAN Network with RAKwireless RAK7248 WisGate Developer D4H Gateway... And test it with RAKwireless WisBlock in Arduino

21 April 2021

How we build, flash and run Rust firmware on BL602 RISC-V SoC... With the BL602 IoT SDK

4 April 2021

How PineCone BL602 RISC-V Board with SX1276 receives LoRa packets... Transmitted by RAKwireless WisBlock

11 March 2021

How we receive LoRa packets transmitted by PineCone BL602 RISC-V Board ... With RAKwireless WisBlock in Arduino

7 March 2021

How we transmit LoRa packets on PineCone BL602 RISC-V Board ... With Semtech 1276 or Hope RF96

The RISC-V BL602 Book in lupyuen.github.io
20 February 2021

Your free open-source resource for learning RISC-V BL602 SoC

19 February 2021

How we render an image with PineCone BL602 RISC-V Board ... On Grove Triple Colour E-Ink Display with UART Interface

16 February 2021

How we render text and graphics on PineCone BL602 RISC-V Board ... With ST7789 SPI Display and LVGL Graphics Library

PineCone BL602 talks SPI too! in lupyuen.github.io
7 February 2021

PineCone BL602 RISC-V Board talks to BME280 Sensor over SPI... Let's find out how

29 January 2021

How we call the BL602 RISC-V Hardware Abstraction Layer to access the BME280 I2C Sensor

15 January 2021

How we ported the BL602 RISC-V Hardware Abstraction Layer to Apache Mynewt ... Starting with GPIO

6 January 2021

Explore the BL602 GPIO and PWM Demo Firmware... And how they call the GPIO and PWM Hardware Abstraction Layer

1 January 2021

What happens when we flash RISC-V firmware to PineCone BL602 Board... And what's inside the BL602 Boot Image, Partition Table, Device Tree and EFuse Configuration

Porting Mynewt to PineCone BL602 in lupyuen.github.io
21 December 2020

How we port Apache Mynewt embedded operating system to the PineCone BL602 RISC-V Board

Better Open Source Advocate in lupyuen.github.io
15 December 2020

I made mistakes in 2020... Here's how I'll do better in 2021

14 December 2020

How we build and debug Embedded Rust Firmware for PineCone BL602... With VSCode and GDB

Connect PineCone BL602 to OpenOCD in lupyuen.github.io
11 December 2020

How we connect PineCone BL602 Evaluation Board to OpenOCD... For flashing and debugging RISC-V firmware

29 November 2020

What's inside the PineCone BL602 Evaluation Board... And how we're using it to contribute to the RISC-V Open Source Ecosystem

18 November 2020

How we build a hand-drawn Watch Face for PineTime Smart Watch... Starting from WebAssembly to Embedded Rust

17 October 2020

How we build PineTime Watch Faces with Rust and LVGL... And publish them on crates.io

16 October 2020

How PineTime syncs the time over Bluetooth LE with Mynewt and NimBLE... And how we create Watch Faces with LVGL

13 September 2020

Converting Embedded C to Rust is not that hard... Here's how we convert a PineTime Watch Face with LVGL from C to Rust on RIOT

11 September 2020

Tired of pointer problems on Embedded C? It’s time to switch over to a safer, simpler way of coding: Embedded Rust. We’ll look at Rust hosted on RIOT and how it’s used to create LVGL watch apps for PineTime Smart Watch.

11 September 2020

Tired of pointer problems on Embedded C? It’s time to switch over to a safer, simpler way of coding: Embedded Rust. We’ll look at Rust hosted on RIOT and how it’s used to create LVGL watch apps for PineTime Smart Watch.

19 August 2020

How we build and preview PineTime Watch Faces with only a web browser... No computer needed!

27 July 2020

Learn to build PineTime Smart Watch Firmware in the Cloud... No computer needed!

25 July 2020

Learn about Wayland and Ubuntu Touch on PinePhone... And how we build PinePhone Apps with LVGL

9 July 2020

How we convert Go code to Dart and Flutter automatically with an Abstract Syntax Tree

27 June 2020

How we manage state with the Bloc Library in the Flutter Companion App (Android and iOS) for PineTime Smart Watch

19 June 2020

Getting started with PineTime Smart Watch

18 June 2020

Creating desktop apps on Linux doesn't have to be hard... Let's build GTK+ 3 apps in Go with the gotk3 library!

17 June 2020

How we build the Flutter Companion App (Android and iOS) for PineTime Smart Watch by converting Go to Dart

4 June 2020

Bluetooth Low Energy apps are ridiculously easy to code with Flutter and Dart, let me show you how!

2 June 2020

Making wasp-os truly awesome with full multitasking, interoperable firmware updates and a common companion app

20 May 2020

Observe step-by-step the Wireless Firmware Update running on PineTime Smart Watch (nRF52) with MCUBoot Bootloader, NimBLE Bluetooth LE Stack and Apache Mynewt

18 May 2020

Wireless Firmware Updates done right on PineTime Smart Watch... With the open source MCUBoot Bootloader from Apache Mynewt and Zephyr

15 May 2020

Configure Mynewt OS to enable access to SPI Flash Memory on PineTime Smart Watch

11 May 2020

Flash any firmware to PineTime from our mobile phone... Without opening the watch!

5 March 2020

Running Retro Games with Rust is not that hard on PineTime Smart Watch. Here's how I ported a CHIP-8 Game Emulator to PineTime

Visual Rust for PineTime Smart Watch in Visual Studio Marketplace
5 March 2020

Create and edit Embedded Rust programs visually by dragging and dropping blocks

4 February 2020

Have humans become so greedy for profit… That we have forgotten how to teach one another and advance our species?

2 February 2020

VSCode debugging configuration for RIOT

24 January 2020

Coding in Embedded C is like building a skyscraper without scaffolding

23 January 2020

Using only a Raspberry Pi, we can debug the firmware on PineTime Smart Watch: Step into the flashed program line by line, set a breakpoint to pause execution at a line, inspect variables at runtime, … Just like the Embedded Pros!

18 January 2020

Instead of sending SWD data over GPIO one bit at a time, what if we could blast out the data over Raspberry Pi’s SPI interface?

8 January 2020

Programming a PineTime is not that hard… All you need is a Raspberry Pi, some wires and a little creativity!

29 December 2019

Simple tweaks like Batched Updates and Non-Blocking SPI can have a huge impact on rendering performance

14 December 2019

Code Watch Apps in Rust the Declarative Way

My 5-Year IoT Mission in lupyuen.github.io
4 December 2019

5 years ago I decided to fix every link in the IoT Chain so that we can create really useful and affordable IoT gadgets, the Lean and Agile Way

23 November 2019

Porting Mynewt OS to GD32 VF103 on RISC-V was a nightmare

22 November 2019

Programming the Hynitron CST816S Capacitive Touch Controller

15 November 2019

PineTime is the spiritual successor to BBC micro:bit

30 October 2019

Many GD32 VF103 RISC-V developer boards are coming real soon... And Mynewt OS would be perfect for them

15 October 2019

Set up an nRF52 mesh network, step by step, without any coding

3 October 2019

nRF52 works with popular open-source tools on Windows and macOS like VSCode, OpenOCD, Rust and ST-Link

22 September 2019

Let’s build a simple gadget that determines its current location based on received GPS signals… And transmits the location to a server via NB-IoT

4 September 2019

Peek into the LiteOS + Application source code that was bundled with the NB-IoT Developer Kit

30 August 2019

Learn to optimise the power consumption of the NB-IoT Sensor Application in the previous tutorial

17 August 2019

Create and edit Embedded Rust programs for STM32 Blue Pill and Apache Mynewt… By dragging and dropping blocks!

17 August 2019

Watch what happens behind the scenes when you create a Visual Embedded Rust program

4 August 2019

Hardly anyone writes embedded programs in Rust for microcontrollers (like STM32 Blue Pill), we all use C. But we really should switch to Rust!

25 July 2019

Let’s build an IoT sensor with a real microcontroller — STM32 Blue Pill — and a real NB-IoT module — Quectel BC95-G!

15 July 2019

How to use a Quectel evaluation board to send a CoAP message to the CoAP server hosted at thethings.io

11 July 2019

Simpler embedded coding, the visual way

7 July 2019

Declarative and Procedural Macros (plus bindgen and tips for Visual Studio Code) to protect Embedded Rust coders from stumbling into embedded traps

9 June 2019

It’s time to drop our legacy programming practices and adopt smarter, safer ways to exploit these microcontrollers… starting with Apache Mynewt and Rust.

27 May 2019

Let's build a Sensor Network running on two Blue Pills with nRF24L01 and ESP8266

21 May 2019

Friendlier for newbies, supports ESP8266 WiFi and nRF24L01

20 April 2019

And WiFi Geolocation with ESP8266

26 March 2019

Apache Mynewt is a free, open-source realtime operating system for microcontrollers

10 March 2019

AWS IoT Rules Engine and Kinesis Firehose were designed to stream live sensor data into Redshift for storage and analysis

8 March 2019

With AWS Glue it’s now possible to keep our Redshift data warehouses in sync with JSON-based data stores… So we may exploit the full potential of business analytics and machine learning in AWS!

6 March 2019

With Lambda Layers it’s really easy to connect our Node.js Lambda Function to Redshift or PostgreSQL

25 February 2019

How do we upgrade the Bootloader when it’s always running in the background, waiting for flashing requests? This article explains a special technique I used to upgrade the MakeCode Bootloader over WebUSB… I call it “Baseloading”

16 February 2019

Explore the innards of the MakeCode Bootloader that I have ported to Blue Pill

7 February 2019

Computing sensor values in IoT devices can be prone to bugs… And Unit Testing can help to stop the bugs before they pollute the entire IoT chain

30 January 2019

Filling in tiny math functions with nano-float

24 January 2019

Learn the tips and tools to prevent Blue Pill Bloat

18 December 2018

STM32 Blue Pill is a remarkable microcontroller for US$ 2. I proved it by running the USB Storage, USB Serial, USB DFU (Direct Firmware Upgrade) and WebUSB interfaces all on the same Blue Pill concurrently, without any additional hardware!

9 December 2018

This work-in-progress document describes an incomplete implementation of STM32 Blue Pill visual programming

7 December 2018

I teach Sigfox to working professionals. Here are their questions…

29 November 2018

如果您可以將您以電池供應電力的BBC micro:bit設置在城市裡的任何一個角落來收集感測資料 … 或者是隨時查看從家裡、學校、工作場所即時更新的感測資料 … 不是很酷嗎?

17 November 2018

Wouldn’t it be cool if you could plant your BBC micro:bit anywhere in the city (powered by batteries) to collect sensor data… And watch live updates of the sensor data from your home, school, workplace, … Even on the go?

13 November 2018

使用 BBC micro:bit 連接 Sigfox 物聯網網路會是一個很好幫助孩子們理解感測器與感測網路如何運作的理想方式。micro:bit 是新式以電池提供電力的感測器裝置典範,具備充足的處理能力並支援大多數的感測器類型。在教育用途上,Sigfox 可能是今日用於城市規模測試的感測網路之中,最為便宜的方案。

5 November 2018

BBC micro:bit connected to the Sigfox IoT network is the perfect way to help kids understand how Sensors and Sensor Networks operate. The micro:bit is a good representation of a modern battery-powered sensor device, with ample processing power and support for most types of sensors. For education, Sigfox is likely the cheapest option today for experimenting with a city-wide sensor network.

17 October 2018

以 STM32 微處理器為核心的 STM32F103C8T6 Blue Pill 開發板連接 Sigfox 收發器模組來接取 Sigfox 物聯網網路可能會是設計一款低功率物聯網裝置的最佳組合。

28 September 2018

STM32 “Blue Pill” microcontroller connected to a transceiver module for the Sigfox IoT network might be the best combination for low-power IoT devices right now.

19 September 2018

This article that explains all that I have learnt about SPI ports, DMA and interrupts on the Blue Pill

5 September 2018

As we learn how to program the FPGA, we’ll soon realise that FPGA programming is really extraordinary, unlike any other kind of programming we have done before

27 August 2018

Upsizing from Arduino Uno to a 32-bit STM microcontroller doesn’t have to be hard

20 August 2018

Using the cocoOS task scheduler to run Sensor Tasks concurrently while waiting for the Network and UART Tasks

11 August 2018

Juggle multiple Arduino sensors, using an open source library for cooperative processing: cocoOS

31 July 2018

Since FPGAs are already mainstream, could we use them to create IoT devices that are more power-efficient than current devices based on microcontrollers?

10 July 2018

Let's learn Rust, a modern systems programming language that promotes safe, concurrent low-level coding

5 July 2018

Here’s the story of the first gadget that I have ever created, with help from the brilliant minds at Seeed in Shenzhen

18 June 2018

Better tools for building robust and reliable programs for microcontrollers

21 May 2018

Could Alibaba Cloud be the economical cloud for high volume IoT?

13 May 2018

How to implement a Finite State Machine on the Arduino Uno

1 May 2018

How to experiment with IoT today while minimising the security and performance risks, and keeping costs low

24 April 2018

Arduino, Low Power Networks, IoT Networks, IoT Analytics, ...

20 March 2018

Lup Yuen talks about two classes of IoT, ‘deep’ IoT and ‘wide’ IoT. Deep IoT devices require high bandwidth and power supply. UnaBiz looks at wide IoT, which refers to devices that are very light, battery-powered and operate on pervasive networks. They can work anytime, anywhere in Singapore and do not rely on WiFi or the cellular network.

14 October 2017

Building highly reliable, robust and scalable systems for processing Sigfox messages

5 July 2017

Co-created with Upton Lai, the brilliant guy who could make anything

IoT is a Bad Word in Medium
26 May 2017

IoT is about solving real problems (not imaginary ones) in a sustainable way

23 April 2015

Sigfox and Google Cloud Platform in Google Developer Group Singapore DevFest
20 October 2014

30 June 2010

This invention relates to a system for displaying video content streamed from a network in a full screen mode. The system receives receiving a network address based on a selection from a user. The system then transmits a request for content from the network address and subsequently receives the content associated with the network address. A search is performed on the content for data that provides displaying a video content in a full screen mode. Upon detecting the data, the process generates the data and displays video content in full screen mode.

27 June 2007

A system and method for providing mobile services, the system comprising: a mobile device executing a client application for generating a mobile service request; and a hub server for receiving and processing the mobile service request, wherein the mobile service request comprises location data of the mobile device, and the hub server pushes one or more mobile service offers to the mobile device based on the location data. The method comprises executing a client application for generating a mobile service request on a mobile device; receiving and processing the mobile service request at a hub server; and pushing one or more mobile service offers from the hub server to the mobile device based on location data, wherein the mobile service request comprises location data of the mobile device.

Languages

English

Native speaker

Mandarin

Native speaker

Cantonese

Fluent

Interests

How was this JSON Resume created?

https://github.com/lupyuen/lupyuen.github.io