使用VSCode + PlatformIO作为开发工具,替代Arduino IDE(ESP-32 S3 N16R8为例)
使用VSCode + PlatformIO作为开发工具,替代Arduino IDE(ESP-32 S3 N16R8为例)
本文写于2024年12月,PIO版本3.3.3,VSCode版本1.96.0,仅供参考。
背景:使用Arduino IDE+正点原子DNESP32S3开发板,芯片模组ESP-32 S3 N16R8,切换为VSCode+PlatformIO。关于前置Arduino IDE开发的环境搭建这个问题上本文可能不能提供参考,而且本机已经存在Python3(Anaconda)、git、VSCode等基础环境,因此只记录Arduino IDE切换到VSCode+PlatformIO过程中的问题。
学习了一段时间Arduino,代码总量开始堆积,在计划拆分代码为多个模块时发现了Arduino IDE 2.0的一些严重影响效率的问题。1.Arduino IDE不稳定,编写时没有代码检查,只有编译时才有代码检查;2.跳转功能时好时坏;3.文件管理功能非常弱,只能手动创建.h .cpp等非.ino文件;4.不支持版本管理工具,很有可能因误操作造成代码资料意外损失。
虽然有上述许多负面问题,但是Arduino本身的设计思想还是非常优秀的。以我个人和ESP开发为例,我并不是一名专业的嵌入式工程师,但是有一些小模块又需要自己开发,所以不希望使用过于底层的开发逻辑,譬如搭建IDF环境进行开发。而Arduino生态提供了很多封装代码能快速实现功能,非常适合我这类需求。
原本计划尝试使用Jetbrains Clion或者VSCode+Arduino CLI作为解决方案,但是这两种方式,前一种用的人极少,后一种Microsoft VSCode在10月停止了对官方CLI插件的支持。
最终决定尝试使用VSCode+Platform IO。他们的官网地址是,https://platformio.org/ 。简而言之,先安装VSCode,然后在插件Extensions功能中,搜索PlatformIO插件进行安装。官网及基本安装步骤在网上资料较多,可自行查阅,下面主要提几点可能遇到的坑的解决方案。
1.下载缓慢或者安装受阻或者PIO安装后无法正常打开使用。
这个大概率是遇到了网络问题,需要设置代理,解决方案如下:打开VSCode的设置,也就是左下角齿轮Manage→Settings,找到如下两项
与UI对应的settings.json值如下,UI修改后会同步此文件,这是一件事两种修改方式。
但仅设置VSCode是不一定行的,由于PIO使用了Python环境,而Python会读取系统环境变量,进行网络访问,因此,还需要设置一个系统环境变量,HTTP_PROXY,如下:
2.在Platform IO官方提供的板子列表Borads中,找不到自己想要的配置。
这种情况也比较普遍,我用的是正点原子的ESP32开发板代号DNESP32S3,使用的芯片模组是ESP32-S3 N16R8,在我写这篇文章时,没有在PIO中找到适合我板子的json文件,名称搜索不到,因此我自己创建了一个。具体示例如下。
首先在路径~\.platformio\boards创建这个boards文件夹(以防新手看到此文不明白~的意思,这代表你的用户目录)。然后创建名为dnesp32s3.json文件,这个文件名你可以自己取个合适的,我这是根据我自己手头板子的型号编写的,仅供参考。文件具体内容如下。
{
"build": {
"arduino":{
"ldscript": "esp32s3_out.ld",
"partitions": "default_16MB.csv",
"memory_type": "qio_opi"
},
"core": "esp32",
"extra_flags": [
"-DARDUINO_ESP32S3_DEV",
"-DBOARD_HAS_PSRAM",
"-DARDUINO_USB_MODE=0",
"-DARDUINO_USB_CDC_ON_BOOT=0"
],
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"psram_type": "opi",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "esp32s3"
},
"connectivity": [
"wifi",
"bluetooth"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "DNESP32S3 Espressif ESP32-S3-N16R8 (16 MB QD, 8MB PSRAM)",
"upload": {
"flash_size": "16MB",
"maximum_ram_size": 327680,
"maximum_size": 16777216,
"require_upload_port": true,
"speed": 921600
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1.html",
"vendor": "Espressif"
}
对这个文件做一些补充说明:这个代码配置适用于ESP-32 S3 N16R8,我是使用Arduino-IDF进行开发的,不是纯IDF开发,所以frameworks包含arduino,请注意甄别;其中-DARDUINO_USB_MODE=0和-DARDUINO_USB_CDC_ON_BOOT=0这两项,都设置为零,意味着会使用UART作为串口输出方式,因为正点原子的ESP32开发板集成了一颗CH340C芯片,因此向板子写入编译结果文件和串口监视都是用UART,不需要通过ESP32的USB,这里可能需要根据读者自己手上的开发板的情况以及开发习惯调整。
3.platformio.ini文件如何编写。
如下就是我能正常运作的文件,我在建立项目时,为了避免IDE间冲突,选择了使用PlatformIO管理库文件,而不是Arduino,所以lib_deps没有指向Arduino的库目录,代码都是一样的,只是存放位置不一样。upload_port、monitor_port和monitor_speed请根据自己实际情况决定是否要保留。其中monitor_speed取决于你在主代码中的设置。
[env:dnesp32s3]
platform = espressif32
board = dnesp32s3
framework = arduino
upload_port = COM9 # 只有一个同类型板子插入时也可以不写这行,会自动扫描
monitor_port = COM9 # 只有一个同类型板子插入时也可以不写这行,会自动扫描
monitor_speed=115200
lib_deps = links2004/WebSockets@^2.6.1
4.VSCode和PIO项目配置好之后build和upload在哪里?
左下角
5.PIO项目提示不支持导入的.ino文件
需要把主文件(入口文件),后缀名改为.cpp,然后根据编辑器提示,将代码修改为符合C++规范的结构。例如,在Arduino的.ino文件中,只要文件中包含函数,就能在任意位置调用,而在C++规范中,在某函数中调用另外一个函数,必须在这段代码之前编写或声明被调用的函数。改动量不会很大。
更多推荐
所有评论(0)