2. May 2023

How to build single flashable binary for ESP32 with esptool.py

Build of ESP-IDF project produces several files, like bootloader, application binary or partition table.

Having several files makes it harder to ship the application outside of build computer.

Solution to the problem is merging binaries into single flashable file.

Build your project with idf.py as always:

cd project
idf.py build

Merge binaries into single file. At the end of build process the tool will display command for flashing. This can be used to compose command like this:

esptool.py --chip ESP32 merge_bin -o merged-flash.bin --flash_mode dio ^
  --flash_size ^
  2MB 0x0 build\bootloader\bootloader.bin ^
  0x8000 build\partition_table\partition-table.bin ^
  0x10000 build\my_app.bin

Luckily there is a simpler way, because all those arguments are stored in build/flash_args file:

Example for Bash

(cd build; esptool.py --chip esp32 merge_bin -o merged-flash.bin @flash_args)

Example for PowerShell

cd build
esptool.py --chip esp32 merge_bin -o merged-flash.bin "@flash_args"

17. April 2023

Matter: chip-tool pairing ble-wifi failing with Abort trap: 6 on macOS

chip-tool can be used for commissioning ESP32 with Matter.

macOS users may face the following error with iTerm:

chip-tool interactive start

pairing ble-wifi 0x7283 SSID PASS PIN 3840
..[FP] Validating NOC chain
..[FP] NOC chain validation successful
..[FP] Added new fabric at index: 0x1
...
Abort trap: 6

It’s necessary to grant access to Bluetooth to apps launched from iTerm.

Click System SettingsPrivacy & Security. Select Bluetooth. Click +, Select Applications, and find iTerm.

Close and open iTerm. The problem with “trap 6” should be gone.

Just do not forget to install Bluetooth Central Matter Client Developer mode profile. Otherwise the provisioning will fail with UUID problem.

14. April 2023

Setting up esp-matter development environtment on openSUSE

When setting up development environment for esp-matter on OpenSUSE you may encouter following error:

./install.sh
...
Error
uilding wheels for collected packages: gevent
  Building wheel for gevent (pyproject.toml): started
  error: subprocess-exited-with-error
  
  × Building wheel for gevent (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> See above for output.
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  Building wheel for gevent (pyproject.toml): finished with status 'error'
  ERROR: Failed building wheel for gevent
Failed to build gevent
ERROR: Could not build wheels for gevent, which is required to install pyproject.toml-based projects
['esp-matter/connectedhomeip/connectedhomeip/.environment/pigweed-venv/bin/python', '-m', 'pip', 'install', '--log', 'esp-matter/connectedhomeip/connectedhomeip/.environment/pigweed-venv/pip-requirements.log', '--requirement=esp-matter/connectedhomeip/connectedhomeip/scripts/setup/requirements.txt', '--constraint=esp-matter/connectedhomeip/connectedhomeip/scripts/setup/constraints.txt'] {'stdout': <_io.TextIOWrapper name=3 mode='w+' encoding='UTF-8'>, 'stderr': -2}

Problem is caused by gdbgui dependency in ESP-IDF. The dependency is not necessary to build the project.

Edit file esp-matter/connectedhomeip/connectedhomeip/scripts/setup/requirements.esp32.txt .

Disable the line with gdbgui:

#gdbgui==0.13.2.0 ; platform_machine != 'aarch64' and sys_platform == 'linux'

Continue with `./install.sh` script.

6. May 2021

How to find COM port of connected IoT device on Windows

When you need to talk to an IoT device over RS232 connected to the computer via USB cable, the first thing that you need to know is the name of the port. Windows assigns port numbers like COM3, COM7, COM21 to connected devices. How to find the number?
The quick way is to type the following command:

The quick way is to type following command:

chgport

The output:

COM10 = \Device\VCP1
COM9 = \Device\VCP0

For older versions of Windows you can use:

mode

The output:

Status for device COM9:
-----------------------
    Baud:            1200
    Parity:          None
    Data Bits:       7
    Stop Bits:       1
    Timeout:         OFF
    XON/XOFF:        OFF
    CTS handshaking: OFF
    DSR handshaking: OFF
    DSR sensitivity: OFF
    DTR circuit:     ON
    RTS circuit:     ON

You can find all these hints also on SuperUser.

But what to do when the device is connected and the list of COM ports is empty?

The most common reason is that Windows is missing one of the following drivers:

Steps to resolve the problem:

The system should pick the installed driver and assign it to the device.

You can use also idf-env tool to install the drivers by following PowerShell commands:

Invoke-WebRequest 'https://dl.espressif.com/dl/idf-env/idf-env.exe' -OutFile .\idf-env.exe
.\idf-env.exe driver install --ftdi --silabs

Footnote: following PowerShell command might NOT list all connected IoT COM devices, but you can find it on many forums on the internet. Often it displays just COM3 and COM4 which are not associated with IoT device.

Get-WMIObject Win32_SerialPort | Select-Object Name,DeviceID,Description