参考地址:

  1. https://diyprojects.io/install-ide-platformio-extension-visual-studio-code-vscode-windows-32-bit-linux/#.YGaJ48hfgdU
  2. https://diyprojects.io/migrate-project-arduino-ide-platformio-esp32-esp8266-esp01#.YGaK1MhfgdU
  3. How to program Arduino with Visual Studio Code and PlatformIO (luisllamas.es)
  4. 利用LiveSerial代替Arduino中串口图形显示

VSCode上的PlatformIO IDE入门

原文:https://diyprojects.io/install-ide-platformio-extension-visual-studio-code-vscode-windows-32-bit-linux/#.YGaJ48hfgdU

在这里插入图片描述

PlatformIO是Arduino IDE的替代产品,可以更通用的方式为微控制器开发代码。PlatformIO不是代码编辑器,它是一组工具(工具链),作为Microsoft的Visual Studio Code和GitHub的Atom插件。

PlatformIO可作为许多代码编辑器(AtomCLionCodeBlocksEclipseEmacsNetBeansQt CreatorSublime TextVimVisual StudioVSCode)的插件提供。无论发布者是什么,功能都是相同的。我选择了Microsoft的Visual Studio Code,这是一种快速,免费的跨平台编辑器。你选 !

安装Visual Studio Code(VSCode)

转到VSCode官方页面以下载并安装适合您的环境的版本。

  • Windows:安装程序ZIP
    在这里插入图片描述

安装用于VSCode的PlatformIO IDE软件包

VSCode有一个扩展管理器(插件),可以通过查看->扩展菜单或直接从侧栏中的图标打开。
也可以使用CTRL + P组合键(或在macOS下为Cmd + P)调用扩展管理器。

在搜索字段中输入platformio。

单击“安装”以开始安装插件和依赖项。
在这里插入图片描述
安装过程在后台进行,如果您遇到安装问题(或崩溃),只需重新启动VSCode即可恢复安装过程。
在这里插入图片描述

首次在VSCode上启动PlatformIO

安装结束时,重新启动编辑器。PIO主页在新标签tab中打开。此页面大大减慢了VSCode的启动速度。我建议您取消选中“在启动时显示➁”选项来禁用启动时打开它的功能。

侧栏appears中会出现一个以蚂蚁头形式出现的新图标。它提供对PIO的所有功能的访问。我们将在稍后详细介绍它们。
在这里插入图片描述

最后,迷你工具栏➃出现在屏幕底部。它是PIO菜单的精简版。它结合了以下功能

  • 错误表示编译问题
  • 主页打开PIO主页窗口。当您要导入或创建新项目时很有用
  • Build编译项目代码。允许您检查错误
  • 上载编译并上载项目。检测是自动的,但也可以在配置文件中指定端口
  • 上载到远程设备,但在远程MCU上。需要一个PIO帐户(免费或受限的PIO帐户)
  • 清除:将删除构建文件夹。如有问题,请不要犹豫。对项目的源代码没有影响
  • 在编译之前进行测试以测试代码
  • 运行任务将打开VSCode命令面板
  • 串行监视器打开串行监视器
  • 终端直接在Windows的VSCode或Power Shell中打开终端。直接定位在项目的根目录
    在这里插入图片描述

对于喜欢使用键盘快捷键的用户,您可以使用组合键Ctrl + Shift + P(在macOS上为Cmd + ↑ + P)召唤调色板。

然后输入关键字platformio以显示所有可用命令
在这里插入图片描述

PIO菜单

让我们回到PIO菜单,这是使用PIO的最简单,最完整的方法。总是可以从侧边栏访问它。它结合了PIO的所有功能。

以下是最有用的命令:
在这里插入图片描述

Arduino框架的安装

下一步是将Arduino框架下载到VS Code。单击左侧空白中的PlatformIO图标以显示“快速访问”菜单。选择“ Platforms”,然后选择“ Embedded”,如图3所示。

在这里插入图片描述
嵌入式平台安装页面

单击Atmel AVR将打开其安装页面(图4),单击蓝色的“安装”按钮继续。

在这里插入图片描述
Atmel AVR页面

创建一个新项目

现在是继续研究一个小例子的时候了。

打开PIO主窗口,然后单击+新建项目以打开用于创建项目的向导
在这里插入图片描述

为项目命名,然后从列表中选择开发板。该列表令人印象深刻。

您可以输入制造商的首字母,开发板的首字母,类型(ESP32,ESP8266…)来过滤开发板。
在这里插入图片描述

将选择Arduino。您可以选择其他框架,但是在这种情况下,您必须参考后者的文档进行编程。

最后,选择用于创建项目的目录。如果选中“使用默认位置”,则将在Documents / PlatformIO / Projects文件夹中创建项目。目录名称将是项目的名称。

单击完成以开始项目的初始化。该操作仅持续几秒钟。

:
注意:不要使用可能会干扰编译器的特殊字符
在这里插入图片描述

现在可以从资源管理器访问该项目
在这里插入图片描述
该文件夹包含几个文件夹和配置文件。

  • .pio是包含构建的(隐藏)文件夹。这些是由编译器生成的二进制文件。为目标(开发板)创建一个子文件夹
  • lib是将在其中安装项目所需的库的文件夹。这样可以更好地管理从一个项目到另一个项目的版本问题。
  • src此文件夹包含您的项目的源代码。
  • platformio.ini是PIO配置文件

警告,您绝不能干预(删除,修改,移动)文件夹和platformio.ini文件,否则您将不再能够编译您的项目。

打开位于src(源)文件夹中的main.cpp文件。如您所见,在PIO中开发Arduino代码时必须声明Arduino.h库。

#include "Arduino.h"

void setup(){
}

void loop(){
}

将代码替换并保存更改

#include "Arduino.h"

void setup() {
   // initialize digital pin LED_BUILTIN as an output.
   pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
   digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
   delay(1000); // wait for a second
   digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
   delay(1000); // wait for a second
}

解密platformio.ini文件

platformIO.ini官方解析
现在,让我们了解如何解密位于项目根目录的platformio.ini配置文件。

PIO的优势在于能够根据需要将相同的代码(项目)编译成尽可能多的目标(开发板,MCU)。每块板的配置均按块进行,该块以键env:开始于括号之间,例如LoLin d1 mini的[env:esp12e]。

您需要3个参数来完全定义板子:

  • platform: 对应于主板使用的SoC的平台(ESP32,ESP8266,Atmel AVR,STM32…)。
  • board: 开发板
  • 框架将运行项目代码的软件环境。请注意,每个SoC仅与有限数量的框架兼容。
[env:esp12e]             
platform = espressif8266   
board = esp12e
framework = arduino

然后,我们可以指定其他参数,例如

upload_port 指定COM端口

  • Windows上的COM3串行端口
  • 192.168.0.13用于通过WiFi(OTA)无线更新的IP地址

upload_speed 指定波特率传输速度

monitor_speed 串行监视器速度

这里有更多选择

要添加新的开发板,我建议您直接从官方WiKi检索板的配置,而不要使用配置向导。已经列出了850多个开发板。

在这里插入图片描述

PlatformIO编译

现在一切准备就绪,您可以从PIO菜单启动构建的创建
在这里插入图片描述

或从工具面板
在这里插入图片描述

出于某些原因,我仍然无法进行测试和代码验证(检查),并显示一条错误消息。

与Arduino IDE不同,在编译之前不一定必须安装这些库。只要在ini文件中正确指示了依赖项,PIO就会处理一切。

终端在代码下方打开,并指示编译进度。编译时间与Arduino IDE相同。

如果一切顺利,您应该收到[成功]的消息

Linking .pio/build/esp12e/firmware.elf
Retrieving maximum program size .pio/build/esp12e/firmware.elf
Checking size .pio/build/esp12e/firmware.elf
Building .pio/build/esp12e/firmware.bin
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [=== ] 32.7% (used 26816 bytes from 81920 bytes)
Flash: [== ] 24.6% (used 257212 bytes from 1044464 bytes)
Creating BIN file ".pio/build/esp12e/firmware.bin" using ".pio/build/esp12e/firmware.elf"
======================================================== [SUCCESS] Took 32.26 seconds ====

检查是否正确检测到开发板

在Arduino IDE上,只需转到“工具” ->“端口”菜单以查找是否已检测到开发板。

在PIO上,可以使用等效功能。打开PIO主页,然后打开“设备”选项卡。这些板卡将自动检测到并显示在列表中。如果不是这种情况,请使用“刷新”按钮强制检测设备。
在这里插入图片描述

提醒一下,如果您难以将程序上传到板上,则可以在配置中指定端口和传输速度(请参见上文)

将程序上传到开发板(Arduino,ESP8266,ESP32,STM32…)

一切准备就绪,可以将程序上传到开发板。和以前一样,可以从面板或PIO菜单访问Upload方法

PIO编译项目,连接到开发板并上传二进制文件。

> Executing task in folder Demo ESP8266: platformio run --target upload <

Warning! Ignore unknown configuration option `upload_serial` in section [env:esp12e]
Processing esp12e (platform: espressif8266; board: esp12e; framework: arduino)
----------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/esp12e.html
PLATFORM: Espressif 8266 2.5.1 > Espressif ESP8266 ESP-12E
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES: 
- framework-arduinoespressif8266 3.20701.0 (2.7.1) 
- tool-esptool 1.413.0 (4.13) 
- tool-esptoolpy 1.20800.0 (2.8.0) 
- tool-mkspiffs 1.200.0 (2.0) 
- toolchain-xtensa 2.40802.200502 (4.8.2)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 30 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Retrieving maximum program size .pio/build/esp12e/firmware.elf
Checking size .pio/build/esp12e/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [=== ] 32.7% (used 26816 bytes from 81920 bytes)
Flash: [== ] 24.6% (used 257212 bytes from 1044464 bytes)
Configuring upload protocol...
AVAILABLE: espota, esptool
CURRENT: upload_protocol = esptool
Looking for upload port...
Auto-detected: /dev/cu.usbserial-1410
Uploading .pio/build/esp12e/firmware.bin
esptool.py v2.8
Serial port /dev/cu.usbserial-1410
Connecting....
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 5c:cf:7f:85:e6:20
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 261360 bytes to 192964...

Writing at 0x00000000... (8 %)
Writing at 0x00004000... (16 %)
Writing at 0x00008000... (25 %)
Writing at 0x0000c000... (33 %)
Writing at 0x00010000... (41 %)
Writing at 0x00014000... (50 %)
Writing at 0x00018000... (58 %)
Writing at 0x0001c000... (66 %)
Writing at 0x00020000... (75 %)
Writing at 0x00024000... (83 %)
Writing at 0x00028000... (91 %)
Writing at 0x0002c000... (100 %)
Wrote 261360 bytes (192964 compressed) at 0x00000000 in 18.6 seconds (effective 112.6 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
================================ [SUCCESS] Took 23.11 seconds ==============================

常见问题

1. 无法上传

esptool.py无法连接到开发板(ESP32,ESP8266…)

Looking for upload port...
Auto-detected: /dev/cu.usbserial-1420
Uploading .pio/build/esp12e/firmware.bin
esptool.py v2.8
Serial port /dev/cu.usbserial-1420
Connecting........_____....._____....._____....._____....._____....._____....._____

A fatal error occurred: Failed to connect to ESP8266: Timed out waiting for packet header
*** [upload] Error 2
============================= [FAILED] Took 27.38 seconds ===================

可能的原因和补救措施:

  • 该模块未处于booltload模式或尚未收到请求。
  • 测试方法:
    • 重置
    • 断开连接/重新连接/重新开始上传
    • 通过更改USB电缆进行
    • 换一个USB端口上
    • 清除闪存
    • 检查是否在设备中检测到板子
    • 用另一个模块进行测试……如果经过几次尝试仍然没有通过,请考虑更换该板子

无法连接串行监视器

默认情况下,官方扩展上的串行端口配置为9600波特。添加了一个参数来设置速度。要使用其他速度,请打开“终端”并运行以下命令pio device monitor -b 115200。

您也可以使用monitor_speed选项在plaformio.ini文件中指定速度。
在这里插入图片描述

如何禁用PlatformIO扩展?

PIO可能会减慢VSCode的启动速度。如果您一次性使用,可以从扩展管理器中将其停用。

在这里插入图片描述

Visual Studio Code是Atom编辑器的很好替代品。非常轻,它的启动速度比Atom快得多。SDK的文档非常齐全

在PlatformIO上手动导入Arduino项目

1从屏幕左侧的工具栏或屏幕底部工具栏的房屋图标打开PIO主页。
在这里插入图片描述

2单击导入Arduino项目以开始导入现有项目。
在这里插入图片描述

选择所需的开发板

在这里,我们将选择[LoLin d1 mini]。

找到并选择Arduino / ESP32 / ESP8266项目文件夹以迁移到PIO。
在这里插入图片描述
启动项目的导入/迁移到PIO

在PlatformIO工作文件夹中创建一个包含项目源代码的新文件夹。默认情况下,工作文件夹位于Windows上的“我的文档”中,

在Projects目录中创建的文件夹以目标日期时间(开发板的名称)为名称,并包含以下元素:

  • lib私有库已移至lib文件夹
  • src将包含所有ino文件(Arduino项目的源代码)
  • platformio.ini是允许您定义环境的配置文件。每个环境都允许您指定开发板的类型(ArduinoESP32ESP8266STM32 …),用于编译的框架以及此处记录的许多其他参数。
    在这里插入图片描述
    文件复制完成后,PIO会生成项目配置文件。
    在这里插入图片描述

PlatformIO IDE(VSCode) 使用第三方库

在实际做一个项目的时候,为了提高效率我们会首选不重复造轮子,所以可能会用到第三方库,而 PlatformIO 为我们整理和提供了一些即装即用的第三方库,本文笔者就带大家了解一下在 PlatformIO IDE (VSCode) 中如何使用和管理这些库。

1. 前言

将使用 Arduino Leonardo 讲解,以文章 PlatformIO IDE(VSCode) 基本使用

2. 第三方库的管理

首先我们打开工程,然后打开 PIO Home 页面,点击左侧的 Libraries 标签打开库的标签页,我们会看到库的标签页中有四个标签页分别是:

  • Registry:仓库,在这里我们可以查找我们需要的第三方库,也能看到按照下载量排序的关键词标签,也能看到最近库的下载排名
  • Installed:在这里我们能看到曾经安装的库,并对它们进行管理
  • Build-in:在这里我们能看到安装的平台和框架中内建的库
  • Updates:在这里我们能看到需要更新的库
    在这里插入图片描述
2.1 库的查找

按照上面提到的需求,我们在 Registry 标签页中查找库,我们在搜索框中搜索定时器对应的英文 Timer:
在这里插入图片描述

在这里插入图片描述

可以看到会列出搜索到的结果,搜索优先会按照框架进行关键词搜索,我们看一下具体的一个条目,比如第一个库 Ticker,每个条目包含的信息如下:

  • 名称及功能描述
  • 适用的框架
  • 适用的平台
  • 关键词标签
  • 其它:下载量、例程数
    在这里插入图片描述

根据第一个描述就符合我们的需求呀,我们点击一下进入库的页面:
在这里插入图片描述

可以看到有五个标签页,这里简单说明一下:

  • Examples:展示库中包含的例程,有的包含多个,可以点击下拉列表选择不同的例程查看代码
  • Installtion:展示如何在项目工程中使用库,在 platformio.ini 文件中如何配置
  • Headers:库中包含的头文件
  • Manifest:这个一般不用关心,展示的是这个库在 PIO 仓库中的配置信息
  • Changelog:更新日志
2.2 库的安装

安装库一般是两种形式,一种是全局安装,其他项目工程也能够使用,另一种是只安装到指定项目工程中。

点击 Install 会默认全局安装,这样其它的工程项目也能使用而不用重复安装。

另外,也可以点击 Install 按钮右边的 ... 按钮完成指定位置的安装:
在这里插入图片描述

这里我们采用全局安装,点击 Install 按钮即可,库安装完成后会有弹窗提示。

2.3 库的卸载

有时有些库可能不再会使用,如果想卸载怎么操作?找到 Librairies 的 Installed 标签页,就会看到我们刚才安装的 Ticker 库,可以看到 Uninstall 按钮,点击它按照提示操作即可完成卸载,点击 Reveal 按钮会打开安装库的目录:
在这里插入图片描述

2.4 库的更新

PIO Home 启动后会检测库的更新,如果库有新的版本发布,就会在 Libraries - Updates 页面出现待更新的库,点击 Update 按钮即可实现更新!

3. 库的使用

3.1 配置

使用第三方库的方式会在库的页面的 Installtion 标签页展示,比如 Ticker 库的:
在这里插入图片描述

需要在 paltformio.ini 文件中添加 lib_deps 项,指定库即可,主要有三种方式:

lib_deps =
# 使用库的名称
    Ticker

# ... 或者使用库的 ID
    1586

# ... 或者使用指定版本的库
    Ticker@3.1.5

# Semantic Versioning Rules
# http://docs.platformio.org/page/userguide/lib/cmd_install.html#description
# Ticker@^3.1.5
# Ticker@~3.1.5
# Ticker@>=3.1.5

我们这里采用第一种方式,最终 blink 项目的 platformio.ini 内容如下:

[env:leonardo]
platform = atmelavr
board = leonardo
framework = arduino
lib_deps =
  # Using a library name
  Ticker

这里要注意的是,一个项目工程极有可能会使用多个库,这是有两种语法配置:

; one line definition (comma + space)
[env:myenv]
lib_deps = LIBRARY_1, LIBRARY_2, LIBRARY_N

; multi-line definition
[env:myenv2]
lib_deps =
  LIBRARY_1
  LIBRARY_2
  LIBRARY_N
3.2 使用库

这样我们就可以在工程中源代码中包含库的头文件然后使用库了,因为毕竟是别人的写的库,所以应该先看一下例程的用法,然后根据自己的需求实现自己需要的功能。

比如还是实现 1s 切换一次 LED 状态实现等的闪烁,只需要编写相应的处理函数,定义新的 Ticker 指定处理函数和时间参数即可,代码如下:

#include <Arduino.h>
#include <Ticker.h>

void blink() {
  static uint32_t state = 0;
  state ^= 1;
  digitalWrite(LED_BUILTIN, state);
}

Ticker timer(blink, 1000, 0, MILLIS);

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  timer.start();
}

void loop() {
  timer.update();
  //放置其它处理操作
}

编译上传程序,顺利的话同样实现了 LED 的秒闪烁。

4. 结语

本文只是简单的说了库管理和使用的基本常用操作,可以满足基本使用需求了,如果需要了解更多内容,可以参考:

Library Management — PlatformIO latest documentation


增强串口功能

我经常需要在项目中获取一系列通过串行端口发送的数据,例如从 Arduino、ESP8266 或 ESP32 等微处理器中获取的数据。

这就是 LiveSerial 的由来,它是一个可以对通过串口获取的数据进行实时绘图和统计,并将获取的数据导出为各种格式的程序。 LiveSerial 的另一个优点是它可以瞬间存储接收到数值。 LiveSerial 使用 C# + WPF 编程,适用于 Windows 7-10。 众所周知,Windows 并非实时系统,因此会产生一些后果。 首先,我们在接收某些数值时可能会出现延迟。 因此,LiveSerial 有两种工作模式:正常模式和同步模式,在同步模式下,微处理器通过发送时间(millis())来标记每个点的时间。 另一个后果是,LiveSerial 的最大采样率相对有限。 例如,LiveSerial 并不是为示波器而设计的。 您可以获得的刷新率取决于您的计算机,但预计最高为每秒 20-50 个采样点。
LiveSerial 下载地址
LiveSerial中文介绍:利用LiveSerial代替Arduino中串口图形显示

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐