SDK编译环境安装包的安装、编译与烧录教程node
【支持最新版AT、IOT及LUA源码编译,附源码】python
一、安装包Fans_ESP8266_SDK_Make.exegit
下载地址:http://pan.baidu.com/s/1pJ6w1tDgithub
安装后在C盘下生成三个文件夹:c:\python2七、c:\usr、c:\ESP8266_SDK_Fans_V2.0【最新固件源代码】编程
二、安装api
同时肯定电脑的系统时间为最新的(不要设置成过去的日期和时间,如2013年1月1日。)app
而后,点击Fans_ESP8266_SDK_Make.exe进行安装less
注:必定要选择默认安装,即:C:\函数
点击安装
注:安装过程当中提示,选择肯定与容许便可。
完成安装后,将
C:\usr\xtensa\XtDevTools\install\tools\RC-2010.1-win32\XtensaTools\Tools\lic\license.dat
编辑修改里面的两个HOSTID=后面的值为本电脑的MAC值(即物理地址),保存便可完成注册。
将SDK的源代码复制,这里分三种状况,具体操做以下:
(1)若是是AT源代码,则只须要拷贝AT文件夹里的三个文件夹driver、include、user到C:\usr\xtensa\esp_iot_sdk\app里面。
注:只拷贝这三个文件夹的文件,其余不须要。
(2)若是是IOT源代码,则须要拷贝如下几个文件夹:
到C:\usr\xtensa\esp_iot_sdk\app里面,其余的不须要拷贝。
(3)若是是LUA源代码,则须要拷贝如下几个文件夹:
到C:\usr\xtensa\esp_lua_sdk\app里面,其余的不须要拷贝。
而后,运行C:\usr\install里的xtensa_IOT或者xtensa_LUA
在命令提示符状态下输入:cd app
接着,输入make clean指令对编译环境进行清除(进行两次清除操做)。
而后输入make指令对源代码进行编译操做
编译成功后(无错误提示,特别是代码的编译错误),输入makebin,最终输出Fans_SDK_flash.bin固件。
编译成功,最终输出Fans_SDK_flash.bin固件。
(存放在C:\usr\xtensa\esp_iot_sdk\bin\Fans_SDK_flash.bin)
最后,将固件烧录。
固件接线方法:采用USB转TTL串口链接模块与PC
VCC----à3.3
GND--àGND
CH_PD--à3.3
GPIO0--àGND
RX--àTX
TX--àRX
其他引脚为空。
模块上电后,确保电脑的串口只有模块一个,而后输入burnbin,进入烧录,进度完成后,烧录固件完成。
或者使用ESP8266一键烧写工具-显MACv0.91-x86.exe进行烧录:
先把固件导入到INTERNAL://FLASH这个选项中。
导入后:
最后点击一键烧写:
附:
本安装包纯绿色安装,若是不须要这个编译环境,能够直接删除如下三个文件夹就完成卸载。
C:\usr
C:\python27
C:\ESP8266_SDK_Fans_V2.0【最新版SDK代码】
固件启动运行接线方法:采用USB转TTL串口链接模块与PC
VCC----à3.3
GND--àGND
CH_PD--à3.3
RX--àTX
TX--àRX
其他引脚为空。
若有什么问题请联系: Q群【ESP8266开发与应用】222651602
LUA源码开发教程
NodeMcu介绍:(一) 概述
NodeMcu是什么?
NodeMcu是一款运行于乐鑫ESP8266芯片之中的可编程固件。
它以lua语言为基础,同时提供了封装esp8266硬件操做的高级API,可让开发者以相似于arduino的方式与底层硬件打交道,使软件开发人员轻松操做硬件设备;同时NodeMcu还提供了事件驱动型的网络API,Nodejs风格的编程方式更是让互联网开发人员如鱼得水。
目前NodeMcu推出的第一代开发板NodeMcu Dev Kit,对安信可科技推出的esp8266封装模块ESP12进行扩展,包括了:
D1~D10:都可复用为GPIO,PWM,I2C,1-Wire
A0:1路ADC
USB供电
USB转串口调试接口
可用RAM为20Kbyte;目前采用512K FLash,用户可用存储空间150Kbyte。同时使用NodeMcu Flash Programmer自动烧写固件。
低成本的ESP8266硬件、高度抽象NodeMcu API将助推众多开发者们的创造性想法,让您的原型开发快速推动!
NodeMcu介绍:(二)固件烧写
准备工做:
1、拿到NodeMcu的开发板
NodeMcu开发板基于乐鑫esp8266进行拓展,引出经常使用管脚,方便使用者进行基于NodeMcu-firmware的原型开发。
2、下载 NodeMcu Frimware Programmer
NodeMcu提供了烧写固件的专用工具,根据您的操做系统能够选择下载 32位操做系统版 或者 64位操做系统版1。
3、下载NodeMcu固件
最新版的NodeMcu固件,请点击此处下载。
4、一根micro-USB数据线
开始:
1、使用USB数据线链接计算机与NodeMcu开发板。
第一次链接时,计算机会弹出安装驱动的提示,请搜索下载CH340的驱动,能够在计算机->设备管理器中查看USB转serial是否安装成功。
2、运行NodeMcu Firmware Programmer烧写固件
NodeMcu Firmware Programmer(如下简称NFP)提供了NodeMcu Firmware的自动烧写功能,在成功链接计算机与NodeMcu开发板以后,打开NFP并选择Config选项,点击第一栏的 ,选择已经下载的NodeMcu固件。如图所示
而后选择“Operation”,出现以下图状态:
点击“Flash”,进行固件烧写。状态以下:
等待烧写结束,以下
至此,NodeMcu固件已经烧写至NodeMcu开发板。关闭NFP,断开USB连线。
3、打印Hello world
再次链接计算机与NodeMcu开发板,打开调试软件,推荐使用Tera Term,初次打开TeraTerm需进行简单配置,SeraialPort选择设备管理器中显示的CH340USB转串口的端口号。
点击OK进入主界面。
此时输入:
print("hello world")
至此,NodeMcu Firmware已经正式运行在NodeMCU开发板中,您能够经过咱们提供的API及文档1进行原型开发,Good Luck!
NodeMcu介绍:(三)启动文件init.lua
启动过程当中的init.lua
如图所示,当用户从新供电或者执行node.restart()函数以后,NodeMcu Firmware将会从新启动,启动过程当中的最后一步是执行init.lua文件,若是在NodeMcu中不存在此文件,或者此文件内容不可执行,则会弹出如上图中的lua:cannot open init.lua。
若是用户想要在启动后自动执行用户本身的代码,那么能够在init.lua写入最简单的dofile("yourfile.lua")便可。NodeMcu在下次从新启动以后,即可自动跳转执行“yourfile.lua” ,达到相似于bootloader的做用,固然用户也能够在init.lua中写入其余的lua代码,如:能够进行wifi设置,获取ip等操做。
具体代码以下:
file.open("init.lua","w+")
file.writeline([[print("hello world")]])
file.close()
文件操做函数请参考API文档
Tera Term中显示以下
而后执行 node.restart(),NodeMcu将会从新启动,并自动执行init.lua,执行效果以下:
NodeMcu介绍:(四)下载*.lua文件
在前一篇文章中咱们介绍了如何使用"init.lua"文件,要注意的是咱们经过NodeMcu固件提供的file模块相关函数建立、修改并保存"init.lua"文件,咱们的文件内容只有一行代码“print("hello world")",经过调试窗口TeraTerm便可进行上述操做,可是当文件中有较多的代码后,上述经过调试窗口逐行输入的方式就不合适了,下面咱们就介绍一下如何经过NodeMcu Studio 2015进行代码下载。
关于NodeMcu Studio 2015
NodeMcu Studio 2015是用于NodeMcu固件下载用户代码的工具软件,目前仅支持Windows 7和Windows XP(须要安装.Net FramWork 4.0)。用户须要将已经编写好的*.lua代码复制到文件目录下的”Lua Programs“文件夹下,而后运行NodeMcu Studio 2015.exe,配置串口,并在文件栏中选择须要下载的文件,点击”Download“,下载至NodeMcu。
准备*.lua代码
用户须要预先编辑好要下载的lua代码文件,此处咱们新建了"init.lua"和"list.lua",代码分别以下:
--init.lua
print("set up wifi mode")
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","PassWord")
--here SSID and PassWord should be modified according your wireless router
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip()== nil then
print("IP unavaiable, Waiting...")
else
tmr.stop(1)
print("Config done, IP is "..wifi.sta.getip())
--dofile("yourfile.lua")
end
end)
--list.lua
l = file.list();
for k,v in pairs(l) do
print("name:"..k..", size:"..v)
end
其中init.lua用于设置nodemcu wifi的工做模式并获取ip,再成功获取ip以后,能够选择执行dofile("yourfile.lua");list.lua文件用于列出nodemcu文件系统中当前的文件。将这两个文件复制到Lua Programs文件夹中。
运行NodeMcu Studio 2015.exe文件
运行软件,并在All Programs一栏中选择init.lua,点击Download,直至出现以下界面,文件成功下载至NodeMcu。
而后一样的,将list.lua文件也下载至NodeMcu中
关闭NodeMcu Studio 2015.exe
测试下载文件
打开TeraTerm,输入:
node.restart()
而后执行:
dofile("list.lua")
执行结果:
列出当前文件为init.lua和list.lua
获取NodeMcu Studio 2015
如今,您能够经过咱们提供的简单开发工具NodeMcu Studio 2015进行代码下载,获取地址:
NodeMcu Studio 2015.rar (19.7 KB)
如今就编辑你本身的lua代码,把想法付诸实现吧!
NodeMcu 编程示例:读取气压计bmp085的数据
bmp085介绍
BMP085大气压传感器是一款廉价的精密气压、温度传感器,使用I2C通信协议,使用方便,其主要参数:
· 压力传感器范围:300-1100 hPa(对应海拔9000米 至 -500米)
· 分辨率: 0.03hpa/0.25米
· 温度传感器范围:-40℃ +85℃ ±2℃偏差值
· I2C数据接口
· 3.3V 5V双电平方案
------------------------------------------------------------------------
-- BMP085 I2C module for NODEMCU
-- NODEMCU TEAM
-- LICENCE: http://opensource.org/licenses/MIT
-- Christee <Christee@nodemcu.com>
------------------------------------------------------------------------
local moduleName = ...
local M = {}
_G[moduleName] = M
--default value for i2c communication
local id=0
--default oversampling setting
local oss = 0
--CO: calibration coefficients table.
local CO = {}
-- read reg for 1 byte
local function read_reg(dev_addr, reg_addr)
i2c.start(id)
i2c.address(id, dev_addr ,i2c.TRANSMITTER)
i2c.write(id,reg_addr)
i2c.stop(id)
i2c.start(id)
i2c.address(id, dev_addr,i2c.RECEIVER)
local c=i2c.read(id,1)
i2c.stop(id)
return c
end
--write reg for 1 byte
local function write_reg(dev_addr, reg_addr, reg_val)
i2c.start(id)
i2c.address(id, dev_addr, i2c.TRANSMITTER)
i2c.write(id, reg_addr)
i2c.write(id, reg_val)
i2c.stop(id)
end
--get signed or unsigned 16
--parameters:
--reg_addr: start address of short
--signed: if true, return signed16
local function getShort(reg_addr, signed)
local tH = string.byte(read_reg(0x77, reg_addr))
local tL = string.byte(read_reg(0x77, (reg_addr + 1)))
local temp = tH*256 + tL
if (temp > 32767) and (signed == true) then
temp = temp - 65536
end
return temp
end
-- initialize i2c
--parameters:
--d: sda
--l: scl
function M.init(d, l)
if (d ~= nil) and (l ~= nil) and (d >= 0) and (d <= 11) and (l >= 0) and ( l <= 11) and (d ~= l) then
sda = d
scl = l
else
print("iic config failed!") return nil
end
print("init done")
i2c.setup(id, sda, scl, i2c.SLOW)
--get calibration coefficients.
CO.AC1 = getShort(0xAA, true)
CO.AC2 = getShort(0xAC, true)
CO.AC3 = getShort(0xAE, true)
CO.AC4 = getShort(0xB0)
CO.AC5 = getShort(0xB2)
CO.AC6 = getShort(0xB4)
CO.B1 = getShort(0xB6, true)
CO.B2 = getShort(0xB8, true)
CO.MB = getShort(0xBA, true)
CO.MC = getShort(0xBC, true)
CO.MD = getShort(0xBE, true)
end
--get temperature from bmp085
--parameters:
--num_10x: bool value, if true, return number of 0.1 centi-degree
-- default value is false, which return a string , eg: 16.7
function M.getUT(num_10x)
write_reg(0x77, 0xF4, 0x2E);
tmr.delay(10000);
local temp = getShort(0xF6)
local X1 = (temp - CO.AC6) * CO.AC5 / 32768
local X2 = CO.MC * 2048/(X1 + CO.MD)
local r = (X2 + X1 + 8)/16
if(num_10x == true) then
return r
else
return ((r/10).."."..(r%10))
end
end
--get raw data of pressure from bmp085
--parameters:
--oss: over sampling setting, which is 0,1,2,3. Default value is 0
function M.getUP_raw(oss)
local os = 0
if ((oss == 0) or (oss == 1) or (oss == 2) or (oss == 3)) and (oss ~= nil) then
os = oss
end
local ov = os * 64
write_reg(0x77, 0xF4, (0x34 + ov));
tmr.delay(30000);
--delay 30ms, according to bmp085 document, wait time are:
-- 4.5ms 7.5ms 13.5ms 25.5ms respectively according to oss 0,1,2,3
local MSB = string.byte(read_reg(0x77, 0xF6))
local LSB = string.byte(read_reg(0x77, 0xF7))
local XLSB = string.byte(read_reg(0x77, 0xF8))
local up_raw = (MSB*65536 + LSB *256 + XLSB)/2^(8 - os)
return up_raw
end
--get calibrated data of pressure from bmp085
--parameters:
--oss: over sampling setting, which is 0,1,2,3. Default value is 0
function M.getUP(oss)
local os = 0
if ((oss == 0) or (oss == 1) or (oss == 2) or (oss == 3)) and (oss ~= nil) then
os = oss
end
local raw = M.getUP_raw(os)
local B5 = M.getUT(true) * 16 - 8;
local B6 = B5 - 4000
local X1 = CO.B2 * B6 / 4096
local X2 = CO.AC2
local X3 = (X1 + X2)*B6/2048
local B3 = CO.AC1*(2^os) + (X3*2^os + 2)/4 --local B3 = ((CO.AC1*4 + X3)*2^os + 2)/4
X1 = CO.AC3 -- * B6 /8192
X2 = CO.B1 * B6 /32768 -- * B6 / 8192
X3 = ((X1 + X2)*B6/8192 + 2)/4
local B4 = CO.AC4 * (X3 + 32768) / 32768
local B7 = (raw -B3) * (50000/2^os)
local p = B7/B4 * 2
X1 = (p/256)^2
X1 = (X1 *3038)/65536
X2 = (-7357 *p)/65536
p = p +(X1 + X2 + 3791)/16
return p
end
--get estimated data of altitude from bmp085
--parameters:
--oss: over sampling setting, which is 0,1,2,3. Default value is 0
function M.getAL(oss)
--Altitudi can be calculated by pressure refer to sea level pressure, which is 101325
--pressure changes 100pa corresponds to 8.43m at sea level
return (M.getUP(oss) - 101325)*843/10000
end
return M
bmp085采集代码以模块的形式编写,提供了5个对外调用的函数:
init(sda, scl) --初始化I2C总线
getUT() --返回温度
getUP_raw() --返回未校准的气压值
getUP() --返回校准后的气压值
getAL() --返回计算高度
将文件命名为bmp085.lua,并使用NodeMcu Studio 2015下载到NodeMcu中,而后打开TeraTerm进行测试。
调用bmp085模块,并获取数据
从新启动NodeMcu
node.restart()
当init.lua执行完毕以后,输入以下代码,引用bmp085模块:
b=require "bmp085"
执行初始化操做:
b.init(8,9) --这里要用户根据需求映射sda 和 scl到NodeMcu的 IO
而后调用getUT(), getUP(), getAL(),获取响应的数据,结果以下:
如上图,所处环境的温度19.0摄氏度,气压值102596Pa,海拔高度107m(高度为估算值)。
释放bmp085模块
模块引用完毕以后,请及时释放bmp85所占用的内存,释放方法为:
b = nil --此处b由于用户定义的变量
bmp085 = nil
package.loaded["bmp085"] = nil
释放以前和释放以后的内存对比: