本文写于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++规范中,在某函数中调用另外一个函数,必须在这段代码之前编写或声明被调用的函数。改动量不会很大。

       

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐