RPC Console and Device Tracing

Using RPC Console

You can use the rpc default config to setup everything correctly for RPCs:

$ export SDKCONFIG_DEFAULTS=$PROJECT_ROOT/examples/all-clusters-app/esp32/sdkconfig_m5stack_rpc.defaults
$ rm sdkconfig
$ idf.py fullclean

Alternatively, Enable RPCs in the build using menuconfig:

  • Enable the RPC library and Disable ENABLE_CHIP_SHELL

    Component config → CHIP Core → General Options → Enable Pigweed PRC library
    Component config → CHIP Core → General Options → Disable CHIP Shell
    
  • Ensure the UART is correctly configured for your board, for m5stack:

    PW RPC Debug channel → UART port number → 0
    PW RPC Debug channel → UART communication speed → 115200
    PW RPC Debug channel → UART RXD pin number → 3
    PW RPC Debug channel → UART TXD pin number → 1
    

After configuring you can build and flash normally:

$ idf.py build
$ idf.py flash

After flashing a build with RPCs enabled you can use the rpc console to send commands to the device.

Build or install the rpc console

Start the console

chip-console --device /dev/ttyUSB0

From within the console you can then invoke rpcs:

  • Configure WiFi

    rpcs.chip.rpc.WiFi.Connect(ssid=b"MySSID", secret=b"MyPASSWORD")
    rpcs.chip.rpc.WiFi.GetIP6Address()
    
  • Control Lighting

    rpcs.chip.rpc.Lighting.Get()
    rpcs.chip.rpc.Lighting.Set(on=True, level=128, color=protos.chip.rpc.LightingColor(hue=5, saturation=5))
    
  • Control Lock

    rpcs.chip.rpc.Locking.Get()
    rpcs.chip.rpc.Locking.Set(locked=True)
    
  • OTA Requestor

    rpcs.chip.rpc.Device.TriggerOta()
    

Device Tracing

Device tracing is available to analyze the device performance. To turn on tracing, build with RPC enabled.

Obtain tracing json file.

$ ./{PIGWEED_REPO}/pw_trace_tokenized/py/pw_trace_tokenized/get_trace.py -d {PORT} -o {OUTPUT_FILE} \
    -t {ELF_FILE} {PIGWEED_REPO}/pw_trace_tokenized/pw_trace_protos/trace_rpc.proto