Posts

Showing posts from 2026

MicroPython _thread exercise

The purpose of this exercise is to test the behavior of MicroPython _thread, specifically for Raspberry Pi Pico series, whether _thread.start_new_thread() can provide real multi-core parallel speedup for pure Python CPU-bound work.  mpy_thread_smp_bench.py # mpy_thread_smp_bench.py # # Purpose: # Simple MicroPython benchmark to test whether _thread.start_new_thread() # can provide real multi-core parallel speedup for pure Python CPU-bound work. # # Method: # 1. Run a CPU-bound loop in the main thread and measure the duration. # This is the single-thread baseline. # # 2. Run the same CPU-bound loop in two threads: # - one in the main thread # - one in a newly created _thread # # 3. Measure: # - duration of thread 0 # - duration of thread 1 # - total wall-clock time from starting both threads until both finish # # Interpretation: # Let single-thread duration be T. # # If the two CPU jobs run fully in parallel on two cores: # tot...

Build a Python Slideshow App with PyQt6 and Package It as a Windows .exe

Image
In this post, we build a small desktop slideshow application with Python and PyQt6. The app lets you pick any folder through a built-in file explorer, then plays its contents as a slideshow — each image is displayed for 5 seconds, each video plays once, and a mouse click or touch tap skips to the next item. The walkthrough covers the full real-world workflow on Windows: create an isolated virtual environment, install PyQt6, run the app from source, and finally package everything into a single standalone .exe with PyInstaller — so the finished slideshow can run on any Windows PC, even one without Python installed. To create a Python virtual environment , enter in Command Prompt: python -m venv .venv Creates an isolated Python environment in a .venv folder, keeping this project's dependencies separate from the system-wide Python. (.venv is just a naming convention — any folder name works.) To activate it, enter: .venv\Scripts\activate.bat or .venv\Scri...

How to Drive an SSD1315/SSD1306 I2C OLED Display on ESP32-C5_MINI with MicroPython

Image
In this post, we will look at how to interface and display data on a 0.96-inch 128x64 SSD1315 I2C OLED display using ESP32-C5_MINI and MicroPython. For these exercises, we will use the official micropython-ssd1306 driver. Because the SSD1315 shares the exact same command structure for basic operations as the classic SSD1306, this library works flawlessly out of the box. Getting the Library There are two easy ways to install the driver on your board: Via Thonny IDE: Go to Tools ➔ Manage packages..., search for micropython-ssd1306, and click Install. Manual Installation: Download ssd1306.py directly from the official MicroPython-lib repository and save it onto your ESP32-C5 file system. Connection SDA - IO3 SCL - IO4 VCC - 3V3 GND - GND Exercise Code mpy_C5_ssd1306.py , basic setup and test. """ Exercise on ESP32-C5_MINI/MicroPython v1.29.0-preview Display on 0.96 inch 128x64 SSD1315 I2C OLED (SSD1...

Flashing MicroPython Firmware on the ESP32-C5_MINI using esptool

Image
This post walks you through the step-by-step process of flashing MicroPython firmware onto the ESP32-C5_MINI . 1. Download the MicroPython Firmware First, grab the correct binary for your chip: Visit the official MicroPython Download Page . Search or scroll down to the ESP32 section and locate the ESP32-C5 targets. Select ESP32-C5 by Espressif and download your preferred .bin file version. 2. Flash the Firmware (The 0x2000 Offset) To flash the firmware, connect your board to your computer and run the following esptool command. ⚠️ Crucial Note: Unlike older ESP32 chips (like the S3) which often start flashing at 0x0 , the ESP32-C5 requires you to write the flash starting exactly at address 0x2000 . Run this command in your terminal (replace PORTNAME and the .bin filename with your actual values): esptool --port PORTNAME ...

Hello ESP32-C5_MIINI

Image
Hello World on ESP32-C5_MIINI , list info and blink onboard LED (on IO23). ESP32-C5_MINI_hello.ino #define LED 23 void setup() { delay(2000); Serial.begin(115200); delay(1000); // initialize digital pin of the ESP32-C5_MINI onboard LED as an output. pinMode(LED, OUTPUT); digitalWrite(LED, LOW); // LED ON Serial.println("\n===================================="); Serial.println("Arduino_Hello World example"); Serial.println("ESP32-C5_MINI"); Serial.println("===================================="); Serial.printf("Chip model: %s\n", ESP.getChipModel()); Serial.printf("Chip revision: %d\n", ESP.getChipRevision());// Get ESP-IDF Version Serial.print("ESP-IDF Version: "); Serial.println(esp_get_idf_version()); #ifdef ESP_ARDUINO_VERSION_STR Serial.print("Arduino-ESP32 Core Version (String): "); Serial.println(ESP_ARDUINO_VERSION_STR); #else Serial.println("E...

my dev. board ESP32-C5_MINI

Image
ESP32-C5_MINI esptool read flash-id of ESP32-C5_MINI esptool --port COM4 flash-id Exercises: ~ Hello ESP32-C5_MIINI MicroPython: ~  Flashing MicroPython Firmware on the ESP32-C5_MINI using esptool ~  Drive an SSD1315 I2C OLED Display on ESP32-C5_MINI with MicroPython

my dev.board WeActStudio.STM32G474CoreBoard

Image
my dev.board WeActStudio.STM32G474CoreBoard Github: https://github.com/WeActStudio/WeActStudio.STM32G474CoreBoard.git Gitee: https://gitee.com/WeAct-TC/WeActStudio.STM32G474CoreBoard.git

Waveshare ESP32-S3-Touch-LCD-4B Hello World

Image
Basic Test run on  Waveshare ESP32-S3-Touch-LCD-4B , with built-in 4inch 480 × 480 resolution ST7701 RGB interface LCD. S3_ST7701_basictest.ino /* Basic test run on Waveshare ESP32-S3-Touch-LCD-4B https://coxxect.blogspot.com/2026/06/waveshare-esp32-s3-touch-lcd-4b-hello.html Remark about "USB CDC On Boot" option for Serial.print() If host PC connect to USB TO UART port (lower one), select USB CDC On Boot: "Disabled". If connect to ESP32-S3 USB Interface port (middle one), select USB CDC On Boot: "Enabled" Otherwise, you cannot see the output by Serial.print(). */ #include <Arduino.h> #include "Arduino_GFX_Library.h" #define BL 4 Arduino_XCA9554SWSPI *expander = new Arduino_XCA9554SWSPI( 7, 0, 2, 1, &Wire, 0x20); Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel( 17 /* DE */, 3 /* VSYNC */, 46 /* HSYNC */, 9 /* PCLK */, 10 /* B0 */, 11 /* B1 */, 12 /* B2 */, 13 /* B3 */, 14 /* B4 */, 21 ...

Dynamic WiFi Image Gallery run on Waveshare ESP32-S3-Touch-AMOLED-2.16/ESP32-S3-Touch-LCD-4B

Image
In my previous post, I demonstrated how to download and display JPG images via WiFi on the Waveshare ESP32-C5-WIFI6-KIT-N16R8 with an 240x320 ST7789 SPI TFT LCD using hardcoded filenames . This new implementation is much more flexible: filenames are now stored in a jpg_list.txt file on the server, allowing the ESP32 to download the images dynamically. I have also successfully tested this setup on the Waveshare ESP32-S3-Touch-AMOLED-2.16 with its 480x480 AMOLED (CO5300 driver) . (Scroll down for ESP32-S3-Touch-LCD-4B version). How it Works The program operates in three distinct phases: WiFi connection: The ESP32-S3 connects to a local WiFi access point and establishes communication with a Python-based HTTP server. Since the WiFi access point is a Windows 11 Mobile Hotspot and the Python-based HTTP server is running on that same PC, we can assume the server IP address is identical to the Access Point (Gateway) IP. Dynamic Manifes...

Prepare HelloWorld for Waveshare ESP32-S3-Touch-AMOLED-2.16, in Arduino framework.

Image
Prepare libraries to run HelloWorld on Waveshare ESP32-S3-Touch-AMOLED-2.16 , in Arduino framework. Following the steps in Waveshare docs, ESP32-S3-Touch-AMOLED-2.16 > Working with Arduino Notice: About display resolution: currently, both LCD_WIDTH and LCD_HEIGHT in libraries//Mylibrary/pin_config.h are set 466, have to set it 480 to match the actual resolution. The following exercise define LCD connection in code, so no need to #include "pin_config.h". S3_CO5300_basictest.ino /* Exercise run on ESP32-S3-Touch-AMOLED-2.16 https://coxxect.blogspot.com/2026/05/prepare-helloworld-for-waveshare-esp32.html Remark about "USB CDC On Boot" option for Serial.print() For Waveshare ESP32-S3-Touch-AMOLED-2.16 with a single USB port only, select USB CDC On Boot: "Enabled". Otherwise, you cannot see the output by Serial.print(). */ #include <Arduino.h> #include "Arduino_GFX_Library.h" // === #define LCD_SDIO0 4...

Install Arduino IDE 2.3.8 and ESP32 Arduino Core on Linux Mint 22.3 (Over VirtualBox 7.2.8)

Image
To install the Arduino IDE 2.3.8 on Linux Mint using the AppImage format, tested on Linux Mint 22.3 Xfce over VirtualBox on Windows 11. Step 1: Download the AppImage - Go to the official Arduino Software page . - Look for Arduino IDE 2.3.8 (or the latest version). - Click on the "Linux AppImage 64 bits" link to download the file. - You can move the downloaded file to other folder you want. Step 2: Grant Execution Permission By default, Linux treats downloaded AppImages as non-executable files for security. You must enable execution rights. Option A: Using the Terminal (Recommended) Open your terminal and navigate to the folder contain the downloaded file: chmod +x arduino-ide_2.3.8_Linux_64bit.AppImage Option B: Using the GUI - Right-click the downloaded .AppImage file. - Select Properties. - Go to the Permissions tab. - Check the box that says "Allow executing file as program". Step 3: Configure Serial Port Permissions (dialout) In Linux, your user accou...

VirtualBox how to: automatically capture USB devices for use in a virtual machine

Image
A USB filter in VirtualBox allows you to automatically capture USB devices for use in a virtual machine (VM). This ensures that the device is passed directly to the guest OS when connected, bypassing the host system. Steps to Add a USB Filter 1. Install VirtualBox Extension Pack      Ensure the Extension Pack is installed on the host. It adds support for USB 2.0/3.0. Download and install it from the VirtualBox website . 2. Enable USB Controller in VM Settings      Open VirtualBox and select your VM. Go to Settings > USB. Enable USB 2.0 (EHCI) or USB 3.0 (xHCI) depending on your guest OS support. 3. Create a USB Filter      While the USB device is connected to the host, click Add Filter (+) in the USB settings of your VM. A new filter will be created with details like Vendor ID, Product ID, etc., pre-filled for the connected device. You can edit these fields if needed (e.g., leave fields blank for broader matching). 4....

Downloading and Displaying JPG Images via WiFi on ESP32-C5 with ST7789 SPI TFT LCD

Image
In this exercise, I demonstrate how to download a JPG image over Wi-Fi, decode it using the JPEGDEC library, and display it on a 3.2-inch 240×320 ST7789 TFT LCD (4-wire SPI) . The project uses the Arduino_GFX_Library together with the Waveshare ESP32-C5-WIFI6-KIT-N16R8 , running in the Arduino framework. Connection: 3.2" 240x320 ST7789 TFT LCD Waveshare (4-Wire SPI) ESP32-C5-WIFI6-KIT-N16R8 BL --------------------------- GPIO26 CS --------------------------- GPIO23 DC --------------------------- GPIO24 RES --------------------------- GPIO25 SDA --------------------------- GPIO8 SCL --------------------------- GPIO10 VCC --------------------------- 3V3 GND --------------------------- GND Libraries: Arduino_GFX_Library and  JPEGDEC libraries are needed to be installed in Arduino IDE Library Manager. Basic Test: ESP32C5_ST7789_SPI.ino /* Exercise run on Waveshare ESP32-C5-WIFI6-KIT-N16R8 Work with 3.2" 240x320 ST7789 SP...