ESP8266-SDK编译环境安装包的安装、编译与烧录教程【windows】

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

安装前确认以前没有安装过xtensa,若是安装过则请:clip_image002网络

同时肯定电脑的系统时间为最新的(不要设置成过去的日期和时间,如2013年1月1日。)app

而后,点击Fans_ESP8266_SDK_Make.exe进行安装less

clip_image004

注:必定要选择默认安装,即:C:\函数

点击安装

clip_image006

注:安装过程当中提示,选择肯定与容许便可。

完成安装后,将

C:\usr\xtensa\XtDevTools\install\tools\RC-2010.1-win32\XtensaTools\Tools\lic\license.dat

clip_image008

使用clip_image010

编辑修改里面的两个HOSTID=后面的值为本电脑的MAC值(即物理地址),保存便可完成注册。

clip_image012

clip_image014

将SDK的源代码复制,这里分三种状况,具体操做以下:

(1)若是是AT源代码,则只须要拷贝AT文件夹里的三个文件夹driver、include、user到C:\usr\xtensa\esp_iot_sdk\app里面。

clip_image016

注:只拷贝这三个文件夹的文件,其余不须要。

(2)若是是IOT源代码,则须要拷贝如下几个文件夹:

clip_image018

到C:\usr\xtensa\esp_iot_sdk\app里面,其余的不须要拷贝。

(3)若是是LUA源代码,则须要拷贝如下几个文件夹:

clip_image020

到C:\usr\xtensa\esp_lua_sdk\app里面,其余的不须要拷贝。

而后,运行C:\usr\install里的xtensa_IOT或者xtensa_LUA

clip_image022

在命令提示符状态下输入:cd app

clip_image024

接着,输入make clean指令对编译环境进行清除(进行两次清除操做)。

clip_image026

而后输入make指令对源代码进行编译操做

clip_image028

clip_image030

编译成功后(无错误提示,特别是代码的编译错误),输入makebin,最终输出Fans_SDK_flash.bin固件。

clip_image032

clip_image034

编译成功,最终输出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,进入烧录,进度完成后,烧录固件完成。

clip_image036

或者使用ESP8266一键烧写工具-显MACv0.91-x86.exe进行烧录:

先把固件导入到INTERNAL://FLASH这个选项中。

clip_image038

导入后:

clip_image040

clip_image042

最后点击一键烧写:

clip_image044

附:

本安装包纯绿色安装,若是不须要这个编译环境,能够直接删除如下三个文件夹就完成卸载。

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是否安装成功。

clip_image045

2、运行NodeMcu Firmware Programmer烧写固件

NodeMcu Firmware Programmer(如下简称NFP)提供了NodeMcu Firmware的自动烧写功能,在成功链接计算机与NodeMcu开发板以后,打开NFP并选择Config选项,点击第一栏的clip_image046 ,选择已经下载的NodeMcu固件。如图所示
clip_image047

而后选择“Operation”,出现以下图状态:
clip_image049
点击“Flash”,进行固件烧写。状态以下:
clip_image051
等待烧写结束,以下
clip_image053
至此,NodeMcu固件已经烧写至NodeMcu开发板。关闭NFP,断开USB连线。

3、打印Hello world

再次链接计算机与NodeMcu开发板,打开调试软件,推荐使用Tera Term,初次打开TeraTerm需进行简单配置,SeraialPort选择设备管理器中显示的CH340USB转串口的端口号。
clip_image054
点击OK进入主界面。

此时输入:

print("hello world")

NodeMcu响应以下:
clip_image055

至此,NodeMcu Firmware已经正式运行在NodeMCU开发板中,您能够经过咱们提供的API及文档1进行原型开发,Good Luck!

NodeMcu介绍:(三)启动文件init.lua

启动过程当中的init.lua

clip_image056
如图所示,当用户从新供电或者执行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中显示以下
clip_image057

而后执行 node.restart(),NodeMcu将会从新启动,并自动执行init.lua,执行效果以下:
clip_image058

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。

clip_image060

而后一样的,将list.lua文件也下载至NodeMcu中

clip_image062

关闭NodeMcu Studio 2015.exe

测试下载文件

打开TeraTerm,输入:

node.restart()

出现以下界面:
clip_image063
init文件执行成功。

而后执行:

dofile("list.lua")

执行结果:
clip_image064
列出当前文件为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双电平方案

NodeMcu采集bmp085代码

------------------------------------------------------------------------

-- 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(),获取响应的数据,结果以下:
clip_image065
如上图,所处环境的温度19.0摄氏度,气压值102596Pa,海拔高度107m(高度为估算值)。

释放bmp085模块

模块引用完毕以后,请及时释放bmp85所占用的内存,释放方法为:

b = nil --此处b由于用户定义的变量

bmp085 = nil

package.loaded["bmp085"] = nil

释放以前和释放以后的内存对比:

clip_image066