Wokwi + VSCode 插件在线仿真 ESP32 更好用,值得一试

之前在《玩 ESP32 和 Arduino 的同学一定不能错过这个在线仿真网站》这篇文章中分享了 Wokwi 这个在线仿真平台,它支持 ESP32、STM32、树莓派等众多 MCU,还有相当丰富的外设库,在手边没有硬件设备时临时调试一下固件代码还是很方便的。

不过之前测试的是使用 Wokwi 的在线编译功能,作为免费用户,经常会碰到服务器编译超时错误,然后导致无法调试,又或者是固件项目依赖了太多的三方库,编辑项目相当麻烦。

这个时候想到了它还有一个 VSCode 插件,似乎可以在本地编译固件再进行仿真,尝试了一下发现还真挺好用,妈妈再也不用担心手边没硬件了。

操作演示

这里以我本地编译了一个 ArduinoBASIC 项目进行测试,可以看到整个使用过程还是相当流畅的,完全不用等待 Wokwi 的服务端编译时间了。

安装插件

要安装 Wokwi 的插件也很简单,直接在 VSCode 中的插件市场搜索 wokwi 或者通过以下链接安装即可:

https://marketplace.visualstudio.com/items?itemName=wokwi.wokwi-vscode

wokwi-vscode-simulator-1

在安装完成后,就可以通过 Command + Shift + P 呼出 VSCode 命令窗口,再搜索 wokwi 找到 Wokwi: Start Simulator 就可以开始使用了。

获取免费授权

在第一次使用 Wokwi VSCode 插件时,需要获得一个免费的授权,只需要在 Wokwi 网站注册就可以了。

wokwi-vscode-simulator-2

需要注意的是,这个免费授权不支持在商业场景下使用。

元件布局编辑

另外,Wokwi 免费用户不能直接在 VSCode 插件中使用它自带的布局编辑器,但是这个可以比较容易解决,直接在网站上建立一个项目,将元件和连线都处理好之后,直接把 diagram.json 的内容复制到本地就可以了。

wokwi-vscode-simulator-3

配置固件路径

在开始进行仿真前,还需要先通过 wokwi.toml 这个配置文件来配置一下仿真时所使用的固件路径,如果需要串口交互,那还需要配置一下串口转发使用的端口。

当然,在上一步中编辑好的 diagram.json 也是必需的。

一个典型的配置文件如下所示。

wokwi.toml

[wokwi]
version = 1
firmware = '.pio/build/esp32s3dev/firmware.bin'
elf = '.pio/build/esp32s3dev/firmware.elf'
rfc2217ServerPort = 4000

这里面的 firmware 和 elf 路径,都需要根据实际项目修改一下。

串口交互

如果只是需要查看仿真时的串口日志的话,直接使用 VSCode 的终端就可以看到了,但是如果需要交互,例如这里需要输入内容到 ESP32 的串口上,就需要额外配置好本地转发端口,在配置文件中就是下面这行:

rfc2217ServerPort = 4000

这里的 4000 可以随意更换成想要使用的端口。

这样在启动之后,就可以使用带双向通信能力的串口工具进行操作了,例如 minicom。

一个额外的小问题

不过这里可能会有一个额外的小问题,有些串口工具可能会存在行缓冲,就会导致在模拟器中的 ESP32 不能实时接收到数据,这个时候可以换个工具来操作。

我问了 DeepSeek 之后推荐使用 socat,通过以下命令行连接操作:

socat -,raw,echo=0 TCP:127.0.0.1:4000

在最开始的时候里可以看到输入的字符是可以一个一个马上显示出来的。

总结

想比于使用 Wokwi 的在线服务,我现在觉得配合 VSCode 插件用起来更香了,虽然不能随时编辑元件布局,但是在确定好 GPIO 连接之后,一般也不会有太频繁的变动。而直接本地编译 + VSCode 插件仿真带来的性能优势则是大大增加了调试的效率。

感谢 Wokwi 能提供这么好的在线仿真工具,不知道免费的午餐还能吃多久 😃。

最后顺便提一下 Wokwi 的官方网站是: https://wokwi.com/

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>