NodeMCU开发环境搭建之PlatformIO (ESP8266)

最近一直在折腾,在尝试各种开发环境,因为手上有几块NodeMCU(ESP8266),就想用它做点东西,之前听说这个芯片是能作为MCU使用的。

我以前熟悉的是Keil集成开发环境,用起来很顺手,自然而然也想延续以前的做法,不过目前ESP并没有Keil的开发环境,所以我到官网上找了一下官方推荐的一些开发环境,发现除了在Linux下使用Xtensa GCC 工具链进行编译以外,还有许多优秀的开发环境可供选择

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第1张图片

 虽然我手上的是NodeMCU的板子 但是之前尝试过 ESPlore工具+lua语言 进行开发,体验比较差,这次想尝试使用 C语言+SDK 进行开发试验。既然是折腾,就选一个以前没有接触过的PlatformIO进行尝试了一下。

PlatformIO 是开源的物联网开发生态系统。提供跨平台的代码构建器、集成开发环境(IDE),兼容 Arduino,ESP8266等。

我们可以在微软的VS Code中以插件的形式安装PlatformIO,这可以说是非常舒服的搭配了。它的官方主页(https://platformio.org/)如下:

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第2张图片

点击绿色按钮 Install PlatformIO Now ,就会转跳到官方的安装教程界面。因为它是VS Code的插件的形式进行使用的,所以只需要安装VSCode 在插件搜索框中输入PlatformIO 点击安装就能是用了,所以说配置起来还是非常方便的。

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第3张图片

VSCode 全称是Visual Studio Code  是微软公司的又一大良心之作,很多人接触到它之后都会不禁发出“嗯,这就是我想要的代码编辑器”这样的感叹。

它一款免费开源的现代化轻量级代码编辑器,支持语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性。软件跨平台支持 Win、Mac 以及 Linux,运行非常流畅。在这里我强烈安利这个代码编辑器。

下面我介绍一下我安装的一些插件,这些插件能够帮助我们更便捷,更舒服的享受这款编译器。

Chinese (Simplified) Language Pack NodeMCU开发环境搭建之PlatformIO (ESP8266)_第4张图片

vscode-icons
NodeMCU开发环境搭建之PlatformIO (ESP8266)_第5张图片

C/C++ms-vscode.cpptools预览版

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第6张图片

哈哈,介绍还是请大家自己去看说明吧,我就不再做翻译官啦,总之这些是很实用的插件。

继续说本次的重点 PlatformIO。

安装过程中,发现了PlatformIO的一个bug,就是对中文路径的支持很不友好,尤其是用户名如果是中文用户名的话会导致安装失败,所以如果你是中文用户名,那还是先建一个英文用户,确保用户文件的名称是英文的再进行安装吧。

下面是如果使用了中文用户名会产生的错误报告,为了方便遇到相同问题的同学找到这篇文章,我把这段错误报告贴在文章里。

Error: Traceback (most recent call last):
  File "", line 1, in
  File "", line 37, in
Exception: PIO Plus: Runtime error

    at C:\Users\中文用户名\.vscode\extensions\platformio.platformio-ide-1.5.0\node_modules\platformio-node-helpers\dist\index.js:1:14992
    at ChildProcess.h (C:\Users\中文用户名\.vscode\extensions\platformio.platformio-ide-1.5.0\node_modules\platformio-node-helpers\dist\index.js:1:5916)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at ChildProcess.cp.emit (C:\Users\中文用户名\.vscode\extensions\platformio.platformio-ide-1.5.0\node_modules\cross-spawn\lib\enoent.js:34:29)
    at maybeClose (internal/child_process.js:925:16)
    at Socket.stream.socket.on (internal/child_process.js:346:11)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at Pipe._handle.close [as _onclose] (net.js:554:12)

正常情况下,安装完插件之后需要重启VSCode,再次打开等待几秒钟后他会自动安装一个python2.7和它自己的一些环境配置,我们等到它安装完成提示 success 之后就可以开始使用了

这里是PlatformIO官方提供的使用教程(https://docs.platformio.org/en/latest/ide/vscode.html#ide-vscode)

官方教程中介绍了如何新建一个工程并开始使用它,介绍了如何通过 platformio.ini 文件来配置编译器的功能 它介绍了如何使用它进行Arduino开发 nodemcu 是可以方便的使用 Arduino 进行开发的 但我这次的目的不是这个,我希望能够使用乐鑫官方的SDK进行开发,下面就介绍一下我的环境配置过程和踩到的一些坑。 

首先打开PlatformIO之后会弹出如下界面

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第7张图片

点击 “New Project” 新建一个项目

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第8张图片

这里我给项目起名 " ESP8266_RTOS_PROJECT ",选择手上的开发板型号" NodeMCU 1.0 ",默认固件类型是Arduino 这里我改成官方的SDK “ ESP8266 RTOS SDK ” ,点击 “ Finish ” 完成对项目的配置。

(PS : 如果你是第一次配置 需要等待较长的时间从网络上下载SDK的Framework。请不要着急呀~)

稍稍等待一下之后,工程自动配置完毕,会在右边的工作区看到已经自动配置好的工作目录如下,其中官方SDK的内容使用链接库的形式给出,并没有显示在这个目录下面,但是官方的SDK里的内容都是存在的,你都可以直接添加头文件调用。包含链接库的目录在“ .vscode ”文件夹下 的 “ c_cpp_properties.json ” 中。我们暂时不需要修改它。

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第9张图片

我们可以自己编写 main.c 文件 也可以直接到例程中复制一份过来。因为SDK中有一些默认必须包含的函数,所以我打算到例程中复制过来一份进行修改。 例程就在PlatformIO默认的下载的目录里。我们打开 “ c_cpp_properties.json ”就可以看到默认目录是:“C:/.platformio/packages/framework-esp8266-rtos-sdk/ ”

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第10张图片

我们在资源管理器中打开这个文件夹,可以看到一个examples的文件夹 这里面存放着一些例子 我们就从这里找一个放进我们之前配置好的工程中

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第11张图片

比如这次我打开examples文件夹下面的 wifi_station_machine_demo ,并把例程放进刚刚配置好的工程中

我们把 wifi_station_machine_demo 文件夹下的 include文件夹中的" .h "文件 放进工程中的 include 文件夹下

       把 wifi_station_machine_demo 文件夹下的 user     文件夹中的" .c "文件 放进工程中的  scr      文件夹下。

(注意:由于工程只默认包含了这两个目录,所以文件复制或者新建只能放进指定的目录中,如果想更换目录或者添加目录需要到 “ c_cpp_properties.json ”文件中添加包含路径)

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第12张图片

文件添加完毕之后我们就配置好了整个环境,并且有一个例程可以跑一下看看效果。点击左下角的编译,可以看到编译的结果。

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第13张图片

接下来可以点击下载,把编译好的固件下载到MCU上去了,

但是!

有一部分情况,在你下载成功之后还是会出现乱码,固件报错 像下面这样

load 0x40100000, len 31356, room 16 
tail 12
chksum 0x08
ho 0 tail 12 room 4
load 0x3ffe8000, len 2132, room 12 
tail 8
chksum 0x43
load 0x3ffe8860, len 904, room 0 
tail 8
chksum 0xa6
csum 0xa6
OS SDK ver: 1.5.0-dev(caff253) compiled @ Oct 23 2017 17:42:20
rf_cal[0] !=0x05,is 0x00

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)
 

没错,我又是为了方便查错误的同学查到这篇文章,特意把详细的错误代买贴了上来

这个问题是源自PlatformIO(当然其他平台也可能出现这种情况,可以参考以下解决方案)默认下载固件的时候只下载更改的部分,而ESP8266 SDK版本的固件 一共有 “ blank.bin ” 、 “ esp_init_data_default.bin ” 、 “ eagle.flash.bin ”、“ eagle.irom0text.bin ” 这4个文件需要烧录,其中前两个是默认配置 一般不需要烧录,所以编译器是默认不烧录这两个文件的,因此如果你的芯片之前没有正确烧录这些文件的话就会因为固件错误而报错 显示上面的错误信息。

(PS:其中 烧录过Arduino的程序后就很可能导致这两个文件被破坏)

根据这个原因,解决办法自然很明朗了,就是在正确的位置重新烧录这些文件就可以了。那么怎么样才能找到这些文件的正确位置呢?当然是到官网,看数据手册啦~

找到乐鑫官网(https://www.espressif.com/)搜索文档ESP8266 找到入门指南 从入门指南中我们可以找到相关的一些信息

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第14张图片 

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第15张图片

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第16张图片 

 

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第17张图片

根据官方文档,我们很容易就确定了下载位置,使用官方提供的 ESP Flash Download Tool 工具就可以向ESP8266进行固件下载了。

(PS:我在下载RTOS版本文件的时候,编译器提示我向0x20000 写入eagle.irom0text.bin 文件 ,NONOS下载的地址是0x10000  这个请根据 eagle.app.v6.ld 文件中的提示来确定)

(PPS:因为RTOS版本是0x20000这个地址我一开始并不知道,踩了好久的坑才找到)

(PPPS:多看官方文档,避免踩坑)

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第18张图片

下载波特率调整到460800下载速度更快哦~


--------------------这是一条华丽的分割线--------------------


在ESP8266上面进行过一次正确的写入操作之后,就可以直接在PlatformIO中进行下载操作了,所有的编辑,编译,下载,返回值读取,操作都能在一个IDE中进行,是不是就很舒服了呢~ 哈哈哈

通过仔细阅读PlatformIO的说明文档,我还发现了一些小技巧,通过对IDE的调教,能让我们的编辑更加高效,使用起来更加舒服。

比如 在 platformio.ini 中 默认的配置如下

[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = esp8266-rtos-sdk

它表示使用的开发平台是ESP8266

开发板是nodemcuv2

固件是RTOS_SDK

其实我们还可以添加自己的个性化设置 比如:

监视器波特率设置:(PlatformIO自带的串口读取工具,在左下角的倒数第二个按钮   波特率的数值可以更改为你需要的波特率 )

monitor_speed = 74880

监视器端口设置:(请根据自己开发板连接的端口修改)

monitor_port = COM5

下载波特率设置:(默认速度115200,更改后下载速度明显变快了许多)

upload_speed = 460800 

下载默认端口:(请根据自己开发板连接的端口修改)

upload_port = COM5 

添加了这几项之后,所有的环境配置就全部完成了。我们就可以愉快地进行开发操作了!

最后我再展示一下,程序下载到芯片之后的运行情况

下载完成:↓

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第19张图片

例程运行结果:↓(PS:例程中默认的串口波特率是74880)

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第20张图片

上面的结果显示程序已经成功运行 wifi没有连接成功 这是因为我们没有修改连接WiFi的用户名和密码 如果你有可以被连接的WiFi,不妨去 user_config.h 文件下修改一下默认的登录WiFi和密码,让其登录成功

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第21张图片

最后结果如下

NodeMCU开发环境搭建之PlatformIO (ESP8266)_第22张图片

例程最终成功执行。

我的ESP8266开发环境的配置及PlatformIO编译器的调教到这里就结束了,欢迎各位和我一起交流分享呀~

 

 

 

你可能感兴趣的:(ESP)