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

SDK编译环境安装包的安装、编译与烧录教程

【支持最新版AT、IOT及LUA源码编译,附源码】

1、安装包Fans_ESP8266_SDK_Make.exe

下载地址:http://pan.baidu.com/s/1pJ6w1tD

安装后在C盘下生成三个文件夹:c:\python27、c:\usr、c:\ESP8266_SDK_Fans_V2.0【最新固件源代码】

2、安装

安装前确认之前没有安装过xtensa,如果安装过则请:

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

然后,点击Fans_ESP8266_SDK_Make.exe进行安装

注:一定要选择默认安装,即: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介绍:(二)固件烧写

准备工作:

一、拿到NodeMcu的开发板

NodeMcu开发板基于乐鑫esp8266进行拓展,引出常用管脚,方便使用者进行基于NodeMcu-firmware的原型开发。

二、下载 NodeMcu Frimware Programmer

NodeMcu提供了烧写固件的专用工具,根据您的操作系统可以选择下载 32位操作系统版 或者 64位操作系统版1

三、下载NodeMcu固件

最新版的NodeMcu固件,请点击此处下载。

四、一根micro-USB数据线

开始:

一、使用USB数据线连接计算机与NodeMcu开发板。

第一次连接时,计算机会弹出安装驱动的提示,请搜索下载CH340的驱动,可以在计算机->设备管理器中查看USB转serial是否安装成功。

二、运行NodeMcu Firmware Programmer烧写固件

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

然后选择“Operation”,出现如下图状态:

点击“Flash”,进行固件烧写。状态如下:

等待烧写结束,如下

至此,NodeMcu固件已经烧写至NodeMcu开发板。关闭NFP,断开USB连线。

三、打印Hello world

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

点击OK进入主界面。

此时输入:

print("hello world")

NodeMcu响应如下:

至此,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()

出现如下界面:

init文件执行成功。

然后执行:

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双电平方案

NodeMcu采集bmp085代码

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

-- BMP085 I2C module for NODEMCU

-- NODEMCU TEAM

-- LICENCE: http://opensource.org/licenses/MIT

-- Christee

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

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

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

你可能感兴趣的:(esp8266)