电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
ESP8266之NodeMCU固件编译
分 享
扫描二维码分享
ESP8266之NodeMCU固件编译
esp8266
nodemcu
固件
wybliw
关注
发布时间: 2020-09-02
丨
阅读: 3504
[TOC] --- ## Node M C U介绍 NodeMCU是一款开源的固件,使用Lua脚本语言编程,入门简单,让用户能够像Arduino一样操作硬件IO口,比如:通过esp8266读取温湿度传感器数据,通过pwm控制小灯亮度,驱动OLED模块显示信息等。 **官方地址:** https://github.com/nodemcu/nodemcu-firmware **在线编译地址:** https://nodemcu-build.com/ 目前`NodeMCU V3.0.0`版本支持的模块如下图: ![nodemcu支持的模块](https://cf02.ickimg.com/bbsimages/202009/017d2280a15fcb4a69efdff26fedb569.png "nodemcu支持的模块") 在线编译,需要启用哪个模块,就在前面的框中打上勾。 但是在线编译版,我没有试成功。所以这里就介绍如何自己编译NodeMCU固件。 --- ## 编译环境搭建 ### 所需的工具 * 64位的Ubuntu系统或者Ubuntu虚拟机 * NodeMCU固件SDK(上面的官网获取) 我使用的是64位Ubuntu虚拟机,虚拟机的安装,网上有很多教程,这里就不再赘述。 默认读者已经掌握linux基本命令,不熟悉linux命令的小白请先从网络上学习一些基本linux命令。 打开Ubuntu虚拟机,终端输入以下命令,获取NodeMCU固件SDK。 ```bash git clone https://github.com/nodemcu/nodemcu-firmware.git ``` 第一次使用git工具,可能需要安装git工具,如下图: ![git](https://cf02.ickimg.com/bbsimages/202009/5ae7317121ed83746e2e91b0156b8a42.png "git") 按照提示输入`sudo apt install git` 命令即可安装。 NodeMCU固件SDK获取到后,进入`nodemcu-firmware`文件夹,大概如下图: ![目录](https://cf02.ickimg.com/bbsimages/202009/8f2fdebeb53b234ed3c5449cb818fcd5.png "目录") **简单介绍一下目录:** * `app` nodemcu主要文件夹,里面涉及lua,dht,http,json,u8g2等。 * `bin` 编译最终生成的固件文件在这里。 * `ld` 和链接相关的信息。 * `lua_examples` lua编程示例 * `tools` 交叉编译工具和其他工具等 **配置相关的文件:** * `app/include` 目录下的 `user_config.h` 和 `user_modules.h` 文件。 * `app/include` 目录下的 `u8g2_fonts.h` 是OLED字体相关的。 ### user_config.h文件说明 * 修改固件flash大小 默认是 `#define FLASH_4M`,编译出来的固件是适用于32Mbit Flash的ESP8266模块,比如:ESP-12F。或者启用`#define FLASH_AUTOSIZE`,自动探测Flash大小。 Flash大小对应的配置如下: | Flash大小 | 宏定义配置 | | --------- | -------- | | 32Mbit | FLASH_4M | | 16Mbit | FLASH_2M | | 8Mbit | FLASH_1M | 自己的模块Flash多大,就修改对应大小,这样编译的固件才能运行。 * 修改通信波特率 修改 `#define BIT_RATE_DEFAULT BIT_RATE_115200` 来实现不同的通信波特率。默认是115200。 * 固件数据类型:整形或浮点 取消`//#define LUA_NUMBER_INTEGRAL`前面的注释,启用整形固件。默认是浮点固件。 下面还有其他功能就不一一介绍了,有兴趣可自行编译调试。 ### user_modules.h文件说明 `user_modules.h` 主要是固件相关模块的启用。 默认启用了 ADC、BIT、DHT、GPIO、I2C、MQTT、NET、SPI、TMR等。自己若要启用某个模块,只需取消模块前面的注释即可。 比如启用oled模块,只需启用u8g2即可,模块如下: ```c #define LUA_USE_MODULES_U8G2 ``` --- ### 固件的编译 固件配置好后,就开始编译,第一次编译,NodeMCU会自行下载交叉编译工具和其他工具。 **注:** 把自己的ESP8266交叉编译工具屏蔽掉(若果有的话),使用NodeMCU下载的交叉编译工具,否则可能会编译失败。 * 终端切到`nodemcu-firmware`根目录,开始编译 在终端输入`make`命令,第一次会先下载工具,喝一杯的功夫差不多就编译Ok。 * 编译成功如下图: ![编译成功](https://cf02.ickimg.com/bbsimages/202009/9089200edc7e0761a1b156397c5bf08a.png "编译成功") * 编译成功后,能在`bin`目录下看到2个文件,`0x00000.bin`和`0x00000.bin`。 文件名就是烧录时,要设置的地址`0x00000`和`0x00000`。 --- **可能遇到的问题:** * 启用u8g2后,编译失败,如下: ![u8g2](https://cf02.ickimg.com/bbsimages/202009/801b7f372e9b1d60b73a55cd3a9d344d.png "u8g2") 这是由于固件没有下载u8g2库造成的,此时需要自行下载u8g2库,进入nodemcu的git官网。 进入`nodemcu-firmware/app/u8g2lib/`目录下,点击 `u8g2 @ 2ee84c8` 文件夹,网页会自动跳转到u8g2官网,复制u8g2下载地址。 返回ubuntu虚拟机,终端进入`nodemcu-firmware/app/u8g2lib/u8g2`目录下,输入命令: ```bash git clone https://github.com/olikraus/U8g2_Arduino.git ``` 下载u8g2库,下载完成后,将`U8g2_Arduino`目录下的所有文件剪切到上一级`u8g2`目录下,如下图: ![u8g2目录](https://cf02.ickimg.com/bbsimages/202009/83c6495f220d97273f6ce7c811b012c9.png "u8g2目录") ### 固件的烧写 固件编译成功后,就可以烧写到ESP8266模块中使用了。 **烧写所需要的工具:** * 乐鑫官方工具:flash_download_tool_3.8.5 官方下载地址:https://www.espressif.com/zh-hans/support/download/other-tools ,找到 `Flash 下载工具` ,点击下载即可获取。 将编译好的固件复制到win系统的桌面,解压并打开Flash下载工具,选择`Developer mode` -> `ESP8266 DownloadTool`。 设置固件路径,烧录地址,SPI Mode,Flash Size,串口和波特率,如下图: ![烧录](https://cf02.ickimg.com/bbsimages/202009/7d445e975c5ed330597544a262351790.png "烧录") 先将ESP8266的GPIO0口下拉,使ESP8266上电能进入下载模式(具体说明请看乐鑫官方手册),然后将ESP8266模块通过串口下载器连接到电脑,点击Flash下载工具的`Start`按钮,即可下载固件。 下载成功如下图: ![下载成功](https://cf02.ickimg.com/bbsimages/202009/54d156a09e6816abbc5e24771727e39d.png "下载成功") 使用ESP8266单独的模块,接线稍微繁杂点;有条件的买个ESP8266开发板(NodeMCU开发板),20RMB左右。 我使用的是ESP8266烧录器,自动下载,兼容ESP-12S、12F和12E,ESP-07和07S等,方便更换ESP8266模块,如下图: ![ESPtest](https://cf02.ickimg.com/bbsimages/202009/d1b523c0d4bd501f91f54f52a9944dd0.jpg "ESPtest") --- ### 启动NodeMCU固件 * 需要的工具软件:`ESPlorer` 官方下载地址:https://github.com/4refr0nt/ESPlorer **注:**(可能要科学上网才能下载) `ESPlorer`工具是用java写的,,需要安装java运行环境。 jre下载地址:https://www.java.com/zh_CN/download/ 双击`ESPlorer.bat`或`ESPlorer.jar`都可以打开`ESPlorer`,设置串口和波特率,然后启动ESP8266,烧录后第一次启动时间长一点,如下图: ![启动图](https://cf02.ickimg.com/bbsimages/202009/1de1c5004b13441563e8b44694932d67.png "启动图") 等待`...`跑完后,就可进入nodemcu系统了,由于没有上传`init.lua`文件,所以提示`cannot open init.lua`。 编写一个init.lua文件上传到nodemcu试试效果。 新建文本文件,输入以下内容,保存为`init.lua`,注意文件后缀。 ```lua print("hello nodemcu!") ``` 点击`ESPlorer`工具下面的`Upload`按钮,上传`init.lua`文件。 上传成功后,点击`Reset`按钮,重启nodemcu系统,如下图: ![hello](https://cf02.ickimg.com/bbsimages/202009/6488db43b1942b24ee5bb42d13d91da9.png "hello") 可以看到输出 `hello nodemcu`。 至此,固件编译完成。 --- ## 附录 ### 离线版NodeMCU固件SDK和相关工具 **包含:** * 已经下载好的nodemcu固件sdk * ESPlorer工具 * Flash 下载工具 百度云: 链接:https://pan.baidu.com/s/1EJSnZp9SpfLwPjjZ_4tAbA 提取码:6666 == end ==
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
1
)
wybliw
关注
评论
(2)
登录后可评论,请
登录
或
注册
wybliw
241
天前...
占楼
0
回复
发布
wybliw
240
天前...
在执行 git clone https://github.com/nodemcu/nodemcu-firmware.git 命令时,clone 后 加入 --recursive 选项,可以自动拉取子模块。
0
回复
发布
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交