💬

PlatformIOのシリアル通信をClaude Codeに解釈させる

に公開

PlatformIOのシリアル通信をClaude Codeに解釈させる

結論

非tty環境だとコケるらしく、何らかのコマンドでラップしてあげると動くので以下のように指示する

シリアル通信の受信はこのコマンドを run_in_background で実行してください
script -q /dev/null pio device monitor --port /dev/cu.usbmodem1101 --baud 115200

シリアル通信の送信はこのコマンドを実行してください
printf "送信したい内容" > /dev/cu.usbmodem1101

/dev/cu.usbmodem1101115200 は各環境に依存する

エラー内容

ラップしていないときのエラー内容

⏺ Bash(pio device monitor --port /dev/cu.usbmodem1101 --baud 115200)
  ⎿  Running in the background (down arrow to manage)

⏺ BashOutput(Reading shell output)
  ⎿  error: Traceback (most recent call last):                                                                                                 
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/platformio/__main__.py", line 103, in main
         cli()  # pylint: disable=no-value-for-parameter
         ^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
         return self.main(*args, **kwargs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/click/core.py", line 1078, in main
         rv = self.invoke(ctx)
              ^^^^^^^^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/platformio/cli.py", line 85, in invoke
         return super().invoke(ctx)
                ^^^^^^^^^^^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
         return _process_result(sub_ctx.command.invoke(sub_ctx))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
         return _process_result(sub_ctx.command.invoke(sub_ctx))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
         return ctx.invoke(self.callback, **ctx.params)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/click/core.py", line 783, in invoke
         return __callback(*args, **kwargs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/platformio/device/monitor/command.py", line 154, in device_monitor_cmd
         start_terminal(options)
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/platformio/device/monitor/terminal.py", line 54, in start_terminal
         term = new_terminal(options)
                ^^^^^^^^^^^^^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/platformio/device/monitor/terminal.py", line 102, in new_terminal
         term = Terminal(
                ^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/platformio/device/monitor/terminal.py", line 28, in __init__
         super().__init__(*args, **kwargs)
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/serial/tools/miniterm.py", line 395, in __init__
         self.console = Console()
                        ^^^^^^^^^
       File "/Users/yabuta/.platformio/penv/lib/python3.11/site-packages/serial/tools/miniterm.py", line 198, in __init__
         self.old = termios.tcgetattr(self.fd)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
     termios.error: (19, 'Operation not supported by device')

     ============================================================

     An unexpected error occurred. Further steps:

     * Verify that you have the latest version of PlatformIO using
       `python -m pip install -U platformio` command

     * Try to find answer in FAQ Troubleshooting section
       https://docs.platformio.org/page/faq/index.html

     * Report this problem to the developers
       https://github.com/platformio/platformio-core/issues

     ============================================================

備考

logsを吐かせてClaude Codeに解釈させることでうまくいく

ユカイ工学テックブログ

Discussion