一、ESP8266入门(基于LUA开发)

来源:互联网 发布:安卓工具类软件 知乎 编辑:程序博客网 时间:2024/06/05 22:49

一入坑便停不下来。。。
还挺有意思的哈,233,,,,
资料杂,自己一个一个去找确实浪费了不少时间,而且大多还都是英文的,需要硬着头皮看。
这次实践入门,更是对英语的重要确信无疑Github必须要玩的6了,多好的东西啊,就那么放到你的眼前就因为你的不懂英文把人家拒之门外,可悲可怜可叹~
另外还对API文档也感悟颇深,多么详细的资料。多么好的教程,可惜自己以前就是不会用。哎~ >

不扯淡了,分享自己探索历程希望你可以少走弯路。

Lua初识

NodeMCU自带LUA的解释器,所以可以用LUA语言给其编写控制程序,LUA是一个轻量级的脚本语言,用C语言编写,编译后解释器大小仅仅100多K。LUA旨在针对内存有很大限制的嵌入式系统。NodeMCU还提供交互命令行环境,比Arduino的编程调试环境友好

NodeMCU还可以支持Arduino的IDE对其编程,简介参见这篇
Blog:https://lifeinplaintextblog.wordpress.com/nodemcu-arduino-ide-2/
首先你要知道它是一个脚本语言,如果你有学过脚本语言比如JS、python的话,直接看API文档就差不多了。

突然有那么点感悟,脚本语言似乎大同小异,虽然我还是个渣渣。脚本语言真的好写好用,好玩,哈哈哈哈哈~~~

当然了呢,如果你未曾学过任何脚本语言的话这个当然也可以作为你的第一门脚本语言来学习,入门个人感觉也是相当快的,不会了再记得查API文档就行了。

(在NodeMCU的学习更新中还会再开一个专题来记录下Lua)

NodeMCU的两种开发方式一种是AT命令,
另一种就是基于Lua的开发了。(目前自己是这么理解的)

所以呢,入门NodeMCU第一步当然是入门Lua了。

NodeMCU

像 Arduino 一样操作硬件 IO 提供硬件的高级接口,可以将应用开发者从繁复的硬件配置、寄存器操作中解放出来

用交互式 Lua 脚本,像 Arduino 一样编写硬件代码!

用 Nodejs 类似语法写网络应用 事件驱动型 API 极大的方便了用户进行网络应用开发,使用类似 Nodejs 的方式编写网络代码,并运行于 5mm*5mm 大小的 MCU 之上,加快物联网开发进度。

超低成本的 WIFI 模块 用于快速原型的开发板,集成了售价低于 10 人民币 WIFI 芯片 ESP8266,提供性价比最高的物联网应用开发平台。

基于乐鑫 ESP8266 的 NodeMCU 开发板,具有 GPIO、PWM、I2C、1-Wire、ADC 等功能,结合 NodeMCU 固件为开发提供最快速的途径。
这里写图片描述

这个开发板的名字叫 NodeMCU DevKit 别问我为啥,乐鑫爸爸起的好名字。

NodeMCU —> 节点微控制单元

ESP8266也只是一款芯片而已,ESP 12E是用ESP8266做的WiFi模块

刷固件
怎么样?固件!!
牛逼不?哈哈哈,,,
其实呢?不然,当你习惯它的叫法就好了。不就是个底层嘛,有啥了不起嘞!:)tao

什么叫固件?

就是ESP8266芯片内部预先写入的程序,可以简单记忆为:固定在芯片里的软件叫固件。
固件是基础程序,本事再大的芯片也需要固件的支持才能运行高级程序。 固件是硬件的命根子。

刷固件的软件这里取:
https://github.com/nodemcu/nodemcu-flasher

-注意下载的系统位数要对应

然后呢,开始我们的表演:

第一步

选择现有的固件:
固件去哪搞嘞?

你可以自己写SDK,当然对于我们新手一般上不了那种高度。

巧了,人家有个自定义模块固件!!
https://nodemcu-build.com/

选择master
这里写图片描述
自定义模块提供了各种各样的模块,包括

传感器,LED驱动,通信协议等等,选择自己感兴趣的模块。 默认已经选择了一些模块。

提交后,过一会就会收到邮件。 邮件里面有两个bin文件的下载地址,一个是float,一个是integer。
float的比较大,下载那个任君选择,区别是带不带float。

我选择了
这里写图片描述

adc,bit,,coap,crypto,enduser_setup,file,
rtcfifo,rtcmem,rtctime,sjson,sntp,tmr,uar,
twebsocket,wifi,ws2812

杂项(不选也没啥事)
这里写图片描述

对了关于上面的邮箱(不支持QQ,可以申请微软的OutLook)
注意输入两次,并且第二次不能复制,完了之后稍等片刻,就可以收到编译好的bin文件直接用就行。

如果采用SDK开发的话,直接可以用eclipse编译的Bin文件就行

第二步:

打开刷固件的软件,“Config”下选择你要的bin 文件
这里写图片描述

然后“Operation”中点击Flash就可以开始刷了

这里写图片描述

更新:

不知道啥时候这个固件上面加了新选项功能:
这里写图片描述

关于那个第二个的 ‘Debug On’倒是对于调试挺好用的!
第三个现在没试过,欢迎在下面占坑评论!

ESPlorer编写程序

下载:https://esp8266.ru/esplorer/
这里写图片描述

一般自动选择COM口,如果没有选择再手动来一下就OK。
编写第一个小程序“HelloWorld”

tmr.alarm(0, 1000, tmr.ALARM_AUTO, function()    print("Hello NodeMCU!\n")    end)

lua补充:

tmr.alarm(1,2,3,4)

4个参数的含义分别为定时器×、定时间ms、模式、回调函数
模式有三个可供选择:

tmr.ALARM_AUTO –>自动重置
tmr.ALARM_SINGLE–>单次触发
tmr.ALARM_SEMI –>手动重置

今天遇到几个问题记录一下:
也许你也会遇到:
①固件烧完之后,怎么下程序都下不进去的问题解决

其实也不是程序的问题,更不是固件的问题。而是波特率的选择问题,查阅的网上的说法,没有一个标准的,实践也没有发现固定的,也许超出自己的知识体系吧。一般而言,所谓的一般从云编译下载的固件,波特率选择115200

而我在实验杨大神的这个实验的时候发现,115200不行,必须改为9600才行。
传送门:http://www.cnblogs.com/yangfengwu/p/6243619.html

更新:

随着理解的加深,这里对固件稍写不进去的情况进行个人认知层面的简单分析。

首先呢,要知道程序的下载是通过串口的,当然你如果之前的程序是有关操作串口的话,如果模块一上电,就开始执行我们之前的程序,我们新写的程序也得通过串口烧录,那么结果可想而知了!怎么办呢?

莫急。。。。。。

解决方案:

1. 多次重复烧写固件
无奈中的无奈之举,效果然而也并不是非常好,这种办法能不能治好看你运气了!

2.刷写LUA固件和AT交叉进行

3. 进行地址改写(这个方法我觉得应该是最实用的!!!)
怎么个改写地址法呢?看图,一切都明白了!
这里写图片描述
就是想法把原来的lua操作串口的程序给破坏掉,而我们的程序又是在FLASH中,那么多次改变烧录地址,不就很有可能给刷掉吗?!!!

像这种情况怎么避免呢?

简单,你想啊,为了留有时间下载程序,哦不,应该讲清除你之前的程序,你完全可以用定时器进行定时,等多久后再执行你现在的程序啊。
在这期间,可以疯狂地进行

file.remove("init.lua");

②部分固件的更新导致语句有所变化

后来也是杨大神帮忙解决的,非常感谢。
具体的修改杨大神也在它的博客写了。
传送门:http://www.cnblogs.com/yangfengwu/p/6407727.html

记录一下两次的代码

old:    wifi.setmode(wifi.STATIONAP)    wifi.sta.config("ACLAY","wange903")    wifi.sta.connect()new:    wifi.setmode(wifi.STATION)      APConfig={}    APConfig.ssid="ACLAY"    APConfig.pwd="wange903"    wifi.sta.config(APConfig)
原创粉丝点击