您当前的位置:首页 > 电子 > 嵌入式系统

自己动手编译nodemcu固件(ESP8266)

时间:07-20来源:作者:点击数:

起因或者说好处

最近在玩ESP8266 + BMP280 的APRS气象数据报,其实很早之前就看到过BG6CQ老师的github上的软件仓库 https://github.com/bg6cq/nodemcu_bme280 ,也刚好买过一块esp8266神器,然后之前买电子元件的时候还买过BMP280温度气压计,于是刻了快小PCB搭了个AMS1117-3.3的供电玩过。但那个时候模块之间,电源之间都是杜邦线和跳线焊接飞来飞去。非常不适合长期固定使用。后来就给扔盒子里吃灰了。

最近换了我大UOS系统,想着练练手,用KiCAD画了一块板子,再也没飞线了,然后还加了锂电池以及太阳能电池板供电。这样可以不需要接电源直接放在有光照的地方长期工作了。

本来这事就算完成了,欢迎访问 BG6CQ老师的APRS服务器 http://202.141.176.3/ ,搜索BI8AKT-12就能看到我的气象站了。但是想着esp8266这么彪悍的板子带了ADC,正好还可以把电压给检测了,顺便放到气象报文里一起传上来的,这样以后远程也可以随时掌握锂电池电压,而不用时不时拿万用表去量一下看还有电没有了。

在这里插入图片描述

但是Lua代码稍微一改,传上去发现BG6CQ大佬的固件是没有打包ADC功能的,没法用,必须要重新刷固件。于是乎想着大家伙平时都在用的那个固件编译网站,可以选完模块就自动给你编译好固件,打开页面访问后,一顿操作,点了提交后,网页直接报个错,说我选的模块太多了,后面我又老老实实的减少模块再试,报错还是一样的,知道最后我只选了一个模块还是报这个错,我就觉得不对劲了,马上XX云弄个虚拟机主机从国外的IP访问过去,发现就啥都正常,选多个模块都不报错,这个网站应该是对中国IP做了限制了,XX对抗难道都提现到民间层面了吗 ?国内访问知会给他带来广告点击量,而不会真正的给你生成固件。国外IP直接一次性搞定,但TMD我等了一下午也没等到他发邮件通知我固件是否编译好了。

最后还是自己动手丰衣足食,自己编译吧,反正各种嵌入式固件我也编译的不少了,人家代码都写全了你动手编译一下还是应该的,白嫖不要太过分。

步骤

  1. github克隆代码,速度慢的也可以用国内gitee.com去先从github镜像一下后再从gitee克隆,但是
    得加个递归,因为他这个里面有一些字模块不在这个仓库
git clone --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git
  1. 编译,这个nodemcu固件其实已经做的很稳定了,而且编译也极其方便,一条命令 make 就搞定,连交叉编译工具链都给你自动去下载了。

要编译出你需要的模块直接修改这个文件就好了。

app/include/user_modules.h
  1. 编译完后就是刷机了,这个地方我还吃了个粗心的亏,看bg6cq老师的刷机命令是一条命令搞定的
 esptool.py --port COM3 write_flash 0 nodemcu-master-11-modules-2018-11-01-11-20-13-float.bin

然后我看编译的那个bin目录下有两个文件,就拿那个300多k的大的文件直接刷进去,结果死活启动不了,串口全是乱码(其实是代码已经跑飞了),后面一度以为我USB转TTL线跑不了115200那么高的波特率,还专门编译一版9600波特率的固件,发现现象是一样的,后面回头仔细再阅读了官网的文档:https://nodemcu.readthedocs.io/en/release/flash/#which-files-to-flash ,才发现,人家说的很清楚了,自己编译的会产生两个bin文件,要分别刷到0x00000和0x10000两个地址,折腾了快1个多小时才发现。

后面直接分开刷

./esptool.py --port /dev/ttyUSB0 write_flash 0x00000 ./0x00000.bin
./esptool.py --port /dev/ttyUSB0 write_flash 0x10000 ./0x10000.bin

这样就完全正常了。

后记和参考

刷完自己编译的带ADC模块的固件后,发现之前的Lua脚本报错,仔细看了下,tmr里面的语法和2018年的时候不一样了,于是乎参考官网手册改了改格式就好了。这样就供电的锂电池电压检测也有了,温度和气压也有了,为了省电,采用深度睡眠,半个小时唤醒一次采集一下温度电压发送出去,然后再进入深度睡眠,通过前面2周的使用,这套小玩意儿用了2周电池电压还是保持在刚开始放到窗户边的4.0几伏,基本上白天太阳能电池板的充电能满足一整天的消耗,只要有光,这玩意就能一直运行,完全不用关心它。

下一步就是把FreeCAD再复习一下,给他做个外壳3D打印出来。

参考连接:

  • https://nodemcu.readthedocs.io/en/release/build/
  • https://github.com/bg6cq/nodemcu_bme280
  • https://hub.docker.com/r/marcelstoer/nodemcu-build/
  • https://github.com/nodemcu/nodemcu-firmware
  • 那个坑爹的自动build 固件的网站我就不列出来了,随便一搜就能搜出来,不过中国的IP访问过去只能给它增加广告收入,得不到任何好处。还是自己编译吧。
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门