PlatformIO如何编译Arduino程序(ESP8266)

       在前面的章节中,我们已经安装了虚拟机Oracle VM VirtualBox,并在虚拟机中安装了64位的Win10系统,而且在Win10系统中安装了VSCode,最后在VSCode中安装了PlatformIO开发环境。

       PlatformIO开发环境可用来配合Arduino UNO、ESP8266、ESP32等类型的开发板进行开发。

       刚好小编手头上就有一块ESP8266的开发板,是NodeMCU,板载4M即32Mbits的FLASH。

       那么,如何在PlatformIO开发环境中使用这块NodeMCU呢。接下来我们来跟着操作步骤看看。

       在这里,我们来用大多数人熟悉的Arduino环境来进行程序的编写。首先,我们来看Arduino环境支不支持我们的这块ESP8266开发板。查看方法可按下面截图的顺序进行操作。

    既然,Arduino环境支持我们的这块ESP8266开发板,那么,我们就开始编写程序吧。

    首先,按下面截图的顺序新建一个工程。

     点击[Finish]按钮后,需要等待从网络下载相关部件,根据您的网络情况,可能需要一小段时间。下载安装部件的过程如下图所示:

    安装好相关部件后,会弹出提示信任选项,直接点击信任即可。

    需要说明的是,我们创建好的工程目录根据屏幕提示位于: C:\Users\Administrator\Documents\PlatformIO\Projects\ESP-12F_Arduino

    另外,需要特别说明的是:如果有相关提示“是否要为 C++ 安装推荐的扩展?”的,请同意并执行安装步骤。

     整个工程创建完成后,在PlatformIO左侧资源管理器中,找到:/src/main.cpp,双击即可打开该文件。

     打开后的main.cpp内容如下所示:

#include <Arduino.h>

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

     可以看得,这就是我们熟悉的Arduino程序结构。引用头文件、一个voide setup()函数,一个 void loop()函数。只不过,在Arduino中,主程序是一个单文件,并且以.ino扩展名命名。而在这里,主程序位于src目录下面,并且是以.cpp扩展名命名。

     那么我们来看看我们刚刚创建的这个工程是否可以正常编译:

     首次编译的时间可能需要比较长,如果正常成功编译后,一般会出现如下的内容:

> Executing task: C:\Users\Administrator\.platformio\penv\Scripts\platformio.exe run <

Processing nodemcuv2 (platform: espressif8266; board: nodemcuv2; framework: arduino)
----------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/nodemcuv2.html
PLATFORM: Espressif 8266 (3.2.0) > NodeMCU 1.0 (ESP-12E Module)
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash        
PACKAGES:
 - framework-arduinoespressif8266 3.30002.0 (3.0.2) 
 - tool-esptool 1.413.0 (4.13)
 - tool-esptoolpy 1.30000.201119 (3.0.0)
 - toolchain-xtensa 2.100300.210717 (10.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 35 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio\build\nodemcuv2\src\main.cpp.o
Generating LD script .pio\build\nodemcuv2\ld\local.eagle.app.v6.common.ld
Archiving .pio\build\nodemcuv2\libFrameworkArduinoVariant.a
Compiling .pio\build\nodemcuv2\FrameworkArduino\Crypto.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\Esp-frag.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\Esp-version.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\Esp.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\FS.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\FSnoop.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\LwipDhcpServer-NonOS.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\LwipDhcpServer.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\LwipIntf.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\LwipIntfCB.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\MD5Builder.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\Print.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\Schedule.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\StackThunk.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\StreamSend.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\TypeConversion.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\Updater.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\WString.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\abi.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\aes_unwrap.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\base64.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\cbuf.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\cont.S.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\cont_util.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_app_entry_noextra4k.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_eboot_command.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_features.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_flash_quirks.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_flash_utils.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_i2s.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_main.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_non32xfer.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_noniso.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_phy.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_postmortem.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_si2c.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_sigma_delta.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_spi_utils.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_timer.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_vm.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_waveform_phase.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_waveform_pwm.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_wiring.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_wiring_analog.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_wiring_digital.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_wiring_pulse.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_wiring_pwm.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\core_esp8266_wiring_shift.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\crc32.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\debug.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\exc-c-wrapper-handler.S.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\exc-sethandler.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\flash_hal.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\gdb_hooks.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\heap.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\hwdt_app_entry.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\libb64\cdecode.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\libb64\cencode.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\libc_replacements.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\mmu_iram.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\reboot_uart_dwnld.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\spiffs\spiffs_cache.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\spiffs\spiffs_check.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\spiffs\spiffs_gc.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\spiffs\spiffs_hydrogen.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\spiffs\spiffs_nucleus.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\spiffs_api.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\sqrt32.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\stdlib_noniso.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\time.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\uart.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\umm_malloc\umm_info.c.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\umm_malloc\umm_integrity.c.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\umm_malloc\umm_local.c.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\umm_malloc\umm_malloc.cpp.o
Compiling .pio\build\nodemcuv2\FrameworkArduino\umm_malloc\umm_poison.c.o
Archiving .pio\build\nodemcuv2\libFrameworkArduino.a
Linking .pio\build\nodemcuv2\firmware.elf
Retrieving maximum program size .pio\build\nodemcuv2\firmware.elf
Checking size .pio\build\nodemcuv2\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [===       ]  34.0% (used 27892 bytes from 81920 bytes)
Flash: [==        ]  24.9% (used 260093 bytes from 1044464 bytes)
Building .pio\build\nodemcuv2\firmware.bin
Creating BIN file ".pio\build\nodemcuv2\firmware.bin" using "C:\Users\Administrator\.platformio\packages\framework-arduinoespressif8266\bootloaders\eboot\eboot.elf" and ".pio\build\nodemcuv2\firmware.elf"
==================================================== [SUCCESS] Took 983.81 seconds ====================================================

终端将被任务重用,按任意键关闭。

       因为新创建的项目主程序里是没有任何功能动作的,因此,我们自己来写一下,类似每种程序入门的Hello Wold !一样,这里,我们就来点个灯,让接在开发板上的一颗蓝色LED灯进行闪烁。这里需要说明的是,小编的板载LED灯是接在ESP8266芯片的GPIO 2引脚上的。所以,我们的/src/main.cpp程序应该修改为:

#include <Arduino.h>

void setup() {
  // put your setup code here, to run once:
  pinMode(2,OUTPUT);//设置GPIO 2的模式为:输出模式
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(2,HIGH);//把GPIO 2设置为高电平,让灯熄灭。
  delay(200);//阻塞延时200MS
  digitalWrite(2,LOW);//把GPIO 2设置为高电平,让灯亮起。
  delay(200);//阻塞延时200MS
}

       接下来,需要把我们的开发板用数据线接到电脑的USB口上,如果您是在物理机中直接开发的,且当前电脑只有一个串口的情况下,是无须进行任何设置的, PlatformIO会自动识别出串口。

       但如果您是在虚似机环境中进行开发的,需要您在虚拟机界面把USB串口设备切换引入虚拟机中:

       把开发板和电脑连接好后,就可以点击VSCode界面最下面的工具栏上的编译上传按钮了:

       编译完成后烧写程序到开发板的过程如下图所示:

       烧写完成后,开发板会重新启动。此时,如无意外的话,就可以看到开发板上面的蓝色LED灯一闪一闪的了。

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于ESP32 Arduino和MPU6050的开发,你可以使用PlatformIO进行项目管理和构建。PlatformIO是一个跨平台的开发环境,支持多种硬件平台和开发框架。 首先,确保你已经安装了PlatformIO插件。你可以在Visual Studio Code中安装PlatformIO插件,或者使用独立的PlatformIO IDE。 接下来,创建一个新的PlatformIO项目。在PlatformIO IDE中,选择"New Project",然后选择适合ESP32开发的开发板。 在你的项目文件夹中,创建一个新的源文件(例如main.cpp),并添加以下代码来初始化和使用MPU6050: ```cpp #include <Wire.h> #include <MPU6050.h> MPU6050 mpu; void setup() { Wire.begin(); mpu.initialize(); // 设置MPU6050的加速度计和陀螺仪量程 mpu.setFullScaleAccelRange(MPU6050_ACCEL_FS_2); mpu.setFullScaleGyroRange(MPU6050_GYRO_FS_250); Serial.begin(115200); } void loop() { // 读取加速度计和陀螺仪的数据 int16_t ax, ay, az; int16_t gx, gy, gz; mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); // 打印数据 Serial.print("加速度计: "); Serial.print(ax); Serial.print(", "); Serial.print(ay); Serial.print(", "); Serial.print(az); Serial.print(" 陀螺仪: "); Serial.print(gx); Serial.print(", "); Serial.print(gy); Serial.print(", "); Serial.println(gz); delay(100); } ``` 这段代码使用Wire库来与MPU6050进行通信,并通过MPU6050库来初始化和读取传感器数据。在setup函数中,你可以设置MPU6050的量程。在loop函数中,它会不断读取加速度计和陀螺仪数据,并通过串口输出。 编译并上传你的程序到ESP32开发板上。在PlatformIO IDE中,点击"Build"按钮进行编译,然后点击"Upload"按钮将程序上传到开发板。 通过串口监视器查看输出。在PlatformIO IDE中,点击"Serial Monitor"按钮可以打开串口监视器,选择正确的串口和波特率(115200),即可看到MPU6050的数据输出。 希望这能帮到你!如果你有任何进一步的问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值