NodeMCU入门(5):Docker Image 构建固件,开启SmartConfig

准备工作

1.NodeMCU模块

2.ESP8266Flasher.exe

3.EspTouch.apk

3.docker toolbox(win7系统) 或 docker(win10以上),本教程是在win7系统上开发,Win7安装Docker

选择构建固件方式

NodeMCU入门(2):在线构建、刷入固件,上传代码 中提到固件编译有三种方式,官方说明,当时我们选择了Cloud Build Service。

Tools

Cloud Build Service

NodeMCU "application developers" just need a ready-made firmware. There's a cloud build servicewith a nice UI and configuration options for them.

Docker Image

Occasional NodeMCU firmware hackers don't need full control over the complete tool chain. They might not want to setup a Linux VM with the build environment. Docker to the rescue. Give Docker NodeMCU build a try.

Linux Build Environment

NodeMCU firmware developers commit or contribute to the project on GitHub and might want to build their own full fledged build environment with the complete tool chain. There is a post in the esp8266.com Wiki that describes this.

做完NodeMCU入门(4):搭建Web服务器,配置网络连接之后想实现SmartConfig时,需要执行wifi.startsmart()方法。

wifi.setmode(wifi.STATION)
wifi.startsmart(0,
    function(ssid, password)
        print(string.format("Success. SSID:%s ; PASSWORD:%s", ssid, password))
    end
) 

执行报错:

NodeMCU custom build by frightanic.com
branch: master
commit: c8ac5cfb912ff206b03dd7c60ffbb2dafb83fe5e
SSL: true
modules: crypto,file,gpio,http,mqtt,net,node,pwm,sjson,tmr,uart,wifi,tls
build built on: 2017-06-10 01:42
powered by Lua 5.1.4 on SDK 2.1.0(116b762)
lua: init.lua:2: attempt to call field 'startsmart' (a nil value)
stack traceback:
init.lua:2: in main chunk
[C]: ?

这问题真的郁闷了半天,构建固件时选择了wifi模块为什么不能调用startsmart?!仔细看文档、仔细看文档、仔细看文档。。。

默认没有开启,这坑货啊,这么常用的功能竟然没开启,无奈之下智能自己动手丰衣足食了。

刚开始是想采用第三种方式Linux Build Environment,因为看到过有大神封装了一个visualbox的虚机提供下载(现在找不到链接了),也找到了中文的教程nodemcu固件编译方法(不是很懂),post in the esp8266.com Wiki  一大片英文字母(感觉有难度)。以前接触过docker,所以就选择Docker Image 方式吧。

构建固件

1. 安装Docker

win7系统参考Win7安装Docker,其它系统参考 https://docs.docker.com/ → 'Get Started' 

 2.获取NodeMCU固件代码

 git clone https://github.com/nodemcu/nodemcu-firmware.git

   也可以在浏览器中打开 https://github.com/nodemcu/nodemcu-firmware.git,下载压缩包,然后解压到C:\Users\zhaobaolong(替换成你的账号名字)\nodemcu-firmware目录下。

  

3.运行nodemcu-build,编译固件

 运行docker输入如下命令:

docker run --rm -it -v "//C/Users/zhaobaolong/nodemcu-firmware":/opt/nodemcu-firmware marcelstoer/nodemcu-build

 然后开始编译,这个过程要等很久,我这大约半个多小时。

 

最后在C:\Users\zhaobaolong\nodemcu-firmware\bin目录下生成了固件文件

 

 刷入固件到NodeMCU模块

没有了保护的模块信息以及版本信息,看着不爽哈,外国小朋友也提出来了,http://stackoverflow.com/questions/41102558/general-questions-about-docker-nodemcu-build

问题

Some general questions about the docker nodemcu-build process:

  1. Is there a way to specify which modules are included in the build? (similar to the way the cloud build service works)

  2. Is there a way to include a description that will appear when the resultant firmware is run?

  3. Is SSL enabled?

  4. The size of the bin file created by the docker nodemcu-build process (from dev branch source) is 405k. A recent build using the cloud service resulted in a bin file of size 444k. The cloud service build only included the following modules: cjson, file, gpio, http, net, node, tmr, uart, wifi, ssl. Why is the docker build bin file, that contains all modules(?), smaller than the cloud build bin file that only contains 10 modules? (i am concerned that my local docker build version is missing something - even though the build process was error free).

答案:

  1. You specify the modules to be built by uncommenting them in the /app/include/user_modules.hfile in the source tree. The default build from the source tree is relatively minimal - not an "all modules" build.

  2. The banner at connection is the "Version" field. The nodemcu-build.com builds change this out for custom text. It is defined in /app/include/user_version.h as the USER_VERSION define. You'll need to embed "\n" newlines in the string to get separate lines.

  3. Yes, the Net module can include limited SSL support (TLS 1.1 only) (TLS 1.2 in dev per Marcel's comment below). You need to enable it in /app/include/user_config.h by defining CLIENT_SSL_ENABLE.

  4. The default module and config setup in user_modules.h / user_config.h is different than the defaults on nodemcu-build.com, so the builds are not likely to be the same out of the box.

 

修改固件重新编译,刷固件 

1.修改\app\include\user_modules.h文件,把 crypto file gpio http mqtt net node pwm sjson tmr uart wifi都放开。有的默认就开了,没有放开的就把前面的注释去掉。

2.修改\app\include\user_config.h文件,把 //#define WIFI_SMART_ENABLE开头的注释去掉,//#define CLIENT_SSL_ENABLE 开头的注释也去掉

3.修改\app\include\user_version.h文件,修改 #define __USER_VERSION_H__ "NodeMCU custom build by zeroes QQ305744659"

4. 保存文件后重新编译,20多分钟完成

docker run --rm -it -v "//C/Users/zhaobaolong/nodemcu-firmware":/opt/nodemcu-firmware marcelstoer/nodemcu-build

5.刷固件,重启模块,没有把预期的模块信息显示出来有点小失望。

wifi.setmode(wifi.STATION)
wifi.startsmart(0,
    function(ssid, password)
        print(string.format("Success. SSID:%s ; PASSWORD:%s", ssid, password))
    end
)

 上传代码,通过手机上的EspTouch测试SmartConfig功能。

完美,准备睡觉已经到两点半了。。。。。

 

参考链接 

http://espressif.com/zh-hans/support/explore/get-started/esp8266/getting-started-guide  

posted @ 2017-06-12 02:39  Zeroes  阅读(6625)  评论(2编辑  收藏  举报