天天看点

NodeMCU-API 中文完整版 word 版本

NodeMCU-API 中文完整版 word 版本

https://github.com/nodemcu

文档》英语”模块》ADC

ADC模块

以来 起源/贡献者 维护者 资源

情节中字 Zeroday jmattsson adc.c

ADC模块提供对内置ADC的访问。

在ESP8266±只有一个单通道,与电池电压复用。根据“特定初始化数据"(字节107)中的设 置,可以使用ADC读取外部电压,或读取系统电压(vdd33),但不能同时读取两者。

可以通过该adc.force_init_mode()功能配置使用哪种模式的ADC □请注意,在从一个切换 到另一个node.restart()之后,在更改生效之前需要重新启动系统(例如,重新启动电 源,重置按钮)。

adc.force_init_mode () 检査并在必要时重新配置ESP init数据块中的ADC模式设置。

adc.read () 对ADC进行釆样。

adc.readvdd33 () 读取系统电压。

adc.force_init_mode ()

检査并在必要时重新配置ESPinit数据块中的ADC模式设置。

句法

adc.force_init_mode(mode_value)

参数

mode_value 其中之一 adc.INIT_ADC 或 adc . INIT_VDD33。

返回

如果函数必须更改模式,则为true;如果模式已经配置,则为false。在真正的回报上,ESP需要 重新启动才能使更改生效。

–in you init.Lua:

if adc.force_init_mode(adc.INIT_VDD33)

then

node.restart()

return – donrt bother continuing^ the restart is scheduLed end

print(“System voltage (mV):”, adc.readvdd33(0))

也可以看看

node.restart()

adc.read ()

对ADC进行釆样。

句法

adc ・ read(channel)

参数

channel在ESP8266上始终为0

返回

釆样值(数量)

如果ESP8266配置为使用ADC读取系统电压,则此功能将始终返回65535.这是硬件和/或SDK 限制。

val = adc.read(0)

adc.readvdd33 ()

读取系统电压。

句法

adc ・ readvdd33()

参数

没有

返回

系统电压(毫伏)(个数)

如果ESP8266配置为使用ADC对外部引脚进行采样,则此功能将始终返回65535.这是一个硬 件和/或SDK限制。

ADS1115 模块

以来 起源/贡献者 维护者 资源

2017年4月24日 fetchbot fetchbot ads!115.c

该模块提供对ADS1115 16位模数转换器的访问o

❶警告

所有模拟输入的绝对最大额定值都-0.3V to VDD+0.3V称为GND。

ads!115.read () 获得存储在先前发布的转换的寄存器中的结果,

ads!115.setting () ADC的配置设置■

ads!115.setup () 在定义的FC器件地址上初始化器件。

adslll5.startread () 在单次模式下启动ADC读数,转换完成后将调用一个可选的回调函数,在该函 数中可以获得ADC转换结果。

adslll5.read ()

获得存储在先前发布的转换的寄存器中的结果,例如在连续模式或转换就绪中断。

句法

volt, volt_deCj adc = adslll5.read()

参数

没有

返回

・volt电压(单位mV)(见下面的注释)

•volt_dec电压十进制(见下面的注释)

•adc原始的adc值

❶注意

如果使用浮点固件,则volt是浮点数。在整数固件上,最后的值必须从volt和连接起 来 volt_dec o

local idj alert_pin, sda, scl = 0, 7, 6, 5

i2c.setup(id, sda, scl4 i2c.SLOW)

adslll5.setup(adslll5.ADDR_GND)

–continuous mode

adslll5.setting(adslll5.GAIN_6_144V, adslll5.DR_128SPSJ adslll5.SINGLE_。, adslll5.CONI --read adc resuLt with read()

volt, volt_dec, adc = adslll5.read()

print(volt, volt_dec, adc)

–comparator

adslll5.setting(adslll5.GAIN_6_144V, adslll5.DR_128SPS, adslll5.SINGLE_0, adslll5.CONI local function comparator(levels when)

–read adc resuLt with read() when threshoLd reached

voltj volt_decj adc = adslll5.read()

print(volt4 volt_dec4 adc)

end

gpio.mode(alert_pinJ gpio.INT)

gpio.trig(alert_pin, “both”, comparator)

–read adc resuLt with read()

volt, volt_decj adc = adslll5.read()

print(volt, volt_dec, adc)

adslll5.setting ()

ADC的配置设置。

句法

adslll5.setting(GAIN, SAMPLES, CHANNEL, MODE], CONVERSION_RDY][, COMPARATORj THRESHOLD_LOW, THRESHO

参数

GAIN可编程增益放大器

SAMPLES每秒釆样数据速率

adslll5.DR 8SPS

MODE设备操作模式

。adslll5.SINGLE_SHOT 单发模式

o adslll5.CONTINUOUS 连续模式

CONVERSION_RDY转换准备就绪后的转换次数(可选)

o adslll5.C0NV RDY 1

o adslll5.CONV_RDY_2

o adslll5.C0NV_RDY_4

• COMPARATOR比较器置位后的转换次数(可选)

O adslll5.COMP_lCONV

O adslll5.COMP_2CONV

O adslll5.C0MP_4C0NV

• THRESHOLD_LOW

O 0 - + GAIN_MAX单端输入的单位为mV

O -GAIN_MAX - + GAIN_MAX 以mV为差分输入

• THRESHOLD_HI

O 0 - + GAIN_MAX单端输入的单位为mV

O -GAIN_MAX - + GAIN_MAX 以mV为差分输入

返回

nil

local id, sda, scl = 0, 6, 5

i2c.setup(id, sda, scl, i2c.SL0W)

adslll5.setup(adslll5.ADDR_GND)

adslll5.setting(adslll5.GAIN_6_144V4 adslll5.DR_128SPS, adslll5.SINGLE_0, adslll5.SING

adslll5.setup ()

在定义的FC器件地址上初始化器件。

句法

adslll5.setup(ADDRESS)

参数

• ADDRESS

O adslll5.ADDR_ GND

O adslll5.ADDR VDD

O adslll5.ADDR SDA

0 adslll5.ADDR _SCL

返回

nil

local idj sda, scl = 0, 6, 5 i2c.setup(id, sda, scl, i2c.SLOW)

adslll5.setup(adslll5.ADDR_GND)

adslll5.startread ()

在单次模式下启动ADC读数,转换完成后将调用一个可选的回调函数,在该函数中可以获得ADC转 换结果。

句法

adslll5.startread([CALLBACK])

参数

• CALLBACK回胴函致府仕MC技玦元成后调用 。 function(voltj volt_deCj adc) end

返回

• nil

local idj alert_pinj sda, scl = 0, 7, 6, 5

i2c.setup(id, sdaj scl, i2c.SLOW) adslll5.setup(adslll5.ADDR_GND)

–singLe shot

adslll5.setting(adslll5.GAIN_6_144V, adslll5.DR_128SPS, adslll5.SINGLE_03 adslll5.SING --start adc conversion and get resuLt in caLLback after conversion is ready

adsill5.startread(function(volt4 volt_dec, adc) print(volt, volt_decj adc) end)

–conversion ready

adslll5.setting(adslll5.GAIN_6_144V4 adslll5.DR_128SPS, adslll5.SINGLE_0J adslll5.SING local function conversion_ready(levelj when)

voltj volt_deCj adc = adslll5.read() print(volt, volt_deCj adc)

end

gpio.mode(alert_pinj gpio.INT)

gpio.trig(alert_pinj "down"j conversion_ready)

–start conversion and get resuLt with read() after conversion ready pin asserts adslll5.startread()

ADXL345模块

以来 起源/贡献者 维护者 资源

2016年4月8日 Jason Schmidlapp Jason Schmidlapp adxl345.c

该模块提供对ADXL345三轴加速度计的访问。

adxl345.read () 釆样传感器并从加速度计返回X, Y和Z数据。

adxl345.init () 初始化模块并设置引脚配置。

adxl345.setup () 初始化模块。

adxl345.read ()

釆样传感器并从加速度计返回X, Y和Z数据。

句法

adxl345 ・ read()

返回

X, Y, Z数据(整数)

local sdaj scl = 1, 2

i2c.setup(0j sda, scl, i2c.SL0W) – caLL i2c.setup() onLy once adxl345.setup()

local x>y,z = adxl345.read() print(string.format("X = %d, Y = %d, Z = %d”, x, y, z))

adxl345.init ()

初始化模块并设置引脚配置。

。注意

此功能已弃用,将在即将发布的版本中删除。adxl345.setup()改为使用。

句法

adxl345.inittsda. scl)

参数

・sda数据引脚

• scl时钟引脚

返回

nil

adxl345.setup ()

初始化模块。

句法

adx!345.setup()

参数

没有

返回

nil

AM2320模块

以来 起源/贡献者 维护者 资源

2016年2 月 14 日 HenkVergonet HenkVergonet am2320.c

该模块使用i2c接口访问AM2320湿度和温度传感器。

am2320.init () 初始化模块并设置引脚配置。

am2320.read () 对传感器进行釆样,并返回相对湿度,单位为%,温度单位为摄氏度,单位 为10。

am2320.setup () 初始化模块。

am2320.init ()

初始化模块并设置引脚配置。返回模型,版本,序列,但是在我的模型中,这些都是零接 缝。

。注意

此功能已弃用,将在即将发布的版本中删除。am2320.setup()改为使用。

句法

modelj version, serial = am2320.init(sda^ scl)

参数

・sda数据引脚

•scl时钟引脚

返回

•model模型的16位数字

•version 8位版本号

•serial 32位序列号

注意:对于所有这些,我只观察到0的值,也许其他传感器返回更明智的读数。

am2320.read ()

对传感器进行釆样,并返回相对湿度,单位为%,温度单位为摄氏度,单位为10。

句法

am2320.read()

返回

•relative humidity百分比乘以10 (整数)

•temperature 在乘以 10 (整数)

sdaj scl = lj 2

i2c.setup(0, sdaj sclj i2c.SL0W) – caLL I2c.setup() onLy once am2320.setup()

ph, t = am2320.read()

print(string.format(MRH: %s%%\ rh / 10)) print(string.format(“Temperature: %s degrees C”, t / 10))

am2320.setup ()

初始化模块。返回模型,版本,序列,但是在我的模型中,这些都是零接缝。

句法

model, version, serial = am2320.setup()

参数

没有

返回

•model模型的16位数字

•version 8位版本号

•serial 32位序列号

注意:对于所有这些,我只观察到0的值,也许其他传感器返回更明智的读数。

APA102模块

以来 起源/贡献者 维护者 资源

2016年1月26日 罗伯特•福斯 罗伯特•福斯 apal02.c

该模块提供Lua对APA102 RGB LED的访问,其功能类似于常见的WS2812可寻址LED。

DotStarLED是5050尺寸的LED,在LED内部带有嵌入式微控制器。您可以将每个LED的 颜色/亮度设置为24位颜色(每个红色绿色和蓝色8位)。每个LED的功能类似于移位寄 存器,读取输入引脚上的输入颜色数据,然后将之前的颜色数据移出输出引脚。通过发 送一串长长的数据,您可以控制无限数量的LED,只需粘贴更多的LED或切断不需要的 LED即可。

来源:Adafruit

apal02.write () 将8位的ABGR数据发送到APA102链。

apal02.write ()

将8位的ABG R数据发送到APA102链。

句法

apal02.write(data_pin, clock_pin, string)

参数

-data_pin 任何GPIO引脚0,1,2, …

・ clock_pin 任何GPIO引脚0,1,2, …

-String有效载荷被发送到一个或多个APA102LED。它应该由每个元素的ABGR四元组组 成。

0 ai第一个像素的Intensity通道(0-31)

□ bi第一个像素的蓝色通道(0-255)

0 G1第一个像素的绿色通道(0-255)

0 R1第一个像素的红色通道(0-255) …你可以连接很多APA102…

。A2 , B2 , G2 , R2是下APA102S强度,蓝,绿和红信道参数

返回

nil

a = 31

b = 0

g = 0

r = 255 leds_abgr = string.char(a, b, g, r, a, b, g, r)

apal02.write(2, 3, leds_abgr) – turn two APA102s to red, connected to data_pin .

–set the first 30 Leds to red

apal02.write(2, 3, string.char(31j 255, 0> 0):rep(30))

位模块%

以来 起源/贡献者 维护者 资源

情节中字 https:個thub.com/LuaDist/bitlib, Zeroday Zeroday bite

位操作支持,在32位整数。

bitarshift () 算术右移一个相当于c中的值 >> 移位的数字

bitband () 按位与,相当于vall&val2&。

bitbit () 用1位生成一个数字(用于掩码生成)=

bitbnot () 按位否定,相当于C中的~值。

bitbor () 按位或运算,相当于vall|val2|。

bitbxor () 按位X0R,等同^vallAval2Ao

bitclear () 清除一个数字中的位。

bitisclear () 测试给定位是否被清除。

bitisset () 测试给定位是否被设置。

bitdshift () 左移一个数字,相当于“在C中移位”

bitrshift () 逻辑右移一个数字,相当于(无符号)值>>在(:中移位

bitset () 在一个数字中设置位。

bit.arshift ()

算术右移一个等于value >> shift C的数字

句法

bit.arshift(value, shift)

参数

•value值的转移

•shift职位转移

返回

数字石梭(算术)

bit.band ()

按位与,相当于 vail & val2 & . . . & vain C.

句法

bit.band(vallj val2 [,…・ vain])

参数

• vail先和论据

-val2第二个AND参数

・…vain …第n个论点

返回

所有参数的按位与(数字)

bit.bit ()

用1位生成一个数字(用于掩码生成)。相当于1

句法

bit ・ bit(position)

参数

position位的位置将被设置为1

返回

一个只有一个1位的数字(其余的被设置为0)

bit.bnot ()

按位否定,相当于c中的~值。

句法

bit.bnot(value)

参数

value要否定的数字

返回

数字的按位取反的值

bit.bor ()

按位或,相当于 vail I val2 | . . . | vain C.

句法

bit.bor(vallj val2 [, vain])

参数

・vail第一个OR论点。

•val2第二个OR论点。

•… .vain …第n个论点

返回

所有参数的按位或(数字)

bit.bxor ()

按位XOR,等同 vail A val2 A … A vain 于C.

句法

bit.bxor(vall, val2 vain])

参数

-vail第一个XOR参数

-val2第二个XOR参数

-…vain …第 n 个XOR 参数

返回

所有参数的按位XOR (数字)

bit.clear ()

清除一个数字中的位。

句法

bit.clear(value, posl ・.・ posn])

参数

•value基数

・posl第一位的位置清除

・…posn第n位的位置清除

返回

在给定位置清零的位数(S)

bit.isclear ()

测试给定位是否被清除。

句法

bit・isclear(value, position)

参数

•value要测试的值

•position位测试

返回

如果给定位置的位是0,则返回true,否则返回false

bit.isset ()

测试给定位是否被设置。

句法

bit.isset(value, position)

参数

•value要测试的值

•position位测试

返回

如果给定位置的位是1,则返回true,否则返回false

bit.lshift ()

左移一个数字,相当于value << shift C.

句法

bit.1shift(value, shift)

参数

•value值的转移

•shift职位转移

返回

数字向左移动

bit.rshift ()

逻辑石移一个数字,相当十(unsigned )value

句法

bit ・ rshift(value, shift)

参数

•value值的转移。

•shift职位转移。

返回

数字右移(逻辑上)

bit.set ()

在一个数字中设置位。

句法

bit.set(value, posl [,・.・ posn ])

参数

•value 基数。

•posl第一位的位置设置。

•・.・posn第n位的位置设置。

返回

在给定位置中设置了位的数字(S)

文档》英语"模块»bme280

BME280模块

以来 起源/贡献者 维护者 资源

2016年2月 21 日 vsky279 vsky279 bme280.c

该模块为BME280/BMP280m/^气压力/湿度传感器(BoschSensortec)提供了一个简单的界 面。

。警告

请注意,您必须先打电话,setup。然后才能开始读取值!而且,在setup()读取测量值之间 的几十到几百毫秒之间必须有一个可变的延迟。而不是使用固定的延迟,你也可以轮询传感器, 直到数据传递,例如humi()不再返回nil o

bme280.altitude () 对于给定的空气压力和海平面气压,以米为单位的高度返回乘以100的整 数。

bme280.baro () 读取传感器,并返回空气压力百帕斯卡作为整数乘以1000或零当读出不成 功。

bme280.dewpoint () 对于给定的温度和相对湿度,将以摄氏度表示的整数乘以100。

bme280.humi () 读取传感器并以百分比形式返回空气相对湿度,读数不成功时,以百分数乘 以100或零。

bme280.init () 初始化模块。

bme280.qfe2qnh () 对于给定的高度,将气压转换为海平面气压。

bme280.read ()

bme280.startreadout () 开始读出(将传感器转换为强制模式)=

bme280.setup () 初始化模块。

bme280.temp () 读取传感器,以摄氏度为单位返回温度,乘以100。

bme280.altitude ()

对于给定的空气压力和海平面,空气压力返回以米为单位的高度,乘以100,即高度计功能。 句法

bme280.altitude(P, QNH)

参数

.P测量压力

• QNH当前的海平面压力

返回

测量点的高度

bme280.baro ()

读取传感器并以百分之一乘以1000或nil读取不成功时以百帕为单位返回空气压力。需要当前的 温度来计算空气压力,因此在读取压力数据之前进行温度读数。第二个返回变量是当前的空气温 度。

句法

bme280.baro()

参数

没有

返回

• p百帕的空气压力乘以1000

-T温度以摄氏度为单位乘以100

bme280.dewpoint ()

对于给定的温度和相对湿度,将以摄氏度表示的整数乘以100。

句法

bme280.dewpoint(H, T)

参数

・H相对湿度百分比乘以1000。

・T温带摄氏乘以100。

返回

在celsisus的露点

bme280.humi ()

读取传感器并以百分比形式返回空气相对湿度,单位为百分比,或者nil当读数不成功时。需要当 前温度来计算相对湿度,因此在读取压力数据之前执行温度读数。第二个返回的变量是当前的温 度。

句法

bme280.humi()

参数

没有

返回

・H上次相对湿度读数的百分比乘以1000

・T温度以摄氏度为单位乘以100

bme280.init ()

初始化模块。读取值之前,必须进行初始化。

❶注意

此功能已弃用,将在即将发布的版本中删除。bme280.setup()改为使用。

句法

bme280.init(sda, sclj [temp_oss, press_ossj humi_osSj power_modej inactive_duration, IIR_fliter

参数

看 setup() c

bme280.qfe2qnh ()

对于给定的高度,将气压转换为海平面气压。

句法

bme280.qfe2qnh(Pj altitude)

参数

・P测量压力

・altitude测量点的高度

返回

海平面气压

bme280.read ()

读取传感器返回温度,气压,空气相对湿度和

句法

bme280.read([altitude])

参数

・(可选)altitude -以米为单位的高度。如果还提供了转换为海平面气压的气压,则返回。

返回

-T温度以摄氏度为单位乘以100

•p百帕的空气压力乘以1000

-H相对湿度百分比乘以1000

•QNH百帕的空气压力乘以1000转换为海平面

这些变量中的任何一个都是nil如果给定度量的读数不成功的话。

bme280.startreadout ()

开始读出(将传感器转换为强制模式)。读数之后,传感器转入睡眠模式。

句法

bme280.startreadout(delay, callback)

参数

・delay将传感器设置为强制模式,并callback在给定数量的毫秒后调用(如果提供)。对于 0,默认延迟设置为113ms (足够的时间执行读取过釆样设置16x)。有关不同的过釆样设置, 请参阅BME280M终数据表-附录B:测量时间和电流计算。

・callback如果提供,将在给定后调用delay。传感器读数应该在此之前完成。

返回

nil

bme280.setup ()

初始化模块。读取值之前,必须进行初始化。

句法

bme280.setup([temp_ossj press_oss, humi_oss> powep_mode, inactive_durationj IIR_fliter])

参数

・(可选)temp_oss -控制温度数据的过采样。默认的过采样是16倍。

・(可选)press_oss -控制压力数据的过釆样。默认的过釆样是16倍。

・(可选)humi_oss -控制湿度数据的过采样。默认的过采样是16倍

・(可选)sensor_mode -控制设备的传感器模式。默认传感器更多是正常的。

.(可选)inactive_duration -控制正常模式下的非活动持续时间。默认非活动持续时间是 20ms o

・(可选)IIR_filter -控制IIR滤波器的时间常数。默认配合系数是16。

・(可选)cold_start -如果0,那么BME280芯片不会被初始化。当ESP深度睡眠和唤醒需要初 始化驱动程序(模块)而不是芯片本身时,在电池供电的设置中有用。该芯片保持供电(睡 眠),并保持最新的读数,应快速提取另一个阅读开始(bme280.startreadout())。芯片默 认被初始化。

temp_oss , press_oss , humi_oss 数据超采样

0 跳过(输出设为0x80000)

1 过釆样X1

2 过釆样x2

3 过釆样x4

4 过釆样紀

五 过釆样xl6

sensor_mode 传感器模式

0 睡眠模式

1和2 强制模式

3 正常模式

对十希舉低米秤率或基十王机旳冋步旳应用,建议使用強制棋武。枝制该致后传感器班人捶眠模 式。有关更多详细信息,请参阅BME280M终数据表。

inactive_duration t待机(ms)

0 0.5

1 62.5

2 125

3 250

4 500

五 1000

6 10

7 20

IIR_filter 滤波器系数

0 过滤掉

1 2

2 4

3 8

4 16

返回

nil如果初始化失败(没有传感器连接?),2如果传感器是BME280,

BMP280

alt=320 – aLtitude of the measurement pLace

sda, scl = 3, 4

i2c.setup(0, sdaj scl, i2c.SL0W) – caLL i2c.setup() onLy once

bme280.setup()

P, T = bme280.baro() print(string.format(“QFE=%d.%03d”, P/1000^ P%1000))

–convert measure air pressure to sea LeveL pressure

QNH = bme280.qfe2qnh(PJ alt)

print (string.format(,QNH=%d.%03dH, QNH/1000, QNH%1000))

Hj T = bme280.humi()

local Tsgn = (T < 0 and -1 or 1); T = TsgnT

print(st ring.format(“T=%s%d.%02d”, Tsgn<0 and “-” or “”, T/100, T%100))

print(string.format("humidity=%d.%03d%%"j H/1000, H%1000))

D = bme280.dewpoint(H, T)

local Dsgn = (D < 0 and -1 or 1); D = DsgnD

print(string.format(“dew_point=%s%d.%02d”, Dsgn<0 and “-” or “”, D/100, D%100))

–aLtimeter function - caLcuLate aLtitude based on current sea LeveL pressure (QNH) c P = bme280.baro()

curAlt = bme280.altitude(Pj QNH)

local curAltsgn = (curAlt < 0 and -1 or 1); curAlt = curAltsgncurAlt

print(string.format(,altitude=%s%d.%02d,J curAltsgn<0 and or curAlt/100, curAl

或者更简单,更高效

alt=320 – aLtitude of the measurement pLace sda, scl = 3, 4

i2c.setup(0j sdaj scl, i2c.SLOW) – caLL i2c.setup() onLy once bme280.setup()

T, P, H, QNH = bme280.read(alt)

local Tsgn = (T < 0 and -1 or 1); T = TsgnT

print ( st ring. format (HT=%s%d. %02d H, Tsgn<0 and or T/l。。,T%100))

print (st ring. format("QFE=%d.%03d,J P/1000, P%1000))

print(string.format(nQNH=%d.%03d\ QNH/1000, QNH%1000))

print(string.format("humidity=%d.%03d%%"j H/1000, H%1000))

D = bme280.dewpoint(H, T)

local Dsgn = (D < 0 and -1 or 1); D = DsgnD

print(string.format("dew_point=%s%d.%02d"3 Dsgn<0 and "or ""3 D/100, D%100)) --aLtimeter function - caLcuLate aLtitude based on current sea Level pressure (QNH) c P = bme280.baro()

curAlt = bme280.altitude(Pj QNH)

local curAltsgn = (curAlt < 0 and -1 or 1); curAlt = curAltsgncurAlt print(string.format("altitude=%s%d.%02d"j cunAltsgn<0 and "or “”, curAlt/100, curAl

使用bme280.setup(lj 3, 0, 3, 0, 4)为“游戏模式” ■过釆样的设置压力x4,温度xl,湿度x。, 传感器模式:正常模式,非活动期间=0.5ms的,IIR滤波器设定的滤波器系数16。

强制模式下读出示例(异步) sda, scl = 3, 4

i2c.setup(0, sdaj scl, i2c.SLOW) – caLL i2c.setup() onLy once bme280.setup(nilj nil, nil, 0) – initiaLize to sLeep mode bme280.startreadout(0, function ()

T, P = bme280.read()

local Tsgn = (T < 0 and -1 or 1); T = Tsgn*T

print(string.format("T=%s%d.%02d"Tsgn<0 and "or T/100J T%100)) end)

bme280.temp ()

读取传感器,以摄氏度为单位返回温度,乘以100。

句法

bme280.temp()

参数

没有 返回

-T温度以摄氏度为单位乘以100或nil读取不成功

・t fine温度测量中使用的压力和湿度补偿公式(一般不需要使用这个值)

BMP085模块

以来 起源/贡献者 维护者 资源

2015年8月3日 康拉德贝克曼 康拉德贝克曼 bmp085.c

该模块提供对BMP085温度和压力传感器的访问。该模块也适用于BMP180。

bmp085.init () 初始化模块并设置引脚配置。

bmp085.setup () 初始化模块。

bmp085.temperature () 对传感器进行采样,并以一个整数乘以10来返回摄氏温度。

bmp085.pressure () 釆样传感器并以帕斯卡形式返回压力作为整数。

bmp085.pressure_raw () 釆样传感器并以内部单位返回原始压力。

bmp085.init ()

初始化模块并设置引脚配置。

。注意

此功能已弃用,将在即将发布的版本中删除。bmP085.setup()改为使用。

句法

bmp085.init(sda, scl)

参数

-sda数据引脚

• SC1时钟引脚

返回

nil

bmp085.setup ()

初始化模块。

句法

bmp085.set叩()

参数

没有

返回

nil

bmp085.temperature ()

对传感器进行采样,并以一个整数乘以io来返回摄氏温度。

句法

bmp085.temperature()

返回

温度乘以10 (整数)

local sdaj scl = 1, 2

i2c.setup(0, sda, scl, i2c.SL0W)

bmp085.setup()

local t = bmp085.temperature()

print(string.format("Temperature: %s.%s degrees C"3 t / 10, t % 10))

bmp085.pressure ()

釆样传感器并以帕斯卡形式返回压力作为整数。

可选oversampling_setting参数决定传感器采样数据的时间。默认值是3最长采样设置。 可能的值是0,1,2,3。有关更多信息,请参阅数据表。

句法

bmp085 . pressure(oversampling_setting)

参数

oversampling_setting 整数可以是0,1,2或3

返回

压力(帕斯卡)(整数)

local sda, scl = 1^ 2

i2c.setup(0, sdaj scl, i2c.SLOW) – caLL i2c.setup() onLy once bmp085.setup()

local p = bmp085.pressure()

print(string.format(“Pressure: %s.%s mbar”, p / 10。, p % 100))

bmp085.pressure_raw ()

釆样传感器并以内部单位返回原始压力。如果你需要更高的精度,可能会有用。

句法

bmp085.pressure_raw(oversampling_setting)

参数

oversampling_setting 整数可以是0,1,2或3

返回

原始压力釆样值(整数)

文档》英语”模块»COAP

CoAP模块

以来 起源/贡献者 维护者 资源

2015年2月4日 Toby Jaffey [email protected]} Zeroday Zeroday coap.c

CoAP模块根据CoAP协议提供了一个简单的实现。基本的端点服务器部分基于microcoap,以及许 多其他代码参考libcoap.,

这个模块实现了客户端和服务器端。客户端部分支持GET/PUT/POST/DELETEo服务器可以注册 Lua函数和变量。没有观察或发现支持。

❶警告

这个模块只是在很早的阶段,还没有完成。

常量 各种功能的常量。

coap.Client () 创建一个CoAP客户端。

coap.Server () 创建一个CoAP服务器。

coap.Client:得到() 向服务器发出GET请求。

coap.Client:把() 发出PUT请求到服务器。

coap.Client:后() 向服务器发出POST请求。

coap.Client:删除() 发出DELETE请求到服务器。

coap.server:听() 启动给定端口上的CoAP服务器。

coap.server: 关闭() 关闭CoAP服务器。

coap.server: VAR () 在服务器中注册一个Lua变量作为端点。

coap.server:函数() 将Lua函数注册为服务器端点。

常量

各种功能的常量。

coap.CON , coap.NON 表示请求类型。

coap.TEXT_PLAIN , coap.LINKFORMAT , coap.XML , coap.OCTET_STREAM , coap.EXI , coap.JSON 表示的内容蚤型。

coap.Client ()

创建一个COAP各尸瑞。

句法

coap.Client()

参数

没有

返回

CoAP客户端

cc = coap.Client()

–assume there is a coap server at ip 192.168.100 cc:get(coap.CONj “coap://192.168.18.100:5683/.well-known/core”)

–GET is not compLetej the resuLt/payLoad onLy print out in consoLe. cc:post(coap.NON, “coap://192.168.18.100:5683/“4 “Hello”)

coap.Server ()

创建一个CoAP服务器。

句法

coap.Server()

参数

没有

返回

CoAP服务器

–use copper addon for fire fox

cs=coap.Server()

cs:listen(5683)

myvar=l

cs:var(“myvar”) – get coap://192.168.18.103:5683/vl/v/myvar wiLL return the vaLue of

cs:varCall”, coap.JSON) – sets content type to json

–function shouLd tack one string^ return one string.

function myfun(payload) print(“myfun called”) respond = “hello” return respond

end

cszfuncCmyfun”) – post coap://192.168.18.103:5683/vl/f/myfun wiLL caLL myfun

CoAP客户端

coap.client:得至U ()

向服务器发出GET请求。

句法

coap.client:get(typej uri[j payload])

参数

•type coap.CON , coap.NON ,默认为CON=如果类型为CON且请求失败,则在放弃之前, 该库再重试四次。

•uri URI如“coap: ^192.168.18.103: 5683/vl/v/myvar”,只支持IP地址,即不支持主机名 解析。

•payload可选的,有效载荷将被放入请求的有效载荷部分。

返回

nil

coap.client:把()

发出PUT请求到服务器。

句法

coap.client:put(type, uri[payload])

参数

• type coap.CON , coap.NON ,默认为CON=如果类型为CON且请求失败,则在放弃之前, 该库再重试四次。

-uri URI如“coap: 〃192.168.18.103: 5683/vl/v/myvar”,只支持IP地址,即不支持主机名 解析。

-payload可选的,有效载荷将被放入请求的有效载荷部分。

返回

nil

coap.client:后()

向服务器发出POST请求。

句法

coap.client:post(type, uri[, payload])

参数

-type co.CON, coap.NON,默认为CON。当类型是CON,并且请求失败时,请求会在放弃之 前重试另外4次。

・ uri uri如ccae //192.168.18.103; 5683/v1 /v/mwar.只古持IP。

-payload可地旳,有双執荷将被以人请不旳有双载荷部分。

返回

nil

coap.client:删除()

发出DELETE请求到服务器。

句法

coap.client:delete(type, uri[, payload])

参数

•type coap.CON , coap.NON ,默认为CON。如果类型为CON且请求失败,则在放弃之前, 该库再重试四次。

•uri URI如"coap: >7192.168.18.103: 5683/vl/v/myvar",只支持IP地址,即不支持主机名 解析。

・payload可选的,有效载荷将被放入请求的有效载荷部分。

返回

nil

CoAP服务器

coap.server:听()

启动给定端口上的CoAP服务器。

句法

coap.server:listen(port[ip])

参数

-port服务器端口(号码)

・ip可选的IP地址

返回

nil

coap.server:关闭()

关闭CoAP服务器。

句法

coap.server:close()

参数

没有

返回

nil

coap.server: VAR ()

在服务器中注册一个Lua变量作为端点。那么变量值可以通过GET方法由客户端检索,表示为客户 端的URI。变量的端点路径是7vl/v/‘o

句法

coap.server:van(namecontent_type])

参数

・name Lua变量的名字

• content_type可选,默认为coap.TEXT_PLAIN ,请参阅内容协商

返回

nil

– use copper addon for fire fox

cs=coap.Server()

cs:listen(5683)

myvar=l

cs:varCrnyvar’1) – get coap://192.168.18.103:5683/vl/v/myvar wiLL return the vaLue of --cs:var(myvar)j WRONG, this api accept the name string of the variaLbe. but not the 311=*[1,2,3]’

cs:var(“all”, coap.JSON) – sets content type to json

coap.server:函数()

将Lua函数注册为服务器端点。这个函数可以被客户端通过POST方法调用。表示为客户端的URI。 函数的端点路径是7vl/f/'o

当客户端向这个URI发出POST请求时,有效载荷将作为参数传递给函数。该函数的返回值将成为客 户端消息中的负载。

注册的函数应该只接受一个字符串类型参数,并返回一个字符串值或不返回任何内容。

句法

coap.server:func(name[, content_type])

参数

•name Lua函数的名字

•content_type可选,默认为coap.TEXT_PLAIN ,请参阅内容协商

返回

nil

–use copper addon for fire fox

cs=coap.Server()

cs:listen(5683)

–function shouLd take onLy one string, return one string.

function myfun(payload) print(“myfun called”) respond = “hello” return respond

end

cs:func(“myfun”) – post coup://192.168.18.103:5683/vl/f/myfun wiLL caLL myfun --cs:func(myfun)j WRONG, this apt accept the name string of the function, but not th(

文档》英语”模cron的

Cron模块

以来 起源/贡献者 维护者 资源

2016 年 12 月 18 H 凤凰 凤凰 cron.c

类似Cron的调度程序模块。

。重要

该模块需要RTC时间才能正常工作。不要忘记包含rtctime模块。

cron.schedule () 创建一个新的日程安排条目。

cron.reset () 删除所有预定的条目。

cron.entry:处理器() 设置一个新的输入处理程序。

cron.entry:时间表() 设置一个新的时间表掩码。

cron.entry:取消调度() 禁用计划。

cron.schedule ()

创建一个新的日程安排条目。

句法

cron,schedule(mask, callback)

参数

・mask -用于计划的crontab类字符串掩码

• callback - function(entry)在预定时间执行的回调

返回

cron.entry 子模块

cron.schedule("*/5 * * * function(e) print(“Every 5 minutes”)

end)

cron.schedule(“0 /2 * * function(e) print(“Every 2 hours”)

end)

cron.reset ()

删除所有预定的条目。

句法

cron.reset()

参数

没有

返回

cron.entry 模块

cron.entry:处理器()

设置一个新的输入处理程序。

句法

handler(callback)

参数

• callback - function(entry)在预定时间执行的回调

返回

ent = cron.schedule(" * * * “, function(e) print(“Every minute”)

end)

ent:handler(function(e) print(“New handler: Every minute”)

end)

cron.entry: 时间表 ()

设置一个新的时间表掩码。

句法

schedule(mask)

参数

・mask -用于计划的crontab类字符串掩码

返回

没有

ent = cron.schedule(” * * * , function(e)

printCTick")

end)

–Every 5 minutes is reaLLy better! ent:schedule("/5 * * * ")

cron.entry:取消调度()

禁用计划。

禁用的时间表可能会通过调用再次启用:schedule (mask)。

句法

unschedule()

参数

没有

返回

ent = cron.schedule。’ * * * *”, function(e) print(”Tick”)

end)

–We don’t need this anymore

ent:unschedule()

文档》英语"模块》加密

加密模块

以来 起源/贡献者 维护者 资源

2015年6月2日 DiUS, Johny Mattsson Johny Mattsson crypto.c

加密模块提供用于使用加密算法的各种功能。

支持以下加密/解密算法/模式:-"AES-ECB"对于ECB模式下的128位AES (不推荐)- ■■aes-cbc11对于CBC模式下的128位AES

支持以下散列算法:-MD2(默认情况下不可用,必须显式启

用 app/include/user_config.h ) - MD5 - SHA1 - SHA256, SHA384, SHA512 (除非禁 用 app/include/user_config.h )

crypto.encrypt () 加密Lua字符串。

crypto.decrypt () 解密以前加密的数据。

crypto.fhash () 计算一个文件的加密散列。

crypto.hash () 计算一个Lua字符串的加密散列0

crypto.new_hash () 创建一个可以添加任意数量字符串的摘要/散列对象。

crypto.hmac () 计算一个Lua字符串的HMAC (散列消息认证码)签名。

crypto.new_hmac () 创建一个可以添加任意数量字符串的hmac对象。

crypto.mask () 将一个XOR掩码应用于Lua字符串。

crypto.toBase64 () 提供(二进制)Lua字符串的Base64表示形式。

crypto.toHex () 提供(二进制)Lua字符串的ASCII十六进制表示形式。

crypto.encrypt ()

加密Lua字符串。

句法

crypto.encrypt(algo, key, plain iv])

参数

algo支持的加密算法的名称

-key加密密钥作为一个字符甲;对士AES加密,这个长度必须是16个字节

-plain要加密的字符串;如有必要,它将被自动填零到16字节的边界

・iv如果使用AES-CBC,启动载体;如果没有给出,则默认为全零

返回

加密数据为二进制字符串。对于AES,这总是16个字节的倍数。

print(crypto.toHex(crypto.encrypt(“AES-ECB”, “1234567890abcdef”, "Hi, I’m secret

也可以看看

•crypto.decrypt()

crypto.decrypt ()

解密以前加密的数据。

句法

crypto.decrypt(algokey, cipher [, iv])

参数

-algo支持的加密算法的名称

-key加密密钥作为一个字符串;对于AES加密,这个长度必须是16个字节

・cipher要解密的密文(从中获得crypto.encrypt())

・iv如果使用AES-CBC,启动载体;如果没有给出,则默认为全零

返回

解密的字符串。

请注意,解密后的字符串最后可能会包含额外的零填充字节。剥离这种填充的一种方法 是:match(“(.-)%z*$“)在解密的字符串上使用。如果使用二进制数据,需要额外注意,在 这种情况下,实际长度可能需要用数据进行编码,并且:sub(l, n)可以使用该长度去除填 充。

key = “1234567890abcdef”

cipher = crypto.encrypt(“AES-ECB”, key, “Hi, I’m secret!”)

print(crypto, toHex(cipher))

print(crypto.decrypt(“AES-ECB”, key, cipher))

也可以看看

•crypto.encrypt()

crypto.fhash ()

计算一个文件的加密散列。

句法

hash = crypto.fhash(algofilename)

参数

-algo使用散列算法,不区分大小写的字符串

• filename文件的散列路径

返回

包含消息摘要的二进制字符串。要获取文本版本(ASCII十六进制字符),请使

用 crypto.toHex()。

print(crypto.toHex(crypto.fhash(“shal”,“myfile.lua”)))

crypto.hash ()

计算一个Lua字符串的加密散列。

句法

hash = crypto.hash(algOj str)

参数

algo使用散列算法,不区分大小写的str字符串来散列内容

返回

包含消息摘要的二进制字符串。要获取文本版本(ASCII十六进制字符),请使

用 crypto.toHex()。

print(crypto.toHex(crypto.hash(“shal”,“abc”)))

crypto.new_hash ()

创建一个可以添加任意数量的字符串的摘要/散列对象。对象有update和finalize功能。

句法

hashobj = crypto.new_hash(aIgo)

algo便用散外算法,小区分大小与旳孑符申

返回

用户数据对象update和finalize可用的功能。

hashobj = crypto.new_hash(“SHAl”)

hashobj:update(“FirstString”))

hashobj:update(“SecondString”)) digest = hashobj:finalize() print(crypto.toHex(digest))

crypto.hmac ()

计算一个Lua字符串的HMAC (散列消息认证码)签名。

句法

signature = crypto.hmac(algostrkey)

参数

-algo散列算法使用,不区分大小写的字符串

・str数据来计算哈希值

-key用于签名的密钥可能是一个二进制字符串

返回

包含HMAC签名的二进制字符串。使用crypto.toHex()获得的文本版本。

print(crypto.toHex(crypto.hmacC’shal1’, “abc”, “mysecret”)))

crypto.new_hmac ()

创建一个可以添加任意数量字符串的hmac对象。对象有update和finalize功能。

句法

hmacobj = crypto.new_hmac(algoj key)

参数

-algo使用散列算法,不区分大小写的字符串

-key使用的关键(可能是一个二进制字符串)

返回

用户数据对象update和finalize可用的功能。

hmacobj = crypto.new_hmac(“SHA1”, “s3kr3t”)

hmacobj:update(“FirstString”))

hmacobj:update(“SecondString”))

digest = hmacobj:finalize()

print(crypto.toHex(digest))

crypto.mask ()

将一个XOR掩码应用于Lua字符串。请注意,这不是一个合适的加密机制,但是有些协议可能 会使用它。

句法

crypto.mask(message, mask)

参数

• message消息掩盖

-mask要应用的面具,如果短于消息则重复

返回

被屏蔽的消息,作为二进制字符串。用crypto.toHex()得到它的文字表述。

print(crypto.toHex(crypto.mask(“some message to obscure”,“X0Y7”)))

crypto.toBase64 ()

提供(二进制)Lua字符串的Base64表示形式。

句法

b64 = crypto.toBase64(binary)

参数

binary输入字符串到Base64编码

返回

一个Base64编码的字符串。

print(crypto.toBase64(crypto.hash(“shal”,“abc”)))

crypto.toHex ()

提供(二进制)Lua字符単旳ASCII十六进制表不形式。输人字符申中旳母个字节在输出中表 示为两个十六进制字符。

句法

hexstr = crypto.toHex(binary)

参数

binary输入字符串来获取十六进制表示

返回

ASCII十六进制字符串。

print(crypto.toHex(crypto.hash(“shal”,“abc”)))

文档》英语”模块》DHT

DHT模块

以来 起源/贡献者 维护者 资源

2015-06-17 RobTillaart Vowstar dhtlib

常量 各种功能的常量。

dhtread () 读取各种DHT传感器,包括DHT11,21,22,33,44®度温度组合传感器。

dhtreadll () 阅读DHT11湿度温度组合传感器。

dhtreadxx () 阅读除DHT11以外的各种DHT传感器。

常量

各种功能的常量。

dht.OK , dht.ERROR_CHECKSUM , dht. ERROR_TIMEOUT 代表了 DHT 的可能值读取状态

dht.read ()

读取各种DHT传感器,包括DHT11,21,22,33,44湿度温度组合传感器。

句法

dht ・ read(pin)

参数

pin DHT传感器的引脚号(不能是0),类型是数字

返回

•status如常量中所定义

-temp温度(见下面的注释)

•humi湿度(见下面的注释)

・temp_dec温度十进制

•humi_dec湿度小数

❶注意

如果使用浮动固件然后temp和humi是浮点数。在整数固件上,最后的值必须从temp 和| temp_dec |和连接起来| hum_dec |。

pin = 5

status, temp, humi, temp_deCj humi_dec = dht.read(pin) if status == dht.OK then

–Integer firmware using this exampLe

print(string.format(“DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n"4 math,floor(temp), temp_deCj math.floor(humi), humi_dec

))

–FLoat firmware using this exampLe print(“DHT Temperature:”…temp…”;"…“Humidity:”…humi)

elseif status == dht.ERROR_CHECKSUM then

print( “DHT Checksum error.”) elseif status == dht.ERROR_TIMEOUT then print( “DHT timed out.”)

end

dht.readll ()

阅读DHTll湿度温度组合传感器。

句法

dht.readll(pin)

参数

pin DHTll传感器的引脚号(不能是0),类型是数字

返回

•status如常量中所定义

•temp温度(见下面的注释)

•humi湿度(见下面的注释)

•temp_dec温度十进制

•humi_dec湿度小数

。注意

如果使用浮动固件然后temp和humi是浮点数。在整数固件上,最后的值必须从temp 和| temp_dec |/|Tumi |和连接起来|~hum_dec |。

也可以看看

dhtread ()

dht.readxx ()

阅读除DHTll以外的各种DHT传感器。

句法

dht ・ readxx(pin)

参数

pin DHT传感器的引脚号(不能是0),类型是数字

返回

•status如常量中所定义

-temp温度(见下面的注释)

・humi湿度(见下面的注释)

•temp_dec温度十进制

•humi_dec湿度小数

。注意

如果使用浮动固件然后temp和humi是浮点数。在整数固件上,最后的值必须从temp 和| temp_dec |/|~humi |和连接起来| hum_dec |。

也可以看看

dhtread ()

DS18B20 模块

以来 起源/贡献者 维护者 资源

2017年6月11日 fetchbot fetchbot dsl8b20.c

该模块提供对DS18B201-Wire数字温度计的访问。请注意,NodeMCU为此传感器提供了一个C模 块(这一个)和一个Lua模块。请参阅#2003, 了解他们各自的优点。

dsl8b20.read () 在单线总线上发出所有连接的传感器的温度转换,并在回调函数中的转换延迟之 后返回测量结果。

ds!8b20.setting () 配置温度分辨率设置。

ds!8b20.setup () 初始化所选引脚上的单线总线。

dsl8b20.read ()

在单线总线上发出所有连接的传感器的温度转换,并在回调函数中的转换延迟之后返回测量结果。

返回的测量结果可以通过以表格或家庭类型传递的ROM地址进行过滤。为每个指定的传感器调用回 调函数。

句法

dsl8b20.read(CALLBACK, ROM], FAMILY_ADDRESS])

参数

・CALLBACK为每个传感器执行回调函数

。例如

functionClNDEX^ ROM, RES, TEMP, TEMP_DEC, PAR) print(INDEX, ROM, RES, TEMP, TEMP_DEC, PAR)

•ROM包含指定传感器地址的表格,或者留空认执行所有传感器的单线总线搜索

。例如{”28:FF:FF:FF:FF:FF:FF:FF”,”28:FF:FF:FF:FF:FF:FF:FF”} , {}

•FAMILY_ADDRESS可选,将设备搜索限制为特定的家庭类型

。例如0x28

返回

nil

回调函数参数

・INDEX总线上传感器的索引

•ROM传感器64位激光代码

o 28:FF:FF:FF:FF:FF:FF:FF LSB, 8位家族代码,48位序列号,MSB8{icrc

-RES温度分辨率

•TEMP温度

・TEMP_DEC温度小数整数固件

•PAR传感器寄生旗

。注意

如果使用停点回件,则temp是样点敦。任整敎回件上,最后旳值必须从temp和姓技起 来 temp_dec 。

local ow_pin = 3

dsl8b20.setup(ow_pin)

–read aLL sensors and print aLL measurement resuLts dsl8b20.read(

function(ind,rom? res,temp,tdec^ par) print(ind,string.format(“%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,Jstring.match end,{});

–read onty sensors with famity type 0x28 and print aLL measurement resuLts dsl8b20.read(

function(ind,rom,res,temp,tdec4 par)

print (ind, st ring ・fopmat(”%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X”_,stping・mat:cl” end,{},0x28);

–save device roms in a variabLe

local addr = (} dsl8b20.read(

function(ind,rom,res,tempjtdec^ par) addr[ind] = {string.format(“%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,Jstring.me end,{});

–read onLy sensors Listed in the variabLe addr

dsl8b20.read(

function(ind,rom,res,temp,tdec^ par) print(ind,string.format(”%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X"4string.match end,addr);

–print onLy parasitic sensors

dsl8b20.read(

function(indJ rom,restemp,tdec^ par)

if (par == 1) then

print(ind, string.format(,%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,J string.rr end

end,{});

–print if temperature is greater or Less than a defined vaLue dsl8b20.read(

function(ind,rom,res^tempjtdec,par)

if (t > 25) then

print(ind, string.format (,%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,J string.rr end

if (t < 20) then

print (ind, st ring. format(,%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,J string, rr end

end,{});

dsl8b20.setting ()

配置温度分辨率设置。

句法

dsl8b20.setting(ROM, RES)

参数

・ROM包含指定传感器地址的表格,或者所有传感器都为空的表格

。例如{“28:FF:FF:FF:FF:FF:FF:FF”,”28:FF:FF:FF:FF:FF:FF:FF"} , {}

-RES温度位分辨率

返回

nil

local ow_pin = 3

dsl8b20.setup(ow_pin)

dsl8b20.setting((,28:FF:FF:FF:FF:FF:FF:FF,/,28:FF:FF:FF:FF:FF:FF:FF"}J 9)

dsl8b20.setup ()

初始化所选引脚上的单线总线。

句法

dsl8b20.setup(OW_BUS_PIN)

参数

• OW_BUS_PIN

0 1 - 12

返回

nil

local ow_pin = 3 dsl8b20.setup(ow_pin)

文档》英语”模块》编码器

编码器模块

以来 起源/贡献者 维护者 资源

2016年2月26日 特里埃里森 特里埃里森 encoder.c

编码器模块提供用于编码和解码字节数据的各种功能O

encoder.toBase64 () 提供(二进制)Lua字符串的Base64表示形式。

encoder.fromBase64 () 将(二进制)Lua字符串的Base64表示解码回原始字符串。

encoder.toHex () 提供(二进制)Lua字符串的ASCII十六进制表示形式。

encoder.fromHex () 返回ASCII十六进制字符串的Lua二进制字符串解码。

encoder.toBase64 ()

提供(二进制)Lua字符串的Base64表示形式。

句法

b64 = encoder.toBase64(binary)

参数

binary输入字符串到Base64编码

返回

一个Base64编码的字符串。

print(encoder.toBase64(crypto.hash(“shal”,“abc”)))

encoder.fromBase64 ()

将(二进制)Lua字符串的Base64表示解码回原始字符串。如果字符串不是有效的base64编 码,则会引发错误。

句法

binary_string = encoder.toBase64(b64)

参数

b64 Base64编码的输入字符串

返回

解码的Lua (二进制)字符串。

print(encoder.fromBase64(encoder.toBase64(“hello world”)))

encoder.toHex ()

提供(二进制)Lua字符串的ASCII十六进制表示形式。输入字符串中的每个字节在输出中表 示为两个十六进制字符。

句法

hexstr = encoder.toHex(binary)

参数

binary输入字符串来获取十六进制表示

返回

ASCII+六进制字符串。

print(encoder.toHex(crypto.hash(“shal”,“abc”)))

encoder.fromHex () %

返回ASCII十六进制字符串的Lua二进制字符串解码。输出字符串中的每个字节在输入中表示 为两个十六进制字符。如果字符串不是有效的base64编码,则会引发错误。

句法

binary = encoder.fromHex(hexstr)

参数

hexstr ASCII十六进制字符串。

返回

十六进制表示的解码字符串。

print(encoder.fromHexC’eaSaea")))

最终用户设置模块

以来 起源/贡献者 维护者 资源

2015年9月2日 罗伯特•福斯 罗伯特•福斯 enduser_setup.c

该模块提供了一种简单的配置ESP8266芯片的方法,无需使用串行接口或预先编程WiFi凭证到芯片 上。

运行后 enduser_setup.start(),名为“SetupGadget_XXXXXX"的无线网络将启动(可

以user_config.h通过定义覆盖此前缀ENDUSER_SETUP_AP_SSID )。连接到该SSID,然后导航到 任何网站的根(例如,http://example. com/将工作,但不使用.local域,因为它将在iOS上失 败)。类似于上面的图片的网页将被加载,允许最终用户提供他们的Wi-Fi信息。

成功获取IP地址后,该模块将会像enduser_setup.stop()调用一样停止。在拆卸之前有10秒的延 迟,以允许连接的客户端在SoftAP仍处于繇状态时获得最后的状态消息。

替代HTML可以通过在文件enduser_setup.html系统上调用一个文件来提供服务。网页所需的一 切都必须包含在这个文件中。这个文件将被保存在RAM中,所以保持尽可能小。该文件可以提前 gzip’d来减小大小(即使用gzip -n或zopfli ),并在服务时,最终用户设置模块将添加适当 的Content-Encoding标题的响应。

注意:如果被压缩,文件也可以被命名enduser_setup.htmL.gz为语义目的。Gzip编码由文件的内 容决定,而不是文件名。

以下HTTP端点存在:

端点 描述

/ 返回网页的HTMLo将返回enduser_setup.html文件系统上存在的内容,否则返回嵌入到固件映像中的五

… 强制ESP8266对所有渠道进行现场调査,报告可以找到的接入点。返回有效负载是一个JSON数

/apllst 组:[{“ssid”: “foobar”, “rssi”: -36, “chan” :3}]

7 ccx 返回HTTP 204状态(在Wi-Fi连接检査期间某些Android客户端预期)

generate_204

/状态 返回由网页使用的纯文本状态描述

端点 描述

返回包含十六进制格式的ESP8266的芯片ID和状态码的有效载荷JSON: 0=空闲,1=连接,2=密码错误,3 = 有找到,4=失败,5=成功

端点旨在用于设置无线网络凭证的服务。与/update except#同返回相同的有效载荷,/status.]son而 向到/。

表单提交目标。例

如: http://example.com/update?wifi_ssid=foobar&wifi_password=CorrectHorseBatterySta|: 须是GET请求。将重定向到/完成时。

enduser_setup.manual () 控制是否使用手动AP配置。

enduser_setup.start () 启动强制门户。

enduser.setup.stop () 停止强制门户。

enduser_setup.manual ()

控制是否使用手动AP配置。

默认情况下,enduser_setup模块会在启动时自动配置开放接入点,并在设备成功加AWiFi网络后 停止。如果启用了手动確式,则不会这样做。wifi.SOFTAP在呼叫之前,设备必须手动配置为模 式enduser_setup.start()。此夕卜,设备成功加入WiFi网络后,门户不会停止。

句法

enduser_setup.manual([on_off])

参数

・on_off指示是否使用手动模式的布尔值;如果没有给出,该功能只返回当前设置。

返回

当前设置,如果启用手动模式则为true,否则为false。

wifi.setmode(wifi.STATIONAP)

wifi.ap.config({ssid="MyPersona1SSID"j auth=wifi.OPEN})

enduser_setup.manual(true)

enduser_setup.start(

function()

print(“Connected to wifi as:”・• wifi.sta.getip())

end,

function(err4 str)

print(“enduser_setup: Err #” .・ err … ": " … str)

end

);

enduser_setup.start ()

启动强制门户。

注意:当EUS已经运行时调用start ()是一个错误,并且会导致stop ()被调用来关闭EUS。

句法

enduser_setup. start([onConnected() ], [onError(err_nurrij string) ], [onDebug(string)])

参数

• onConnected()当获得IP地址时,在enduser_setup模块将自行终止之前,将会触发回调

•onError()如果遇到销诙,回调将彼期友。err_num是描述销诙旳双子,开string的會销俣 的描述。

•onDebugO 回调在默认情况下被禁用(由 #define ENDUSER_SETUP_DEBUG_ENABLE in 控

制enduser_setup.c ) o它旨在用于査找模块中的内部问题。string包含正在进行的描述。

返回

nil

enduser_setup.start( function() print(“Connected to wifi as:”.・ wifi.sta.getip())

end,

function(errj str)

print(“enduser_setup: Err #”.・ err … ": " … str)

end,

print – Lua print function can serve as the debug calLback

);

enduser_setup.stop ()

停止强制门户。

句法

enduser_setup.stop()

参数

没有

返回%

nil

文件模块

以来 起源/贡献者 维护者 资源

情节中字 Zeroday Zeroday file.c

文件模块提供对文件系统及其单个文件的访问。

文件系统是一个平面文件系统,没有子目录/文件夹的概念。

除了内部闪存上的SPIFFS文件系统外,如果启用了FatFS,该模块还可以访问外部SD卡上的

FAT分区。

–open fiLe in flash:

if file.open(“init.lua”) then print(file.read()) file.close()

end

–or with fuLL pathspec

file.open(“/FLASH/init.lua”)

–open fiLe on SD card

if file.open(“/SD0/somefile.txt”) then print(file.read()) file.close()

end

file.chdir () 更改当前目录(和驱动器)。

文件已存在() 确定指定的文件是否存在。

文件格式() 格式化文件系统。

file.fscfg () 以字节为单位返回文件系统区域的闪存地址和物理大小。

file.fsinfo () 返回文件系统的大小信息。

的 File. Li st () 列出文件系统中的所有文件。

file.mount () 在SD卡上安装FatFs卷。

file.on () 注册回调函数。

file.open () 打开一个文件进行访问,可能创建它(对于写入模式)O

file.remove () 从文件系统中删除文件。

file.rename () 重命名一个文件。

file.stat () 获取表中文件或目录的属性。

基本模型 在基本模型中,一次最多打开一个文件。

对象模型 文件由文件创建的文件对象表示。

filexlose () , file.obj: close () 关闭打开的文件,如果有的话。

file.flush () , fileobj: flush () 刷新文件系统的挂起写入,确保重新启动时不会丢失数据。

file.read () , fileobj: read () 从打开的文件中读取内容。

file.readline (), fileobj: read line () 从打开的文件中读取下一行。

file.seek () , file.obj: seek () 设置并获取文件的位置,从文件的开头算起,到由。ffset指定的位置 加上由whence字符串指定的基数。

file.write () , fileobj: write () 写一个字符串到打开的文件。

file.writeline (), file.obj: writeline () 写一个字符串到打开的文件并在末尾附加’\

file.chdir ()

更改当前目录(和驱动器)。 当没有驱动器/目录作为文件名时,将使用这个命令。

/FLASH系统启动后,当前目录默认为内部SPIFFS ()的根目录。

❶注意

功能只有在FatFS支持被编译到固件中时才可用。

句法

file.chdir(dir)

参数

dir 目录名/FLASH , /SD0 , /SD1 等。

返回

true false否则就成功了

文件已存在()

确定指定的文件是否存在。

句法

file.exists(filename)

参数

・filename文件来检查

返回

文件的真实存在(即使大小为0字节),如果不存在,则为false

files = file.list()

if files[“device.config”] then print(“Config file exists”) end

if file.exists(“device.config”) then print(“Config file exists”)

end

也可以看看

file.list()

文件格式()

格式化文件系统。完全擦除任何现有的文件系统并写入一个新的文件系统。根据ESP中闪存芯 片的大小,这可能需要几秒钟的时间。

❶注意

功能不支持SD卡。

句法

file.format()

参数

没有

返回

nil

也可以看看

file.remove()

file.fscfg ()

以字节为单位返回文件系统区域的闪存地址和物理大小。

❶注意

功能不支持SD卡。

句法

file.fscfg()

参数

没有

返回

•flash address (数)

•size (数)

print (st ring, format (“0x%x,J file.fscfg()))

file.fsinfo ()

返回文件系统的大小信息。单位是字节为SPIFFS和kByte为FatFS。

句法

file.fsinfo()

参数

没有

返回

•remaining (数)

•used (数)

•total (数)

–get file system info

remaining, used, total=file>fsinfo()

print(”\nFile system info:\nTotal : “…total…” (k)Bytes\nUsed : “…used…” (k)B:

的File.List ()

列出文件系统中的所有文件。

句法

file.list()

参数

没有

返回

一个包含{文件名:文件大小}对的lua表

1 = file, list。; for k,v in pairs(l) do

print(“name:”…k…“j size:”…v) end

file.mount ()

在SD卡上安装FatFs卷。

。注意

功能仅在FatFS支持被编译到固件中时才可用,并且内部闪存不支持。

句法

file.mount(ldrv[, pin])

参数

• Idrv逻辑驱动器的名称,/SD0 , /SD1等。 -pin 1〜12, SS/CS的10索弓I,省略时默认为8。

返回

卷对象

vol = file.mount(“/SOQ”) vol:umount()

file.on ()

注册回调函数。

触发事件是:

-rtc将当前日期和时间传送到文件系统。功能预计将返回一个包含字段的

表year , mon , day , hour , min , sec当前的日期和时间。不支持内部闪存。

句法

file.on(event[j function()])

参数

•event 串

•function()回调函数。如果function()省略,则取消注册回调。

返回

nil

sntp.sync(server_ipj function() print(“sntp time sync ok”) file.onCrtc", function()

return rtctime.epoch2cal(rtctime•get())

end)

end)

也可以看看

rtctime.epoch2cal()

file.open ()

打开一个文件进行访问,可能创建它(对于写入模式)。

当完成文件,它必须关闭使用file.close()。

句法

file.open(filename, mode)

参数

•filename文件被打开

•mode :

。“r":读取模式(默认)

。“w”:写入模式

。“a”:追加模式

。“r+”:更新模式,所有以前的数据被保存

。“w+“:更新模式,所有以前的数据被擦除

。“a+”:追加更新模式,保留以前的数据,只允许在文件末尾写入

返回

文件对象,如果文件打开确定。nil如果文件没有打开,或者不存在(读取模式)。

示例(基本模型) – open ^nit.Lua \ print the first Line. if file.open(,init.lua,J nrn) then

print(file.readline()) file.close()

end

示例(对象模型)

–open 'init.Lua \ print the first Line. fd = file.openC’init.lua”, “r”)

if fd then

print(fd:readline()) fd:close(); fd = nil

end

也可以看看

•file.close()

•file.readline()

file.remove ()

从文件系统中删除文件。该文件一定不能打开。

句法

file.remove(filename)

参数

filename文件删除

返回

nil

–remove “foo. Lua” from fiLe system. file.remove(“foo.lua”)

也可以看看

file.open()

file.rename ()

重命名一个文件。如果一个文件当前打开,它将被首先关闭。

句法

file.rename(oldname, newname)

参数

•oldname旧文件名称

•newname新的文件名称

返回

true成功,false错误。

–rename fiLe ‘temp. Lua ’ to ‘init. Lua’.

file.rename(“temp.lua"j"init.lua”)

file.stat ()

获取表中文件或目录的属性。表的元素是:

•size文件大小以字节为单位

•name文件名

•time表与时间戳信息。如果时间戳不受支持(在SP圧FS上),则默认为1970-01-01 00:00:00o

O year

° mon

o day

o hour

o min

。sec

•is_dir true如果item是一个目录,则标志,否则false

•is_rdonly true如果项目是只读标志,否则标志false

•is_hidden true如果项目被隐藏,则标志,否则false

•is_sys true如果项目是系统则标志,否则false

•is_arch true如果项目归档则标志,否则false

句法

file.stat(filename)

参数

filename文件名

返回

包含文件属性的表

例 s = file.stat(“/SDO/myfile”) print(“name: " •• s.name) printf’size:”… s.size)

t = s.time

print(string.format(“%02d:%02d:%02d”, t.hour, t・min, t.sec)) print(string.format(“%04d-%02d-%02d”, t.year, t.mon, t.day))

if s.is_dir then print(“is directory”) else print(“is file”) end

if s.is_rdonly then print(“is read-only”) else print(“is writable”) end if s.is_hidden then print(“is hidden”) else print(“is not hidden”) end if s.is_sys then print(“is system”) else print(“is not system”) end if s.is_arch then print(“is archive”) else print(“is not archive”) end s = nil t = nil

文件访问功能

该file模块提供了几个功能来访问打开文件后的内容file.oPen()。它们可以用作基本模 型或对象模型的一部分:

基本模型

在基本模型中,一次最多打开一个文件。文件访问功能默认对此文件进行操作。如果打开另 一个文件,则需要事先关闭先前的默认文件。

–open rinit.Lua \ print the first Line.

if file.open(,init.lua,J “r”) then print(file.readline()) file.close()

end

对象模型

文件由创建的文件对象表示file.open()。文件访问功能可用作此对象的方法,多个文件对 象可以共存。

src = file.openC’init.lua", “r”)

if src then

dest = file.openC’copy.lua", “w”)

if dest then local line repeat

line = src:read()

if line then

dest:write(line)

end

until line == nil

dest:close(); dest = nil

end

src:close(); dest = nil

end

注音

建议在应用程序中只使用一个模型。同时使用这两个模型可能会产生不可预知的行为:从 基本模型关闭默认文件也将关闭相应的文件对象。如果文件是相同的文件,从对象模型关 闭文件也将关闭默认文件。

❶注意

SPIFFS上打开文件的最大数量是在编译时通过SPIFFS_MAX_OPEN_FILES in确定 的 user_config.h。

file.close () , file.obj: close ()

关闭打开的文件,如果有的话。

句法

file.close()

fd:close()

参数

没有

返回

nil

也可以看看

file.open()

file.flush () , file.obj: flush ()

刷新到文件系统的任何挂起写入,确保在重新启动时不会丢失数据。使 用file.close() / fd:close()关闭打开的文件也会执行一个隐式刷新。

句法

file.flush()

fd:flush()

参数

没有

返回

nil

示例(基本模型)

– open Lua 1 in 1a+ 1 mode

if file.open(“init.lua”, na+") then

– write rfoo bar’ to the end of the fiLe file.write(‘foo bar’)

file.flush()

– write ‘baz’ too

file.write(‘baz’)

file.close()

end

也可以看看

file.close() / file.obj:close()

file.read () , file.obj: read ()

从打开的文件中读取内容。

。注意

该函数暂时在堆上分配2* (请求的字节数)来缓冲和处理读取的数据。默认块大小

(FILE_READ_CHUNK )是1024字节,被认为是安全的。推动这个4倍或更多可能会导致堆 溢出取房于应角程序。为参数选择一个值时考虑这一点n_or_char。

句法

file.read([n_or_char]) fd:read([n_or_char])

参数

• n_or_char :

。如果没有传入,则读取FILE_READ_CHUNK字节或整个文件(以较小者为准)。

□如果传递一个数字n ,然后读取n字节或整个文件(以较小者为准)。

□如果传递一个包含单个字符的字符串char ,则读取直到char出现在文件的下一 个FILE_READ_CHUNK字节已经被读取,或者到达EOF。

返回

文件内容作为字符串,或EIL时为零

示例(基本模型)

–print the first Line of rinit. Lua if file.open(“init.lua”, “r”) then print(file.read(‘\n’)) file.close()

end

示例(对象模型)

–print the first 5 bytes of ‘init. Lua1

fd = file.openC’init.lua", nrn)

if fd then

print(fd:read(5)) fd:close(); fd = nil

end

也可以看看

•file.open()

•file.readline() / file.obj:readline()

file.readline () , file.obj: readline ()

从打开的文件中读取下一行。行定义为零个或多个以EOL C\n’)字节结尾的字节。如果下一 行比1024长,这个函数只返回前1024个字节。

句法

file.readline()

fd:readline()

参数

没有

返回

按字符串逐个文件内容,包括EOL C\n’) 0 nil EOF时返回。

示例(基本模型)

–print the first Line of rinit. Lua’

if file.open(“init.lua,\ “r”) then print(file.readline()) file.close()

end

也可以看看

•file.open()

•file.close() / file.obj:close()

•file.read() / file.obj:read()

file.seek () , file.obj: seek ()

设置并获取文件的位置,从文件的开头算起,到由。ffset指定的位置加上由whence字符串指定 的基数。

句法

file.seek([whence [, offset]])

fd:seek([whence [, offset]])

参数

•whence

。“set”: base是位置0 (文件的开头)

。“cur”: base是当前位置(默认值) 。“结束”:基地是文件的结尾

•offset默认为0

如果没有给出参数,函数只是返回当前的文件偏移量。

返回

结果文件的位置,或nil错误

示例(基本模型)

if file.open(“init.lua”, “r”) then --skip the first 5 bytes of the fiLe fileeSeekC’set”, 5) print(file.readline()) file.close()

end

也可以看看

file.open()

file.wnte () , file.obj: write ()

写一个字符串到打开的文件。

句法

file.write(string)

fd:write(string)

参数

string要写入文件的内容

返回

true如果写入没有问题,那就nil错误了

示例(基本模型)

– open ^nit.Lua 1 in 1a+ 1 mode

if file.open(“init.lua”, na+") then

– write rfoo bar’ to the end of the fiLe file.write(‘foo bar’)

file, close。

end

示例(对象模型)

–open linit.Lua 1 in 'a+ 1 mode

fd = file.open("init.lua\ “a+”)

if fd then

– write ‘foo bar1 to the end of the fiLe

fd:write(‘foo bar’) fd:close()

end

也可以看看

•file.open()

•file.writeline() / file.obj:writeline()

file.wnteline () , file.obj: writeline ()

写一个字符串到打开的文件并在末尾附加’\n’o

句法

file.writeline(string)

fd:writeline(string)

参数

string要写入文件的内容

返回

true如果写得好,nil错误

示例(基本模型)

–open rinit.Lua1 in ‘a+’ mode

if file.open(,init.lua,J na+n) then

– write 'foo bar1 to the end of the fiLe file.writeline(‘foo bar’) file.close()

end

也可以看看

•file.open()

•file.readline() / file.obj:readline()

文档》英语”模块»gdbstub

gdbstub 模块

以来 起源/贡献者 维护者 资源

2016年 9月 18 H 菲利普•格莱斯顿 菲利普•格莱斯顿 gdbstub.c

当与为1x106构建的gdb版本一起使用时,该模块提供固件的基本源代码调试。如果你启用这 个模块,那么致命的错误(如无效的内存读取)将陷Agdbstubo这使用UART0与GDB进行通 信。如果在UART0连接到终端(或者像esplorer这样的IDE)时发生这种情况,那么你会看到 一个字符串开始,然后再看$t几个字符。这是陷阱发生的信号,控制权应该传递给gdb。

gdb然后可以开始连接到NodeMCU平台。如果这是通过串口连接到主机系统,那么以下 (或关闭的变体)应该工作:

gdb bin/firmwarefile.bin

target remote /dev/ttyUSB0

在这一点上,你可以徘徊,看看发生了什么,但你不能继续执行。

为了进行交互式调试,请gdbstub.brk()在您的Lua代码中添加一个调用。这将触发一个 break指令,并将陷入gdb如上。但是,断点指令支持continuation,因此您可以单步设置断点 等。请注意,由EspressifME置的1x106处理器只支持一个硬件断点。这意味着您只能在Flash代 码中放置一个断点。你可以尽可能地单步执行。

gdbstub.brk () 通过执行break 0,0指令来进入gdb。

gdbstub.gdboutput () 控制系统输出是否封装在gdb远程调试协议中。

gdbstub.brk ()

通过执行一条break 0,0指令进入gdb。

句法

gdbstub.brk()

gdbstub.gdboutput ()

控制系统输出是否封装在gdb远程调试协议中。事实证明,这并不像你希望的那样有用-主要 是因为你无法将输入发送到NodeMCU板。另外,因为在运行gdb并连接到NodeMCU之后, 您确实应该调用此调用。下面的例子首先进行中断,然后切换到重定向输出。这工作(但你 无法发送更多的控制台输入)。

gdbstub.gdboutput(enable)

参数

enable如果为true,则输出将被封装在gdb远程调试协议中。如果为false,则直接发送到

UARTo

function entergdb()

gdbstub.brk() gdbstub.gdboutput(1) print(“Active”)

end

entergdb()

笔记

一旦将gdb连接到NodeMCU,则NodeMCU的任何其他输出将被丢弃(因为它不符合gdb远程 调试协议)。这可能(或可能不)是一个问题。如果你想在gdb下运行并且看到NodeMCU的 输出,那么调用gdbstub.gdboutput(l)然后输出将被包装在gdb协议中并显示在gdb控制台 上。你不想这样做,直到gdb连接,因为每个数据包需要一个明确的确认才能继续。

GPIO模块

以来 起源/贡献者 维护者 资源

情节中字 Zeroday Zeroday gpio.c

该模块提供对GPIO (通用输入/输出)子系统的访问。

所有访问均基于NodeMCU开发工具包上的I/O索引编号,而不是内部GPIO引脚。例如,开 发套件上的DO引脚被映射到内部GPI。引脚16。

如果不使用NodeMCU开发工具包,请参考下面的GPIO引脚图来获取indexgpio映射。

IO索引 ESP8266引脚 1。索引 ESP8266引脚

0[*] GPIO16 7 GPIO13

1 GPIO5 8 GPIO15

2 GPIO4 9 GPIO3

3 GPIOO 10 GPIO1

4 GPIO2 11 GPIO9

五 GPIO14 12 GPIO10

6 GPIO12

DO (GPIO16)只能用作gpio读/写。不支持0pen-drain/interrupt/pwm/i2c/ow0

gpio.mode () 将引脚初始化为GPIO模式,设置引脚的输入瀚出方向以及可选的内部弱上拉。

gpio.read () 读取数字GPIO引脚值。

gpio.serout () 基于一系列延迟时间(以|JS为单位)序列化输出。

gpio.trig () 建立或清除一个回调函数在一个引脚的中断上运行。

gpio.write () 设置数字GPI。引脚值。

gpio.mode ()

将引脚初始化为GPIO模式,设置引脚的输入/输出方向以及可选的内部弱上拉。

gpio.modeCpin, mode [, pullup])

参数

-pin引脚来配置IO索引

-mode gpio.OUTPUT, gpio.OPENDRAIN, gpio.INPUT或gpio.INT (中断模式)

, pullup gpio.PULLUP使能弱上拉电阻;默认是gpio.FLOAT

返回

nil

gpio.mode(0, gpio.OUTPUT)

也可以看看

•gpio.read()

•gpio.write()

gpio.read ()

读取数字GPIO引脚值。

句法

gpio.read(pin)

参数

pin引脚读取,I。索引

返回

一个数字,0=低,1=高

–read vaLue of gpio 0.

gpio.read(0)

也可以看看

gpio.mode()

gpio.serout ()

基于一系列延迟时间(以|JS为单位)序列化输出。在每次延迟之后,引脚被切换。在最后一 个周期和最后一个延迟之后,引脚不会被切换。

该功能有物种工作模式:冋步-对十小十50微杪旳分辨率,限制为最大。总体持续时间,异 步-同步操作,粒度较小但持续时间几乎不受限制。

是否选择异步模式由callback参数的存在来定义。如果存在并且是函数类型的,则该函数 变为异步,并且在序列结束时调用回调函数。如果参数是数字,则该函数仍然是异步的,但 是完成后不会调用回调。

对于异步版本,最小延迟时间不应小于50|JS,最大延迟时间应为Ox7fffff|js (〜8.3秒)□在这 种模式下,函数不会阻塞堆栈,并在输出序列完成之前立即返回。硬件定时器FRC1_SOURCE 模式用于改变状态。由于只有一个硬件定时器,所以可以同时使用哪些模块。如果宣时器已 经在使用中,将会引发错误。

请注意,同步变量(no或nil callback参数)函数会阻塞堆栈,因此它的任何使用都必须遵 守SDK准则(这里也解释)。不这样做可能会导致WiFi问题或彻底崩溃/重新启动。简而言 之,这意味着所有延迟时间的总和乘以周期数不应超过15毫秒。

句法

gpio.serout(pin., start_level, delay_times [, cycle_num[, callback]])

参数

-pin引脚使用,IO索引

•start_level 级别开始,无论是 gpio.HIGH 或 gpio. LOW

•delay_times gpio引脚的每个开关之间的延迟时间(以卩S为单位)°

•cycle.num在序列中运行的可选次数。(默认是1)

•callback 一个可选的回调函数或数字,如果存在的话,函数立即返回并异步。

返回

nil gpio.mode(1,gpio.OUTPUT,gpio.PULLUP)

gpio.serout(1jgpio.HIGH,{30,30,60,60,30,30}) – seriaL one byte, bl0110010

gpio.serout(1,gpio.HIGH,(30,70),8) – seriaL 30% pwm 10kj Lasts 8 eye Les

gpio.serout(lj gpio.HIGH,(3,7}^ 8) – seriaL 30% pwm 100kj Lasts 8 eye Les

gpio.sepout(l,gpio.HIGH,{0,0},8) – seriaL 50% pwm as fast as possibLej Lasts 8 gpio. serout(1 jgpio. LOW^ (20,10,10,20,10,10,10,100)) – siin uart one byte 0x5A at i gpio.serout(lj gpio.HIGH,(8?18},8) – seriaL 30% pwm 38k, Lasts 8 eye Les

gpio.serout(1,gpio.HIGH,{5000,995000),100, function() print(”done”) end) – asyn^ gpio.serout(1jgpio.HIGH,{5000,995000),100, 1) – asynchronous 100 fLoshes 5 ms Li

gpio.trig ()

建立或清除一个回调函数在一个引脚的中断上运行。

如果GPIO_lNTERRUPT_ENABLE在编译时未定义,则此函数不可用。

gpio.trig(pin, [type [, callbackfunction]])

•pin 1-12,引脚触发,IO索引。请注意,引脚0不支持中断。

•type “up”, “down”,“both”, Tow”,“high”,分别表示上升沿,下降沿,双边沿,低电 平和高电平触发模式。如果类型为“none”或省略,则回调函数被移除,中断被禁用。

•cal lback_f unction (levels when)触发发生时的回调函数。中断处的指定引脚的电平作 为第一个参数传递给回调函数。事件的时间戳作为第二个参数传递。这是以微秒为单位, 与基数相同tmr.nowO。这个时间戳在中断级抓取,比在回调函数中获得时间更加一 致。如果该函数被省略,则前面的回调函数将被使用。

返回

nil

do

–use pin 1 as the input puLse width counter

local pin, pulselj du, now, trig = 1, 0, 0, tmr.now3 gpio.trig gpio.mode(pinjgpio.INT)

local function pinlcb(level, pulse2)

print( level, pulse2 - pulsel ) pulsel = pulse2 trigCpin, level == gpio.HIGH and “down” or “up”) end trig(pin, "down"pinlcb)

end

也可以看看

gpio.mode()

gpio.write ()

设置数字GPIO引脚值。

句法

gpio.write(pin, level)

参数

-pin引脚写入,I。索引

•level gpio.HIGH 要么 gpio. LOW

返回

nil

–set pin index 1 to GPIO mode, and set the pin to high. pin = l

gpio.mode(pin, gpio.OUTPUT)

gpio.write(pin4 gpio.HIGH)

也可以看看

・gpio.mode()

•gpio.read()

HDC1080模块

以来 起源/贡献者 维护者 资源

2017年4月1日 Metin KOC Metin KOC hdc!080.c

该模块可以访问带有温度传感器的HDC1080低功耗,高精度数字湿度传感器。

hdcl080.read () 对传感器进行釆样,然后返回温度和湿度值。

hdcl080.setup () 初始化模块。

hdcl080.init (SDA, SCL) 初始化模块并设置引脚配置。

hdcl080.read ()

对传感器进行采样,然后返回温度和湿度值。

句法

hdcl080.read()

返回

温度数据(摄氏度)和湿度数据(百分比)(0-100)(整数/浮点数)

local sdaj scl = 1, 2

i2c.setup(0j sda, scl, i2c.SL0W) – caLL i2c.setup() onLy once hdcl080.setup()

local temperature^humidity = hdcl080.read()

print(temperature)

print(humidity)

hdcl080.setup ()

初始化模块。

句法

hdcl080.setup()

参数

-没有

返回

nil

hdcl080.init (SDA, SCL)

初始化模块并设置引脚配置。

。注意

此功能已弃用,将在即将发布的版本中删除。hdcl080.setup()改为使用。

句法

hdcl080.init(sda, scl)

参数

・sda数据引脚

• scl时钟引脚

返回

nil

HMC5883L 模块

以来 起源/贡献者 维护者 资源

2016 年4月 9 日 Jason Schmidlapp Jason Schmidl 叩 p hmc5883l.c

该模块提供对HMC5883L三轴数字罗盘的访问。

hmc5883Lread () 釆样传感器并返回X, Y和Z数据。

hmc5883l.init () 初始化模块并设置引脚配置。

hmc5883l.setup () 初始化模块。

hmc58831.read ()

釆样传感器并返回X, Y和Z数据。

句法

hmc58831.read()

返回

x, y, z测量(整数)温度乘以10 (整数)

local sdaj scl = 1, 2

i2c.setup(0j sda, scl, i2c.SL0W) – caLL i2c.setup() onLy once hmc58831.setup()

local x>y,z = hmc58831.read()

print(string.format("x = %d, y = %d, z = %d”, x, y, z))

hmc58831.init ()

初始化模块并设置引脚配置。

。注意 此功能已弃用,将在即将发布的版本中删除。hmc58831.setup()改为使用。

hmc58831.initfsda・ scl)

・sda数据引脚

• scl时钟引脚

返回

nil

hmc58831.setup ()

初始化模块。

句法

hmc58831. set upQ

参数

没有

返回

nil

HTTP模块

以来 起源/贡献者 维护者 资源

2016年 1 月 15 H esphttpclient /Vowstar Vowstar http.c

基本的HTTP客户端模块,它提供了一个通过HTTP (S)进行GET/POST/PUT/DELETE的接 口,以及自定义的请求。由于ESP8266的内存限制,支持的页面/主体大小受可用内存的限 制。试图接收比这更大的页面将失败。如果需要更大的页面/主体大小,请考 虑net. createConnection()在数据中使用和传输。

❶注意

它是不是能够执行使用此模块并发的HTTP请求。

每个请求方法都有一个回调,当从服务器接收到响应时调用该回调。第一个参数是状态码, 可以是常规的HTTP状态码,也可以是-1表示DNS,连接或内存不足故障,或超时(目前为10 秒)。

对于每个操作,都可以提供自定义HTTP头或覆盖标准头。默认情况下,Host标题从URL推 导User-Agent是ESP8266。但是,请注意,Connection标题不能被覆盖!它总是设置 为 close o

HTTP重定向(HTTP状态300-308)自动跟随到20的限制,以避免可怕的重定向循环。

当调用回调时,会传递HTTP状态码,收到的正文和响应头的表格。所有的标题名称已经被降 低到容易访问。如果有多个相同名称的标题,则只返回最后一个标题。

SSL/TLS 支持

注意网络模块中记录的约束条件。

http.delete () 执行HTTP DELETE请求。

http.get () 执行HTTP GET请求。

http.post () 执行HTTP POST请求。

http.put () 执行HTTP PUT请求。

http.request () 为任何HTTP方法执行自定义HTTP请求。

http.delete ()

执行HTTP DELETE!#求。请注意,并发请求不受支持。

句法

http.delete(urlj headers^ body, callback)

参数

-url该URL抓取,包括http://或https://前缀

•headers可选的附加头文件,包括\r\n;也许nil

-body身后张贴;必须已经以适当的格式编码,但可能是空的

-callback当收到响应或发生错误时要调用的回调函数;它被调用的参

数 status_code , body 和 headers。如果发生错误,status_code 则设置为-1。

返回

nil

http.delete(‘http://httpbin.org/delete’,

■I it

3

■ I it

■Function(code, data)

if (code < 0) then print(“HTTP request failed”) else

print(codej data)

end

end)

http.get ()

执行HTTPGETiW求。请注意,并发请求不受支持。

句法

http.get(urlj headers, callback)

参数

-url该URL抓取,包括http://或https://前缀

•headers可选的附加头文件,包括\r\n;也许nil

・callback当收到响应或发生错误时要调用的回调函数;它被调用的参

数 status_code , body 和 headers 。如果发生错误,status_code 则设置为-1。

返回

nil

http.get(“http://httpbin.org/ip"j nil, function(codej data) if (code < 0) then

print ('“HTTP request failed”)

else

print(codej data)

end

end)

http.post ()

执行HTTP POST请求。请注意,并发请求不受支持。

句法

http.post(urlj headers, body, callback)

参数

・url该URL抓取,包括http://或https://前缀

• headers可选的附加头文件,包括\r\n;也许nil

-body身后张贴;必须已经以适当的格式编码,但可能是空的

-callback当收到响应或发生错误时要调用的回调函数;它被调用的参

数 status_code , body 和 headers 。如果发生错误,status_code 则设置为-1。

返回

nil http.post(‘http://httpbin.org/post’,

‘Content-Type: application/json\r\n’, ,{”hmo”:nwop Id}, function(code, data)

if (code < 0) then print(“HTTP request failed”) else

print(codej data)

end

end)

http.put ()

执行HTTP PUT请求。请注意,并发请求不受支持。

句法

http.put(urlj headers, body, callback)

参数

-url该URL抓取,包括http://或https://前缀

• headers可选的附加头文件,包括\r\n;也许nil

・bodv身后张贴:必须己绎以话当的格式编码,伯可能是空的

•callback当收到响应或发生错误时要调用旳回调幽数;它被调用旳参

数 status_code , body 和 headers。如果发生错误,status_code 则设置为-1。 返回

nil

http.put(‘http://httpbin.org/put’,

‘Content-Type: text/plain\r\n’,

‘Hello!\nStay a while, and listen \n’,

■Function(code, data)

if (code < 0) then

print(“HTTP request failed”)

else

ppint(code> data)

end

end)

http.request ()

为任何HTTP方法执行自定义HTTP请求。请注意,并发请求不受支持。

句法

http.request(url, methodheaders^ body, callback)

参数

-url该URL抓取,包括http://或https://前缀

•method 要使用的HTTP方法,例如“GET”, “HEAD", “OPTIONS”等

•headers可选的附加头文件,包括\r\n;也许nil

-body身后张贴;必须已经以适当的格式编码,但可能是空的

・callback当收到响应或发生错误时要调用的回调函数;它被调用的参

数 status_code , body 和 headers。如果发生错误,status_code 则设置为-1。 返回

nil

http.request(“http://httpbin.org”, “HEAD”,“”,“”,

function(code, data)

if (code < 0) then

print(nHTTP request failed")

else

print(codej data)

end

end)

HX7U模块

以来 起源/贡献者 维护者 资源

2015年 10月 9 日 Chris Takahashi Chris Takahashi hx711.c

该模块提供对HX711称重传感器放大器/ADC的访问。HX711是一款便宜的24位ADC,具有 可编程的128x, 64x和32x增益。目前只支持128倍增益的通道A.

注意:要保存ROM映像空间,默认情况下,该模块不会编译到固件中。

hx711.init () 初始化hx711时钟和数据的io引脚。

hx711.read () 读取数字传感器ADC值。

hx711.init ()

初始化hx711时钟和数据的i。引脚。

句法

hx711,init(clk, data)

参数

-elk引脚连接到hx711时钟信号

-data引脚连接到hx711数据信号

返回

nil

–InitiaLize the hx711 with elk on pin 5 and data on pin 6 hx711.init(5』6)

hx711.read ()

读取数字传感器ADC值。

句法

hx711.read(mode)

mode ADC模式。此参数目前被忽略,并保留,以确保向后兼容,如果支持额外的模式被添 加。目前只支持A @128增益。

模式 渠道 获得

0 一个 128

返回

一个数字(24位有符号的ADC值扩展到机器的int大小)

–Read ch A with 128 gain.

raw_data = hx711.read(0)

PC模块

以来 起源/贡献者 维护者 资源

情节中字 Zeroday Zeroday i2c.c

i2c.address () 为下一次传输设置FC地址和读/写模式。

i2c.read () 读取可变数量字节的数据。

i2c.setup () 初始化FC模块。

i2c.start () 发送FC启动条件。

i2c.stop () 发送PC停止条件。

i2c.write () 将数据写入FC总线。

i2c.address ()

为下一次传输设置『c地址和读/写模式。

语法

i2c・address(id, device_add、direction)

参数

・id总是0

•device_addr 7位器件地址,请记住,l2C device_addr代表高7位,后面跟direction 一位

•direction i2c.TRANSMITTER 用于书写模式,i2c. RECEIVER 用于阅读模式

返回

true如果收到,false如果没有收到。

也可以看看

i2c.read ()

i2c.read ()

读取可变数量字节的数据。

i2c.read(idj len)

参数

• id总是0

-len数据字节数

返回

string收到的数据

id = 0

sda = 1

scl = 2

–initialize i2Cj set pinl as sdOj set pin2 as scL

i2c.setup(id, sda】 scl, i2c.SL0W)

–user defined function: read from reg_addr content of

function read_reg(dev_addr, reg_addr)

i2c ・ start(id)

12c.address(idj dev_addr> i2c.TRANSMITTER)

i2c.write(idj reg_addr)

i2c ・ stop(id)

i2c ・ start(id)

i2c.address(id, dev_addr, i2c.RECEIVER)

c = i2c.read(idj 1)

i2c ・ stop(id)

return c

end

–get content of register 0xAA of device 0x77

reg = read_reg(0x77j 0xAA)

print(string.byte(reg))

也可以看看

i2c.write ()

i2c.setup ()

初始化FC模块。

句法

i2c.setup(idj pinSDA, pinSCL, speed)

参数

・id总是0

•pinSDA 1 〜12, I。指数

•pinSCL 1 〜12, IO指数

• speed K i2c .SLOW 史持

返回

speed选定的速度

也可以看看

i2c.read ()

i2c.start ()

发送FC启动条件。

句法

i2c.start(id)

参数

id总是。

返回

nil

也可以看看

i2c.read ()

i2c.stop ()

发送FC停止条件。

句法

i2c.stop(id)

参数

id总是。

返回

nil

也可以看看

i2c.read ()

i2c.write ()

将数据写入1幻总线。数据项可以是多个数字,字符串或lua表。

句法

i2c.write(idj datal[, data2[, .・・> datan]])

参数

• id总是0

・data数据可以是数字,字符串或lua表。

返回

number写入的字节数

i2c.write(0, “hello”, “world”)

也可以看看

i2c.read ()

L3G4200D 模块

以来 起源/贡献者 维护者 资源

2015-04-09 Jason Schmidlapp Jason Schmidlapp !3g4200d.c

该模块提供对L3G4200D三轴数字陀螺仪的访问。

l3g4200d.read () 釆样传感器并返回陀螺仪输出0

l3g4200d.init () 初始化模块并设置引脚配置。

!3g4200d.setup () 初始化模块。

13g4200d.read ()

釆样传感器并返回陀螺仪输出。

句法

13g4200d . read()

返回

X, Y, Z陀螺输出

local sdaj scl = 1, 2

i2c.setup(0j sda, scl, i2c.SL0W) – caLL i2c.setup() onLy once 13g4200d.setup()

local x>y,z = 13g4200d.read()

print(string.format("X = %d, Y = %d, Z = %d”, x, y, z)

13g4200d.init ()

初始化模块并设置引脚配置。

。注意

此功能已弃用,将在即将发布的版本中删除。13g4200d.setup()改为使用。

句法

13e4200d.initfsda. scl)

・sda数据引脚

• scl时钟引脚

返回

nil

13g4200d.setup ()

初始化模块。

句法

13g4200d .setup。

参数

没有

返回

nil

MCP4725模块

以来 起源/贡献者 维护者 资源

2017 年5 月 10 日 dnc40085 dnc40085 mcp4725.c

该模块提供对MCP4725 12位数模转换器的访问。

!!!重要:VDD是器件的电源引脚。VDD引脚的电压用作电源输入以及DAC参考输入。为了获 得良好的DAC性能,VDD引脚的电源应该尽可能的干净。

!!!注:MCP4725器件地址包含四个固定位(1100=器件代码)和三个地址位(A2, A1,

AO) o A2和A1位在制造时是硬连线的,A0位由A0引脚的逻辑状态决定。A0引脚可以连接到 VDD或VSS,或由数字逻辑电平主动驱动。地址引脚(A0)可由GPIO主动驱动,作为芯片选 择,允许在同一总线上使用2个以上的器件。

mcp4725.read () 获取dac寄存器和EEPROM的内容。

mcp4725.write () 将配置写入dac寄存器或dac寄存器和eeprom。

mcp4725.read ()

获取dac寄存器和EEPROM的内容。

句法

mcp4725.read({[a0], [al][a2]))

参数

返回

•cur_pwrdn当前掉电配置值。

・cur_val当前值存储在dac寄存器中。

•eeprom_pwrdn关闭存储在EEPROM中的配置。

-eeprom_val DAC值存储在EEPROM中。

•eeprom_state EEPROM写入状态

0 0 EEPROM写入不完整。

□ 1 EEPROM写入已完成

• por_state上电复位状态;

o 0 MCP4725正在执行复位,尚未准备就绪。

O 1 MCP4725已成功执行复位。

–Get current configuration using default i2c address 0x60(A0=0, Al=0j A2=0).

do

local ID = 0

local SDA = 6

local SCL = 5

i2c.setup(IDJ SDA, SCL, i2c.SLOW)

local cur_pwrdn, cur_val, eeprom_pwrdn, eeprom_val, eeprom_state, por_state = mc|

print(“\n Current configuration:\n\tpower down value: “…cur_pwrdn…”\n\tdac vali print(” Configuration stored in EEPROM:\n\tpower down value: " …eeprom_pwrdn… l1\ print(" EEPROM write state: “…(eeprom_statel and “Completed” or “incomplete”) print(" Power-On-Reset state: "…(por_statel and “Completed” or “incomplete”)) end

–Get current configuration using defauLt i2c address 0x60(A0=0, Al=0j A2=0).

–The MCP4725fs address pin(A0) is being driven with gpio 4(pin 2).

do

local ID = 0

local SDA = 6

local SCL = 5

local mcp4725_chip_sel = 2

i2c.setup(IDJ SDA, SCL, i2c.SLOW)

gpio.mode(mcp4725_chip_selj gpio・OUTPUT, gpio.PULLUP)

gpio.write(mep4725_chip_sel, 1)

local cur_pwrdn, cur_val, eeprom_pwrdn, eeprom_val, eeprom_stateJ por_state = mc| gpio.write(mep4725_chip_sel, 0)

print(”\n Current configuration:\n\tpower down value: “…cur_pwrdn…”\n\tdac vali print(" Configuration stored in EEPROM:\n\tpower down value: “…eeprom_pwrdn…”\i print(" EE PROM write state: "… (eeprom_statel and “Completed” or “incomplete’1) print(” Power-On-Reset state: "…(por_statel and “Completed” or “incomplete”)) end

也可以看看

・ i2c.setup()

mcp4725.write ()

将配置写入dac寄存器或dac寄存器和eeprom。

句法

mcp4725.write(([a0][al][a2], value, [pwrdn], [save]})

-A0地址位0.该位可由用尸通过MCP4725引脚6 (AO)进仃配置。 (默认值:0)

-A1地址位1.该位在制造过程中是硬连线的。(有效状态:。或1) 注意:从Adafruit购买的模块将此位(A1)设置为高(1)。

A2地址位2.该位在制造过程中是硬连线的。(有效状态:。或1) value用于配置DAC (和EEPROM)的值。(范围:0-4095) • pwrdn设置关机位。

mcp4725.PWRDN_N0NE 启用MCP4725输出。 mcp4725.PWRDN_lK MCP4725输出被禁止, mcp4725.PWRDN_100K 禁用 MCP4725输出, mcp4725.PWRDN_500K 禁止 MCP4725输出,

将pwrdn和dac值保存到EEPROM。(数值在加电或复位期间加载。) true保存配置到EEPROMo

false不要将配置保存到EEPROMo (默认)

返回

–Set current configuration using default i2c address 0x60(A0=0j Al=0j A2=0). do

local ID = 0

local SDA = 6

local SCL = 5

i2c.setup(ID, SDA, SCL, i2c.SL0W)

mcp4725.write({value=2048})

end

–Set current configuration and save to EEPROM using defouLt i2c address 0x60(Ai do

local ID = 0

local SDA = 6

local SCL = 5

i2c.setup(ID, SDA, SCL, i2c.SL0W)

mcp4725.write({value=2048, save=true))

end

–Set current configuration using defauLt i2c address 0x6Q(A0=0, Al=0j A2=0).

–The MCP4725rs address pin(A0) is being driven with gpio 4(pin 2). do

local ID = 0

local SDA = 6

local SCL = 5

local mcp4725_chip_sel = 2

i2c.setup(IDJ SDA, SCL, i2c.SL0W)

gpio.mode(mep4725_chip_selJ gpio.OUTPUT, gpio.PULLUP)

gpio.write(mep4725_chip_selJ 1)

mcp4725.read({A0=lj value})

gpio.write(mcp4725_chip_sel, 0)

end

()dn^9s-Dzi ・

文档》英语”模块»MDNS

mDNS模块

以来 起源/贡献者 维护者 资源

2016年2月24日 菲利普•格莱斯顿 菲利普•格莱斯顿 mdns.c

多播DNS用作Bonjour/Zeroconf的一部分。这允许系统识别他们自己以及他们在局域网上提 供的服务。然后客户就可以发现这些系统并连接到它们。

mdns.register () 注册主机名并启动mDNS服务。

mdnsxlose () 关闭mDNS服务。

mdns.register ()

注册主机名并启动mDNS服务。如果服务已经在运行,那么将会用新的参数重启。

句法

mdns.register(hostname attributes])

参数

・hostname此设备的主机名。字母数字字符是最好的。

•attributes 一个可选的选项表。钥匙必须全部是字符串。

该attributes包含两类属性-那些有特定的名称,以及那些特定的服务。RFC 6763定义了如 何将额外的,特定于服务的属性编码到DNS中。一个例子是,如果设备支持打印,则可以将 队列名称指定为附加属性。该模块最多支持10个这样的属性。

具体名称是:

・port服务的端口号。默认值是80。

•service服务的名称。默认值是’http’。

-description描述服务的简短短语(不超过63个字符)。默认是主机名。

返回

nil

错误

参数验证期间可能会产生各种错误。在调用的时候,NodeMCU必须有一个IP地址,否则会引 发错误。

mdns.register(“fishtank”, {hardware=‘NodeMCU’})

dns-sd在OSX上使用,你可以看到fishtank.local提供_http._tcp服务。您也可以直 接浏览到fishtank.local。在Safari中,您可以将所有mDNS网页作为书签菜单的一部分°

mdns.register(“fishtank”, { description = "Top Fishtank”,service=,http"j port=80j

mdns.close ()

关闭mDNS服务。这通常不是必需的。

句法

mdns.close()

参数

没有

返回

nil

文档》英语”模块»MQTT

MQTT模块

以来 起源/贡献者 维护者 资源

2015年1月23日 Tuan PM, Stephen Robinson Vowstar mqtt.c

客户端遵守MQTT协议的3.1.1版本。确保您的代理支持3.1.1版,并且已正确配置。客户端与运行 MQTT3.1的代理不兼容。

mqtt.Client () 创建一个MQTT客户端。

mqtt.client:关闭() 关闭与经纪人的连接。

mqttclient: connect ()的 连接到由给定主机,端口和安全选项指定的代理。

mqtt.client: LWT () 设置最后的遗嘱和遗嘱(可选)o

mqtt.client:上() 注册事件的回调函数。

mqttxlient:发布() 发布消息。

mqtt.client:订阅() 订阅一个或几个主题。

mqtt.client:退订() 取消订阅一个或多个主题。

mqtt.Client ()

创建一个MQTT客户端。

句法

mqtt.Client(clientidj keepalive], username, password, cleansession])

参数

. clientid 客户端ID

keepalive 保持秒

. username 用户名

password 用户密码

. cleansession 0/1 为 false / true。默认值是 1 ( true )。

返回

MQTT客户端

– init mqtt cLient without Logins’ keepaLive timer 120s

m = mqtt.Client(“clientid"4 120)

–init mqtt cLient with Logins^

m = mqtt.Client(“clientid"12。,

–setup Last h/iLL and Testament

–Broker wiLL pubLish a message

–to topic “/Lwt” if cLient don’t send keepaLive packet

m:lwt(,/lwt,J “offline”, 0, 0)

m:on(“connect"s function(client) print (“connected”) end) m:on(“offline"s function(client) print (“offline”) end)

– on pubLish message receive event

m:on(“message"s function(client^ topic, data) print(topic …”:”)

if data ~= nil then

print(data)

end

end)

–for TLS: m:connect(“192.168.11.118’^ secure-portj 1)

m:connect(“192.168.11.118”, 1883, 0, function(client) print(“connected”)

–CaLLing subscribe/pubLish onLy makes sense once the connection

–was successfuLLy estabLished. You can do that either here in the

–1 connect * caLLback or you need to otherwise make sure the

–connection was estabLished (e.g. tracking connection status or in --m^nC’connecf’j function)).

–subscribe topic with qos = 0

client:subscribe(”/topic”, 0, function(client) print(“subscribe success”) end) --pubLish a message with data = heLLOj QoS = 0, retain = 0

client:publish(”/topic”, "hello"0, 0, function(client) print(“sent”) end) end, function(clientj reason)

print(“failed reason:”・・ reason)

end)

m:close();

–you can caLL m:connect again

MQTT客户端

mqtt.client:关闭()

关闭与经纪人的连接。

句法

mqtt:close()

参数

没有

返回

true false否则就成功了

mqtt.client: connect ()的

连接到由给定主机,端口和安全选项指定的代理。

句法

mqtt:connect(host[j port[secure], autoreconnect]]][, function(client)[function(client, reasor

参数

-host主机,域或IP (字符串)

-port经纪人端口(号码),默认1883

•secure 0/1 for false / true ,默认为0.注意net模块中记录的约束条件。

•autoreconnect 0/1 为 false / true ,默认为0.此选项已弃用。

•function(client)当连接建立时的回调函数

•functiontclient, reason)当无法建立连接时回调函数。不应该调用进一步的回调。

返回

true false否则就成功了

笔记

不要使用autoreconnect。让我重复一遍,不要使用autoreconnect。您应该明确地为您的应用 程序处理错误。特别是,cleansession上面的默认值是true ,所以当连接因任何原因丢失时, 所有的订阅都被销毁。

为了获得一致的连接,处理错误回调中的错误。例如:

function handle_mqtt_error(clientreason)

tmr.create():alarm(10 * 1000j tmr.ALARM_SINGLE> do_mqtt_connect)

end

function do_mqtt_connect()

mqtt:connect(“server”, function(client) print(“connected”) end, handle_mqtt_error) end

在现实中,连接的功能应该做一些有用的事情!

这是autoreconnect功能如何(或不可以)工作的描述。

什么时候autoreconnect设置,当连接断开时,连接将被重新建立。将不会给出错误指示 (但如果cleansession属实,所有订阅可能会丢失)。但是,如果第一个连接失败,则不会 进行重新连接尝试,并通过回调(如果有)发送错误信号。如果客户端连接到服务器,并且响 应其MQTT连接请求,返回一个很好的响应数据包,则认为第一个连接成功。这意味着(例 如)用户名和密码是正确的。

连接失败回调原因代码:

不变 值 描述

mqtt.CONN_FAIL_SERVER_NOT_FOUND 巧 没有代理侦听指定的IP地址和端口

mqtt.CONN_FAIL_NOT_A_CONNACK_MSG -4 经纪人的回应不是协议要求的CON NACK

mqtt.CONN_FAIL_DNS -3 DNS査找失败

mqtt.CONN_FAIL_TIMEOUT_RECEIVING -2 超时等待经纪人的CONNACK

mqtt•CONN_FAIL_TIMEOUT_SENDING -1 超时尝试发送连接消息

mqtt.CONNACK_ACCEPTED 0 没有错误。注意:这不会触发失败回调。

mqtt, CONNACK_REFUSED_PROTOCOL_VER 1 经纪人不是3.1.1 MQTT经纪人。

mqtt.CONNACK_REFUSED_ID_REJECTED 2 指定的ClientID被代理拒绝。

(见 mqtt.Client())

不变

值 描述

mqtt.CONNACK_REFUSED_SERVER_UNAVAILABLE

服务器不可用。

mqtt.CONNACK_REFUSED_BAD_USER_OR_PASS

经纪人拒绝指定的用户名或密码。

mqtt.CONNACK_REFUSED_NOT_AUTHORIZED

用户名未被授权。

mqtt.client: LWT ()

设置最后的遗嘱和遗嘱(可选)。如果客户端不发送keepalive数据包,代理将发布qos = 0, retain = 0, data《'offline"消息到主题7 Iwt"。

句法

mqtt:lwt(topic, message], qos[, retain]])

参数

・topic将要发布的主题(字符串)

・message要发布的消息(缓冲区或字符串)

・qos QoS级别,默认为0

• retain保留标志,默认为0

返回

nil

mqtt.client:上()

注册事件的回调函数。

句法

mqtt:on(eventj function(client[j topic], message]]))

参数

・event可以是"连接”,“留言”或“离线"

• function(client[, topicf, message]])回调函数。第一个参数是客户端。如果事件是“消 息”,则第二和第三参数被接收话题和消息(字符串)。

返回

nil

mqtt.client:发布()

发布消息。

句法

mqtt:publish(topicj payload, qos, retain], function(client)])

参数

-topic要发布的主题(主题字符串)

・message要发布的消息(缓冲区或字符串)

・qos QoS等级

• retain保留国旗

•function(client)収到PUBACK可触友口」近旳回调。汪怠:当多次调用publish O W,定义 的最后一个回调函数将被调用用于ALL发布命令。

返回

true false否则就成功了

mqtt.client:订阅()

订阅一个或几个主题。

句法

mqtt:subscribe(topic, qos[function(client)])

mqtt:subscribe(table[, function(client)])

参数

•topic —个主题字符串

•qos QoS订阅级别,默认为0

•table qos,对的数组来订阅

•function(client)订阅成功时触发可选的回调。注意:当多次调用subscribe ()时,将为所 有订阅命令调用定义的最后一个回调函数。

返回

true false否则就成功了

–subscribe topic with qos = 0

m:subscribe(“/topic”,0, function(conn) print(“subscribe success”) end)

–or subscribe muLtipLe topic (topic/。, qos = 0; topic/1, qos = 1; topic2 丿 qos = 2) m:subscribe({[“topic/0”]=0,[“topic/1”]=1^topic2=2)function(conn) print(“subscribe si

❶警告

subscribe如果您想同时订阅多个主题,则不要多次调用,而应使用上例中显示的多个主题语 法。

mqtt.client:退订()

取消订阅一个或多个主题。

句法

mqtt:unsubscribe(topic[, function(client)])

mqtt:unsubscribe(table[, function(client)])

参数

, topic 一个主题字符串

・table “主题,任何对”的数组成对来取消订阅

・function(ciient)取消订阅成功时触发可选的回调。注意:当多次调用unsubscribe ()时, 将会为所有取消订阅命令调用定义的最后一个回调函数。

返回

true false否则就成功了

–unsubscribe topic

m:unsubscribe(”/topic”, function(conn) print(“unsubscribe success”) end)

–or unsubscribe muLtipLe topic (topic/0; topic/1; topic2)

m;unsubscribe(([“topic/0”]=0J[“topic/1”]=0,topic2=“anything”}j function(conn) print("u

净模块

以来 起源/贡献者 维护者 资源

情节中字 Zeroday 凤凰 net.c

TLS操作已移至TLS模块

常量 在其他函数中使用的常量:net。

netcreateConnection () 创建一个客户端。

netcreateServer () 创建一个服务器。

netxreateUDPSocket () 创建一个UDP套接字。

netmulticastJoin () 加入组播组

netmulticastLeave () 离开组播组。

netserver:关闭() 关闭服务器。

netserver:听() 从IP地址侦听端口。

netserver: getaddr () 返回服务器本地地址/端口。

netsocket:关闭() 关闭套接字。

netsocket: connect () 的 连接到远程服务器。

netsocket: DNS () 为主机名提供DNS解析

netsocket: getPeer () 已 检索远程对端的端口和IP。

netsocket: getaddr () 检索本地端口和套接字的IP。

netsocket: 保持 () 通过发出阻止TCP接收功能的请求来限制数据接收。

netsocket:上() 注册特定事件的回调函数。

netsocket:发送() 将数据发送到远程对等。

netsocket: TTL () 更改或检索套接字上的生存时间值。

netsocket:取消保留() 通过撤销先前的保持()来解除对TCP接收数据的阻止。

netudpsocket:关闭() 关闭UDP套接字。

netudpsocket: 听() 从IP地址侦听端口。

netudpsocket: 上() 注册特定事件的回调函数。

netudpsocket:发送() 将数据发送到特定的远程对等。

netudpsocket: DNS () 为主机名提供DNS解析

netudpsocket: getaddr () 检索本地端口和套接字的IP。

netudpsocket: TTL () 更改或检索套接字上的生存时间值。

netdns.getdnsserver () 获取用于解析主机名的DNS服务器的IP地址。

net.dns.resolve () 将主机名解析为IP地址。

net.dns.setdnsserver () 设置用于解析主机名的DNS服务器的IP。

常量

常量用于其他功能:net.TCP , net.UDP

net.createConnection ()

创建一个客户端。

句法

net・createConnection([type[, secure]])

参数

• type net.TCP (默认)或 net.UDP

-secure 1表示加密,0表示普通(默认)

。注意

这将在即将发布的版本中发生变化,以便net.createConnection始终创建未加密的TCP 连接。

有没有这样的事情作为UDP连接,因为UDP连接少。因此不需要连接type参数。对于 UDP使用net.createUDPSocket ()来代替。要创建安全连接,请改为使用 tls.createConnection ()。

返回

・for net.tcp -net.socket子模块

・for net.UDP - net.udpsocket子模块

・对于 net.TCP 有 secure - tls.socket子模块

net,cpeateConnection(net・TCP』0)

也可以看看

net.cneateServer() , net.cneateUDPSocket() , tls.createConnection()

net.createServer ()

创建一个服务器。

句法

net・createServer([type[timeout]])

参数

・type net.TCP (默认)或 net.UDP

-timeout对于TCP服务器,超时时间为1〜28800秒,默认30秒(非活动客户端断开连 接)

。注意

该type参数将在即将发布的版本中删除,以便net.createServer始终创建一个基于

TCP的服务器。对于UDP使用net.createllDPSocket ()来代替。

返回

・for net.tcp -netserver子模块

・for net.udp - net.udpsocket子模块

net.createServer(net.TCP, 30) – 30s timeout

也可以看看

net ・ createConnection() , net.createUDPSocket()

net.createUDPSocket ()

创建一个UDP套接字。

句法

net . createUDPSocket()

参数

没有

返回

net.udpsocket 于模块

也可以看看

net ・ createConnection()

net.multicastJoin ()

加入组播组

句法

net.multicastJoin(if_ip4 multicast_ip)

参数

-if_ip包含接口ip的字符串加入组播组。“any”或“”影响所有接口。

• multicast_ip的团队加入

返回

nil

net.multicastLeave ()

离开组播组。

句法

net.multicastLeave(if_ipj multicast_ip)

参数

-if_ip包含接口ip的字符串离开组播组。"any”或“"影响所有接口。

・multicast_ip该组离开

返回

nil

net.server 模块

net.server:关闭()

关闭服务器。

句法

net.server.close()

没有

返回

nil

–creates a server

sv = net.createServer(net.TCP, 30)

–doses the server

sv:close()

也可以看看

net.createServer()

net.server:听()

从ip地址侦听端口。

句法

net.server.listen([port][ip],function(net.socket))

参数

•port端口号,可以省略(随机端口将被选中)

-ip IP地址字符串,可以省略

•function (net. socket)回调函数,如果连接成功创建,则传递给调用者函数

返回

nil

–server Listens on 8。』 if data receivedj print data to consoLe and send "heLLo --30s time out for a inactive client

sv = net.cneateServer(net.TCP, 30)

function receiver(sckj data)

print(data)

sck:close()

end

if sv then

sv:listen(80> function(conn)

conn:on("receive"j receiver) conn:send(“hello world”)

end)

end

也可以看看

net.createServer()

net.server: getaddr ()

返回服务器本地地址/端口。

句法

net.server.getaddr()

参数

没有

返回

port , ip (或者nil, nil如果不听)

也可以看看

net.server:listen()

net.socket 模块

net.socket:关闭()

关闭套接字。

句法

close()

参数

没有

返回

nil

也可以看看

net.createServer()

net.socket: connect () 的

连接到远程服务器。

句法

connect(port, ip|domain)

•port 端口号

•ip IP地址或域名字符串

返回

nil

也可以看看

net ・ socket:on()

net.socket: DNS ()

为主机名提供DNS解析

句法

dns(domainj function(net.socketip))

参数

• domain 域名

・function(net.socket, ip)回调函数。第一个参数是套接字,第二个参数是IP地址作为 字符串。

返回

nil sk = net.createConnection(net.TCP, 0) sk:dns(“www.nodemcu.com”, function(conn, ip) print(ip) end) sk = nil

也可以看看

net . createServer()

net.socket: getPeer () H

检索远程对端的端口和ip。

句法

getpeer()

参数

没有

返回

port , ip (或者nil, nil如果没有连接)

net.socket: getaddr ()

检索本地端口和套接字的ip。

句法

getaddr()

参数

没有

返回

port , ip (或者nil, nil如果没有连接)

net.socket:保持()

通过发出阻止TCP接收功能的请求来限制数据接收。此请求不立即生效,Espressif建议在保留 5 1460字节的内存时调用它。

句法

hold()

参数

没有

返回

nil

也可以看看

net , socket:unhold()

net.socket: 上()

注册特定事件的回调函数。

句法

on(eventj function())

参数

・event字符串,可以是“连接","重新连接”,“断开”,“接收”或“发送” • function (net. socket [ j string])回调函数。可以 nil 删除回调。

回调旳弟一个参数是会接字。

・如果事件是“接收”,则第二个参数是以字符串形式接收的数据。

-如果事件是“断开"或“重新连接”,则第二个参数是错误代码。

如果指定了重新连接事件,则断开只接收“正常关闭”事件。

否则,所有连接错误(正常关闭)传递到断开连接事件。

返回

nil

srv = net.createConnection(net.TCP, 0) srv:on("receive"function(sckj c) print© end) – Wait for connection before sending.

srv:on("connection"j function(sck> c)

–'Connection: close1 rather than 'Connection: keep-aLive1 to have server --initiate a close of the connection after final response (frees memory --earlier here)https://tooLs.ietf.org/htmL/rfc7230#section-6.6

sck:send("GET /get HTTP/1.l\r\nHost: httpbin.org\r\nConnection: close\r\nAccep- end)

srv:connect(80,“httpbin.org”)

❶注意

该receive事件被触发每个网络帧!因此,如果发送到设备的数据超过了 1460字节(从 以太网帧大小导出),它将会触发不止一次。可能还有其他情况下传入的数据在多个帧中 分割(例如HTTP POST multipart/form-data )。您需要手动缓冲数据并找到确定是否 收到所有数据的方法。

local buffer = nil

srv:on("receive"function(sckJ c)

if buffer == nil then

buffer = c

else

buffer = buffer … c

end end)

–throttLing could be implemented using socket:hoLd()

–exampLe: https://github.com/nodemcu/nodemcu-firmware/bLob/moster/Lua_exampLesJ

也可以看看

•net.createServer()

•net . socket:hold()

net.socket:发送()

将数据发送到远程对等。

send(string[> function(sent)])

sck:send(data, fnA) 在功能上等同于 sck:send(data) sck:on(,lsent11, fnA)。

参数

•string字符串中的数据将被发送到服务器

•function(sent)用于发送字符串的回调函数

返回

nil

注意

send()由于SDK将网络请求视为单独的任务,因此不能保证连续多次调用(通常不会)。 相反,请订阅套接字上的"发送"事件,并在该回调中发送其他数据(或关闭)。详情请参阅# 730o

srv = net.createServer(net.TCP)

function receiver(sckj data)

local response = {}

–if you’re sending back HTML over HTTP yourLL want something Like this instei --Local response = {"HTTP/1.0 200 OK\r\nServer: NodeMCU on ESP8266\r\nContent

response[#response + 1] = “lots of data” response[#response + 1] = “even more data” response[#response + 1] = “e.g. content read from a file”

–sends and removes the first eLement from the 'response 1 tabLe

local function send(localsocket)

if #response > 0 then

localsocket:send(table , remove(response, 1))

else

localsocket:close() response = nil

end

end

–triggers the send() function again once the first chunk of data was sent sck:on(“sent”, send)

send(sck)

end

srv:listen(80j function(conn)

conn:on(“receive”, receiver)

end)

如果你没有或者不能一直保存你在内存中发回的所有数据(记住这response是一个聚 合),你可以使用显式的回调,而不是像这样建立一个表:

sck:send(header, function()

local datal = "some large chunk of dynamically loaded data sck:send(datalj function()

local data2 = “even more dynamically loaded data” sck:send(data2j function(sk)

sk:close()

end)

end)

end)

也可以看看

net . socket:on()

net.socket: TTL ()

更改或检索套接字上的生存时间值。

句法

参数

-tti (可选)新的生存时间值

返回

当前/新的tti值

sk = net.createConnection(net.TCP, 0)

sk:connect(80, ‘192.168.1.1’)

sk:ttl(l) – restrict frames to singLe subnet

也可以看看

net ・ createConnection()

net.socket:取消保留()

通过撤销前面的方法来解除对TCP接收数据的阻止hoid()。

句法

unhold()

参数

没有

返回

nil

也可以看看

net . socket:hold()

netudpsocket 模块

请记住,与TCP相比,UDP是无连接的。因此,对于这个模块中的TCP/UDP函数,存在一个 小的但是自然的不匹配。虽然你会为TCP调用netcreateConnection (),但是它是 net.createllDPSocket () □

其他值得注意的是:

-UDP套接字没有该listen函数的连接回调。

-UDP套接字没有connect函数。远程IP和端口因此需要在中定义send()。

・UDP套接字的receive回调data参数后收到端口/IP。

net.udpsocket: 关闭()

关闭UDP套接字。

语法和功能相同net.socket:close()。

net.udpsocket:听()

从ip地址侦听端口。

语法和功能类似net.server:listen(),但没有提供回调参数。

net.udpsocket:上()

注册特定事件的回调函数。

语法和功能类似于net.socket:on()。但是,只有“接收”,"发送”和“dns”是支持的事件。

。注意

该receive回调接收port和ip之后的data说法。

net.udpsocket: 发送 ()

将数据发送到特定的远程对等。

句法

send(portip, data)

•port远程套接字瑞口

•ip远程套接字IP

•data有效载荷发送

返回

nil

udpSocket = net.c reateUDPSocket()

udpSocket:listen(5000)

udpSocket:on("receive"function(s, data, portip) print(string.format("received ‘%s’ from %s:%d"4 data, ip, port)) s:send(port4 ip> “echo:”・・ data)

end)

port, ip = udpSocket:getaddr()

print(string.format("local UDP socket address / port: %s:%d”, ip, port))

在 nix系统上,然后可以通过发布来测试

echo -n “foo” | nc -wl -u 5000

net.udpsocket: DNS ()

为主机名提供DNS解析

语法和功能相同net.socket:dns()。

net.udpsocket: getaddr ()

检索本地端口和套接字的I p。

语法和功能相同net .socket: getaddr () □

net.udpsocket: TTL ()

更改或检索套接字上的生存时间值。

语法和功能相同net .socket :ttl()。

net.dns 模块

net.dns.getdnsserver ()

获取用于解析主机名的DNS服务器的IP地址。

句法

net.dns.getdnsserver(dns_index)

参数

dns_index获取哪个DNS服务器(范围0〜1)

返回

DNS服务器的IP地址(字符串)

print(net.dns.getdnsserver(0)) – 208.67.222.222 print(net.dns.getdnsserver(l)) – nil

print(net.dns.getdnsserver(0)) – 8.8.8.8

print(net.dns.getdnsserver(1)) – 192.168.1.252

也可以看看

net.dns:setdnsserver()

net.dns.resolve ()

将主机名解析为IP地址。不需要像net. socket.dns()。

句法

net.dns.resolve(host, function(sk, ip))

参数

・host主机名来解决

• function(sk, ip)名称解析后调用的回调。sk总是

返回

nil net.dns.resolve(“www.google.com”,千unction(sk, ip)

if (ip == nil) then print(“DNS fail!”) else print(ip) end end)

也可以看看

net.dns.setdnsserver ()

设置用于解析主机名的DNS服务器的IP。默认:resolverl.opendns.com (208.67.222.222)。

文档》英语”模块》节点

节点模块

以来 起源/贡献者 维护者 资源

情节中字 Zeroday Zeroday node.c

节点模块提供对系统级功能的访问,如睡眠,重启以及各种信息和ID。

node.bootreason () 返回启动原因和扩展重置信息。

node.chipid () 返回ESP芯片ID。

node.compile () 将一个Lua文本文件编译成Lua字节码,并保存为。

node.dsleep () 进入深度睡眠模式,超时醒来。

nodeflashid () 返回闪存芯片ID。

node.flashsize () 以字节为单位返回闪存芯片大小。

nodeheap () 以字节为单位返回当前可用的堆大小。

nodeJnfo () 返回NodeMCU版本,chipid, flashid,闪光大小,闪光模式,闪 光灯速度。

nodeinput () 向Lua解释器提交一个字符串。

nodeoutput () 将Lua解释器输出重定向到回调函数。

node.readvdd33 ()-不推 荐使用 转移到adc。

node.restart () 重新启动芯片。

noderestore ()

node.setcpufreq () 更改工作的CPU频率。

nodesleep () 将NodeMCU置于轻度睡眠模式以减少电流消耗。

node.stripdebug () 控制节点期间保存的调试信息的数量。

nodeosprint () 控制是否打印Espressif SDK的调试输出。

noderandom () 这就像数学一样。

node.egc.setmode () 设置紧急垃圾收集器模式。

node.bootreason ()

返回启动原因和扩展重置信息。

返回的第一个值是原始代码,而不是最近SDK中引入的新“重置信息”代码。价值观是:

-1,开机

-2,重置(软件?)

-3,通过复位引脚进行硬件复位

-4, WDTM位(看门狗超时)

返回的第二个值是扩展的复位原因。价值观是:

• 0,开机

-1,硬件看门狗复位

-2,异常复位

-3,软件看门狗复位

-4,软件重启

-5,从深度睡眠中醒来

・6,外部复位

一般来说,扩展重置原因取代了原始码。原始代码仅保留为向后兼容。对于新应用程序,强 烈建议使用扩展重置原因。

在复位原因3 (异常复位)的情况下,返回包含崩溃信息的附加值。这些依次是EXCCAUSE, EPCI, EPC2, EPC3, EXCVADDR和DEPC。

句法

node.bootreason()

参数

没有

返回

rawcodej reason [, exccause^ epcl^ epc2, epc3, excvaddr3 depc ]

_j reset_reason = node.bootreason()

if reset_reason == 0 then print(“Power UP!”) end

node.chipid ()

返回ESP芯片ID。

node.chipid()

参数

没有

返回

芯片ID (编号)

node.compile ()

将Lua文本文件编译为Lua字节码,并将其保存为」c文件。

句法

node.compile(“file.lua”)

参数

filename Lua文本文件的名称

返回

nil

f ile. open (“hello. lua,/,w+”)

file.writeline([[print(“hello nodemcu”)]]) file.writeline([[print(node.heap())]]) file.close()

node.compile(“hello.lua”) dofileChello.lua") dofileChello.lc")

node.dsleep ()

进入深度睡眠模式,超时醒来。

最大睡眠时间为4294967295US,约71分钟。这是一个SDK限制。2016年1月5日之前的固件 的最长停留时间约为35分钟。

。警告

此功能只能在esp8266PIN32 (RST)和PIN8 (XPD_DCDC又名GPIO16)连接在一起的 情况下使用。使用睡眠(0)将不会设置唤醒定时器,将GPIO连接到引脚RST,芯片将通 过引脚RST的下降沿唤醒。

句法

node.dsleep(us, option, instant)

-us数子(整数)或nil以微杪为单位旳睡眠时间。如果US == 0 ,它将氷远睡眠。如 果us == nil ,不会设置睡眠时间。

-option数字(整数)或nil o如果nil它将使用最后的活动设置作为默认选项。

。0, init数据字节108是有价值的

0 >0, init数据字节108是无价值的

o 0, RF_CAL是否在深度睡眠唤醒之后取决于初始化数据字节108

° 1, RF_CAL深度睡醒后,会有大电流

° 2,深度睡醒后没有RF.CAL,只有小电流

□ 4,深度睡眠唤醒后禁用RF,就像调制解调器睡眠一样,会有最小的电流

-instant数字(整数)或nil。如果存在且非零,则在进入深度睡眠之前不要使用正常 的宽限时间。这是一个很大程度上没有记录的功能,只是在Espressif的低功耗解决方案文 档(第4.5章)中简单提及。

返回

nil

–do nothing node.dsleep()

–sLeep 〃s

node.dsleep(1000000)

–set sLeep optionj then sleep ps node.dsleep(1000000j 4)

–set sLeep option only

node.dsleep(nil4)

也可以看看

•wifi.suspend()

•wifi.resume()

•node.sleep()

node.flashid ()

返回闪存芯片ID。 句法

node.flashid()

参数

没有

返回

闪光ID (数字)

node.flashsize ()

以卓节为单待板同KI在芯片大刀、.在FSP-19等4MR權垃卜.板同指皋41943n4 = 4C9AKR.

node.flashsize()

参数

没有

返回

闪存大小(字节)(整数)

node.heap ()

以字节为单位返回当前可用的堆大小。请注意,由于分段,此大小的实际分配可能不可能。

句法

node.heap()

参数

没有

返回

以字节为单位的系统堆大小(数字)

node.info ()

返回NodeMCU版本,chipid, flashid,闪光大小,闪光模式,闪光灯速度。 句法

node.info()

参数

没有

返回

•ma jorVer (数)

•minorVer (数)

•devVer (数)

•chipid (数)

•flashid (数)

•flashsize (数)

•flashmode (数)

•flashspeed (数)

majorVer, minorVer, devVerchipid, flashid3 flashsizej flashmode, flashspeed = i print(“NodeMCU “…majorVer…”.”…minorVer…“.”…devVer)

node.input ()

向Lua解释器提交一个字符串。类似于pcall(loadstring(str)),但没有单行限制。

❶注意

这个函数只有在从回调中调用时才有效果。直接在控制台上使用它不起作用o

句法

node.input(str)

参数

str Lua大块

返回

skionCreceive", function(conn, payload) node.input(payload) end)

也可以看看

node.output()

node.output ()

将Lua解释器输出重定向到回调函数。也可以将其打印到串行控制台。

❶警告

不要不试图print()或诱发Lua解释从回调函数中产生输出。这样做会导致无限递归,并 导致看门狗触发重启。

句法

node.output(function(str)serial_debug)

参数

•output_fn(str) 一个函数接受每个输出为Str,并可以将输出发送到一个套接字(或者一 个文件)。

•serial_debug 1输出也显75在串行。0:没有串行输出。

返回

nil function tonet(str)

sk:send(str)

end

node.output(tonet1) – seriaL aLso get the Lua output.

–a simpLe teLnet server

s=net.cneateServer(net.TCP)

s:listen(2323,function©

con_std = c

function s_output(str)

if(con_std^=nil)

then con_std:send(str)

end

end

node.output(s_output, 0) – re-direct output to function s_ouput.

c:on(nreceiveHjfunction(Cj1)

node.input(l) – works Like pcaLL(Loadstring(L)) but support muL

end)

c :on(“disconnection’\function©

con_std = nil

node.output(nil) – un-regist the redirect output function, output i

end)

end)

也可以看看

node.input()

node.readvdd33 ()-不推荐使用

移动到 adc.readvdd33()。

node.restart ()

重新启动芯片。

句法

node.restart()

参数

没有

返回

nil

node.restore ()

使用SDK函数将系统配置恢复为默认值system_restore(),在文档中对此进行了描述:

重置下列API的默认设

置: wifi_station_set_auto_connect , wifi_set_phy_mode , wifi_softap_set_config 相关的,wifi_station_set_config相关的,wifi_set_opmode以及通过记录受影响 人的信息 #define AP_CACHE。

句法

node.restore()

参数

没有

返回

nil

node, restore。

node.restart() – ensure the restored settings take effect

node.setcpufreq ()

更改工作的CPU频率。

句法

node.setcpufreq(speed)

参数

speed 常数“节点.CPU80MHZ"或“节点.CPU160MHZ”

返回

目标CPU频率(数量)

node.setcpufreq(node.CPU80MHZ)

node.sleep ()

将NodeMCU置于轻度睡眠模式以减少电流消耗。

-如果wifi挂起,NodeMCU不能进入轻度睡眠模式。

-所有活动的定时器将被暂停,然后在NodeMCU从睡眠状态唤醒时恢复。

-当NodeMCU从睡眠中醒米时,任伺先前晳停旳定时器都将恢复。

句法

node.sleep({wake_gpio[, duration^ int_type, resume_cb, preserve_mode]})

参数

・duration睡眠持续时间以微秒(|JS)为单位。如果。指定了睡眠持续时间,暂停将是 不确定的(范围:0或50000-2684354543(。: 4: 28.000454))

-wake.pin 1-12,引脚连接唤醒中断。请注意,引脚0 (GPIO 16)不支持中断。

・如果睡眠时间不确定,则wake_pin必须指定

•请参考GPIO module更多关于pin map的信息。

・int_type您想要唤醒的中断类型。(可选,默认:node.INT_LOW )

-有效的中断模式:

・node.INT_UP上升的优势

・node.INT_DOWN下降的边缘

・node.INT_BOTH 两边

・node.INT_LOW彳氐级

・node.INT_HIGH 高水平

-resume_cb当WiFi从暂停状态唤醒时执行回叫。(可选的)

・preserve_mode通过节点休眠来保持当前的WiFi模式。(可选,默认:true)

・如果为true,则在NodeMCU恢复时,Station和StationAP模式将自动重新连接到先前配置 的接入点。

-如果为false,则丢弃WiFi模式并离开NodeMCU wifi.NULL_MODE。WiFi模式将在重启时 恢复到原始模式。

返回

nil

–Put NodeMCU in Light sleep mode indefiniteLy with resume caLLback and waPe inti cfg={}

cfg.wake_pin=3

cfg.resume_cb=function() print(“WiFi resume”) end

node.sleep(cfg)

–Put NodeMCU in Light sleep mode with interruptj resume caLLback and discard Mil cfg={}

cfg・wake_pin=3 --GPIO0

cfg.resume_cb=function() print(“WiFi resume”) end

cfg.preserve_mode=false

node.sleep(cfg)

–Put NodeMCU in Light sLeep mode for cfg={}

cfg.duration=1010001000

cfg.resume_cb=function() print("WiFi

node.sleep(cfg)

也可以看看

•wifi.suspend()

•wifi.resume()

•node.dsleep()

node.stripdebug ()

控制过程中保存的调试信息的数量node.compile(),并允许从己编译的Lua代码中删除调试 信息。

只推荐给高级用户,NodeMCU的默认值几乎适用于所有用例。

句法

node.stripdebug([level[, function]])

参数

•level

O 1,不要丢弃调试信息

。2,丢弃Local和Upvalue调试信息

□ 3,丢弃Local, Upvalue和line-number调试信息

•function 一个编译的函数被剥离每个setfenv除了0是不允许的。

如果没有给出参数,则返回当前的默认设置。如果省略函数,这是未来编译的默认设置。函 数参数使用与for相同的规则setfenvO。

返回

如果调用没有参数,则返回当前的级别设置。否则,nil返回。

node.stripdebug(3)

node.compile(‘bigstuff.lua’)

也可以看看

node.compile()

node.osprint ()

控制是否打印EspressifSDK的调试输出。请注意,只有固件是在定义了 DEVELOPMENT.TOOLS的情况下才可用。

句法

node.osprint(enabled)

参数

• enabled这是要么true启用打印,要么false禁用它。默认是false。

返回

没有

node.osprint(true)

node.random ()

除了它使用从ESP8266硬件派生的真正的随机数之外,其行为与math.random相似。它返回所 需范围内的均匀分布的数字。它也需要注意正确的大范围。

它可以通过三种方式来调用。在NodeMCU的浮点构建中没有参数,它会返回一个在区间 [0,1)中具有均匀分布的随机实数。当仅用一个参数调用整数n时,它返回一个整数随机数x, 使得i<=x<=n。例如,你可以随机模拟死亡的结果(6)-最后,可以用两个整数参数I和u 来调用随机函数,得到一个伪随机整数x,使得|<=x<=u。

句法

node.random() node.random(n) node.random(lJ u)

参数

-n可以返回的不同整数值的数量-在(包含)范围内1… n

・1范围的下限

-u范围的上限

返回

暗和新在活当的茹:甬肉一请注音栄彖新•形満欢於俺在敕尚愚建出版曰CL

print ("I rolled a"j node.random(6))

node.egc 模块

node.egc.setmode ()

设置紧急垃圾收集器模式。EGC白皮书提供关于EGC的更多详细信息。

句法

node.egc・setmode(mode, [param])

参数

•mode

。node.egc.NOT_ACTlVE EGC不活动,在低内存情况下不会强制收集周期

。node.egc.ON_ALLOC_FAILURE尝试分配一个新的内存块,并在分配失败时运行垃圾回 收器。如果运行垃圾液集器后分配失败,则分配器将返回错误。

。node. egc.ON_MEM_LIMIT当Lua脚本使用的内存超出上限时运行垃圾回收器limit。 如果运行垃圾[攵集萬后仍然无法满足上限,则分配器将返回错误。

o node.egc.ALWAYS在每次分配内存之前运行垃圾回收器。如果运行垃圾收集器后分配 失败,则分配器将返回错误。这种模式在节省内存方面非常高效,但也是最慢的。

•level在这种情况下 node.egc.ON_MEM_LIMIT , 这指定了内存限制。

返回

nil

node.egc.setmode(node.egc.ALWAYS^ 4096) – This is the default setting at startup,

node.egc.setmode(node.egc.ON_ALLOC_FAILURE) – This is the fastest activeEGC mode.

node.task 模块

node.task.post ()

启用一个Lua回调或任务来发布另一个任务请求。请注意,根据示例,可以在任何任务中发布 多个任务,但始终首先发送最高优先级。

如果任务队列已满,则会引发队列满错误。

句法

node.task.post([task_priority]j function)

文档》英语"模块》ow (1-Wire)

l・Wire模块

以来 起源/贡献者 维护者 资源

情节中字 Zeroday Zeroday ow.c

该模块提供了与1-Wire器件通信总线系统一起工作的功能。

ow.check_crcl6 () 计算1-Wire CRC16并将其与收到的CRC进行比较。

ow.crcl6 () 计算Dallas Semiconductor的 16位CRC校验码。

ow.crc8 () 计算Dallas Semiconductor的8位CRC,这些用于ROM和暂存寄存器。

ow.depower () 停止强行上车。

ow.read () 读取一个字节。

ow.read_bytes () 读取多个字节。

ow.reset () 执行1-Wire复位周期。

ow.reset_search () 清除搜索状态,以便从头再次开始。

ow.search () 寻找下一个设备。

ow.select () 发出1-Wire ROM选择命令。

ow.setup () 以单线模式设置引脚。

ow.skip () 发出1-Wire ROM跳过命令,以解决总线上的所有问题。

ow.target_search () 设置搜索以査找设备类型family_code。

ow.write () 写一个字节。

ow.write_bytes () 写入多个字节。

ow.check_crcl6 ()

计算1 -WireCRC16并将其与收到的CRC进行比较。

句法

ow.check_crcl6(buf, invented_cnc0j inverted_crcl[, crc])

-buf子符申值,要计算旳数据在字符申中检查和

•inverted_crc0 收到的 CRC 的 LSB

•inverted_crcl 收到CRC的MSB

-crc CRC起始值(可选)

返回

如果CRC匹配则返回true,否则返回false

ow.crcl6 ()

计算Dallas Semiconductor的16位CRC校验码。这是检査从许多1-Wire器件收到的数据的完整 性所必需的。请注意,这里计算的CRC不是从1-Wire网络获得的,原因有二:

LCRC被逐位反转。

2.根据处理器的字节顺序,双字节返回值的二进制表示可能与您从1-Wire获得的两个字节的 字节顺序不同。

句法

ow.crcl6(buf[, crc])

参数

・buf字符串值,要计算的数据在字符串中检查和

-crc CRC起始值(可选)

返回

Dallas Semiconductor定义的CRC16

ow.crc8 ()

计算Dalias Semiconductor的8位CRC,这些用于ROM和暂存寄存器。

句法

ow.crc8(buf)

参数

buf字符串值,要计算的数据在字符串中检查和

返回

CRC结果为字节

ow.depower ()

停止强行上车。你只需要这样做,如果你使用“权力”标志ow.write()或使用一

个ow.write_bytes(),而不是要做另一个读或写。

句法

ow.depower(pin)

参数

pin 1 〜12, I/O索引

返回

nil

也可以看看

・ow.write ()

•ow.write_bytes ()

ow.read ()

读取一个字节。

句法

ow.read(pin)

参数

pin 1 〜12, I/O索引

返回

从从器件读取字节

ow.read_bytes ()

读取多个字节。

句法

ow.read_bytes(pin, size)

参数

・pin 1〜12, I/O索引

-size从设备读取的字节数(最多256个)

返回

string字节从从设备读取

ow.reset ()

执行l-Wire复位周期。

句法

ow.reset(pin)

参数

pin 1 〜12, I/O索引

返回

-1如果设备响应存在脉冲

-0如果没有设备或总线被短路或以其他方式低于250卩S

ow.reset.search ()

清除搜索状态,以便从头再次开始。

句法

ow.reset_search(pin)

参数

pin 1 〜12, I/O索引

返回

nil

ow.search ()

寻找下一个设备。

句法

ow.search(pin)

参数

pin 1 〜12, I/O索引

返回

rom_code成功时长度为8的字符串。它包含从设备的ROM代码。nil如果搜索不成功,则 返回。

也可以看看

ow.target_search ()

ow.select ()

发出1-Wire ROM选择命令。确保你先做ow・reset (pin)

句法

ow.select(pinj rom)

参数

•pin 1~12, I/O索引

•rom字符串值,len 8,从设备的ROM代码

返回

nil

–18b20 ExampLe

pin = 9

ow.setup(pin)

count = 0

repeat

count = count + 1

addr = ow.reset_search(pin)

addr = ow.search(pin)

tmr.wdclr()

until (addr ~= nil) or (count > 100)

if addr == nil then

print(“No more addresses.”)

else

print(addr:byte(1,8))

crc = ow.crc8(string.sub(addr,1,7))

if crc == addr:byte(8) then

if (addr:byte(l) == 0x10) or (addr:byte(l) == 0x28) then print(“Device is a DS18S20 family device.”)

repeat

ow.reset(pin)

ow.select(pin, addr)

ow.write(pinj 0x44, 1)

tmr.delay(1000000)

present = ow.reset(pin)

ow・select(pin, addr)

ow.write(pinj 0xBE, 1)

print(,P=H… present)

data = nil

data = string.char(ow.read(pin))

for i = lj 8 do

data = data … string.char(ow.read(pin)) end print(data:byte(1,9)) crc = ow.crc8(string.sub(data,l,8)) print(“CRC=”…crc) if crc == data:byte(9) then

t = (data:byte(l) + data:byte(2) * 256) * 625 tl = t / 10000 t2 = t % 10000

print(,Temperature=" . .tl…t2. .“Centigrade”) end tmr.wdclr()

until false

else

print(“Device family is not recognized.”) end

else

print(“CRC is not valid!”)

end

end

也可以看看

ow.reset ()

ow.setup ()

以单线模式设置引脚。

ow.setup(pin)

参数

pin 1~12, I/O索引

返回

nil

ow.skip ()

发出1-WireROM跳过命令,以解决总线上的所有问题。

句法

ow.skip(pin)

参数

pin 1 〜12, I/O索引

返回

nil

ow.target.search ()

设置搜索以查找设备类型family_code。搜索本身必须在随后的调用中启 动 ow.search()。

句法

ow.target_search(pinj family_code)

参数

・pin 1〜12, I/O索引

• family_code家庭代码的字节

返回

nil

也可以看看

ow.search ()

ow.write ()

写一个字节。如果power是1,则寄生供电设备的电线末端保持高电平。您有责任最终通过 调用ow.depower()或再次读取或写入来降低它的权力。

ow.write(pinj v, power)

参数

-pin 1 〜12, I/O索引

-v字节被写入从设备

•power 1用于寄生供电设备的高电线

返回

nil

也可以看看

ow.depower ()

ow.write_bytes ()

写入多个字节。如果power是1,则寄生供电设备的电线末端保持高电平。您有责任最终通 过调用ow.depower。或再次读取或写入来降低它的权力。

句法

ow.write_bytes(pirij buf, power)

参数

•pin 1 〜12, I。指数

•buf字符串被写入从属设备

•power 1用于寄生供电设备的高电线

返回

nil

也可以看看%

ow.depower ()

文档》英语"模块》PCM

pcm模块

以来 起源/贡献者 维护者 资源

2016年6月5日 阿尼姆•拉格 阿尼姆•拉格 pcmx

通过各种后端播放声音。

Sigma-Delta 硬件 ESP包含一个西格玛-德尔塔发生器,可以用来在外部低通滤波器的帮助下合成音 频。

音频格式 预期音频为单声道原始无符号8比特流,釆样速率为1 k和16 k釆样磨之间。

pcm.new () 初始化音频驱动程序。

pcm.drv:关闭

() 停止播放并释放音频硬件。

pcm.drv:上() 注册事件的回调函数。

pcm.drv;玩() 开始播放。

pcm.drv:暂停

() 暂停播放。

pcm.drv:停止

() 停止播放并释放缓冲的块。

Sigma-Delta 硬件

ESP包含一个西格玛-德尔塔发生器,可以用来在外部低通滤波器的帮助下合成音频。所有常规的 GPIO (GPIOO除外)都能够输出数字波形,但只有一个发生器。

外部滤波器电路如下图所示。请注意,分压电阻将输出电压限制在IV pp。这应该匹配大多数放大器 板,但是需要与您的特定配置进行交叉检査。

。重要

该驱动程序与其他模块共享硬件资源。因此,你不能并行操作它了 sigma delta , perf 或pwm模块。它们分别需要sigma-delta生成器和hw_timero

音频格式

预期音频为单声道原始无符号8比特流,釆样速率为Ik和16k釆样/秒之间。常规的WAV文件可以 用OAC工具(如Audacity或SoX)进行转换。转换前调整音量。

sox jump.wav -r 8000 -b 8 -c 1 jump_8k.u8

另请参阅示例文件夹中的play_fileJuao

pcm.new ()

初始化音频驱动程序。

Sigma-Delta驱动程序

旬法

pern.new(pcm.SDj pin)

参数

pcm.SD 使用sigma-delta硬件・ pin 1 〜10, I。索引

返回

音频驱动程序对象

音频驱动子模块

每个音频驱动程序展示播放声音的相同控制方法。

pcm.drv:关闭()

停止播放并释放音频硬件。

句法

drv:close()

参数

没有

返回

nil

pcm.drv:上()

注册事件的回调函数。

句法

drv:on(event[, cb_fn[, freq]])

参数

•event标识符,其中之一*:

。data回调函数应该返回一个包含下一个数据块的字符串。

。drained由于缺乏数据,播放停止。data回调的最后2个调用没有及时(有意或无意)提 供新的块,光且内部缓冲区被完全消耗。

。paused 播放被暂停 pcm.drv:pause()。

° stopped 播放被停止了 pcm.drv:stop()。

。vu新的峰值数据,每秒cb_fn触发千req次数(1到200 Hz)。

•cb_fn回调函数为指定的事件。如果省略,则取消先前的功能。第一个参数是drv ,接着 是vu回调的峰值数据。

返回

pcm.drv:玩()

开始播放。

句法

drv: play(rate)_|

参数

rate采样率。支持的

有 pcm.RATE_lK , pcm.RATE_2K , pcm.RATE_4K , pcm.RATE_5K , pcm.RATE_8K , pcm.RATE_10K , 默认为RATE_8K ,如果忽略。

返回

pcm.drv:暂停()

暂停播放。来电drv:play()将从最后一个位置恢复。

句法

drv:pause()

参数

没有

返回

nil

pcm.drv:停止()

停止播放并释放缓冲的块。

句法

drv:stop()

参数

没有

返回

nil

文档》英语”模块» PERF

perf模块

以来 起源/贡献者 维护者 资源

2016年2月26日 菲利普•格莱斯顿 菲利普•格莱斯顿 perf.c

该模块为应用程序提供简单的性能测量。它大致每50微秒对程序计数器进行采样,并建立它 找到的值的直方图。由于只有少量的内存来存储直方图,所以用户可以指定哪个代码区域是 感兴趣的。默认是包含代码的整个闪存。一旦确定了热点,然后可以在不同的区域以不同的 分辨率重复运行,以获得所需的信息。

perf.start () 开始一个性能监视会话。

perf.stop () 终止性能监视会话并返回直方图。

perf.start ()

开始一个性能监视会话。

句法

perf.start([start[, endnbins]]])

参数

-Start (可选)直方图的最低PC地址。默认是0x40000000。

-end (可选)直方图的最高地址。默认值是闪存中己用空间的结束。

・nbins (可选)直方图中的分箱数量。保持这个合理的,否则你会用完内存。默认值是 1024。

请注意,垃圾箱的数量是一个上限。每个垃圾箱的大小设置为两个的最小幕,使得所需垃圾 箱的数量小于或等于所提供的垃圾箱数量。

返回

没有

perf.stop ()

终止性能监视会话并返回直方图。

句法

total, outside, histogram^ binsize = perf.stop()

返回

-total在此运行中捕获的样本总数

•outside直方图范围之外的样本数量

・histogram直方图表示为按地址索引的表格,其中值是样本数量。地址是垃圾箱的最低 地址。

•binsize每个直方图bin的字节数。

perf.start()

for j = 0, 100 do

str = “str”…j

end

tot, outtblj binsize = perf.stop()

print(tot, out)

local keyset = {}

local n = 0

for kjv in pairs(tbl) do

n=n+l

keyset[n]=k

end

table.sort(keyset)

for kkjk in ipairs(keyset) do print(string.format(“%x ■ %x”,k, k + binsize - 1)/

这运行循环创建字符串100次,然后打印出直方图(排序后)。这需要大约2500个样本,并 提供了所有CPU时间花在哪里的一个很好的指示。

PWM模块

以来 起源/贡献者 维护者 资源

情节中字 Zeroday Zeroday pwm.c

pwm.close () 退出指定GPIO引脚的PWM模式。

pwm.getclock () 获取选定的引脚PWM频率。

pwm.getduty () 获取引脚的选定工作周期。

pwm.setclock () 设置PWM频率。

pwm.setduty () 设置一个引脚的占空比。

pwm.setup () 将引脚设置为PWM模式。

pwm.start () PWM启动,波形被应用到GPI。引脚。

pwm.stop () 暂停PWM波形的输出。

pwm.close ()

退出指定GPIO引脚的PWM模式。 句法

pwm.close(pin)

参数

pin 1〜12, I。指数

返回

nil

也可以看看

pwm.start ()

pwm.getclock ()

获取选定的引脚PWM频率。

句法

pwm.getclock(pin)

参数

pin 1〜12, I。指数

返回

number引脚的PWM频率

也可以看看

pwm.setclock ()

也可以看看

pwm.getduty ()

pwm.getduty ()

获取引脚的选定工作周期。

句法

pwm.getduty(pin)

参数

pin 1-12, I。指数

返回

number工作循环,最大1023

也可以看看

pwm.setduty ()

pwm.setclock ()

设置PWM频率。注意:设置PWM频率会同步更改其他设置,如果有的话。系统只能使用一 个PWM频率。

句法

pwm.setclock(pin, clock)

参数

-pin 1 〜12, I。指数

-clock 1 〜1000, PWM频率

返回

nil

也可以看看

pwm.getclock ()

pwm.setduty ()

设置一个引脚的占空比。

句法

pwm.setduty(pin, duty)

参数

-pin 1 〜12, I。指数

-duty 0〜1023, pwm占空比,最大1023 (lObit)

返回

nil

–DI is connected to green Led --D2 is connected to blue Led --D3 is connected to red Led pwm.setup(l, 500, 512) pwm.setup(2, 500, 512) pwm.setup(3, 500, 512) pwm.start(l) pwm.start(2) pwm.start(3) function led(r, g, pwm.setduty(lj pwm.setduty(2j

pwm.setduty(3j r)

end

led(512j 0, 0) – set Led to red led(0, 0, 512)–

pwm.setup ()

将引脚设置为PWM模式。最多只能将6个引脚设置为PWM模式。

pwm.setup(pin, clock, duty)

pin 1〜12, I。指数

・ clock 1 〜1000, pwm频率

-duty 0〜1023, pwm占空比,最大1023 (lObit)

返回

nil

–set pin index 1 as pwm outputj frequency is 100HZj duty cycLe is half. pwm.setup(l, 100, 512)

也可以看看

pwm.start ()

pwm.start ()

PWM启动,波形被应用到GPIO引脚。

句法

pwm.start(pin)

参数

pin 1-12, I。指数

返回

nil

也可以看看

pwm.stop ()

pwm.stop ()

暂停PWM波形的输出。

句法

pwm.stop(pin)

参数

pin 1〜12, I。指数

返回

nil

也可以看看

pwm.start ()

rfswitch 模块

以来 起源/贡献者 维护者 资源

2016年12月1日 罗马费奥多罗夫 罗马费奥多罗夫 rfswitch.c

用于操作433/315Mhz设备的模块,如电源插座,继电器等。这很可能适用于所有常用的低 成本电源插座,包括SC5262/SC5272, HX2262/HX2272, PT2262/PT2272, EV1527, RT1527, FP1527或HS1527芯片组。

这个模块使用了原始的rc-switchArduino库中的一些代码,但是NodeMCU和Arduino并不完 全兼容。这就要求rc-switch用Lua支持重写成rfswitch NodeMCU。

变送器的连接

发射机 ESP8266 注释

vin 或+ 3V3 3.3 - 5伏在ESP8266或其他电源

地面或_ GND 地应该连接到ESP8266和电源

数据引脚 6 几乎ESP8266上的任何引脚

你可以在这里阅读更多关于连接。

选择适当的协议

该模块支持使用6种不同的协议传输数据,您应该使用最适合您的需求的数据。接收数据尚不 支持。所以,你不能听收音机的空气,并使用Lua获取协议详细信息。

愁得正确协议的最简单方法是将无线电接收器连接到ESP8266或Arduino,然后运

行ReceiveDemo_Advanced.ino 并在串行控制台(examplel, example2)中查看输出。

你应该得到这样的东西:

Decimal: 11001351 (24Bit)

Binary: 101001111101111000000111

Tri-State: not applicable

PulseLength: 517 microseconds

Protocol: 5

Raw data: 7200,1004,528,504,1048,980,336,1176,356,1176,352,1180,1108,412,356,117:

关于低层协议规范的更详细的信息可以在这里找到你可以通过直观的方式将电报拷贝 至!| http:〃test.su i.li/oszi/

rfswitch.send () 使用无线电模块传输数据。

rfswitch.send ()

使用无线电模块传输数据。

句法

rfswitch.send(protocol_idpulse_length, repeat, pin, value, length)

参数

・protocol_id正整数值,从1-6开始

•pulse_length 一个脉冲的长度以微秒为单位,通常从100到650

・repeat重复值,通常从1到5.这是一个同步任务。将重复计数设置为较大的值会导致问 题。建议的限制是大约1-4。如果你需要更多,那么再多次调用它(例如使

用 node.task.post)

-pin 1/销的。-指数,实施例6为GPIO12,见细节

・value正整数值,这是将被发送的主要数据

•length如果值长度是3个字节,那么长度是24

返回

nil

–Lua transmit radio code using protocol #1

–puLse_Length 300 microseconds

–repeat 5 times

–use pin #7 (GPI013)

–vaLue to send is 560777

–vaLue Length is 24 bits (3 bytes) rfswitch.send(l, 300, 5, 7, 560777, 24)

旋转模块

以来 起源/贡献者 维护者 资源

2016年3月1日 菲利普•格莱斯顿 菲利普•格莱斯顿 rotary.c

该模块可以读取便宜的旋转编码器开关的状态。所有标准的地方都有一两美元。它们是五针 装置,其中三个用于灰码编码器的旋转,两个用于按钮开关。这些开关通常用于汽车音响系 统。

这些开关没有绝对位置,只是编码顺时针/逆时针旋转的位置数。要使用此模块,请将正交编 码器的公共引脚连接到地,将A和B相连接到NodeMCUo按钮开关的一个引脚也应该接地, 另一个引脚连接到NodeMCUo

部件来源 亚马逊:这个搜索显示了多种。

常量 旋转。

rotarysetup () 初始化nodemeu以与旋转编码器开关通信。

rotaryon () 设置特定事件的回调。

rotary.getpos ()

rotary.close () 释放与旋转开关相关的资源。

部件来源

-亚马逊:这个搜索显示了多种。

-Ebay:在这个搜索中比较便宜

・Adafruit:旋转编码器

-Aliexpress:这个搜索揭示了各种各样的形状和大小。

还有一个安装在标准0.1“引脚上的开关,这是KY-040,也可以在很多地方找到,请注意,这 些引脚有点偏心,我怀疑它确实需要VCC连接。

常量

・rotary. PRESS = 1交换机的事件类型。

・rotary. LONGPRESS = 2事件类型的长按。

・rotary. RELEASE = 4交换机版本的事件类型。

・rotary.TURN = 8交换机旋转的事件类型。

•rotary.CLICK = 16单击事件类型(发布后)

•rotary.DBLCLICK = 32双击事件类型(第二次发布后)

•rotary .ALL = 63所有事件类型。

rotary.setup ()

初始化nodemeu以与旋转编码器开关通信。

句法

rotary.setup(channel, pina, pinb[pinpress[, longpress_time_ms[3 dblclick_time_ms]]])

参数

•channel旋转模块支持三个开关。通道是0,1或2。

-pina这是一个GPIO编号(不包括0),并连接到旋转开关上的引脚A相。

-pinb这是一个GPIO编号(不包括0),并连接到旋转开关上的引脚B相。

•pinpress (可选)这是一个GPIO编号(不包括0),并连接到按下开关。

•longpress_time_ms (可选)按下的毫秒数(默认500)被认为是长按。

•dblclick_time_ms (可选)下一个发行版的发行版和印刷机之间的毫秒数(默认值为 500)被应为双金。

返回

没有。如果参数错误,或者操作无法完成,则会抛出错误。

对于所有API调用,如果通道号超出范围,则会抛出错误。

rotary.setup(0j 5,6】7)

rotary.on ()

设置特定事件的回调。

句法

rotary.on(channel, eventtypecallback])

参数

・channel旋转模块支持三个开关。通道是0,1或2。

・eventtype这定义了正在注册的事件的类型。这是逻辑或一种或多种

的 PRESS , LONGPRESS , RELEASE , TURN , CLICK 或 DBLCLICK 。

・callback这是在指定事件发生时将被调用的函数。

如果回调是“无”或省略,则注册被取消。

事件发生时,将使用三个参数调用回调。第一个参数是事件类型,第二个参数是旋转开关的

当前位置,第三个参数是事件发生的时间。

该位置被跟踪,并被表示为一个有符号的32位整数。增加值表示顺时针运动。时间是以32位 整数表示的微秒数。请注意,这个每隔一小时左右就会换行。

rotary.011(0, rotary.ALL, function (type, pos, when)

print “Position=” •• pos .・“event type=”… type .• " time=” … when

end)

笔记

活动将按顺序进行,但可能缺少TURN事件。如果有很长的事件队列,则PRESS和RELEASE事 件也可能会丢失。多个挂起的TURN事件通常作为一个TURN回调被调度,其最终位置作为其 参数。

一些开关每个制动器有4个步骤。这意味着在实践中,应用程序应该将位置除以4,并使用它 来确定点击次数。一个开关不可能在任何一个方向上达到30位的旋转-有些是低于50000转 的。

在CLICK和LONGPRESS事件对超时交付。该DBLCLICK事件被之后的交

付PRESS , RELEASE , PRESS , RELEASE其中这是中间之间很短的时间间隔序

列 RELEASE 和 PRESS 。

错误

如果提供了一个无效eventtype ,那么将会抛出一个错误。

rotary.getpos ()

获取开关的当前位置和按下状态

句法

pos, press, queue = rotary.getpos(channel)

参数

•channel旋转模块支持三个开关。通道是0,1或2。

返回

-pos交换机的当前位置。

-press指示当前是否按下开关的布尔值。

•queue未传送的回调数(通常为0)。

print rotary.getpos(0)

rotary.close ()

释放与旋转开关相关的资源。

句法

rotary.close(channel)

• channel旋转模块支持三个开关。通道是0,1或2。

rotary.close(0)

RTC FIFO模块

以来 起源/贡献者 维护者 资源

2015年6月

26 S DiUS, JohnyMattsson, Bernd Meyer [email protected] Johny Mattsson rtcfifo.c

rtcfif。模块实现了用于传感器读数的先进先出存储。顾名思义,它由RTC用户存储器提供支 持,因此可以在深度睡眠周期中存活下来。从概念上讲,它可以被认为

是{ timestamp, name, value }元组的循环数组。在内部,它使用空间优化的存储格式来 保存最大数量的样品。这带来了一些折衷,因此不是一个解决方案。值得注意的是:

-时间戳以第二精度存储。

・采样频率必须至少每8.5分钟一次。这是用于时间戳的增量压缩的副作用。

-数值被限制在16位的精度,但有一个独立的字段来存储一个E-n乘法器。即使使用非常小 的值,这也可以保证高保真度。有效范围是1E一7到65535。

-传感器名称限制为最多4个字符。

。重要

该模块使用两组RTC存储器插槽,其控制模块为10-20,以及可变数量的插槽用于釆样和 传感器名称。默认情况下这些跨度为32-127,但是这是可配置的。插槽被称为

时 rtcfif0. prepare()被称为。

这是rtcmem和rtcti me模块的配套模块。

rtcfifo.ds 1 eep_until_samp 1 e () 当rtcfifo模块与rtctime模块一起编译时,此便利功能可用。

rtcfifo.peek () 从rtcfif o读取一个样本o

rtcfifo.pop () 从rtcfif。读取第一个样本,并从那里删除它。

rtcfifo.prepare () 初始化rtcfifo模块以供使用。

rtcfifo.put () 将样品放入rtcfifo。

rtcfifo.ready () 如果rtcfif。已准备好并准备使用,则返回非零值,如果不是,则 返回0。

rtcfifo.dsleep_untiLsample ()

当rtcfifo模块与rtctime模块一起编译时,此便利功能可用。它考虑了一些关注点分离的措施, 使得传感器读取抽象可能不需要知道釆样频率(这在很大程度上是策略决定,而不是传感器 本质)的模块化Lua代码的书写。使用此功能实际上相当

十 rtctime.dsleep_aligned(interval_usJ minsleep_us) 地万 interval_us 是什么 给 rtcfifo.prepare()。

句法

rtcfifo.dsleep_until_sample(minsleep_us)

参数

minsleep_us最短的睡眠时间,以微秒为单位

–deep sLeep untiL it’s time to take the next sampLe rtcfifo.dsleep_until_sample(0)

也可以看看

rtctime.dsleep_aligned()

rtcfifo.peek ()

从rtcfifo读取一个样本。可以指定rtcfifo的偏移量,但默认情况下会读取第一个样本(偏移量 0)。

句法:

rtcfifo.peek([offset])

参数

offset偷看样本在offset fifo的位置。这是相对于当前头部的相对偏移量。从零开始。默 认值是0。

返回

返回的值与用于的输入参数匹配rtcfifo.put() o

•timestamp时间戳以秒为单位

•value价值

•neg_e比例因子

•name传感器名称

如果没有样品可用(在指定的偏移量),则不返回任何样品。

local timestampj value, neg_e, name = rtcfifo.peek()

rtcfifo.pop ()

从rtcfifo读取第一个样本,并从那里删除它。

句法:

rtcfifo.pop()

参数

没有

返回

返回的值与用于的输入参数匹配rtcfifo.put() o

•timestamp时间戳以秒为单位

•value价值

•neg_e比例因子

•name传感器名称

while rtcfifo.count() > 0 do

local timestamp^ value, neg_e> name = rtcfifo.pop()

–do something with the sampLe, e.g. upload to somewhere end

rtcfifo.prepare ()

初始化rtcfifo模块以供使用。

调用rtcfifo.prepare()无条件地重新初始化存储-任何存储的样本都将被丢弃。

句法

rtcfifo.prepare([table])

参数

该函数将一个可选的配置表作为参数。以下项目可能配置:

•interval_us如果想要使用该rtcfifo.sleep_until_sample()函数,则该字段将设置 釆样间隔7以微秒为单位)以供使用。这实际上是第二个论

点 rtctime.dsleep_aligned()。

•sensor_count指定分配名称空间的不同传感器的数量。这直接对应于为变量块中的名称 保留的玄个槽。默认值是5,最小值是1,最大值是16。

•storage_begin指定用于变量块的第一个RTC用户内存插槽。默认值是32.只有

在storage_end指定时才有效。

•storage_end指定RTC用户内存插槽的末端。此插槽编号不会被触及。默认值是128.只有 在storage_begin指定时才生效。

返回

nil

–InitiaLize with default values

rtcfifo , prepare()

– Use RTC sLots 19 and up for variabLe storage

rtcfifo.prepare((storage_begin=21, storage_end=128))

也可以看看

•rtcfifo.ready()

•rtcfifo.prepare()

rtcfifo.put ()

将样品放入rtcfifo。

如果rtcfifo没有准备好,这个函数什么都不做。

句法

rtcfifo.put(timestamp, value, neg_e, name)

参数

•timestamp以秒为单位的时间戳。时间戳通常来自于rtctime.get()。

•value要存储的值。

•neg_e 存储的有效值MvalueE neg-eo

•name传感器的名称。只使用前四个(ASCII)字符name。

请注意,如果时间戳增量与之前存储的样本相比太大,则rtcfifo会逐出所有较早的样本以存储 此样本。同样,如果name意味着使用的名称多于sensor_count (如指定

的rtcfifo.prepare())名称,则rtcfifo会逐出所有较早的样本。

返回

nil

– Obtain a sampLe vaLue from somewhere

local sample =…

–Store sample with no scaLing^ under the name “foo”

rtcfifo.put(rtctime.get(), sample, 0, “foo”)

rtcfifo.ready ()

如果rtcfifo已准备好并准备使用,则返回非零值,如果不是,则返回0。

句法:

rtcfifo.ready()

参数

没有 返回

如果rtcfif。已经准备好并可以使用,则为非零,如果不是,则为零。 例

–Prepare the rtcfifo if not aLready done

if not rtcfifo.ready() then

rtcfifo.prepare()

end

RTC用户存储器模块

以来 起源/贡献者 维护者 资源

2015年6月 25 日 DiUS, Johny Mattsson Johny Mattsson rtcmem.c

rtcmem模块提供对RTC (实时时钟)存储器的基本访问。

ESP8266中的RTC包含内存寄存器,能够在深度睡眠中幸存下来,因此非常适合在整个睡眠周 期内保持状态。有些内存是为系统使用而保留的,但128个插槽(每个32位宽)可供应用程序 使用。这个模块提供对这些的读写权限。

由于可用内存的数量非常有限,因此不存在用于仲裁使用特定插槽的机制。最终用户应该知 道哪些内存用于什么,并避免冲突。请注意,一些Lua模块声称某些插槽。

这是rtcti me和rtcfifo模块的配套模块。

rtcmem.read32 () 从RTC用户存储器中读取一个或多个32位值。

rtcmem.write32 () 将一个或多个值写入RTC用户内存,从索引idx开始。

rtcmem.read32 ()

从RTC用户存储器中读取一个或多个32位值。

句法

rtcmem.read32(idx [3 num])

参数

・idx从零开始读取索引

・num要读取的插槽数量(默认值为1)

返回

从RTC用户存储器中读取的值。

如果idx超出有效范围[0,127],则此函数不返回任何内容。

如果num结果超出可用内存的末尾,则该功能仅返回有效插槽中的数据。

val = rtcmem.read32(0) – Read the value in sLot 0

vail, val2 = rtcmem.read32(42j 2) – Read the vaLues in sLots 42 and 43

也可以看看

rtcmem.write32()

rtcmem.wiite32 ()

从索引开始,将一个或多个值写入RTC用户内存idx -

写入有效范围外的索引[0,12刀不起作用。

句法

ptcmem・wpite32(idx, val [4 val24 ])

参数

・idx从零开始写入的索引。如果给出多个值,则自动递增。

-val存储的价值(32位)

-val2…,存储的附加值(可选)

返回

nil

rtcmem.write32(0J 53) – Store the vaLue 53 in sLot 0

rtcmem.write32(42j 2, 5, 7) – Store the vaLues 2, 5 and 7 into sLots 42, 43 and

也可以看看

rtcmem.read32()

RTC时间模块

以来 起源/贡献者 维护者 资源

2015年6月

25 S DiUS, JohnyMattsson, Bernd Meyer [email protected] Johny Mattsson rtctime.c

rtctime模块为NodeMCU提供高级时钟支持,包括在深度睡眠周期内保持时间(使用提 供rtctime.dsleep()的代替node.dsleep())。这可以用来显着延长电池供电的传感器节 点的电池寿命,因为每次唤醒时不再需要启动RF模块以便获得准确的时间戳。

此模块旨在与NTP (网络时间协议)一起使用,以始终保持高度准确的实时性。时间戳以微 秒精度提供,基于Unix Epoch (1970/01/0100:00:00)。然而,准确度(实际上)是1毫秒以 内,并且往往比这还差。

在ESP8266上保持时间在技术上相当具有挑战性。尽管被命名为RTC,但RTC并不是真正意义 上的实时时钟。虽然它在模块处于睡眠状态时确实保持计数器滴答状态,但是它的准确性高 度依赖于芯片的温度。所述温度在芯片运行时和休眠时间之间显着变化,这意味着在芯片工 作时执行的任何校准在芯片进入睡眠之后仅仅是短暂的。因此,需要在整个睡眠周期中推导 出校准值,以便实现准确的时间保持。这是这个模块所做的事情之一。

时间保持问题更复杂的是,ESP8266在三种不同的时钟频率下工作:正常启动时为52MHz, 正常工作时为80MHz,如果启动则为160MHz。本单元花费了相当长的时间来考虑所有这 些,以适当地保持时间。

要启用这个模块,至少需要给一次参考时间(通过rtctime.set())。为了获得最佳的精 度,建议定期提供参考时间。该sntp.syncO功能有一个简单的方法来做到这一点。提供参 考时间至少两次是重要的,第二次是在深度睡眠之后。

请注意,虽然rtctime模块可以在深度睡眠中保持时间,但如果模块意外重置,将会浪费时 间。

这个模块可以补偿没有按照要求的速率运行的底层时钟。调整是在2人32 (即约0.25ppb) 1 部分的步骤。如果sntp.sync()使用autorepeat标志设置调用,则自动完成此调靈。费率 可以使用set()下面的功能设置。平台启动时,默认为0 (即标称)。模块样本显示实际时 钟频率与温度有关,但通常在额定频率的5ppm以内。这转化为每月15秒左右。

在自动更新模式下,时钟频率可能需要几个小时才能达到正确的值。之后,跟踪的时间将取 决于NTP服务器的时间戳变化量。如果他们接近,那么时间将追踪到毫秒左右。如果距离较 远(例如往返100ms),则时间跟踪会稍差一些,但通常在10ms内。

。重要

此模块使用RTC内存插槽0-9 (含)。一旦rtctime.set() 使用这些RTC内存插槽。

这是rtcmem和SNTP模块的配套模块。

rtctimedsleep () 将ESP8266置于深度睡眠模式,如节点。

rtctime.dsleep_aligned () 对于需要高规格取样的应用,此功能非常有用。

rtctime.epoch2cal () 将Unix时间戳转换为0历格式。

rtctimeget () 返回当前时间。

rtctimeset () 在Unix纪元(io )中将rtctime设置为一个给定的时间戳。

rtctime.dsleep ()

使ESP8266进入深度睡眠模式node.dsleep() °它不同于node.dsleep()以下方面:

-时间保持在深度睡眠。即rtctime.getO会继续工作(提供的时间是睡前可用)。

-这个调用永不返回。该模块立即睡觉。这既是为了支持准确的时间保持和降低功耗。

•睡觉的时间通常会比以前准确得多node.dsleep()。

-睡眠时间为零并不意味着无限期睡眠,而是被解释为零长度睡眠。

当睡眠定时器到期时,平台重新启动并且lua代码与init.lua文件一起启动。时钟设定合理 准确。

句法

rtctime.dsleep(microseconds [, option])

参数

•microseconds睡眠时间的微秒数。最大值是4294967295us,或~71分钟。

•option睡眠选项,请参阅node.dsleep()具体信息。

返回

这个函数不返回。

–sLeep for a minute

rtctime.dsleep(601000000)

–sLeep for 5 secondsj do not start RF on wakeup

rtctime , dsleep(5000000, 4)

rtctime.dsleep_aligned ()

对于需要高规格取样的应用,此功能非常有用。它提供了一种简单的方法来实现"在下一个5 分钟的边界上"醒来,而不必在返回睡眠之前明确地考虑模块己经活动了多久。

句法

rtctime.dsleep_aligned(aligned_uSj minsleep_us [, option])

•aligned_us以微秒为单位的边界间隔

-minsleep_us最小的时间将睡觉,如果需要跳过一个时间间隔。这适用于在ESP8266进 入休眠模或之前开始釆样读数的传感器,然后在唤醒时读取。这里minsleep.us应该是 传感器采样所需的最短时间。

•option与之一样dsleep() , option如果指定,则设置睡眠选项。

–sLeep at Least 3 seconds, then wake up on the next 5-second boundary rtctime.dsleep_aligned(51000000j 3*1000000)

rtctime.epoch2cal ()

将Unix时间戳转换为日历格式。时区和DST校正都不会执行-结果是UTC时间。

句法

rtctime.epoch2cal(timestamp)

参数

timestamp自Unix纪元以来的秒数

返回

包含字段的表格:

-year 1970〜2038年

・mon本年度1〜12月份

•day当月1〜31日

•hour

•min

•sec

•yday当年1〜366天

•wday当前1 ~7日弱(周日1点)

tm = rtctime.epoch2cal(rtctime.get())

print(string.format("%04d/%02d/%02d %02d:%02d:%02d"4 tm[“year”], tm[“mon”]』tm["i

rtctime.get ()

返回当前时间。如果当前时间不可用,则返回零。

rtctime.get()

参数

没有

返回

三值时间戳包含:

-sec自从Unix纪元以来的秒数

•usee微秒的部分

, rate当前时钟频率偏移。这是rate / 2A32 (名义利率为1)的偏移量。例如,4295的 值对应于百万分之一。

sec, usee, rate = rtctime.get()

也可以看看

rtctime.set()

rtctime.set ()

在Unix时代将rtetime设置为给定的时间戳(即从1970/01/01午夜开始)。如果模块还没有保 持时间,现在就开始。如果模块己经保持时间,则使用这个时间来帮助调整其内部校准值。 注意从永不退步返回的时间戳。如果有必要的话,时间会被淘汰,并逐渐被追

上。rtetime.get()

强烈建议通过NTP (请参阅SNTP模块),GPS或其他高精度时间源获取时间戳。

非常接近时代的值不被支持。这是保持内存要求尽可能低的副作用。考虑到它不再是1970 年,这不被认为是一个问题。

句法

rtetime.set(seconds, microseconds^ [rate])

参数

-seconds从Unix纪元算起的秒数部分

•microseconds微秒的部分

•rate在同样的单位比率rtetime.get()。如果未指定,则存储的速率不会被修改。

返回

nil

–Set time to 2015 JuLy 9, 18:29:49

rtetime.set(1436430589j 0)

也可以看看

sntp.sync()

文档》英语”模块»si7021

Si7021模块

以来 起源/贡献者 维护者 资源

2017年4月19日 fetchbot fetchbot si7021.c

该模块提供对Si7021湿度和温度传感器的访问0

si7021.firmware () 阅读S7021传感器的内部固件版本。

si7021.read ()

si7021.serial () 读取Si7021传感器的个性化64{立电子序列号。

si7021.setting () 设置传感器配置寄存器来调整测量分辨率,片上加热器和读取电源电压状 态。

si7021.setup () 在固定的FC器件地址(0x40)上初始化器件。

si7021.firmware ()

阅读Si7021传感器的内部固件版本。

句法

si7021.firmware()

参数

没有

返回

fwrev固件版本固件版本1.0固件版本2.0 0XFF 0x20

local sdaj scl = 6, 5

i2c.setup(0j sda, scl> i2c.SL0W) – caLL i2c.setup() onLy once si7021.setup()

fwrev = si7021.firmware()

print(string.format(MFW: %X\r\n"J fwrev))

si7021.read ()

si7021.read()

参数

没有

返回

•hum湿度(见下面的注释)

•temp温度(见下面的注释)

•hum_dec湿度小数

•temp_dec温度十进制

❶注意

如果使用浮动固件然后hum和temp是浮点数。在整数固件上,最后的值必须从hum 和 hum_dec / temp 和连接起来 temp_dec。

local sda, scl = 6, 5

i2c.setup(0J sda, scl, i2c.SLOW) – caLL i2c.setup() onLy once si7021.setup()

hum, temp, hum_deCj temp_dec = si7021.read()

–Integer firmware using this exampLe

print(string.format(“Humidity:\t\t%d.%03d\nTemperature:\t%d.%03d\n”, hum, hum

–FLoat firmware using this exampLe

print(“Humidity: “…hum…”\n”…"Temperature: "…temp)

si7021.serial ()

读取Si7021传感器的个性化64位电子序列号。 句法

si7021.serial()

参数

没有

返回

• sna 32位序列号部分a

, snb 32位序列号部分b,高位字节包含设备标识

O 0X00或0xFF工程样品

O 0x0D 13 Si7013

O 0x14 20 Si7020

O 0X15 21 S17021

local sda, scl = 6, 5

i2c.setup(0, sda, scl, i2c.SLOW) – caLL i2c.setup() onLy once si7021.setup()

sna, snb = si7021.serial()

print(string.format(“SN:\t\t%X%X\nDevice:\tSi70%d”, sna, snb, bit.pshift(snb»24)

si7021.setting ()

设置传感器配置寄存器来调整测量分辨率,片上加热器和读取电源电压状态。

句法

si7021.setting(RESOLUTION[J HEATER, HEATER_SETTING])

参数

・ RESOLUTION

o si7021.RH12_TEMP14 相对湿度12位-温度14位(默认)

0 si7021.RH08_TEMP12 相对湿度8位-温度12位

0 si7021.RH10_TEMP13 相对湿度10位-温度13位

0 si7021.RHll_TEMPll 相对湿度11位-温度11位

• HEATER可选的

0 si7021.HEATER_ENABLE片上加热器启用

o si7021.HEATER_DISABLE片上加热器禁用(默认)

• HEATER_SETTING 可选的

o 0x00 - 0x0F 3.09 mA - 94.20 mA

返回

• resolution

0 0 相对湿度12位-温度14位

0 1 相对湿度8位-温度12位

0 2 相对湿度10位-温度13位

0 3 相对湿度11位-温度11位

• vdds

o 0 VDD正常(1.9V-3.6V)

o 1 VDD低(1.8V-1.9V)

•heater

。。残

。1启用

•heater_setting

o 0 - 15

local id, sda, scl = 0, 6, 5

i2c.setupCid, sda, scl, i2c.SLOW) – coLL i2c.setup() onLy once si7021.setup()

resj vdds, heater, heater_set = s17021.setting(s17021.RH12_TEMP14)

res, vdds, heater, heater_set = si7021.setting(si7021.RH12_TEMP14, si7021.HEATER

si7021.setup ()

在固定的『C器件地址(0x40)上初始化器件。

句法

si7021.setup()

参数

没有

返回

nil local sda, scl = 6, 5

i2c.setup(0, sdascl, i2c.SLOW) – caLL i2c.setup() onLy once si7021.setup()

Sigma-delta 模块

以来 起源/贡献者 维护者 资源

2016年2月20日 以Espressif为例,ArnimLauger 阿尼姆•拉格 sigma_delta.c

该模块提供对sigma-delta组件的访问。这是一个硬件信号发生器,可以连接到除引脚0之外的 任何GPlOo

信号的产生是由setprescale()和settarget()功能控制的。

-0〈目标<=128

1:高=(预分频+1) /80微秒

t周期=七高256/1标

-128〈目标<256

七低=(预分频+1)/80微秒

t周旷低低256/ (256-目标)

・目标=0

信号停在低位

在〜312.5 kHz的固定频率PWM可以使用该setpwmdutyO功能。

sigma_delta.close () 停止信号生成,并在指定的引脚上重新启用GPIO功能。

sigma_delta.setprescale () 设置预分频值。

sigma_delta.setpwmduty () 以固定基频的PWM模式操作sigma-del ta模块=

sigma_delta.settarget () 设定目标值。

sigma_delta.setup () 停止信号发生器并将其路由到指定的引脚。

sigma_delta.close ()

停止信号生成,并在指定的引脚上重新启用GPIO功能。 句法

sigma_delta.close(pin)

参数

pin 1〜12, I。指数

返回

nil

sigma_delta.setprescale ()

设置预分频值。

句法

'sigma_delta.setprescale (值)

参数

value预分频1至255

返回

nil

也可以看看

sigma_delta.settarget()

sigma_delta.setpwmduty ()

以固定基频的PWM模式操作sigma-delta模块。

句法

sigma_delta.setpwmduty(ratio)

参数

ratio 0…255的占空比0…100%,。使信号处于低电平

返回

nil

–attach generator to pin 2

sigma_delta.setup(2)

–set 50% duty cycle ratio (and impLicitLy start signaL) sigma_delta.setpwmduty(128)

–stop

sigma_delta.setpwmduty(0)

–resume with ~99.6% ratio

sigma_delta , setpwmduty(255)

–stop and detach generator from pin 2 sigma_delta.close(2)

sigma_delta.settarget ()

设定日标值。

句法

sigma_delta.settarget(value)

参数

value目标。到255

返回

nil

也可以看看

sigma_delta.setprescale()

sigma_delta.setup ()

停止信号发生器并将其路由到指定的引脚。

句法

sigma_delta.setup(pin)

参数

pin 1〜12, I。指数

返回

nil

SJSON模块

以来 起源/贡献者 维护者 资源

2017年2月1日 菲利普•格莱斯顿 菲利普•格莱斯顿 sjson

JSON支持模块。允许对JSON进行编码和解码。

请注意,嵌套表格可能需要大量内存来编码。要发现内存不足的错误,请使用pcall() 0

这段代码使用流式json库jsonsl来解析字符串。

这个模块可以用两种方式使用。更简单的方法是使用它作为cjson的直接插入(你可以这样 做_G.cjson = sjson )。更高级的方法是使用流式接口。这允许编码和解码显着更大的对 象。

json null的处理如下:

・默认情况下,解码器代表null作为sjson.NULL (这是一个userdata对象)。这是cjson的行 为。

・编码器总是将任何userdata对象转换为null。

-可选地,可以在编码器和解码器中指定单个字符串。该字符串将用于编码/解码以表示json 空值。这个字符串不应该在数据结构的其他地方使用。一个合适的价值可能是0

当编码一个lua对象时,如果找到一个函数,那么它被调用(没有参数),并且(单个)返回 值被编码在函数的地方。

sjson.encoder () 这将创建一个编码器对象,可以将LUA对象转换为JSON编码的字符串。

sjson.encoder:阅读 这会得到一大块JSON编码数据。

sjson.encode () 将Lua表编码为JSON字符串。

sjson.decoder () 这使得解码器对象可以将JSON编码的字符串解析为lua对象。

sjson.decoder:写 这提供了更多的数据被分析到lua对象中。

sjson.decoder:结果 这将获得解码的lua对象,或者如果解码尚未完成,则会引发错误。

sjson.decode () 解码一个JSON字符串到一个Lua表。

常量 有一个常数-sjson。

sjson.encoder ()

这将创建一个编码器对象,可以将LUA对象转换为JSON编码的字符串o

句法

sjson.encoder(table [, opts])

参数

・table数据进行编码

• opts 一个可选的选项表。可能的条目是:

-depth编码表所需的最大编码深度。默认值是20,几乎适用于所有情况。

・null将字符串值视为null。

返回

一个 sjson.encoder 对象。

sjson.encoder: 阅读

这会得到一大块JSON编码数据。

句法

encoder:read([size])

参数

・size 一个可选的返回字节数值。默认值是1024。

返回

最多可包含size字节的字符串,或者nil编码完成且所有数据已被返回。

以下示例打印出(以64字节块为单位)包含文件系统中每个文件的前4k的JSON编码的字符 串。总字符串可以大于NodeMCU上的总内存量。

function files()

result = ()

for k,v in palrs(file.list()) do result[k] = function() return file.open(k):read(4096) end end

return result

end

local encoder = sjson.encoder(files())

while true do

data = encoder:read(64)

if not data then

break

end

print(data)

end

sjson.encode ()

将Lua表编馅为JSON字符単。这是为了冋后兼容叩提供旳便利万法cjson。

句法

sjson.encode(table [, opts])

参数

・table数据进行编码

• opts 一个可选的选项表。可能的条目是:

。depth编码表所需的最大编码深度。默认值是20,几乎适用于所有情况。 0 null将字符串值视为null。

返回

JSON字符串

ok, json = pcall(sjson.encode, {key=“value”})

if ok then

print(json)

else

print(“failed to encode!”)

end

sjson.decoder ()

这使得解码器对象可以将JSON编码的字符串解析为lua对象。可以为所有新创建的lua表指定 metatableo这允许您在插入到每个表中时处理每个值(通过实施该 newindex方法)。

句法

sjson.decoder([opts])

参数

•opts 一个可选的选项表。可能的条目是:

。depth编码表所需的最大编码深度。默认值是20,几乎适用于所有情况。

0 null将字符串值视为null。

° metatable 一个表作为返回对象中所有新表的元数据。

返回

一个 sjson.decoder 对象

元表

在元表中有两个主要的方法(如果存在的话)。

• newindex这是创建新表格元素时调用的标准方法。

-checkpath这被调用(如果定义的话),每当创建一个新表。它被调用了两个参数:

° table这是新创建的表格

O path这是从根旳键旳列表。true如果任績果中需要该对冢,则必须返回,false 否则返回。

例如,解码时{ “foo”: [1, 2, []] },检查路径将被调用如下:

•checkpath({}, {})的table说法是,将与JSON对象的值所对应的对象。

-checkpath({}, {“foo”})的table说法是,将与外JSON数组的值所对应的对象。

•checkpath({}, {“foo”, 3))的table说法是,将对应于空的内部JSON阵列的对象。

当checkpath调用该方法时,metatable已经与新表相关联。因此checkpath ,如果需要, 该方法可以取代它。例如,如果您正在解

码,{ “foo”: { “bar”: “cat”: [5] } }并且由于某种原因,您不想捕

获"bar"密钥的值,那么有多种方法可以执行此操作:

•在 newindex metamethod中,只需检查密钥的值,rawset如果密钥是跳过"bar" o 这只适用于如果你想跳过所有的"bar"键。

•在该checkpath方法中,如果路径是[“foo”],则返回false。

•使用以下内容checkpath :

checkpat h=f unction (tab j path) tab[’ json_path’ ] = path return true end 这将 保存每个构造对象的路径。现在该—newindex房■法可以执行更复杂的过滤。

能够过滤的原因是它能够在内存受限的平台上处理非常大的JSON响应。许多API会返回大量 的信息,这些信息会超出平台的内存预算。例

如, https://api.github.com/repos/nodemcu/nodemcu-firmware/contents 超过 13kB,但 是,如果你只需要download_url钥匙,那么总大小约为600B。这可以用一个简单 的 newindex方法来处理。

sjson.decoder:写

这提供了更多的数据被分析到lua对象中。

句法

decoder:write(string)

参数

•string下一块JSON编码数据

返回

构造的lua对象或nil解码尚未完成。

错误

如果在解码过程中出现分析错误,则会抛出错误,并解析分析。该对象不能再次使用。

sjson.decoder: 结果

这将获得解码的lua对象,或者如果解码尚未完成,则会引发错误。这可以被多次调用,并且 每次都会返回相同的对象。

decoder:result()

错误

如果解码没有完成,则会抛出错误。

local decoder = sjson.decoder()

decoder:write(“[10, 1”)

decoder:write(“I”)

decoder:write(“, \”foo\”]”)

for k,v in pairs(decoder:result()) do print (k, v)

end

下一个示例演示了使用metatable参数。在这种情况下,它只是打印操作,但如果需要,它可 以完全禁止分配。

local decoder = sjson.decoder({metatable=

{ newindex=function(t,k,v) print(“Setting '” … k … “’ = '” … tostrinj

rawset(tkjV) end}})

decoder jwriteCtl, 2, {“foo” : “bar”}]‘)

sjson.decode ()

解码一个JSON字符串到一个Lua表。这是为了向后兼容而提供的便利方法cjson。

句法

sjson.decode(str[, opts])

参数

-str JSON字符串来解码

• opts 一个可选的选项表。可能的条目是:

O depth编码表所需的最大编码深度。默认值是20,几乎适用于所有情况。

o null将字符串值视为null。

。metatable 一个表作为返回对象中所有新表的元数据。请参阅sjson.decoder。上 面的描述中的metatable部分。

返回

JSON数据的Lua表格表示

错误

如果字符串不是有效的JSON,则会抛出错误。

t = sjson.decode(’{“key”:“value”}') for k,v in pairs(t) do print(k’v) end

常量

有一个常量-sjson.null在lua结构中用于表示存在JSON nulL

SNTP模块

以来 起源/贡献者 维护者 资源

二零一五年六月三十零日 DiUS, Johny Mattsson Johny Mattsson sntp.c

SNTP模块实现简单的网络时间Procotol客户端。这包括对“anycast" NTP模式的支持,如果您 的网络中的NTP服务器支持,则不需要知道NTP服务器的IP地址。默认情况下,这将通过 3.nodemcu.pool.ntp.org使用服务器O.nodemcu.pool.ntp.org。这些服务器几乎适用于所有用 途。

当与rtctime模块一起编译时,它还提供了与它的无缝集成,可能会减少在sntp.sync()没有 任何参数的情况下获得NTP同步的过程。

sntp.sync () 试图获得时间同步。

sntp.setoffset 设置rtc时钟和NTP时间之间的偏移量。

sntp.getoffset 获取rtc时钟和NTP时间之间的偏移量。

sntp.sync ()

试图获得时间同步。

为获得最佳效果,您可能需要定期调用此函数以补偿内部时钟漂移。正如在rtctime模块文档 中所述,建议在深度睡眠后同步时间,并且在模块复位后需要同步(init.lua在WiFi初始 化之后添加)。请注意,可以提供单个服务器作为参数(名称或地址),也可以提供服务器 列表(表)。

句法

sntp.sync([server_ip], [callback], [errcallback], [autorepeat])

sntp.sync(( serverl, server2j … }, [callback]s [errcallback]3 [autorepeat])

参数

・server_ip如果不是nil ,则使用该服务器。如果nil ,则使用上次联系的服务器。如 果没有以前的服务器,则使用池ntp服务器。如果使用了任播服务器,则第一个响应服务 器将被保存。

-serverl , server!这些是要尝试的一个或多个服务器的IP地址或DNS名称。

・callback如果提供的话,它将在成功的同步时被调用,具有四个参数:秒,微秒,服务 器和信息。请注意,当rtctime模块可用时,不需要显式调用rtctime.set()-为了获得最 佳的精确度,此模块会自动进行内部处理。inf。参数是一个(半)有趣值的表格。这些在 下面描述。

-errcallback物个参数失败回调。第一个是描述错误类型的整数。任放弃和报告错误之 前,模块会自动执行多次重试。第二个是包含补充信息的字符串(如果有的话)。错误代 码:

・1: DNS查找失败(第二个参数是失败的DNS名称)

-2:内存分配失败

-3: UDP发送失败

-4:超时,没有收到NTP响应

-autorepeat如果这不是零,那么同步将每1000秒发生一次,如果可能的话尝试调整时 钟。回调将在每次同步操作后被调用。

返回

信息表

这传递给成功回调,并包含有关刚完成的时间同步的有用信息。该表中的关键字是:

・offset_s这是一个可选字段,包含时钟调整的秒数。这只适用于大量(很多秒)的调 整。通常情况下,这只在初始同步调用中出现。

• offset_us这是一个可选字段(但之一’ offset_s和offset_us将始终存在)。这包含 时钟调驀的微秒数。

-delay_us这是以微秒为单位向服务器的往返延迟。你设置的不确定性比这个值要小一 些。

・stratum这是服务器的阶层。

・leap这包含来自NTP协议的闰位。0意味着没有闰秒正在等待,1是UTC月末的未决闰 秒,2是UTC月底的未决闰秒除去。

–Use the nodemeu specific pooL servers and keep the time synced forever (this 」 sntp.sync(nilj nil, nil, 1)

–SingLe shot sync time with a server on the LocaL network.

sntp.sync(,224.0.1.1,J

function(sec, usee, server, info) print(1 sync 1, sec, usee, server)

end,

function()

print('failed!1)

end

)

也可以看看

rtetime.set()

sntp.setoffset

设置rtc时钟和NTP时间之间的偏移量。请注意,NTP时间有闰秒,因此插入闰秒时运行缓 慢。这个setoffset调用使明确的闰秒跟踪,并导致rtc时钟更均匀地打勾-但它与墙上时钟 的时间不一致。秒数是偏移量。

sntp.setoffset([offset])

参数

-offset NTP时间和rtc时间之间的偏移量。这可以省略,默认为零。此调用启用偏移量跟 踪。

返回

sntp.getoffset

获取rtc时钟和NTP时间之间的偏移量。应该从rtc时间中减去此值以获得NTP时间-这对应于 挂钟时间。如果返回的偏移量己经从先前的呼叫改变了,那么在这之间就有了一个闰秒。

句法

offset = sntp.getoffset()

返回

当前抵消。

文档》英语”模块》尚飞

Somfy模块

以来 起源/贡献者 维护者 资源

2016年 9 月 27 日 vsky279 vsky279 somfy.c

该模块提供了一个简单的界面,通过RF发射器(433.42 MHz)控制Somfy百叶窗。它基于 Nickduino Somfy 远程 Arduino skectho

所使用的硬件是标准的433 MHz射频发射器。不幸的是,这些芯片通常以433.92MHz的频率 传输,所以晶体谐振器应该用433.42MHz的谐振器来替代,尽管一些人报告说甚至在原始晶 体的情况下也能工作。

要了解Somfy协议的详细信息,请参阅SomfyRTS协议以及这里的讨论。

该模块使用硬件计时器,因此它不能在同一时间使用所述硬件计时器其他NodeMCU模块,即 可以使用 sigma delta , pcm , perf ,或 pwm 模块。

somfy.sendcommand () 构建由Somfy协议定义的帧并将其发送到RF发射器。

somfy.sendcommand ()

构建由Somfy协议定义的帧并将其发送到RF发射器。

句法

somfy.sendcommand(pin, remote_address, command, rolling_codej repeat_count, call_back)

参数

-pin将RF发射器连接到GPI。引脚。

-remote_address遥控器的地址。要控制的设备使用它应该听的遥控器的地址进行编程。

•command命令被传送。可以是一

个 somfy.SOMFY_UP , somfy.S0MFY_D0WN , somfy.S0MFY_PR0G , somfy.S0MFY_ST0P

・rolling_code总按一次按钮,滚成代码就会增加。如果編代码高于最后收到的代码, 并且不在最后收到的代码之前,接收器只接受命令。这个窗口是一个100大的顺序。需要 将滚动代码存储在EEPROM (即文件系统)中以保存ESP8266复位。

•repeat_count命令重复了多少次

・callback在发送命令之后调用的函数。允许链接命令将百叶窗设置到一个定义的位 置。

我原来的遥控器是TELIS4 MODULIS RTS。这个遥控器正在处理附加信息-附加数据后面的56 位(缩短帧间间隔)。似乎还没有透露出这个摇摆不定的动力。

当我发送somfy.DOWN命令,重复顿物次(这似半是一个短授钮旳标谁),

即repeat_count等于2,百叶窗只走1步。这对应于原始遥控器上的轮子的移动。原始遥控 器上的向*按钮也发送somfy.DOWN命令,但附加信息是不同的,这使得百叶窗完全放下。 幸运的是,重复该帧16次使得百叶窗完全放下。

返回

要开始控制你的Somfy百叶窗,你需要:

・选择一个任意的远程地址(与现有的远程地址不同)-123在本例中

・选择滚动代码的起点。任何unsigned inti作,1是一个好的开始

-长驾现有遥控器上的程序按钮,直到盲人轻微上下

•执行 somfy. sendcommand(4j 123, somfy.PROG, 1, 2)-百叶窗会响应,您的ESP8266遥 年暨现在已经注册

•运行 somfy. sendcommand(4j 123, somfy.DOWN, 2, 16)-完全关闭百叶窗

更详细的例子请参考somfy.lua。

SPI模块

以来 起源/贡献者 维护者 资源

2015年1月16日 易卜拉欣•阿卜德•埃尔卡德 阿尼姆•拉格 spi.c

所有的发送和接收事务都是最重要的,最后一个也是最不重要的。有关底层硬件的技术细节,请参 阅 metalphreak 的 ESP8266 HSPI 文章。

。注意

ESP硬件提供两个SPI总线,ID为。和1,映射到一般标为SP困HSP啲引脚。如果您使用任何一种 提供闪存的开发板,那么总线IDO (SPI)几乎肯定用于与闪存芯片进行通信。您可能要为您的 通信选择公交车ID1 (HSPI),因为您将无意中使用它。

HSPI信号固定在以下I。索引和GPI。引脚上:

信号 IO索引 ESP8266引脚

HSPI时钟 五 GPIO14

HSPI/CS 8 GPIO15

HSPI MOSI 7 GPIO13

HSPI MISO 6 GPIO12

另请参阅spi.setup ()。

高级功能 高级功能提供半双工和全双工模式的发送和接收API。

spi.recv () 从SPI接收数据。

spi.send () 以半双工模式通过SPI发送数据。

spi.setup () 设置SPI配置。

低级硬件功能 低级函数为需要练习更复杂SPI事务的应用场景提供以硬件为中心的API。

spi.get_miso () 在spi之后从MIS。缓冲区提取数据项。

spi.set_mosi () 将数据项插入到spi的MOSI缓冲区中。

spi.transaction ()

咼级功能

高级功能提供半双工和全双工模式的发送和接收API。发送和接收的数据项限制为1-32位长,每个 数据项被(H) SPICS无效包围。

spi.recv ()

从spi接收数据。

spi.recv(idj size], default_data])

参数

•id SPUD号:SPI为0, HSPI为 1

・size要读取的数据项的数量

•default_data在MOSI上发送默认数据(全1,如果省略)

返回

包含从SPI读取的字节的字符串。

也可以看看

spi.send ()

spi.send ()

以半双工模式通过spi发送数据。以全双工模式发送和接收数据。

句法

半双工:

wrote = spi.send(idj datalfj data2[,・.・,datan]])

全双工:

wrote[4 rdatal[, .•・, rdatan]] = spi.send(idj datal[data2[,.・

参数

•id SPUD号:SPI为0, HSPI为 1

•data数据可以是字符串,表格或整数。 每个数据项都被认为databits是位数。

返回

•wrote写入的字节数

•rdata接收的数据配置为spi. FULLDUPLEX

与相应的数据参数相同的数据类型。

=spi.send(lJ 04 255, 255, 255)

4 255 192 32 0

x = {spi.sendCl, 255, 255, 255)}

=x[l]

4

=X[2]

255

=x[3]

192

=X[4]

32

=x[5]

=x[6]

nil

=#x

5

x = spi.send(l3 0, {255, 255, 255})

=x[l]

192

=x[2]

32

=X[3]

也可以看看

•splsetup ()

•spi.recv ()

spi.setup ()

设置spi配置。有关时钟极性和相位定义的详细信息,请参考串行外设接口总线。

呼叫spi.setup()会将HSPI信号路由到相关引脚,覆盖之前的gpio模块配置和控制。如果不需 要它的HSPI功能,可以将任何引脚恢复到gpi。控制,只需设置gpio.mode()它。如果SPI从设备选 择是由不同的引脚驱动的,gpio.write。SPI引擎将会切换引脚8,否则,建议使用此功能。

句法

spi.setup(idj mode, cpolj cpha, databits^ clock_div[duplex_mode])

参数

•id SPUD号:SPI为0, HSPI为 1

•mode选择主模式或从模式

o spi.MASTER

。spi.SLAVE -目前不支持

•cpol时钟极性选择

o spi.CPOL_LOW

o spi.CPOL_HIGH

•cpha时钟相位选择

。 spi.CPHA_LOW

。 spi.CPHA_HIGH

•databits每个数据项的位数1-32

•clock_div SPI时钟分频器,f (SPI) = 80MHz/ clock div , 1…n (0默认为分频器8)

•duplex_mode双工模式

。spi.HALFDUPLEX (省略时默认)

o spi.FULLDUPLEX

返回

1号

spi.setupClj spi.MASTER, spi.CPOL_LOW, spi・CPHA_LOW, 8, 8)

–we won’t be using the HSPI /CS Linej so disabLe it again

gpio.mode(8j gpio.INPUT, gpio.PULLUP)

低级硬件功能

低级函数为需要练习更复杂SPI事务的应用场景提供以硬件为中心的API。编程模型是围绕硬件发送 和接收缓冲区建立的,SPI事务是在硬件特性完全控制的情况下启动的。

spi.get_miso ()

之后从MISO缓冲区中提取数据项spi.transaction()。

句法

datal[j data2[.・・, datan]] = spi.get_miso(idj offsetj bitlen^ num) string = spi・get_miso(id, num)

参数

•id 5PI ID专:bHIZJU, HbPIZJl

・offset第一个数据项的MISO缓冲区的位偏移量

•bitlen单个数据项的位长度

-num要检索的数据项的数量

返回

num数据项或string

也可以看看

spi.transaction ()

spi.set_mosi ()

将数据项插入到MOSI缓冲区中spi.transaction()。

句法

spi・set_mosi(id, offsetj bitlen4 datal[data2[4 datan]]) spi・set_mosi(id, string)

参数

•id SPUD号:SPI为0, HSPI为 1

・offset用于插入datal和后续项目的MOSI缓冲区

•bitlen datal, data2, …的长度

•data bitlen在交易中考虑位数的数据项。

・string将数据发送到偏移量为0,位长为8的MOSI缓冲区中

返回

nil

也可以看看

spi.transaction ()

spi.transaction ()

开始一个SPI交易,最多由5个阶段组成:

1.命令

2.地址

3.MOSI

4.假

5.味噌

句法

spi.transaction(id? cmd_bitlen, cmd_data, addr_bitlen4 addr_dataj mosi_bitlenj dummy_bitlen4 miso_l

参数

•id SPUD号:SPI为0, HSPI为 1

•cmd_bitlen命令阶段的位长度(0 - 16)

•cmd_data数据为命令阶段

•addr_bitlen 地址相位(0- 32)

•addr_data数据为命令阶段

•mosi_bitlen MOSI相的位长度(0-512)

•dummy_bitlen伪相位的位长度(0-256)

•miso_bitlen MI5U阶段旳位箕度(U-31Z)方半双丄。 全双工模式被激活为负值。

返回

nil

也可以看看

•spi.set_mosi ()

•spi.get_miso ()

文档》英语”模块》结构

结构模块

以来 起源/贡献者 维护者 资源

2015年2月 13 日 Roberto lerusalimschy, Philip Gladstone 菲利普•格莱斯顿 structc

这个模块提供了将Lua值转换成C结构和从C结构转换的基本功能。它的主要功能

是struct.pack将多个Lua值打包成类似结构的字符串;并且struct.unpack从给定的类似 结构的字符串中解压缩多个Lua值。

这两个函数的第一个参数是格式字符串,它描述了结构的布局。格式字符串是一系列转换元 素,它们遵循当前的字节顺序和当前的对齐要求。最初,当前的端点是机器的本地排序,当 前的对齐要求是1(意思是根本不对齐)。您可以使用格式字符串中的适当指令更改这些设 置。

请注意,float和double转换仅适用于浮点NodeMCU构建。

格式字符串

格式字符串中的元素如下所示:

.““(空白空间)被忽略。

・“!n"标志将当前的对齐要求设置为n (必然是2的幕);缺席n意味着机器的本地对齐。

-“>“标志将模式设置为大端。

-标志将模式设置为小端。

-“X"填充零字节,没有对应的Lua值。

,,七“ 一个签名char。

,“B“ —个无符号的char。

・小“ 一个签名short (本地大小)。

•“H” 一个无符号short (本地大小)。

・“l” 一个签名long (本地大小)。

•“L” 一个无符号long (本地大小)。

,“T“ 一个size_t (本机尺寸)。

・“in” 一个有n个字节的有符号整数。一个缺席的n表示一个本地的大小int o

・“In"喜欢"in"但没有签名。

,%“ 一个noat (本机尺寸)。

・“d” 一个double (本机尺寸)。

•“s"以零结尾的字符串。

-“cn” 一串正好对应于一个Lua字符串的n个字符。缺席n意味着1.打包时,给定的字符串 必须至少有n个字符(多余的字符被丢弃)。

-这就像是“cn“,除了n是由其他方式给予:当包装,n是给定的字符串的长度;当 解包时,n是前一个解压值(必须是数字)的值。在这种情况下,以前的值不会被返回。

例子 struct Str { char b; int i[4];

};

你可以使用字符串”<!4biiii”。

要打包其长度编码在其第一个字节中的字符串,请使用以下代码:

x = struct.packC’BcO”, string.1011(5), s)

要解压那个字符串,请按如下操作:

s = struct.unpack(“BcO”, x)

请注意,长度(由元素读取"B")不返回。

若要在用空格填充的10个字符的固定宽度字段中打包字符串,请执行以下操作:

x = struct.packC’clO", s … string.rep(" 10))

structpack () 返回包含值dl, d2等的字符串

structunpack () 根据格式字符串fmt返回字符串s中打包的值。

structsize () 返回根据格式字符串fmt格式化的字符串的大小。

struct.pack ()

返回包含的值的字符串dl , d2等。根据格式字符串打包fmt o

句法

struct.pack (fmt, dl, d2,…)

参数

• fmt上述格式的格式字符串

-dl第一个数据项被打包

・d2第二个要打包的数据项

返回

包装的字符串。

S = struct.packCl’'^ 0x41424344)

print(s)

struct.unpack () S根据格式子符単返回授字符申打包旳值fmt。一个可选旳i标记,任哪里s升如阅读 (默认是1)。在读取值之后,该函数还会返回s停止读取的位置处的索引,这也是您应该 开始读取字符串其余部分的位置。

句法

struct.unpack (fmt, s[, offset])

参数

•fmt上述格式的格式字符串

-s保存要解压的数据的字符串

-offset在字符串中开始的位置(默认为1)

返回

所有的解压数据。

假设我们必须解码一个s未知数的双精度的字符串;结尾标有一个零值。我们可以使用下面 的代码:

local a = {)

local i = 1 – index where to read

while true do

local d

d, i = struct.unpack("d"j s, i)

if d == 0 then break end

a[#a + 1] = d

end

struct.size ()

返回根据格式字符串格式化的字符串的大小fmt o格式字符串应该既不包含选项s也不包 含选项C0 O

句法

struct.size (fmt)

参数

•fmt上述格式的格式字符串

返回

将使用此格式字符串在包操作中输出的字符串的大小。

print(struct.size(“i”))

这将打印本地整数类型的大小。

执照

这个软件包是根据MIT许可证分发的。请参阅文件末尾的版权声明struct.c。

Switec模块

以来 起源/贡献者 维护者 资源

2016年6月26日 菲利普•格莱斯顿 菲利普•格莱斯顿 switec.c

该模块控制一台SwitecX.27 (或兼容)仪器步进电机。这些是用于现代汽车仪表组的步进电 机。他们是非常便宜,可以在你最喜欢的拍卖网站或中国购物网站找到。有双轴的品种-即有 两个步进电机驱动两个同心轴,所以你可以从同一轴安装两个针。

这些电机运行5V (有些可能工作在3.3V) o它们的电流低于20mA,设计为直接从MCU引脚 驱动。由于nodemeu运行在3.3V,所以需要一个电平转换器。像74WC4245A这样的八进制转 换器可以执行这个翻译。它还包括所有需要的保护二极管。

这些电机可以驱除三个管脚,与pin2和pin3是相同的GPIO引脚。如果电机直接连接到 MCU,则电流负载会翻倍,并可能超过最大额定值。但是,如果正在使用驱动器芯片,则 MCU上的负载可以忽略不计,同一个MCU引脚可以连接到两个驱动器引脚。为了做到这一 点,只需指定pin2和pin3。

这些电机没有绝对的定位,但在范围的两端停止。启动程序是逆时针驱动电机,直到确保针 在台阶上。那么这个点可以设置为零。在正常运行期间,不要让电机进入到最终位置是很重 要的,因为这会使指向不准确。该模块不执行任何范围限制。

❶重要

该模块使用硬件定时器中断,因此不能与PWM模块同时使用。这两个模块都可以编译成 相同的固件镜像,但应用程序只能使用一个。有可能使应用程序之间交替switec 和pwm ,但必须小心。

switec.setup () 初始化nodemeu以与switec X进行通信。

switec.moveto () 启动针移动到指定的位置。

switec.reset () 这将针的当前位置设置为零。

switec.getpos () 获取针的当前位置以及是否正在移动。

switec.close () 释放与步进器相关的资源。

校准 为了正确设置零点,应该逆时针驱动针头,直到进入最终止动位置。

switec.setup ()

初始化nodemeu以与switec X.27或兼容的仪器步进电机对话。默认转换速率设置为适用于大 多数电机。有些电机可以每秒运行600次。

switec.setup(channel, pinl4 pin2, pin3, pin4 [, maxDegPerSec])

参数

maxDegPerSec (可选)这可以设置为限制最大摆率。默认值是每秒400度。

返回

没有。如果参数错误,或者操作无法完成,则会抛出错误。

注意

一旦设置了通道,在针停止移动之前,不能重新设置通道。

switec.setup(0j 5】6】7, 8)

switec.moveto ()

启动针移动到指定的位置。如果针已经移动,则当前动作被取消,针移动到新的位置。当针 停止移动时,可以得到回调。这通常是不需要的,因为moveto可以连续发出多个操作。在 初始校准期间,这很重要。请注意,回调不能保证被调用-在另一个moveto操作被触发之 前,针可能不会停在目标位置。

句法

switec.moveto(channel, positionstoppedCallback)

参数

・channel switec模块支持三个步进电机。通道是0,1或2。

•position移动针的位置(顺时针的步数)。一般在0到1000左右。

•stoppedCallback (可选)回调在针停止移动时被调用。

错误

通道必须已经设置,否则会引发错误。

switec.moveto(04 1000^ function ()

switec.moveto(0j 0)

end)

switec.reset ()

这将针的当前位置设置为零。针头必须静止。

句法

switec ・ reset(channel)

参数

•channel switec模块支持三个步进电机。通道是0,1或2。

错误

通道必须设置好,针头不能移动,否则会出现错误。

switec.getpos ()

获取针的当前位置以及是否正在移动。

句法

switec.getpos(channel)

参数

・channel switec模块支持三个步进电机。通道是0,1或2。

返回

•position针的当前位置

・moving如果针静止,则为0。1为顺时针,-1为逆时针。

switec.close ()

释放与步进器相关的资源。

句法

switec . close(channel)

参数

・channel Switec模块支持三个步进电机。通道是0,1或2。

错误

针头一定不能移动,否则会出现错误。

校准

为/止确设置零点,应该逆时针驱初钉头,直到进人最终止初位宣。然后可以设置零点。便 用的值为-1000,因为它大于电机的范围,即它在整个范围内逆时针方向驱动并到达终点挡 块。

switec.setup(0j 5,6,7,8) calibration = true

switec.moveto(0j -1000, function() switec , reset(0) calibration = false

end)

其他moveto操作不应该在calibration设置时执行。

TCS34725模块

以来 起源/贡献者 维护者 资源

2017年4月2日 tjhowse tjhowse tcs34725.c

该模块为TCS34725彩色/光线传感器(Adafruit)提供了一个简单的界面。 请注意,您必须先打电话,setup。然后才能开始读取值!

tcs34725.setup () setupializes 模块。

tcs34725.enable (函数()) 启用传感器。

tcs34725.disable () 禁用传感器。

tcs34725.raw () 读取传感器的清晰,红色,绿色和蓝色值。

tcs34725.setGain () 设置传感器的增益。

tcs34725.setlntegrationTime () 设置传感器的积分时间。

tcs34725.setup ()

setupializes模块。在读取值之前,setupialization是必需的。

句法

tcs34725.setup()

返回

0如果安装失败(没有传感器连接? ) , 1如果传感器是TCS34725

tcs34725 ・ setup()

tcs34725.enable(function() print(“TCS34275 Enabled”) clear,redgreenblue=tcs34725 ・ raw()

end)

tcs34725.enable (函数())

启用传感器。禁用后可以用来唤醒。

tcs34725.enable(function() print(nTCS34275 Enabled") clearred,greenblue=tcs34725.raw()

end)

参数

传感器完成初始化时调用的函数。

返回

tcs34725.disable ()

禁用传感器。启用低功耗睡眠模式。

句法

tcs34725.disable()

返回

tcs34725.raw ()

读取传感器的清晰,红色,绿色和蓝色值。

句法

clearj redjgreen,blue=tcs34725.raw()

返回

清晰,红色,绿色,蓝色在uintl6_to

tcs34725.setGain ()

设置传感器的增益。传感器启用后必须调用。

句法

tcs34725.setGain(gain)

参数

获得 获得

为0x00 TCS34725 GAIN IX

获得 获得

0x01 TCS34725_GAIN_4X

0x02 TCS34725_GAIN_16X

x03 TCS34725 GAIN 60X

返回

tcs34725.setIntegrationTime ()

设置传感器的积分时间。传感器启用后必须调用。 句法

tcs34725 . setlntegrationTime(time)

参数

时间 获得

为 OxFF TCS34725_INTEGRATIONTIME_2_4MS

0xF6 TCS34725_INTEGRATIONTIME_24MS

0xD5 TCS34725_INTEGRATIONTIME_101MS

将 OxCO TCS34725_INTEGRATIONTIME_154MS

为 0x00 TCS34725_INTEGRATIONTIME_700MS

返回

文档》英语”模块》TLS

TLS模块

以来 起源/贡献者 维护者 资源

二O—六年十二月十五日 凤凰 凤凰 tls.c

SSL/TLS 支持

。注意

TLS模块依赖于网络模块,这是所需的依赖关系。

NodeMCU包含mbedTLS库的开源版本。通过NodeMCU的默认配置,它支持TLS1.O/1.1/ 1.2和最常用的密码套件,包括DH/ECDH。基于ECDSA的密码套件默认是禁用的。

。小费

完整的配置存储在user_mbedtls.h中。如果您构建自己的固件并要更改mbedTLS行为,则 这是要编辑的文件。

有关功能列表,请看mbedTLS功能页面。

当SSL/TLS正在使用时,该模块处理证书验证。

tls.createConnection () 创建TLS连接。

tls.socket:关闭() 关闭套接字。

tls.socket: connect () 的 连接到远程服务器。

tls.socket: DNS () 为主机名提供DNS解析

tls.socket: getPeer () 已 检索对等端口和ip。

tls.socket:保持() 通过发出阻止TCP接收功能的请求来限制数据接收。

tls.socket: 上() 注册特定事件的回调函数。

tls.socket:发送() 将数据发送到远程对等。

tls.socket:取消保留() 通过撤销先前的保持()来解除对TCP接收数据的阻止。

tls.certverify () 控制Nodemeu建立安全连接时的验证过程。

tls.createConnection ()

创建TLS连桜。

句法

tls.cneateConnection()

参数

没有

返回

tls.socket 子模块

tls.createConnection()

tls.socket 模块

tls.socket:关闭()

关闭套接字。

句法

close()

参数

没有

返回

nil

也可以看看

tls.cneateConnection()

tls.socket: connect ()的

连接到远程服务器。

句法

connect(port, ip|domain)

参数

•port 端口号

•ip IP地址或域名字符串

返回

nil

也可以看看

tls . socket:on()

tls.socket: DNS ()

为主机名提供DNS解析

句法

dns(domainj function(tls・socketip))

参数

•domain 域名

•function(tls.socket, ip)回调函数。第一个参数是套接字,第二个参数是IP地址作为 字符串。

返回

nil

sk = tls.cneateConnection()

sk:dns(“google.com"j function(conn, ip) print(ip) end)

sk = nil

tls.socket: getPeer () S

检索对等端口和ip。

句法

getpeer()

参数

没有

返回

•ip的同行

•port的同行

tls.socket:保持()

通过发出阻止TCP接收功能旳请求米限制敬相接收:。此请求小立即生效,Espressif建议任保留 5 * 1460字节的内存时调用它。

句法

hold()

参数

没有

返回

nil

也可以看看

tls.socket:unhold()

tls.socket:上()

注册特定事件的回调函数。

句法

on(event, function())

参数

-event字符串,可以是“连接”,“重新连接”,“断开",“接收"或“发送”

-function(tls.socket], string])回调函数。第一个参数是套接字。如果事件是“接 收”,则第二个参数是以字符串形式接收的数据。如果事件是“重新连接”,则第二个参数是 连接错误(字符串)的原因。

返回

nil

srv = tls.createConnection()

srvzonCreceive", function(sck, c) print© end)

srv:on(“connection”, function(sck, c)

–Wait for connection before sending.

sck:send("GET / HTTP/1.l\r\nHost: google.com\r\nConnection: keep-alive\r\nAcce| end)

spv:connect(443,“google.com”)

❶注意

该receive事件被触发每个网络帧!在netsocket: on ()上查看细节。

也可以看看

•tls.createConnection()

•tls.socket:hold()

tls.socket:发送()

将数据发送到远程对等。

句法

send(string)

参数

・string字符串中的数据将被发送到服务器

返回

nil

注意

send()由于SDK将网络请求视为单独的任务,因此不能保证连续多次调用(通常不会)。 相反,请订阅套接字上的“发送”事件,并在该回调中发送其他数据(或关闭)。详情请参阅# 730o

也可以看看

tls.socket:on()

tls.socket:取消保留()

通过撤销前面的方法来解除对TCP接收数据的阻止hoid() o

句法

unhold()

参数

没有

返回

nil

也可以看看

tls.socket:hold()

tls.cert 模 块

tls.cert.verify ()

控制Nodemeu建立安全连接时的验证过程。

句法

tls.cert.verify(enable)

tls ・ cert.verify(pemdata)

参数

•enable指示是否启用验证的布尔值。启动时的默认值是false。

•pemdata包含用于验证的CA证书的字符串。

返回

true如果它工作。

如果提供了无效的数据,可以抛出一些错误。

建立安全的https连接并验证证书链是否有效。

tls.cert.verify(true)

http.get(“https://example.com/info”, nil, function (code, resp) print(code^ resp

将证书加载到闪存芯片并发出请求。这是startssl根证书。他们提供免费证书。

tls.cert.verify([[

BEGIN CERTIFICATE

MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW

MBQGAlUEChMNU3RhcnRDb20gTHRkLjErMCkGAlUECxMiU2VjdXJlIERpZ210YWwg

Q2VydGlmaWNhdGUgU21nbmluZzEpMCcGAlUEAxMgU3RhcnRDb20gQ2VydGlmaWNh

dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9

MQswCQYDVQQGEwJJTDEWMBQGAlUEChMNU3RhcnRDb20gTHRkLjErMCkGAlUECxMi

U2VjdXJlIERpZ210YWwgQ2VydGlmaWNhdGUgU21nbmluZzEpMCcGAlUEAxMgU3Rh

cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA

A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXulM5DycmLWwTYgIiRezul38kMKogZk

pMyONvg45iPwbm2xPNlyo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf

OQVSWff0G0ZDpNKFhdLDcfNlYjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C

Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT

Kqi5pquDSR318u/d5AG0GAqPYlMWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi

HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM

Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN60qce+Zu9ydmDBpI125C4z/eIT574Qlw

+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+

Gkhpi8KWTRoSsmkXwQqQlvp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3

Zzrd/qqc8NSLf 3Iizsaf 17b4r4qgEKjZ+xjGtrVclljyJthkqcwEKDw0zEmDyei+B

26Nu/yYwl/WL3YlXtq09s68rxbd2AvClliuahhQqcvbjM4xdCUsT37uMdBNSSwID

AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE

FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGAlUdHwRdMFswLKAqoCiGJmh0dHA6Ly9j

ZXD0LnN0YXJ0Y29tLm9yZy9zZnNjYSljcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js

LnN0YX:0Y29tLm9yZy9zZnNjYSljcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM

BgsrBgEEAYGlNwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0

Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy

dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMw3xYgU3Rh

cnQgQ29tbWVyY21hbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqB10xpbW10ZWQgTGlh

YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaWlpdGF0aW9ucyogb2Yg

dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp

bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ

YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT

TCBDZX:0aWZpY2F0aW9uIEFldGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ

9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8

jhvh3TaHK0u7aNM5Zj2gDsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW

FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz

ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVDloNBl

ny+v8OqCQ5j4aZy3ecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L

EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu

L61whceWD3yJZfWOQlQOq921gDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq

yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtL3L4YSjCMJwRuC

O3NJo2pXh5TllnjFmUNj403gdy3hZZlyaQQaRwnmDwFW3Psfvw55qVguucQ3AX6V

um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh

N0sF/5oirpt9P/FlUQqmlvIGqz9IgcgA38corogl4=

END CERTIFICATE

]])

http.get(,https://pskreporter.info/gen404"nil, function (code, resp) print(codi

笔记

验证所需的证书存储在闪存芯片中。该tls.cert.verify呼叫true可以使用存储在闪存中 的值进行验证。

证书可以通过两种方式加载到闪存芯片-一个是固件版本,另一个是固件初始引导。为了在构 建时加载证书,只需将包含CA证书(以PEM格式)的文件放置server-ca.crt在nodemcu- firmware构建树的根目录下。构建脚本将把它结合到生成的固件镜像中。 另一种万法比较容易升友,那就是将PEM数据作为字符甲值提供tls.cert.verify。这会 将证书存储在闪存芯片中,并打开该证书的验证。随后,nodemeu的引导可以使 用tls. cert, verify (true)并使用存储的证书。

文档》英语"模块»tml829

TM1829模块

以来 起源/贡献者 维护者 资源

2016年5月15日 塞巴斯蒂安•哈斯 塞巴斯蒂安•哈斯 tm!829.c

tml829是一个使用Titan Micro tml829 led控制器处理led灯条的库。

该库使用任何GPI。对led控制命令进行比特流。

tml829.write () 使用原生芯片格式将数据发送到LED灯带。

tml829.write ()

使用原生芯片格式将数据发送到LED灯带。

句法

tml829.write(string)

参数

-string有效载荷被发送到一个或多个TM1829LED。

返回

tml829.write(5, string.char(255,0,0,25500)) – turn the two first RGB Leds to i

定时器模块

以来 起源/贡献者 维护者 资源

2014-12-12 Zeroday dnc40085 tmr.c

tmr模块允许访问简单的定时器,系统计数器和正常运行时间。

它的目的是建立定期发生的任务,超时运行,并提供低分辨率的增量。

tmr模块不是什么,是一个计时模块。虽然大多数超时时间以毫秒或甚至微秒为单位,但准确 度是有限的,复合误差会导致相当不准确的时间保持。考虑将rtctime模块用于“挂钟”时间。

NodeMCU提供7个静态定时器,编号为0-6,动态定时器创建功能tmr.create。。

。注意

静态定时器已被弃用,稍后将被删除。使用。OAPI启动tmr.createO。

tmr.alarm () 这是一个结合tmr的便利功能。

tmr.create () 创建一个动态计时器对象。

tmr.delay () 使处理器忙碌指定的微秒数。

tmr.interval () 更改已注册的计时器的到期时间间隔。

tmr.now () 返回系统计数器,以微秒计。

tmr.register () 配置一个定时器并注册回调函数以便在调用过期时使用»

tmr.resume () 恢复个人计时器。

tmr.resume_all () 恢复所有计时器。

tmr.softwd () 提供一个简单的软件看门狗,需要在到期前重新设置或禁用,否则系统将 重新启动。

tmr.start () 启动或重新启动先前配置的计时器。

tmr.state () 检查定时器的状态。

tmr.stop () 停止正在运行的计时器,但不取消注册。

tmr.suspend () 挂起一个武装计时器。

tmr.suspend_all () 挂起所有目前的武装计时器。

tmr.unregister () 停止定时器(如果正在运行)并取消注册相关的回调。

tmr.wdclr () 送入系统看门狗。

tmr.alarm ()

这是一个方便的功能相结合tmr. register(),并tmr.start()成一个单一的电话。

使用此计时器释放资源时,请调用tmr.unregisterO它。对于一次性定时器,这是没有必 要的,除非它们在失效之前停止。

句法

tmr.alarm([id/ref], interval_mSj mode, func())

参数

•id / ref 定时器ID (0-6)或对象,OOAPI (— tmr.create())已过时

•interval.ms定时器间隔(以毫秒为单位)。最大值是6870947 (1: 54: 30.947)。

•mode定时器模式:

0 tmr. ALARM_SINGLE —次性报警(不需要打电话 tmr. unregister())

。tmr.ALARM_SEMI手动重复报警(调用tmr.start()重启)

O tmr.ALARM_AUTO自动重复报警

•func(timer)用定时器对象作为参数调用的回调函数

返回

true如果定时器启动,false错误

if not tmr.create():alarm(5000j tmr.ALARM_SINGLE3 function() print(“hey there”)

end)

then

print(“whoopsie”)

end

也可以看看

•tmr.create()

•tmr.register()

•tmr.start()

•tmr.unregister()

tmr.create ()

创建一个动态计时器对象。

动态计时器可以用来代替控制功能中的数字ID。也可以以面向对象的方式进行控制。

定时器对家支持旳功能:

•t:alarm()

•t:interval()

•t:register()

•t:resume()

•t:start()

•t: state()

•t:stop()

•t :suspend()

•t:unregister()

参数

没有

返回

timer目的

local mytimer = tmr.create()

–oo calling

mytimer:register(5000j tmr.ALARM_SINGLE, function (t) print(“expired”); t:unregi: mytimer:start()

– with seLf parameter

tmr.register(mytimerj 5000, tmr.ALARM_SINGLE3 function (t) printCexpired"); tmr tmr.start(mytimer)

tmr.delay ()

使处理器忙碌指定的微秒数。

这通常是一个坏主意,因为没有别的东西可以运行,网络堆栈(以及其他东西)可能会因此 而崩溃。唯一 tmr.delay。可能适合使用的是如果处理需要(非常)短暂的命令之间的延迟 的外围设备,或类似的。谨慎使用!

还要注意,实际延迟的时间量可能明显更大,这是由于定时不准确以及在此期间可能运行的 中断造成的。

句法

tmr.delay(us)

参数

us 微秒到busyloop

nil tmr.delay(100)

tmr.interval ()

更改已注册的计时器的到期时间间隔。

句法

tmr.interval([id/ref], interval_ms)

参数

•id / ref 定时器ID (0-6)或对象,OOAPI (— tmr.create())已过时

•interval.ms新的定时器间隔,以毫秒为单位。最大值是6870947 (1: 54: 30.947)。 返回

nil

mytimer = tmr.create()

mytimer:register(10000j tmr.ALARM_AUTO, function() print(“hey there”) end)

mytimer:interval(3000) – actually, 3 seconds is better!

mytimer:start()

tmr.now ()

返回系统计数器,以微秒计。限于31位,之后它回绕到零。如果使用此功能消除或抑制GPIO 输入,那么这是非常重要的。

句法

tmr.now()

参数

没有

返回

系统计数器的当前值

print(tmr,now()) print(tmr.now())

tmr.register ()

配置一个定时器并注册回调函数以便在调用过期时使用。

使用此计时器释放资源时,请调用tmr.unregister()它。对于一次性定时器,这是没有必 要的,除非它们在失效之前停止。

句法

tmr. register ([id/ref], intervales, mode, func())

参数

•id / ref 定时器ID (0-6)或对象,OOAPI (― tmr.create())已过时

-interval_ms定时器间隔(以毫秒为单位)。最大值是6870947 (1: 54: 30.947)。

•mode定时器模式:

。tmr.ALARM_SINGLE —次性报警(不需要打电话 tmr.unregister())

0 tmr.ALARM_SEMI手动重复报警(调用tmr.start()重启)

o tmr.ALARM_AUTO自动重复报警

-func(timer)用定时器对象作为参数调用的回调函数

请注意,登记,并没有启动报警。

返回

nil

mytimer = tmr.create()

mytimer:register(5000j tmr.ALARM_SINGLE, function。 print(“hey there”) end) mytimer:start()

也可以看看

•tmr.create()

•tmr.alarm()

tmr.resume ()

恢复个人计时器。

恢复先前已经暂停或者是计时器tmr.suspend或tmr.suspend_all

句法

tmr.resume(id/ref)

参数

id/ref 定时器ID (0-6)或对象,OOAPI (t tmr.create())已过时

true如果定时器恢复成功

–resume timer mytimer mytimer:resume()

–aLternate metod tmr.resume(mytimer)

也可以看看

•tmr.suspend()

•tmr.suspend_all()

•tmr.resume_all()

tmr.resume_all ()

恢复所有计时器。

恢复所有定时器,包括那些以前被中止的tmr.suspend或者tmr.suspend_all

句法

tmr.resume_all()

参数

没有

返回

true如果定时器恢复成功

–resume aLL previousLy suspended timers tmr.resume_all()

也可以看看

•tmr.suspend()

•tmr.suspend_all()

•tmr.resume()

tmr.softwd ()

提供一个简单的软件看门狗,需要在到期前重新设置或禁用,否则系统将重新启动。

句法

tmr.softwd(timeout_s)

参数

timeout_s看门狗超时,以秒为单位。要禁用看门狗,请使用-1 (或任何其他负值)。

返回

nil

function on_success_callback()

tmr.softwd(-1)

print(“Complex task done, soft watchdog disabled!”)

end

tmr.softwd(5)

–go off and attempt to do whatever might need a restart to recover from

complex_stuff_which_might_never_call_the_callback(on_success_callback)

tmr.start ()

启动或重新启动先前配置的计时器。

句法

tmr.start([id/ref])

参数

id / ref 定时器ID (0-6)或对象,OOAPI (— tmr.create())己过时

返回

true如果定时器启动,false错误

mytimer = tmr.create()

mytimer:register(5000tmr.ALARM_SINGLE, function() print(“hey there”) end) if not mytimer:start() then print(“uh oh”) end

也可以看看

•tmr.create()

•tmr.register()

•tmr.stop()

•tmr.unregister()

tmr.state ()

检査定时器的状态。

句法

tmr.state([id/ref])

参数

id / ref 定时器ID (0-6)或对象,OOAPI (t tmr.create())已过时

返回

(bool, int)或者 nil

如果指定的计时器己注册,则返回当前是否启动及其模式。如果定时器未被注册,nil则返 回。

mytimer = tmr.create()

print(mytimer:state()) – nil

mytimer:register(5000j tmr.ALARM_SINGLE, function() print(“hey there”) end) running, mode = mytimer:state()

print(“running: " … tostring(running)・・”, mode:"・・ mode) – running: false,

tmr.stop ()

停止正在运行的计时器,但并没有取消注册。停止的定时器可以重新启动tmr.startO。

句法

tmr.stop([id/ref])

参数

id / ref 定时器ID (0-6)或对象,OOAPI (t tmr.create())已过时

返回

true如果定时器被停止,false错误

mytimer = tmr.create()

if not mytimer:stop() then print(“timer not stopped, not registered?”) end

也可以看看

•tmr.register()

•tmr.stop()

•tmr.unregister()

tmr.suspend ()

荏起一个武装计时器。

-定时器在武装后可以随时暂停。

•如果定时器重新启动,tmr.start或tmr.alarm任何匹配的暂停定时器将被丢弃。

句法

tmr.suspend(id/ref)

参数

id/ref 定时器ID (0-6)或对象,00API (一 tmr,create())已过时

返回

true如果定时器恢复成功

–suspend timer mytimer mytimer:suspend()

–alternate metod

tmr.suspend(mytimer)

也可以看看

•tmr.suspend_all()

•tmr.resume()

•tmr.resume_all()

tmr.suspend_all ()

挂起所有目前的武装计时器。

。警告

该功能暂停所有活动定时器,包括由NodeMCU子系统或其他模块启动的任何活动定时 器。这可能会导致部分程序停止正常运行。使用此功能需自担风险!

句法

tmr.suspend_all()

参数

没有

返回

true如果定时器被成功暂停

文档》英语”模块»TSL2561

TSL2561模块

2015年8月22日 迈克尔卢卡斯 迈克尔卢卡斯 tsl2561.c

tsl2561.getrawchannels () 读取设备的2个传感器并返回其值。

tsl2561.getlux ()

从设备读取传感器值并返回计算的勒克斯值。

句法

tsl2561.getlux()

参数

没有

返回

-1UX以勒克斯计算的照度(IX)

-status指示成功或失败的值如下所述:

O tsl2561.TSL2561_0K

o tsl2561.TSL2561_ERR0R_I2CINIT 不能初始化『C 总线

o tsl2561.TSL2561_ERR0R_I2CBUSY『C 总线繁忙

o tsl2561.TSL2561_ERR0R_N0INIT在调用函数之前初始化『C总线

o tsl2561.TSL2561_ERR0R_LAST status = tsl2561.init(5, 6, tsl2561.ADDRESS_FL0AT, tsl2561.PACKAGE_T_FN_CL) if status == tsl2561.TSL2561_0K then

lux = tsl2561.getlux()

print(“Illuminance: .lux.lx”)

tsl2561.getrawchannels ()

读取设备的2个传感器并返回其值。

句法

tS12561.getrawchannels()

参数

没有

返回

-Ch0广谱传感器的价值

• chi红外传感器的价值

-status指示成功或失败的值如下所述:

0 tsl2561.TSL2561_0K

0 tsl2561.TSL2561_ERR0R_I2CINIT 不能初始化『C 总线

0 tsl2561.TSL2561_ERR0R_I2CBUSY『C 总线繁忙

o tsl2561.TSL2561_ERR0R_N0INIT在调用函数之前初始化『C总线

o tsl2561.TSL2561_ERR0R_LAST

status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL) if status == tsl2561.TSL2561_0K then

ch0, chi = ts12561.getrawchannels()

print(“Raw values:”…ch0, chi)

lux = tsl2561.getlux()

print(nIlluminance: n…lux.lx")

end

tsl2561.init ()

在引脚sd叩in&sclpin上初始化器件。还可以选择配置设备地址和包装。默认:地址引脚悬空 (0x39)和FN封装。

句法

tsl2561.init(sdapin, sclpinfaddress], package]])

参数

•sdapin器件l2Csda连接的引脚号

•sclpin器件『Cscl连接的引脚号

•address『C总线上器件的可选地址

O tsl2561.ADDRESS_GND

O tsl2561.ADDRESS_FL0AT (省略时默认)

O tsl2561.ADDRESS_VDD

・package可选设备届装类型(勒克斯计算略有差异)

o tsl2561.PACKAGE CS

O tsl2561. PACKAGE_T_FN_CL (曾略时默认)

返回

status指示成功或失败的值如下所述:

・tsl2561.TSL2561_0K

・tsl2561.TSL2561_ERR0R_I2CINIT 不能初始化『C 总线

・tsl2561.TSL2561_ERR0R_I2CBUSY『C 总线繁忙

・tsl2561.TSL2561_ERR0R_N0INIT在调用函数之前初始化1幻总线

・tsl2561.TSL2561_ERR0R_LAST

status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL) if status == ts12561.TSL2561_0K then

lux = tsl2561.getlux()

print(“Illuminance: “…lux…” lx”)

end

tsl2561.settiming ()

设置设备的积分时间和增益设置。何时tls2561.init()被调用,这些值默认为402毫秒,没 有增益。

句法

tsl2561.settiming(integralionj gain)

参数

・integration设置设备的积分时间。有效的选项是:

O tsl2561.INTEGRATIONTIME_13MS

o tsl2561.INTEGRATIONTIME_101MS

o tsl2561. INTEGRATIONTIME_402MS (省略时默认) -gain设置设备的增益。有效前选项是:

O tsl2561.GAIN_lX (省略时默认)

o tsl2561.GAIN_16X

返回

status指示成功或失败的值如下所述:

・tsl2561.TSL2561_0K

・tsl2561.TSL2561_ERR0R_I2CINIT 不能初始化『C 总线

・tsl2561.TSL2561_ERR0R_I2CBUSY『C 总线繁忙

・tsl2561.TSL2561_ERR0R_N0INIT在调用函数之前初始化『C总线

・tsl2561.TSL2561_ERR0R_LAST

status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL) if status == tsl2561.TSL2561_0K then

status = tsl2561.settiming(tsl2561.INTEGRATIONTIME_101MS, tsl2561.GAIN_16X) end if status == tsl2561.TSL2561_0K then lux = tsl2561.getlux() print(“Illuminance: “…lux…” lx”) end

文档》英语"模块》u8g

u8g模块

以来 起源质献者 维护者 资源

2015年1月30日 Oli Kraus, ArnimLauger 阿尼姆•拉格 u8glib

U8glib是在olikraus/u8glib开发的一个图形库,支持许多不同的显示。NodeMCU固件支持这些的一 个子集。

『C和SPI模式:

•shll06_128x64

•ssdl306-128x32,128x64和64x48变体

•ssd1309_128x64

•ssdl327_96x96^gr

•UC1611 - dogm240和 dogxl240变种

仅 SPI:

■ld7032_60x32

•pcd8544_84x48

•pcf8812,6x65

•ssdl322_nhd31oled - bw 和 gr变种

•ssdl325_nhd27oled - bw 和 gr变种

•ssdl351_128xl28-gh 和 hicolor 变体

•变体64128n, dogml28/132, lm6059/lm6063, C12832/C12864

•ucl601_cl28032

■UC1608 - 240x128和240x64变种

•ucl610_dogxll60 - bw 和 gr 变种

•ucl611 - dogm240和 dogxl240变种

•UC1701 - dogsl02 和 minil2864变种

该集成基于vl.19.1。

FC显示駆动器 通过FC初始化显示。

SPI显示驱动器 通过硬件SPI初始化显示。

u8g.fb_rle 初始化一个虚拟显示,提供运行长度编码帧缓冲区内容到一个 Lua回调。

常量 各种功能的常量。

u8g.disp:开始() 请参阅u8glib begin ()。

u8g.disp: drawBitmap () 在指定的x/y位置(位图的左上角)绘制位图。

u8g.disp: drawBox () 请参阅u8glib drawBox ()。

u8g.disp:画圆() 请参阅u8glibdrawCircle ()。

u8g.disp: drawDisc () 请参阅u8glibdrawDisc ()。

u8g.disp: drawEllipse () 请参阅u8glibdrawEllipse ()。

u8g.disp: drawFilledEllipse () 请参阅 u8glib drawFilledEllipse。

u8g.disp:并条机() 请参阅u8glibdrawFrame ()。

仁8gdsp“ drawHLine o

仁8gdsp “sdrawune o

仁8gdsp“ drawpixe-()

仁8gdsp“ drawRBox o

仁8gdsp“ drawRFrame o

仁8gdsp“ drawStr ()

U8gdsp” drawsrso ()

U8gdsp” drawSt:rl80 o

仁 8gdsp“ draws=r270 o

仁8gdsp“ drawwang-e o

仁8gdsp“ drawVLine ()

U8gdsp“ drawXBM o

U8gdsp“ 噩 lao

仁 8gdsp " gscoor-ndex ()

U8g.disp “ gsFontAscenfo

仁8gdsp" gaFOa-Descenf o

仁8gdsp" gaFonpmespacing ()

u8gdsp “sgs-HQghf o

驟囲 U8g=

驟囲 U8g=

驟沔 U8g=

ssKlu8g=

ssKlu8g=

ss囲 U8g=

ss*囲 U8g=

«斷囲 U8g=

bdrawHUne ()。

bdrawUne ()。

bdrawpixe-()。

bdrawRBox ()。

bdrawRFrame ()。

bdrawSfr ()。

bdrawswo。

bdrawsf「180 ()。

b draws=r270 ()。

瞬邑u8g=bdrawTriang-e ()。

«斷囲 U8g=bdrawvune ()0

Ba—TXBM^K。

ss燃圆 U8g=

*#図U8g=

*#図U8g=

*驟囲 U8g=

*驟囲 U8g=

bzhrsrpage ()。

bgsco-or-ndex ()。

b gsFontAscent: () o

b gffi-FOMDescea-() o

b gffi-FontL-nespac-ng ()。

詠驟囲U8g=

bgftHQghf ()。

u8g.disp:

setFontRefHeightExtendedlext () 请参阅u8glibsetFontRefHeightExtendedTert ()。

u8g.disp: setFontRefHeightText () 请参阅u8glibsetFontRefHeightlext ()。

u8g.disp: setRot90 () 请参阅u8glibsetRot90 ()。

u8g.disp: setRotl80 () 请参阅u8glibsetRotl80 ()。

u8g.disp: setRot270 () 请参阅u8glibsetRot270 ()。

u8g.disp: setScale2x2 () 请参阅u8glibsetScale2x2 ()。

u8g.disp: sleepOn () 请参阅u8glibsleepOn ()。

u8g.disp: sleepOff () 请参阅u8glibsleepOff ()。

u8g.disp: undoRotation () 请参阅u8glibundoRotation ()。

u8g.disp: undoScale () 请参阅u8glibundoScale ()。

未实现的函数

概观

PC连接

将SDA和SCL连接到任何空闲的GPlOo 例如。u8g^graphics_test.lua预计SDA = 5 (GPIO14)和SCL =6 (GPIO12) 0访问显示器之前,它们用于设置nodemeu的『C驱动程序:

sda = 5

scl = 6

i2c.setup(0j sda, scl, i2c.SLOW)

SPI连接

使用HSPI模块(更多信息),所以某些引脚是固定的:

•HSPICLK = GPIO14

•HSPIMOSI=GPIO13

•HSPIMISO = GPIO12 (未使用)

所有其他引脚可以分配给任何可用的GPIO:

•CS

•d/C

•RES (某些显示器可选)

另请参阅u8g_graphics_test.lua中的初始化序列:

spi.setup(l4 spi.MASTER, spi・CPOL_LOW, spi.CPHA_LOW, 8, 8)

库使用情况

这个库的Lua绑定紧跟着u8glib的面向对象的C ++API。基于u8g类,您可以为您的显示类型创建一 个对象。

SSD1306通过 FC:

sla = 0x3c

disp = u8g.ssdl306_128x64_i2c(sla)

SSD1306通过 SPI:

cs = 8 – GPIOlSj puLL-down 10k to GND

de = 4 – GPI02

res = 0 – GPI016J RES is optionaL YMMV

disp = u8g.ssdl306_128x64_hw_spi(csj de, res)

这个对象提供了所有的u8glib的方法来控制显示。再次,请参考uSg-^graphicS-testlua来了解Lua代码 如何实现这一点。访问u8glib主页获取技术细节。

显示器

可以启用支持u8glib的FC和HWSPIfi示。要访问相应的构造函数,可将所需的条目添加到app/ include/u8g_config.h 中的 FC 或 SPI 显示表中:

#define U8G_DISPLAY_TABLE_12C

U8G_DISPLAY_TABLE_ENTRY(ssdl306_128x64_i2c)

#define U8G_DISPLAY_TABLE_SPI

U8G_DISPLAY_TABLE_ENTRY(ssdl306_128x64_hw_spi) \ U8G_DISPLAY_TABLE_ENTRY(pcd8544_84x48_hw_spi) \ U8G_DISPLAY_TABLE_ENTRY(pcf8812_96x65_hw_spi)

字体

u8glib为小型显示器提供了广泛的字体。由于需要将其编译到固件映像中,因此您需要将它们包含 在app/ include/u8g_config.h中并重新编译。只需将所需的字体添加到字体表中:

#define U8G_F0NT_TABLE

U8G_FONT_TABLE_ENTRY(font_6xl0)

U8G_F0NT_TABLE_ENTRY(font_Chikita)

他们会像u8g.<font_name> Lua一样可用。

位图

位图和XBM以字符串形式提供给drawBitmapO和drawXBM。。这将卸载从u8g模块到二进制文件 的通用方法的所有数据处理。请参阅u8g_bitmaps.lua。与基于源代码的XBM包含在u8glib中相比, 它需要提供预编译的二进制文件。这可以通过Online-Utility的图像转换器在线执行:从XBM转换为 MONO格式,并使用nodemcu-uploader.py上传二进制结果。

PC显示驱动器

通过|幻初始化显示。

init序列会插入延迟以匹配显示规格。如果wiA服务被阻塞太久,这些可能会使整个系统不稳定。因 此,建议禁用这样的延迟,除非特定用例可以在初始化显示驱动程序时排除wifi通信量。

•U8g.shll06_128x64_i2c()

•U8g.ssdl306_128x32_i2c()

•U8g.ssdl306_128x64_i2c()

•U8g.ssdl306_64x48_i2c()

•U8g.ssdl309_128x64_i2c()

•u8g.ssdl327_96x96_gr_i2c()

•u8g.ucl611_dogm240_i2c()

•u8g.ucl611_dogxl240_i2c()

句法

u8g.ssdl306_128x64_i2c(address[j use_delay])

参数

•address FC显示的从地址

・use.delay ‘1’:在init序列中使用延退,如果省略,则使用’0’

返回

U8g显不对冢

sda = 5

scl = 6

i2c.setup(0j sda, scl, i2c.SLOW)

sla = 0x3c

disp = u8g.ssdl306_128x64_i2c(sla)

也可以看看

SPI显示驱动器

SPI显示驱动器

通过硬件spi初始化显示。

init序列会插入延迟以匹配显示规格。如果wifi服务被阻塞太久,这些可能会使整个系统不稳定。因 此,建议禁用这样的延迟,除非特定用例可以在初始化显示驱动程序时排除wifi通信量。

• u8g.ld7032_60x32_hw_spi()

. u8g.pcd8544_84x48_hw_spi()

u8g.pcf8812_96x65_hw_spi()

■ u8g.shll06_128x64_hw_spi()

■ u8g.ssdl306_128x32_hw_spi()

. u8g.SSdl306_128x64_hw_Spi()

. u8g.ssdl306_64x48_hw_spi(f]

■ u8g.ssdl309_128x64_hw_spi()|

. u8g.ssdl322_nhd31oled_bw_hw_spi()

• u8g.ssdl322_nhd31oled_gr_hw_spi()

. u8g.ssdl325_nhd27oled_bw_hw_spi()

u8g.ssdl325_nhd27oled_gr_hw_spi()

■ u8g.ssdl327_96x96_gr_hw_spi()

• U8g.ssdl351_128xl28_332_hw_spi()

U8g.ssdl351_128xl28gh_332_hw_spi()

■ u8g.ssdl351_128xl28_hicolor_hw_spi()

■ u8g.ssdl351_128xl28gh_hicolor_hw_spi()

. u8g.ssdl353_160xl28_332_hw_spi()

• u8g.ssdl353_160xl28_hicolor_hw_spi()

. u8g.st7565_64128n_hw_spi()

■ u8g.st7565_dogml28_hw_spi()

• u8g.st7565_dogml32_hw_spi()]

• u8g.st7565_lm6059_hw_spi()

. u8g.st7565_lm6063_hw_spi()

■ u8g.st7565_nhd_cl2832_hw_spi()

■ u8g.st7565_nhd_cl2864_hw_spi()

. u8g.ucl601_cl28032_hw_spi()

U8g.ucl608_240xl28_hw_spi()

■ u8g・ UC1608_240x64_hw_spi(f]

■ u8g.ucl610_dogxll60_bw_hw_spi()

. u8g.ucl610_dogxll60_gr_hw_spi()

• u8g. ucl611_dogm240_hw_spi()_|

u8g.ucl611_dogxl240_hw_spi()

. u8g.ucl701_dogsl02_hw_spi()

• u8g.ucl701_minil2864_hw_spi()

句法

u8g.ssdl306_128x64_spi(csJ dc[j res[j use_delay]])

参数

•cs GHIU5I脚用于/Q>

•de GPIO引脚用于DC

•res /RES的GPIO引脚,省略时无

•use_delay 1’:在init序列中使用延迟,如果省略,则使用。

返回

u8g显示对象

spi.set叩(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)

cs = 8 – GPIOlSj pull-down 10k to GND

de = 4 – GPIO2

res = 0 – GPI016, RES is optionaL YMMV

disp = u8g.ssdl306_128x64_hw_spi(csj de, res)

也可以看看

FC显示驱动器

u8g.fb_rle

初始化一个虚拟显示,提供运行长度编码帧缓冲区内容到一个Lua回调。

回调函数可以用来逐行处理framebuffer。它被nil称为参数,用于指示新帧的开始,或者用包含 具有运行长度编码的帧缓冲区的行的字符串。字符串中的第一个字节指定了多少对(x, len),而 每对定义了一系列亮点像素的开始(最左边的x坐标)和长度。该行中的所有其他像素都是黑色的。

n = struct.unpack(“B"J rle_line)

print(n…” pairs")

for i = 0^n-1 do

print(string.format(" x: %d len: %d", struct.unpack(“BB”, rle_linej 1+1 + i2))) end

句法

u8g.fb_rle(cb_frij width, height)

参数

•cb_fn([rle_line])回调函数。rle_line是一个包含运行长度编码的帧缓冲行的字符串,或 者nil指示帧的开始。

・width的显示。必须是8的倍数,小于或等于248。

•height的显示。必须是8的倍数,小于或等于248。

返回

u8g显示对象

常量

各种功能的常量。

u8g.DRAW_UPPER_RIGHT , u8g.DRAW_UPPER_LEFT , u8g.DRAW_LOWER_RIGHT , u8g.DRAW_LOWER_LEFT , u8g.M0DE_BW , u8g.M0DE_GRAY2BIT

u8g.font_6xl0 ,…

u8g.disp子模块

u8g.disp: drawBitmap ()

在指定的x/y位置(位图的左上角)绘制位图。位图的一部分可能在显示边界之外。位图由数组位 图指定。清除的位表示:不要绘制像素。数组内的一个位表示:用当前颜色索引写入像素。对于单 色显示,颜色索引0通常会清除一个像素,颜色索引1将设置一个像素。

句法

disp:drawBitmap(X, y, ent, h, bitmap)

参数

・X X位置(位图的左边位置)

・y Y位置(位图的上部位置)

・ent位图在水平方向上的字节数。位图的宽度是ent8。

-h位图的高度

・bitmap位图数据以字符串形式提供

返回

nil

也可以看看

•u8glibdrawBitmap ()

•lua_examples / u8glib / u8g_bitmaps.lua

•u8g.disp: drawXBM ()

uSg.disp: drawBox ()

请参阅u8glibdrawBox ()。

u8g.disp:画圆()

请参阅u8glibdrawCircle ()。

u8g.disp: drawDisc ()

请参阅u8glibdrawDisc ()。

u8g.disp: drawEllipse ()

请参阅u8glibdrawEllipse ()。

u8g.disp: drawFilledEllipse ()

请参阅 u8glib drawFilledEllipseo

u8g.disp:并条机()

请参阅u8glibdrawFrame ()。

u8g.disp: drawHLine ()

请参阅u8glib drawHLine ()。

u8g.disp: 的 drawLine ()

请参阅u8glibdrawLine ()。

u8g.disp: drawPixel ()

请参阅u8glibdrawPixel ()。

uSg.disp: drawRBox ()

请参阅u8glibdrawRBox ()。

u8g.disp: drawRFrame ()

请参阅u8glib drawRFrame ()。

u8g.disp: drawStr ()

请参阅u8glibdrawStr ()。

u8g.disp: drawStr90 ()

请参阅 u8glib drawStr90o

u8g.disp: drawStrl80 ()

请参阅u8glibdrawStrl8O ()。

u8g.disp: drawStr270 ()

请参阅u8glibdrawStr270 ()。

u8g.disp: drawTriangle ()

参见u8glibdrawTriangle ()。

u8g.disp: drawVLine ()

请参阅u8glibdrawVLine ()。

uSg.disp: drawXBM ()

绘制一个XBM位图。位置(x, y)是位图的左上角。XBM包含单色的1位位图。此过程仅绘制像素 值1.当前颜色索引用于绘制(请参阅setColorlndex)。值为0的像素不绘制(透明)。

位图和XBM以字符串形式提供给drawBitmap()和drawXBM。。这将卸载从u8g模块到二进制文件 的通用方法的所有数据处理。与基于源代码的XBM包含在u8glib中相比,它需要提供预编译的二进 制文件。这可以使用Online-Utility的图像转换器在线执行:从XBM转换为MONO格式,并使 用 nodemcu-uploader.py 或 ESPIorer上传二进制结果。

句法

disp:drawXBM(x, y, w, h, bitmap)

参数

・X X位置(位图的左边位置)

・y 丫位置(位图的上部位置)

・w位图的宽度

•h但倒旳咼度

•bitmap XBM数据以字符串形式提供

返回

nil

也可以看看

•u8glibdrawXBM ()

•lua_examples / u8glib / u8g_bitmaps.lua

•u8g.disp: drawBitmap ()

u8g.disp:第一页()

请参阅u8glibfirstPage ()。

uSg.disp: getColorlndex ()

请参阅u8glibgetColorlndex ()。

u8g.disp: getFontAscent ()

请参阅u8glibgetFontAscent () o

u8g.disp: getFontDescent ()

请参阅u8glibgetFontDescent ()。

u8g.disp: getFontLineSpacing ()

请参阅 u8glib get Font LineSpacing ()。

u8g.disp:的 getHeight ()

请参阅u8glibgetHeight ()。

u8g.disp:获取模式()

请参阅u8glibgetMode ()。

u8g.disp:的 getWidth ()

请参阅u8glibgetWidth ()。

u8g.disp: getStrWidth ()

请参阅 u8glib getStrWidth o

u8g.disp:下一页()

请参阅u8glib nextPage ()。

u8g.disp: setColorlndex ()

请参阅u8glibsetColorlndex ()。

uSa.disn: setcontrast ()

WllubgHDsetcontrast o 。

u8g.disp: setDefaultBackgroundColor ()

请参阅u8glibsetDefaultBackgroundColor ()。

uSg.disp: setDefaultForegroundColor ()

请参阅u8glibsetDefaultForegroundColor ()。

u8g.disp: setfont程序()

u8glib为小型显示器提供了广泛的字体。由于需要将它们编译到固件映像中,所以需要将它们包含 进来app/include/u8g_config.h并重新编译。只需将所需的字体添加到字体表中:

#define U8G_F0NT_TABLE

U8G_FONT_TABLE_ENTRY(font_6xl0)

U8G_FONT_TABLE_ENTRY(font_chikita)

他们会像u8g.<font_name> Lua一样可用。

句法

disp:setFont(font)

参数

font常量来标识预编译的字体

返回

disp:setFont(u8g.font_6xl0)

也可以看看

• u8glibsetFont ()

uSg.disp: setFontLineSpacingFactor ()

请参阅u8glibsetFontLineSpacingFactor ()。

uSg.disp: setFontPosBaseline ()

请参阅u8glibsetFontPosBaseline ()。

uSg.disp: setFontPosBottom ()

请参阅u8glibsetFontPosBottom ()。

uSg.disp: setFontPosCenter ()

请参阅u8glibsetFontPosCenter ()。

uSg.disp: setFontPosTop ()

请参阅u8glib setFontPosTop ()。

u8g.disp: setFontRefHeightAll ()

请参阅u8glibsetFontRefHeightAll ()。

u8g.disp: setFontRefHeightExtendedText ()

请参阅u8glibsetFontRefHeightExtendedText ()。

uSg.disp: setFontRefHeightText ()

请参阅u8glibsetFontRefHeightText ()。

u8g.disp: setRot90 ()

请参阅u8glibsetRot90 ()。

u8g.disp: setRotl80 ()

请参阅u8glibsetRot!80 () □

u8g.disp: setRot270 ()

请参阅u8glibsetRot270 ()。

u8g.disp: setScale2x2 ()

请参阅u8glibsetScale2x2 ()。

u8g.disp: sleepOn ()

请参阅u8glibsleepOn ()。

u8g.disp: sleepOff ()

请参阅u8glib sleepOff ()。

u8g.disp: undoRotation ()

请参阅u8glibundoRotation ()。

uSg.disp: undoScale ()

请参阅u8glibundoScale ()。

未实现的函数

•游标处理

o disableCursor ()

o enableCursor ()

o setCursorColor ()

□ setCursorFont ()

o setCursorPos ()

o setCursorStyle ()

• 一般功能

o setPrintPos ()

o setHardwareBackup ()

o setRGB ()

o setDefaultMidColor ()

文档》英语"模块+UART

UART模块

以来 起源/贡献者 维护者 资源

情节中字 Zeroday Zeroday uart.c

的UART (通用异步接收器/发送器)模块允许对UART串行端口的配置和通信。

uart的默认设置由构建时间设置控制。默认值是115,200bpso此外,在平台启动后的前两分钟,自 动波特率检测功能将启用。一旦收到几个字符,这将导致切换到正确的波特率。自动波特率检测 在uart.setup被调用时被禁用。

❶重要

尽管NodeMCU有两个UART (0和1),但UART 1不能接收数据,因此只能传输。

uartalt () 更改UART引脚分配。

uarton () 设置回调函数来处理UART事件。

uartsetup () (重新)配置UART的通信参数。

uartgetconfig () 返回UART的当前配置参数。

uart.write () 将字符串或字节写入UART。

uart.alt ()

更改UART引脚分配。

句法

uart.alt(on)

参数

・0为标准引脚

-1使用备用引脚GPIO13和GPIO15

返回

nil

uart.on ()

设置回调函数来处理UART事件。

目前只支持“数据"事件。

❶注意

由于ESP8266的限制,只有UART0才能接收数据。

uart.on(method4 [number/end_char]4 [function], [run_input])

参数

・method “数据”,数据已经在UART上接收到

•number/end_char

。如果n = 0,将接收缓冲区中的每个字符

o如果n<255,则在接收到n个字符时调用回调

。如果一个字符“c”,则在遇到V时将调用该回调,或者最大接收n = 255

•function回调函数,事件“数据”有这样一个回调:function(data) end

•run_input。或1.如果0,从UART输入不会进入Lua解释器,可以接受二进制数据。如果1,从 UA2输入将进入Lua解释器,然后运行。

要注销回调,只提供“数据”参数。

返回

nil

–when 4 chars is received. uart.on(“data”, 4,

function(data) print(“receive from uart:”, data) if data==“quit” then

uart.on(“data”) – unregister callback function end end, 0)

–when ‘\r’ is received, uart.on("data\ ”

function(data) print(“receive from uart:”, data) if data==“quit\r” then

uart.on(“data”) – unregister catLback function end end, 0)

uart.setup ()

(重新)配置UART的通信参数。

❶注意

如果此功能在接收过程中重新配置UART,则发送到UART的字节可能会丢失。

句法

uart.setup(id4 baud, databits, parity, stopbits[4 echo])

参数

•id UARTID (0或 1) o

•baud

300,600,1200,2400,4800,9600,19200,31250,38400,57600,74880,115200,230400,256000,460800,921600,18432

中的一个

•databits 5, 6, 7, 8之一

•parity uart.PARITY_NONE , uart.PARITY_0DD 或 uart.PARITY_EVEN

•stopbits uart.STOPBITS_l , uart.ST0PBITS_l_5 或 uart.ST0PBITS_2

-echo如果为0,则禁用回声,否则启用回声(如果省略则默认)

返回

配置的波特率(数量)

–configure for 9600, 8N1, with echo

uart.setup(0, 96。。, 8, uart.PARITY_NONE, uart.STOPBITS_1, 1)

uart.getconfig ()

返回UART的当前配置参数。

句法

uart.getconfig(id)

参数

•id UARTID (。或 1)。

返回

四个值如下:

•baud

300,600,1200,2400,4800,9600,19200,38400,57600,74880,115200,230400,256000,460800,921600,1843200,368<

中的一个

•databits 5, 6, 7, 8之一

•parity uart.PARITY_NONE , uart.PARITY_ODD 或 uart.PARITY_EVEN

•stopbits uart.STOPBITS_l , uart.ST0PBITS_l_5 或 uart.STOPBITS_2

print (uart.getconfig(0))

–prints 9600 801 for 96。。, 8N1

uart.write ()

将字符串或字节写入UART。

句法

uart.write(idj datal [, data24 …])

参数

・ id UARTID (0或 1) o

・datal字符串或字节通过UART发送

返回

nil

uart.write(0, “Hello, world\n”)

文档》英语”模块》UCG

ucg模块

以来 起源/贡献者 维护者 资源

2015年8月5日 Oli Kraus, ArnimLauger 阿尼姆•拉格 ucglib

Ucglib是在olikraus/ucglib开发的图形库,支持彩色TFT显示。NodeMCU固件支持以下部

分:

-ILI9163

-ILI9341

-PCF8833

-SEPS225

-SSD1331

-SSD1351

-ST7735

这个整合基于vl.3.3。

概观

显示驱动 通过硬件SPI初始化显示。

常量 各种功能的常量。

ucg.disp:开始() 请参阅ucglibbegin ()。

ucg.disp: clearScreen () 请参阅ucglibclearScreen ()。

ucg.disp: draw90Line () 参见ucglibdraw90Line ()。

ucg.disp: drawBox () 参见ucglibdrawBox ()。

ucg.disp:画圆() 参见ucglibdrawCircle ()。

ucg.disp: drawDisc () 参见ucglib的drawDisc ()。

ucg.disp:并条机() 请参阅ucglibdrawFrame ()。

ucg.disp: drawGlyph () 参见ucglibdrawGlyph ()。

ucg.disp: drawGradientBox () 参见ucglibdrawGradientBox ()。

ucg.disp: drawGradientLine () 参见ucglibdrawGradientLine ()。

ucg.disp: drawHLine () 参见ucglibdrawHLine ()。

ucg.disp:的drawLine () 参见ucglibdrawLine ()。

ucg.disp: drawPixel () 请参阅ucglibdrawPixel ()。

ucg.disp: drawRBox () 参见ucglibdrawRBox ()。

ucg.disp: drawRFrame () 参见ucglibdrawRFrame ()。

ucg.disp: drawString之 () 请参阅ucglibdrawString ()。

ucg.disp: drawfetragon () 参见ucglibdrawRtragon ()。

ucg.disp: drawTriangle () 参见ucglibdrawTriangle ()。

ucg.disp: drawVLine () 参见ucglibdrawVIine ()。

ucg.disp: getFontAscent () 请参阅ucglibgetFontAscent ()。

ucg.disp: getFontDescent () 请参阅ucglibgetFontDescent ()。

ucg.disp: 的getHeight () 请参阅ucglibgetHeight () o

ucg.disp: getStrWidth () 请参阅ucglibgetStrWidth ()。

ucg.disp:的getWidth () 请参阅ucglibgetWidth ()。

ucg.disp:打印() 请参阅ucglibprint ()。

ucg.disp: setClipRange () 请参阅ucglibsetClipRange ()。

ucg.disp:的setColor () 请参阅ucglibsetColor ()。

ucg.disp: setfont程序() ucglib为小型显示器提供了广泛的字体。

ucg.disp: setFontMode () 请参阅ucglibsetFontMode ()。

ucg.disp: setFontPosBaseline () 请参阅ucglibsetFontPosBaseline ()。

ucg.disp: setFontPosBottom () 请参阅ucglibsetFontPosBottom () □

ucg.disp: setFontPosCenter () 请参阅ucglibsetFontPosCenter ()。

ucg.disp: setFontPoslbp () 请参阅ucglibsetFontPoslbp ()。

ucg.disp: setMaxClipRange () 请参阅ucglibsetMaxClipRange ()。

ucg.disp: setPrintDir () 请参阅ucglibsetPrintDir ()。

ucg.disp: setPrintPos () 请参阅ucglibsetPrintPos ()。

ucg.disp: setRotate90 () 请参阅ucglibsetRotate90 ()。

ucg.disp: setRotatel80 () 请参阅ucglibsetRotate!80 ()。

ucg.disp: setRotate270 () 请参阅ucglibsetRotate270 ()。

ucg.disp: setScale2x2 () 请参阅ucglibsetScale2x2 ()。

ucg.disp: undoClipRange ()

请参阅ucglibundoClipRange ()。

概观

SPI连接

使用HSPI模块(更多信息),所以某些引脚是固定的:

•HSPICLK = GPIO14

•HSPI MOSI=GPIO13

-HSPI MISO = GPIO12 (未使用) 所有其他引脚可以分配给任何可用的GPIO:

-cs

-d/C

-RES (某些显示器可选) 也请参考例如在GraphicslestJua中的初始化顺序:

spi.setup(l, spi.MASTER, spi・CPOL_LO虬 spi・CPHA_LO虬 8, 8)

库使用情况

Lua绑定这个库紧跟着ucglib面向对象的C++APIo根据ucg类,为您的显示类型创建一个对

通过 SPI 的 ILI9341:

cs = 8 – GPIOlSj puLL-down 10k to GND de = 4 – GPI02

res = 0 – GPIOlGj RES is optionaL YMMV

disp = ucg.ili9341_18x240x320_hw_spi(cs, de, res)

这个对象提供了所有的ucglib方法来控制显示。再次参考Graphicslestlua来获得一个印象如何 用Lua代码实现。访问ucglib主页获取技术细节。

显示器

要访问显示构造函数,将所需的条目添加到app / include/ ucg_config.h中的显示表中:

#define UCG_DISPLAY_TABLE

UCG_DISPLAY_TABLE_ENTRY(ili9341_18x240x320_hw_spi, ucg_dev_ili9341_18x240x32l UCG_DISPLAY_TABLE_ENTRY(st7735_18xl28xl60_hw_spiJ ucg_dev_st7735_18xl28xl60,

字体

ucglib为小型显示器提供丁厂泛旳子体。由十需要将其编详到固件映傢中,因此您需要将它们 包含在app / include / ucg_config.h中并重新编译。只需将所需的字体添加到字体表中:

他们会像ucg.<font_name> Lua—样可用。

显示驱动

通过硬件SPI初始化显示。

・ili9163_18xl28xl28_hw_spi()

・ili9341_18x240x320_hw_spi()

・pcf8833_16xl32xl32_hw_spi()

・seps225_16xl28xl28_uvis_hw_spi()

・ssdl351_18xl28xl28_hw_spi()

・ssdl351_18xl28xl28_ft_hw_spi()

・ssdl331_18x96x64_uvis_hw_spi()

・St7735_18xl28xl60_hw_spi()

句法

ucg.st7735_18xl28xl60_hw_spi(csj de[, res])

参数

-cs GPI。引脚用于/CS

-de GPI。引脚用于DC

-res GPIO引脚用于/RES (可选)

返回

ucg显示对象

spi.setup(l, spi.MASTER, spi・CPOL_LOW, spi.CPHA_LOWJ spi.DATABITS_8, 0) cs = 8 – GPI015j puLL-down 10k to GND

de = 4 – GPI02

res = 0 – GPI016J RES is optionaL YMMV

disp = ucg.st7735_18xl28xl60_hw_spi(cs, de, res)

常量

各种功能的常量。 ucg.FONT_MODE_TRANSPARENT , ucg.FONT_MODE_SOLID , ucg.DRAW_UPPER_RIGHT , ucg.DRAW_UPPER_LEFT , ucg.DRAW_LOWER_RIGHT , ucg.DRAW_LOWER_LEFT , ucg.DRAW_ALL ucg.font_7xl3B_tr ,…

ucg.disp子模块

ucg.disp:开始()

请参阅ucglib begin ()。

ucg.disp: clearScreen ()

请参阅ucglib clearScreen ()。

ucg.disp: draw90Line ()

参见ucglib draw90Line ()。

ucg.disp: drawBox ()

参见ucglib drawBox ()。

ucg.disp:画圆()

参见ucglib drawCircle ()。

ucg.disp: drawDisc ()

参见ucglib的drawDisc ()。

ucg.disp:并条机()

请参阅ucglibdrawFrame ()。

ucg.disp: drawGlyph ()

参见ucglib drawGlyph ()。

ucg.disp: drawGradientBox ()

参见ucglibdrawGradientBox ()。

ucg.disp: drawGradientLine ()

参见ucglibdrawGradientLine ()。

ucg.disp: drawHLine ()

参见ucglib drawHLine ()。

ucg.disp: 的drawLine ()

参见ucglib drawLine ()。

ucg.disp: drawPixel ()

请参阅ucglib drawPixel ()。

ucg.disp: drawRBox ()

参见ucglib drawRBox ()。

ucg.disp: drawRFrame ()

参见ucglibdrawRFrame ()。

ucg.disp: drawstring之 ()

请参阅ucglib drawString ()。

ucg.disp: drawTetragon ()

参见ucglib drawlbtragon ()。

ucg.disp: drawTriangle ()

参见ucglib drawTriangle ()。

ucg.disp: drawVLine ()

参见ucglibdrawVIine ()。

ucg.disp: getFontAscent ()

请参阅ucglib getFontAscent ()。

ucg.disp: getFontDescent ()

请参阅ucglibgetFontDescent ()。

ucg.disp: 的getHeight ()

请参阅ucglibgetHeight ()。

ucg.disp: getStrWidth ()

请参阅ucglibgetStrWidth ()。

ucg.disp:的getWidth ()

请参阅ucglibgetWidth ()。

ucg.disp:打印()

请参阅ucglib print ()。

ucg.disp: setClipRange ()

请参阅ucglib setClipRange ()。

ucg.disp: 的setColor ()

请参阅ucglib setColor ()。

ucg.disp: setfont程序()

ucglib为小型显示器提供了广泛的字体。由于需要将其编译到固件映像中,因此您需要将它们 包含在app / include / ucg_config.h中并重新编译。只需将所需的字体添加到字体表中:

#define UCG_FONT_TABLE

UCG_FONT_TABLE_ENTRY(font. _7xl3B_tr)

UCG_FONT_TABLE_ENTRY(font helvB12_hr)

UCG_FONT_TABLE_ENTRY(font helvB18_hr)

UCG_FONT_TABLE_ENTRY(font UCG_FONT_TABLE_ENTRY(font ncenR12_tr) ncenR14_hr) \

他们会像ucg.<font_name> Lua一样可用。

句法

disp:setFont(font)

参数

font不断地识别预编译的字体

disp:setFont(ucg.font_7xl3B_tr)

也可以看看

ucglib setFont ()

ucg.disp: setFontMode ()

请参阅ucglib setFontMode ()。

ucg.disp: setFontPosBaseline ()

请参阅ucglibsetFontPosBaseline ()。

ucg.disp: setFontPosBottom ()

请参阅ucglibsetFontPosBottom ()。

ucg.disp: setFontPosCenter ()

请参阅ucglib setFontPosCenter ()。

ucg.disp: setFontPosTop ()

请参阅ucglibsetFontPosTop ()。

ucg.disp: setMaxClipRange ()

请参阅ucglib setMaxClipRange ()。

ucg.disp: setPrintDir ()

请参阅ucglib setPrintDir ()。

ucg.disp: setPrintPos ()

请参阅ucglib setPrintPos ()。

ucg.disp: setRotate90 ()

请参阅ucglibsetRotate90 ()。

ucg.disp: setRotatel80 ()

I書闾I moliX ca+Dc+o+al GC

ucg.disp: setRotate270 ()

请参阅ucglibsetRotate270 ()。

ucg.disp: setScale2x2 ()

请参阅ucglib setScale2x2 ()。

ucg.disp: undoClipRange ()

请参阅ucglib undoClipRange ()。

ucg.disp: undoRotate ()

请参阅ucglibundoRotate ()。

ucg.disp: undoScale ()

请参阅ucglib undoScale ()。

文档»英语"模块》的WebSocket

Websocket 模块

以来 起源/贡献者 维护者 资源

2016年8月2日 路易斯•丰塞卡 路易斯•丰塞卡 websocketc

websocket客户端模块,实现RFC6455 (版本13),并提供一个简单的接口来发送和接收消 息。

该实现支持碎片消息,自动响应ping请求,并定期ping如果服务器不通信。

SSL/TLS 支持

注意网络模块中记录的约束条件。

websocket.createC 1 ient () 创建一个新的websocket客户端。

websocket.client:关闭() 关闭websocket连接。

websocketclient:配置 (PARAMS) 配置websocket客户端实例。

websocket.client: connect ()的 尝试建立一个websocket连接至!|给定的U RL。

websocketclient: 上() 注册回调函数来处理websockets事件(每个事件类型只能注册_ 个处理函数)。

websocketxlient:发送() 通过websocket连接发送消息。

websocket.createClient ()

创建一个新的websocket客户端。这个客户端应该存储在一个变量中,并提供所有的功能来处 理连接。

当连接关闭时,同一个客户端仍然可以被重用-回调函数被保留-你可以再次连接到任何服务 器。

在处理客户之前,一定要打电话ws:close() o

句法

websocket.createClient()

参数

没有

返回

websocketclient local ws = websocket.cneateClient()

ws:close()

ws = nil

websocket.client: 关闭()

关闭websocket连接。客户端发出一个关闭的框架,并试图优雅地关闭WebSocket。如果服务 器没有回复,连接会在一个小超时后终止。

即使WebSocket没有连接,也可以调用该函数。

在处理对websocket客户端的引用之前,必须始终调用此函数。

句法

websocket:close()

参数

没有

返回

nil ws = websocket.createClient() ws:close() ws:close() ― nothing wiLL happen

ws = nil – fuLLy dispose the cLient as Lua wiLL now gc it

websocket.client:配置(PARAMS)

配置websocket客户端实例。

句法

websocket:config(params)

参数

• params表配置参数。以下键被识别:

・headers影响每个请求的额外请求标头表

返回

nil

ws = websocket. created ient()

ws:config({headers=([‘User-Agent’]=‘NodeMCU’}})

websocket.client: connect ()的

尝试建立一个websocket连接到给定的U RL。

句法

websocket:connect(url)

参数

・ url websocket的URL。

返回

nil

ws = websocket. created ient()

ws:connect(‘ws://echo.websocket.org’)

如果失败,错误将通过 websocket:on(“close”, handler)。

websocket.client:上()

注册回调函数来处Swebsockets事件(每个事件类型只能注册一个处理函数)。

句法

websocket:on(eventName, function(ws,・・・))

参数

-eventName websocket事件的类型来注册回调函数。这些事件 是: connection , receive 和 close 。

・function(ws, …)回调函数。函数的第一个参数始终是websocketclient。其他参数是 必需的,具体取决于事件类型。看到更多的细节的例子。如果nil以前配置的回调未注 rm

zKl。

local ws = websocket.createdient()

ws:on(“connection”, function(ws)

print(‘got ws connection’)

end)

ws:on("receive"4 function(, msg, opcode)

print('got message: 'msg, opcode) – opcode is 1 for text message, 2 for binai end) ws:on(“close”, function(> status)

print(‘connection closed’, status)

ws = nil – required to Lua gc the websocket cLient end)

ws:connect(‘ws://echo.websocket.org’)

请注意,如果发生任何错误,也会触发关闭回调。

关闭的状态码,如果不是0,则表示错误,如下表所述。

状态码 说明

0 用户请求关闭或连接已正常终止

-1 无法从URL中提取协议

-2 主机名太大(>256个字符)

-3 无效的端口号(必须〉0M<= 65535)

-4 无法提取主机名

-5 DNS无法査找主机名

-6 服务器请求终止

-7 服务器发送无效的握手HTTP响应(即服务器发送了一个错误的密钥)

-8 到-14 无法分配内存来接收消息

-15 服务器没有正确地遵循FIN位协议

-16 无法分配内存来发送消息

-17 服务器不切换协议

-18 连接超时

-19 服务器不响应健康检查或通信

-99 到-999 那么不好的事发生了

websocket.client:发送()

通过websocket连接发送消息。

websocket:send(message, opcode)

参数

•message要发送的数据。

•opcode可选地设置操作码(默认:1,短信) 返回

nil或者如果套接字未连接,则发生错误

ws = websocket. created ient()

ws:on(“connection”, function()

ws:send(‘hello!’)

end)

ws:connect('ws://echo.websocket.org1)

文档》英语”模块》无线上网

WiFi模块

以来 起源/贡献者 维护者 资源

2015 年 5 月 12 H Zeroday dnc40085 wifi.c

。重要

WiFi子系统由必须定期运行的后台任务维护。任何花费超过15毫秒(毫秒)的功能或任务 都可能导致WiFi子系统崩溃。为了避免这些潜在的崩溃,建议WiFi子系统在执行超过 15ms指南的任何任务或功能之前,使用wifi.suspend ()挂起。

NodeMCU WiFi控制分布在多个表中:

-Wifi用于整体WiFi配置

•wifi.sta用于电台模式功能

-wifi.ap用于无线接入点(WAP或简称AP)功能

•wifi.ap.dhcp用于DHCP服务器控制

•wifi.eventmon为wifi事件监视器

wifi.getchannel () 获取当前的WiFi频道。

wifi.getdefauItmode () 获取默认的WiF臊作模式。

wifi.getmode () 获取WiFi操作模式。

wifi.getphymode () 获取WiFi物理模式。

wifi.nullmodesleep () 配置WiFi是否自动进入NULL_MODE睡眠状态。

wifi.resume () 从挂起状态唤醒Wi Fi或取消挂起的Wi Fi挂起。

wifi.setmode () 配置WiFi模式使用。

wifi.setphymode () 设置WiFi物理模式。

wifi.startsmart () 开始自动配置,如果成功自动设置SSID和密码。

wifi.stopsmart () 停止智能配置过程。

wifi.suspend () 挂起Wifi以减少电流消耗。

wifi.sta.autoconnect () 自动以站模式连接到AP。

wifi.sta.changeap () 从wifi返回列表中选择接入点。

wifi.sta.clearconfig () 清除当前保存的WiFi站点配置,从闪存中清除。

wifi.sta.config () 设置WiFi站点配置。

wifi.sta.connect () 连接到站模式下配置的AP。

wifi.sta.disconnect () 在工作站模式下与AP断开连接。

wifi.sta.getap () 将AP列表作为Lua表扫描回调函数。

wifi.sta.getapindex () 获取存储在AP缓存中的当前接入点的索引。

wifi.sta.getapinfo () 获取ESP8266站点缓存的AP信息。

wifi.sta.getbroadcast () 获取站模式下的广播地址。

wifi.sta.getconfig () 获取WiFi站点配置。

wifi.sta.getdefaultconfig () 获取存储在闪存中的默认WiFi站点配置。

wifi.sta.gethostname () 获取当前的站点主机名。

wifi.sta.getip () 获取站模式下的IP地址,网络掩码和网关地址。

wifi.sta.getmac () 获取站模式下的MAC地址。

wifi.sta.getrssi () 获取ESP8266所连接的接入点的RSSI (接收信号强度指示符)。

wifi.sta.setaplimit () 设置存储在闪存中的最大接入点数量。

wifi.sta.sethostname () 设置站点主机名。

wifi.sta.setip () 在工作站模式下设置IP地址,网络掩码,网关地址。

wifi.sta.setmac () 在工作站模式下设置MAC地址。

wifi.sta.sleeptype () 在连接到接入点时配置要使用的WiFi调制解调器的睡眠类型。

wifi.sta.status () 获取工作站模式下的当前状态。

wifi.ap.config () 在AP模式下设置SSID和密码。

wifi.ap.deauth () 通过发送相应的IEEE802,从ESP接入点中删除(强制删除)客户 端。

wifi.ap.getbroadcast () 获取AP模式下的广播地址。

wifi.ap.getclient () 获取以AP模式连接到设备的客户端表。

wifi.ap.getconfig () 获取当前的SoftAP配置。

wifi.ap.getdefaultconfig () 获取存储在闪存中的默认SoftAP配置。

wifi.ap.getip () 在AP模式下获取IP地址,网络掩码和网关。

wifi.ap.getmac () 在AP模式下获取MAC地址。

wifi.ap.setip () 在AP模式下设置IP地址,网络掩码和网关地址。

wifi.ap.setmac () 在AP模式下设置MAC地址。

wifi.ap.dhcp.config () 配置DHCP服务。

wifi.ap.dhcp.start () 启动DHCP服务。

wifi.ap.dhcp.stop () 停止DHCP服务。

wifi.eventmon.register () 注册廊消注册Wi Fi事件监视器的回调。

wifi.eventmon.unregister () 取消注册WiFi事件监视器的回调。

wifi.eventmon. reason 包含断开原因的表。

wifi.getchannel ()

获取当前的WiFi频道。

句法

wifi.getchannel()

参数

nil

返回

目前的WiFi频道

wifi.getdefaultmode ()

获取默认的WiFi操作模式。

句法

wifi.getdefaultmode()

参数

nil

返回

在WiFi模式,为一体 wifi.STATION , wifi.SOFTAP , wifi.STATIONAP 或 wifi.NULLMODE 常数。

也可以看看

wifi . getmode() wifi.setmode()

wifi.getmode ()

获取WiFi操作模式。

句法

wifi.getmode()

参数

nil

返回

在 WiFi模式,为一体 wifi. STATION , wifi.SOFTAP , wif i . STATIONAP 或 wifi . NULLMODE 常数。

也可以看看

wifi , getdefaultmode() wifi.setmode()

wifi.getphymode ()

获取WiFi物理模式。

句法

wifi.getphymode()

参数

没有

返回

当前的物理模式为其中之一 wifi. PHYMODE_B , wifi. PHYMODE_G 或者 wifi. PHYMODE_N。

也可以看看

wifi , setphymode()

wifi.nullmodesleep ()

配置WiFi是否自动进入NU LL_MODE睡眠状态。默认启用。

。注意

如果不需要在NULL.MODE中自动休眠,则该函数不会将其存储在闪存 中,wifi, nullmodesleep (false)必须在上电,重新启动或从深度休眠中唤醒后调用该 函数。

wifi•nullmodesleep([enable])

参数

•enable

-true在NU LL.M ODE中启用WiFi自动睡眠。(默认设置)

-false在NULL.MODE中禁用WiFi自动睡眠。

返回

-sleep_enabled当前/新的NULL.MODE睡眠设置

。如果wifi.nullmodesleep()不带参数调用,则返回当前设置。

。如果wifi.nullmodesleep()用enable参数调用,则返回新设置的确认。

wifi.resume ()

从挂起状态唤醒WiFi或取消挂起的WiFi挂起。

❶注意

Wifi恢复异步发生,这意味着恢复请求将只在处理器的控制权传递回

SDK (MyResumeFunction ()完成后)才被处理。恢复回调也是异步执行的,只有在 WiFi恢复正常运行后才会执行。

句法

wifi•resume([resume_cb])

参数

-resume_cb当WiFi从暂停状态唤醒时执行回叫。!注意“注意:”

任何以前提供的回调将被替换!

返回

nil

–Resume wifi from timed or indefinite sLeep wifi.resume()

–Resume wifi from timed or indefinite sLeep w/ resume caLLback wifi.resume(function() print(“WiFi resume”) end)

也可以看看

•wifi.suspend()

•node.sleep()

•node.dsleep()

wifi.setmode ()

配置WiFi模式使用。NodeMCU可以以四种WiFi模式之一运行:

-站模式,NodeMCU设备加入现有网络

-接入点(AP)模式,在那里创建自己的网络,其他人可以加入

-Station+AP模式,在此模式下,它既创建自己的网络,同时又连接到另一个现有的网络

-WiFi关闭

当使用组合电台+AP模式时,两个网络将使用相同的频道,因为无线电只能在单个频道上收 听。

❶注意

即使设备关闭,WiFi配置也会保留,直到更改为止。

句法

wifi,setmode(mode[, save])

参数

-mode价值应该是其中之一

0 wifi.STATION当设备连接到WiFi路由器时。这通常是为了让设备访问互联网。

。wifi.SOFTAP因为当设备只作为一个接入点。这将允许您在WiFi网络列表中查看设备 (当然,除非您隐藏SSID)。在这种模式下,您的计算机可以连接到设备,创建一个 局域网。除非您更改该值,否则NodeMCU设备将获得一个本地IP地址192.168.4.1,并 为您的计算机分配下一个可用的IP地址,例如192.168.4.2。

0 wifi.STATIONAP 是的组合 wifi.STATION 和 wifi.SOFTAP。它允许您创建本地WiFi 连接并连接到另一个WiFi路由器。

o Wifi.NULLMODE 将WiFi模式更改为NULL_MODE将使wifi进入与MODEM.SLEEP类似 的低功耗状态,但未提供wifi. nullmodesleep(false)。

-save选择是否将wifi模式保存到闪存

□ true WiFi模式配置将在电源周期中保留。(默认)

° false WiFi模式配置将不会通过重新启动进行保留。

返回

当前模式设置后

wifi.setmode(wifi.STATION)

也可以看看

wifi , getmode() wifi.getdefaultmode()

wifi.setphymode ()

设置WiFi物理模式。

802.11b,更多旳范围,低传输速率,更多旳电流洎耗

-wifi.PHYMODE_G 802.11g,中等范围,中等传输速率,中等电流

・wifi.PHYMODE_N 802.11D,最小范围,快速传输速率,最小电流消耗(仅限于站点)来

自Espressif数据表v4.3的信息

参数 典型的功率使用

lx 802.11b, CCK 11Mbps, POUT = + 17dBm 170毫安

Tx802.11g, OFDM 54Mbps, POUT = + 15dBm 140毫安

Tx802.11n, MCS7 65Mbps, POUT = + 13dBm 120毫安

Rx 802.11b, 1024字节数据包长度,-80dBm 50毫安

Rx802.11g, 102推节包长,-70dBm 56毫安

Rx802.11n, 1024字节包长,-65dBm 56毫安

句法

wifi , setphymode(mode)

参数

mode下列之一

•wifi.PHYMODE_B

•wifi.PHYMODE_G

•wifi.PHYMODE_N

返回

物理模式设置后

也可以看看

wifi ・ getphymode()

wifi.startsmart ()

开始自动配置,如果成功自动设置SSID和密码。

旨在用于SmartConfig应用程序,如Espressif的Android和iOS应用程序。

只能在wifi.STATION模式下使用。

。重要

SmartConfig在默认情况下处于禁用状态,可以|wifi_smart_enable |在| user_config.h |构 建固件之前通过设置启用。

wifi,startsmart(type, callback)

参数

-type。代表ESP.TOUCH,或 1代表AIR_KISS。

• callback function(ssidpassword) end 配置后调用的表单的回调函数。

返回

nil

wifi ・ setmode(wifi•STATION)

wifi•startsmart(0j

function(ssidj password)

print(string.format(“Success. SSID:%s ; PASSWORD:%s’\ ssidj password)) end

)

也可以看看

wifi.stopsmart()

wifi.stopsmart ()

停止智能配置过程。

句法

wifi.stopsmart()

参数

没有

返回

nil

也可以看看

wifi.startsmart()

wifi.suspend ()

挂起Wifi以减少电流消耗。

。注意

Wifi挂起异步发生,这葛味看挂起请求只有任处理器旳揑制权返回给

SDK (MySuspendFunction ()完成后)才会被处理。挂起回调也是异步执行的,只有在 wifi成功音停后才能执行。

句法

wifi.suspend((duration[suspend_cb, resume_cb, preserve_mode]})

参数

・duration挂起持续时间(以微秒(|JS)为单位)。如果。指定了暂停持续时间,暂停 将是不确定的(范围:。或50000-268435454|js (0: 4: 28.000454))

-suspend_cb在WiFi暂停时执行回叫。(可选的)

-resume_cb当WiFi从暂停状态唤醒时执行回叫。(可选的)

・ preserve_mode 通过节点休眠来保持当前的WiFi模式。(可选,默认:true)

・如果为true,则在NodeMCU恢复时,Station和StationAP模式将自动重新连接到先前配置 的接入点。

-如果为false,则丢弃WiFi模式并离开NodeMCU wifi.NULL_MODE。WiFi模式将在重启时 恢复到原始模式。

返回

・suspend_state如果没有提供参数,则返回当前的WiFi挂起状态

•状态:

-0 WiFi是清醒的。

-1 WiFi挂起正在等待。(等待空闲任务)

-2 WiFi暂停。

–get current wifi suspension state

print (wifi .suspend。)

–Suspend MiFi for 10 seconds with suspend/resume caLLbacks

cfg={}

cfg.duration=1010001000

cfg.resume_cb=function() print(“WiFi resume”) end

cfg.suspend_cb=function() print(“WiFi suspended”) end

wifi ・ suspend(cfg)

–Suspend MiFi for 10 seconds with suspend/resume caLLbacks and discard WiFi modi cfg={}

cfg.duration=1010001000

cfg.resume_cb=function() print(“WiFi resume”) end

cfg.suspend_cb=function() print(“WiFfi suspended”) end

cfg.preserve_mode=false

wifi.suspend(cfg)

也可以看看

• wifi.resume()

•node.sleep()

•node.dsleep()

wifi.sta 模块

wifi.sta.autoconnect ()

自动以站模式连接到AP。

句法

wifi . sta.autoconnect(auto)

参数

auto。禁用自动连接,1使能自动连接

返回

nil

wifi ・ sta.autoconnect(l)

也可以看看

wifi.sta.config() wifi.sta.connect()

•wifi.sta. disconnect()

wifi.sta.changeap ()

从返回的列表中选择接入点wifi.sta.getapinfo()

句法

wifi ・ sta.changeap(ap_index)

参数

ap_index访问点的索引,你想改变。(范围:1-5)-对应于wifi. sta.getapinfo()和所 使用的索引 wifi. sta.getapindex()

返回

・true成功

・false失败

wifi ・ sta.changeap(4)

也可以看看

•wifi.sta.getapinfo()

•wifi.sta.getapindex()

wifi.sta.clearconfig ()

清除当前保存的WiFi站点配置,从闪存中清除。当node.restore()不需要满载时可能对某 些出厂重置场景有用,或者为使用最终用户设置做准备,以便SoftAP能够锁定到单个硬件无 线电信道上。

句法

wifi.sta.clearconfig()

参数

没有

返回

•true 成功

•false失败

也可以看看

•wifi.sta ・ config()

•node.restore()

wifi.sta.config ()

设置WiFi站点配置。

。注意

不建议在初始化启动期间随时连接WiFi。WiFi连接状态应通过使用WiFi事件回调或通过轮 询定时器上的状态来验证。

句法

wifi.sta.config(station_config)

参数

•station_config包含台站配置数据的表格

。ssid小于32字节的字符串。

° pwd字符串是0-64o空字符串表示一个开放的WiFi接入点。注意:WPA至少需要8个 字符,但ESP8266也可以连接到WEP接入点(可以提供40位WEP密钥作为其对应的5 个字符的ASCII字符串)。

o auto 默认为true

■true启用自动连接并连接到接入点,因此auto=true无需通 话 wifi.sta.connect()

-false禁用自动连接并保持与接入点断开连接

0 bssid包含接入点MAC地址的字符串(可选)

-如果您有多个具有相同SSID的接入点,则可以设置BSSIDo

-如果您为特定的SSID设置了BSSID,并且想要将站点配置为仅在没有BSSID要求的 情况下连接到相同的SSID,则必须首先配置为先站到不同的SSID,然后连接到所需 的 SSID

-以下格式是有效的:

-“DE: Cl: A5: 51: Fl: ED”

-“AC-1D-1C-B1-0B-22”

-“DEADBEEF7AC0”

0 save将电台配置保存到闪存。

-true配置将通过电源循环保留。(默认)。

-false电源周期不会保留配置。

0事件回调只有在WIFI_SDK_EVENT_MONITOR_ENABLE未注释的情况下才可

用 user_config.h

-请注薑:为了保证所有站的活动在启动时进行处理,所有相关的回调必须尽早在注 册 init.lua 使用两种 wifi. sta.config() 或 wifi.eventmon. register()。

■connected_cb :电台连接到接入点时执行回叫。(可选的)

-表中返面的项目:

-ssid :接入点的SSIDo (格式:字符串)

-bssid :接入点的BSSIDo (格式:字符串)

■channel :接入点所在的频道。(格式:数字)

■disconnected_cb :当站点与接入点断开连接时执行回叫。(可选的)

-表中返回的谕目:

-ssid :接入点的SSIDo (格式:字符串)

-bssid :接入点的BSSIDo (格式:字符串)

■reason :请参阅下面的wifi.eventmon.reason。(格式:数字)

■authmode_change_cb :当接入点更改授权模式时执行回叫。(可选的)

:旧的WiFi授权模式。(格式:数字)

:新的wifi授权模式。(格式:数字)

-got_ip_cb :当电台从接入点收到IP地址时执行回叫。(可选的)

-表中彌回的项目:

-ip :分配给该电台的IP地址。(格式:字符串)

■netmask :子网掩码。(格式:字符串)

-gateway :电台连接的接入点的IP地址。(格式:字符串)

■dhcp_timeout_cb :站点DHCP请求己超时。(可选的)

-空白表被返回。

返回

• true成功

・false失败

–connect to Access Point (DO NOT save config to fLash) station_cfg=(}

station_cfg.ssid=HNODE-AABBCCn station_cfg.pwd=“password” wifi ・ sta.config(station_cfg)

–connect to Access Point (DO save config to fLash) station_cfg=()

station_cfg.ssid=“NODE-AABBCC”

station_cfg.pwd=“password” station_cfg.save=true wifi.sta.config(station_cfg)

–connect to Access Point with specific MAC address station_cfg=(}

station_cfg.ssid=“NODE-AABBCCn

station_cfg.pwd=“password”

Station_cfg.bssid=“AA:BB:CC:DD:EE:FF”

wifi ・ sta.config(station_cfg)

–configure station but donft connect to Access point station_cfg=()

station_cfg.ssid=“NODE-AABBCC” station_cfg.pwd=“password” station_cfg.auto=false wifi.sta.config(station_cfg)

也可以看看

wifi.sta.clearconfig() wifi.sta. connect() wifi.sta ・ disconnect() wifi.sta.apinfo()

wifi.sta.connect ()

连接到站模式下配置的AP。如果自动连接被禁用,你只需要调用它wifi.sta.config()。

句法

wifi.sta•connect([connected_cb])

参数

• connected_cb :电台连接到接入点时执行回叫。(可选的)

O表中返百的项目:

-SSID :接入点的SSIDo (格式:字符串)

-BSSID :接入点的BSSIDo (格式:字符串)

■ channel :接入点所在的频道。(格式:数字)

返回

nil

也可以看看

•wifi.sta.disconnect()

•wifi.sta ・ config()

wifi.sta.disconnect ()

在工作站模式下与AP断开连接。

。注意

请注意,从接入点断开不会降低功耗。如果节电是您的目标,请参阅Wifi.NULLMODE功 能说明以Pwifi.setmode() |了解更多详情。

句法

wifi ・ sta.disconnect([disconnected_cb])

参数

-disconnected_cb :当站点与接入点断开连接时执行回叫。(可选的)

□表中返回的谕目:

-SSID :接入点的SSIDo (格式:字符串)

-BSSID :接入点的BSSIDo (格式:字符串)

■ reason :请参阅下面的wifi.eventmon.reason□(格式:数字)

返回

nil

也可以看看

•wifi.sta ・ config()

•wifi.sta ・ connect()

wifi.sta.getap ()

将AP列表作为Lua表扫描回调函数。

句法

wifi.sta.getap([[cfg], formatj] callback(table))

参数

•cfg包含扫描配置的表

。ssid SSID 零,不要过滤SSID

O bssid BSSID 零,不要过滤BSSID

O channel通道0,扫描所有通道,否则扫描设置通道(默认为0)

。show_hidden show_hidden == 1,获取具有隐藏SSID的路由器的信息(默认为0)

•format选择输出表格式,默认为0

O 0:旧格式(SSID: Authmode, RSSL BSSID, Channel),任何重复的SSID将被丢弃 o 1:新格式(BSSID: SSID, RSSI,授权模式,频道)

-callback(table)扫描元成时接収AP表旳回调函数。这个函数接収一个表,夫键是 BSSID,值是其他格式的信息:SSID, RSSID, auth模式,通道。

返回

nil

–print AP List in old format (format not defined) function listap(t)

for k,v in pairs(t) do print(k.: .v)

end

end

wifi ・ sta.getap(listap)

–Print AP List that is easier to read function listap(t) – (SSID : Authmodej RSSI, BSSID^ ChanneL)

print(“\n”…string.format(“%32s,/,SSID”)… “\tBSSID\t\t\t\t RSSI\t\tAUTHMODE ssid,v in pairs(t) do local authmodej pssi, bssid, channel = string.match(v, “([Aj]+)j([A^]+), print(string.format(”%32s”,ssid)…“\t”…bssid…“\t n…rssi…autl

end end wifi.sta.getap(listap)

–print AP List in new format function listap(t)

for k,v in pairs(t) do print(k.: .v)

end

end

wifi・sta.getap(lj listap)

–Print AP List that is easier to read

function listap(t) – (SSID : Authmodej RSSI, BSSID, ChanneL)

print(”\n\t\t\tSSID\t\t\t\t\tBSSID\t\t\t RSSI\t\tAUTHMODE\t\tCHANNEL") for bssidv in pairs(t) do

local ssidj rssi, authmode, channel = string.match(v, “([A4]+)j([Aj]+)j( print(string.format(,%32s,ssid). .“Xt”. .bssid. .H\t H… rssi… … autl

end

end

wifi.sta.getap(lj listap)

–check for specific AP

function listap(t)

print(”\n\t\t\tSSID\t\t\t\t\tBSSID\t\t\t RSSI\t\tAUTHMODE\t\tCHANNEL") for bssidv in pairs(t) do

local ssidj rssi, authmode, channel = string.match(Vj "([A4]+)j([Aj]+)j( print(string.format(,%32s,‘,ssid)… “\t”…bssid… "\t "… rssi… .autl

end

end

scan_cfg = {}

scan_cfg.ssid = “myssid”

scan_cfg.bssid = “AA:AA:AA:AA:AA:AA”

scan_cfg.channel = 0

scan_cfg.show_hidden = 1

wifi・sta.getap(scan_cfgj 1, listap)

–get RSSI for currentLy configured AP

function listap(t)

for bssidv in pairs(t) do

local ssidj rssi, authmode, channel = string.match(v, "([’] + ),([']+)»( print("CURRENT RSSI IS: .rssi)

end

end

ssid, tmp, bssid_setj bssid=wifi.sta.getconfig() scan_cfg = (}

scan_cfg.ssid = ssid

if bssid_set == 1 then scan_cfg.bssid = bssid else scan_cfg.bssid = nil end

scan_c+g.channel = witi.getcnanneio

scan_cfg.show_hidden = 0

ssid, tmp, bssid_setj bssid=nilj nil, nil, nil

wifi.sta.getap(scan_cfgJ 1, listap)

也可以看看

wifi.sta.getip()

wifi.sta.getapindex ()

获取存储在AP缓存中的当前接入点的索引。

句法

wifi ・ sta.getapindex()

参数

没有

返回

current_index当前选定的接入点的索引。(范围:1-5)

print("the index of the currently selected AP is: "…wifi.sta.getapindex())

也可以看看

•wifi.sta.getapindex()

•wifi.sta.apinfo()

•wifi.sta ・ apchange()

wifi.sta.getapinfo ()

获取ESP8266站点缓存的AP信息。

。注意

配置禁用保存的任何接入点将wifi. sta. config({save=false})填充此列表(似乎覆盖 存储在闪存中的AP)直到重新启动。

句法

wifi.sta.getapinfo()

nil

返回

• ap_info

。qty返回的AP数量

。1-5 AP的指数。(该索引对应于wifi.sta.changeap()和所使用的索 弓I wifi.sta.getapindex())

。ssid访问点的ssid

o pwd nil如果没有配置密码,Access Point的密码

o bssid接入点的MAC地址

。nil如果在站配置期间没有配置MAC地址,则会返回。

–print stored access point info do

for kjv in pairs(wifi.sta.getapinfo()) do if (type(v)“tableH) then print(n :.type(v))

for k,v in pairs(v) do print: L.v)

end

else

printC, :”…v)

end

end

end

–print stored access point info(formatted) do

local x=wifi.sta.getapinfo() local y=wifi.sta.getapindex()

print(”\n Number of APs stored in flash:“j x.qty)

ppint(stping・fopmat(” %-6s %-32s %-64s “index:”, ”SSID:”, “Password:

for i=l, (x.qty), 1 do

ppintjtping.fopmat(” %s%-6d %-32s %-64s %-18s“,(i==y and ,>,f or H ”),i, x[

end end

也可以看看

wifi.sta.getapindex() wifi.sta.setaplimit() wifi.sta.changeap() wifi.sta.config()

wifi.sta.getbroadcast ()

获取站模式下的广播地址。

wifi.sta.getbroadcast()

参数

nil

返回

广播地址作为字符串,例如“192.168.0.255”, nil如果IP地址=“0.0.0.0”则返回。

也可以看看

wifi.sta.getip()

wifi.sta.getconfig ()

获取WiFi站点配置。

句法

wifi.sta.getconfig()

参数

•return_table

。true返回表中的数据

O false以旧格式返回数据(默认)

返回

如果 return_table 是 true :

•config_table

。ssid访问点的ssido

。pwd密码到Access Point, nil如果没有配置密码

° bssid_set true如果站点被配置为专门连接到具有匹配的AP,将返回bssid。

O bssid如果已连接到已配置的AP,则此字段将包含AP的MAC地址。否则将返回“什:

ff: ff: ff: ff: ffMo

如果 return_table 是 false :

•ssid,密码,bssid_set, bssid,如果 bssid_set 等于 0 则 bssid 无关紧要

–Get current Station configuration (NEW FORMAT)

do

local sta_config=wifi.sta.getconfig(true)

print(string.formatC’XtCurrent station config\n\tssid:”%s”\tpassword:“%s”\n- end

–Get current Station configuration (OLD FORMAT)

ssidj passwordj bssid_set, bssid=wifi.sta.getconfig()

print(“\nCurrent Station configuration:\nSSID : “…ssid

…”\nPassword : “…password

…”\nBSSID_set : “…bssid_set

…“XnBSSID? “…bssid…“Xn”)

ssid, passwordbssid_setj bssid=nil, nil, nil, nil

也可以看看

•wifi.sta.getdefaultconfig()

•wifi.sta ・ connect()

•wifi.sta.disconnect()

wifi.sta.getdefaultconfig ()

获取存储在闪存中的默认WiFi站点配置。

句法

wifi.sta.getdefauItconfig(return_table)

参数

•return_table

。true返回表中的数据

O false以旧格式返回数据(默认)

返回

如果 return_table 是 true :

•config_table

。ssid访问点的SSido

。pwd密码到Access Point, nil如果没有配置密码

° bssid_set true如果站点被配置为专门连接到具有匹配的AP,将返回bssid。

o bssid如果已连接到己配置的AP,则此字段将包含AP的MAC地址。否则将返回“什: ff: ff: ff: ff: ffUo

如果 return_table 是 false :

•ssid,密码,bssid_set, bssid,如果 bssid_set 等于 0 则 bssid 无关紧要

–Get default Station configuration (NEW FORMAT)

do

local def_sta_config=wifi.sta.getdefaultconfig(true)

print(string.format(”\tDefault station config\n\tssid:”%s”\tpassword:”%s"\n’ end

–Get default Station configuration (OLD FORMAT)

ssidj passwordj bssid_set, bssid=wifi.sta.getdefaultconfig() print("\nCurrent Station configuration:\nSSID : “…ssid

…”\nPassword : “…password

…”\nBSSID_set : “…bssid_set

…“XnBSSID? “…bssid…“Xn”)

ssid, passwordbssid_setj bssid=nil, nil, nil, nil

也可以看看

wifi.sta.getconfig() wifi.sta . connect() wifi.sta.disconnect()

wifi.sta.gethostname ()

获取当前的站点主机名。

句法

wifi.sta.gethostname()

参数

没有

返回

当前配置的主机名

print(“Current hostname is: …wifi.sta.gethostname。

wifi.sta.getip ()

获取站模式下的ip地址,网络掩码和网关地址。

句法

wifi.sta.getip()

参数

没有

返回

IP地址,网络掩码,网天地址作为子符単,例如"192.168.0.111”。nil如果IP =,0.0.0.0,<则返 回。

–print current IP address, netmaskj gateway

print(wifi.sta.getip())

–192.168.0.111 255.255.255.0 192.168.0.1

ip = wifi.sta.getip()

print(ip)

–192.168.0.111

ipj nm = wifi.sta.getip()

print(nm)

–255.255.255.0

也可以看看

wifi.sta.getmac()

wifi.sta.getmac ()

获取站模式下的MAC地址。

句法

wifi.sta.getmac()

参数

没有

返回

作为字符串的MAC地址例如“18: fe: 34: a2: d7: 34”

也可以看看

wifi.sta.getip()

wifi.sta.getrssi ()

获取ESP8266所连接的接入点的RSSI (接收信号强度指示符)。

句法

wifi.sta.getrssi()

参数

没有

返回

-如果电台连接到接入点,rssi则返回。

-如果电台禾连接到接人点,nil则返回。

RSSI=wifi.sta.getrssi() print(“RSSI is”, RSSI)

wifi.sta.setaplimit ()

设置存储在闪存中的最大接入点数量。-此值写入闪存

❶注意

重新启动后新设置才会生效。

。注意

如果存储5个接入点并且AP限制设置为4,则索引5处的AP将保持到node.restore()被叫 或AP限制被设置为5并且AP被覆盖。

句法

wifi.sta.setaplimit(qty)

参数

qty存储在闪存中的接入点数量。范围:1-5 (默认:1)

返回

•true 成功

•false失败

wifi.sta.setaplimit(5)

也可以看看

•wifi.sta.getapinfo()

wifi.sta.sethostname ()

设置站点主机名。

句法

wifi.sta.sethostname(hostname)

hostname只能包含字母,数字和连字符,开且小得超过32个子符,百字母和末子符 是字母数字

返回

nil

if (wifi.sta.sethostname(“NodeMCU”) == true) then print(“hostname was successfully changed”) else

print(“hostname was not changed”) end

wifi.sta.setip ()

在工作站模式下设置ip地址,网络掩码,网关地址。

句法

wifi.sta.setip(cfg)

参数

cfg表包含IP地址,网络掩码和网关

{

ip = “192.168.0.111”,

netmask = “255.255.255.0”, gateway = “192.168.0.1”

}

返回

如果成功则为真,否则为假

也可以看看

wifi.sta.setmac()

wifi.sta.setmac ()

在工作站模式下设置MAC地址。 句法

wifi.sta.setmac(mac)

字符串中的MAC地址,例如“DE: AD: BE: EF: 7A: C0u

派回

如果成功则为具,舎则为假

ppint(wifi.sta・setmac(”DE:AD:BE:EF:7A:C0”))

也可以看看

wifi.sta.setip()

wifi.sta.sleeptype ()

在连接到接入点时配置要使用的WiFi调制解调器的睡眠类型。

。注意 不适用于 wifi.SOFTAP , wifi.STATIONAP 或 wifi . NULLMODE

句法

wifi.sta.sleeptype(type_wanted)

参数

type_wanted 以下之一:

・wifi.NONE_SLEEP始终保持调制解调器

・wifi.LIGHT_SLEEP在某些情况下允许CPU断电

・wifi.MODEM_SLEEP尽可能地关闭调制解调器

返回

实际的睡眠模式设定,为一体 wifi.NONE_SLEEP , wif i . LIGHT_SLEEP 或 wifi.MODEM_SLEEP 。

wifi.sta.status ()

获取工作站模式下的当前状态。

句法

wifi.sta.status()

参数

nil

返回

当前状态可以是下列之一:

wifi.STA IDLE

•wifi.STA_CONNECTING

•wifi.STA_WRONGPWD

•wifi.STA_APNOTFOUND

•wifi.STA_FAIL

•wifi.STA_GOTIP

wifi.ap 模块

wifi.ap.config ()

在AP模式下设置SSID和密码。请务必至少输入8个字符的密码!如果你不这样做,它将默认 为没有密码,不设置SSID!它仍将作为接入点工作,但使用默认的SSID,如

NODE_9997C3o

句法

wifi.ap.config(cfg)

参数

, cfg表保存配置

0 ssid SSID字符 1-32

。pwd密码字符8-64

。auth认证方法的一个wifi.OPEN (默认),

, wifi.WPA_PSK wifi.WPA2_PSK wifi.WPA_WPA2_PSK

。channel频道号码1-14默认=6

0 hidden false =不隐藏,true=隐藏,defauIt = false

。max最大连接数1-4默认=4

0 beacon信标间隔时间范围在100-60000,默认值=100

o save保存配置到闪存。

-true配置将通过电源循环保留。(默认)

-false电源周期不会保留配置。

O事件回调只有在WIFI_SDK_EVENT_MONITOR_ENABLE未注释的情况下才可

用 user_config.h

-请注盖:为了确保所有SoftAP事件在启动时处理,所有相关的回调都必须尽早注 册 init.lua 至!J wifi.ap.config() 或者 wifi.eventmon.register()。

■staconnected_cb :新客户端连接到接入点时执行的回拨。(可选的)

-表中返回的谕目:

-MAC :连接的客户端的MAC地址。

-AID : SDK没有提供有关此返回值的详细信息。

■stadisconnected_cb :当客户端从接入点断开连接时执行回调。(可选的)

-表中返回的项瓦

-mac :断开连接的客户端的MAC地址。

-aid : SDK没有提供有关此返回值的详细信息。

-probereq_cb :收到探测请求时执行回调。(可选的)

-表中返回的项目:

-MAC :探测接入点的客户端的MAC地址。

-RSSI :接收到客户端的信号强度指标。

返回

•true 成功

•false失败

例:

cfg={}

cfg. ssid = nmyssid,

cfg.pwd=“mypassword”

wifi,ap.config(cfg)

wifi.ap.deauth ()

通过发送一个相应的IEEE802.ll管理数据包(第一个)并从客户端的数据结构(之后)中删 除客户端,从ESP接入点中删除(强制删除)一个客户端。

所使用的IEEE802.il原因码为“先前验证不再有效”(AUTH_EXPIRE)为2。

句法

wifi.ap.deauth([MAC])

参数

-MAC要被排除的站的地址。

。注意:如果此字段留空,所有当前连接的电台将被清除。

返回

除非ESP在STATION opmode中调用,否则返回true

allowed_mac_list={“18:fe:34:00:00:00”, “18:fe:34:00:00:01”}

wifi.eventmon.register(wifi.eventmon.AP_STACONNECTEDj function(T) print(n\n\tAP - STATION CONNECTED”…M\n\tMAC: H…T.MAC…n\n\tAID: H…T.AID) if(allowed_mac_list^=nil) then

for v in pairs(allowed_mac_list) do

if(v == T.MAC) then return end

end

end

wifi.ap.deauth(T.MAC)

print(”\tStation DeAuthed!”)

end)

也可以看看

wifi ・ eventmon.register()

wifi ・ eventmon , reason()

wifi.ap.getbroadcast ()

获取AP模式卜旳厂播地址。

句法

wifi.ap.getbroadcast()

参数

没有

返回

字符串中的广播地址,例如“192.168.0.255”, nil如果IP地址=“0.0.0.0"则返回。

be = wifi.ap.getbroadcast()

print(be)

–192.168.0.255

也可以看看

wifi.ap.getip()

wifi.ap.getclient ()

获取以AP模式连接到设备的客户端表。

句法

wifi.ap.getclient()

参数

没有

返回

连接的客户端表

table=()

table=wifi,ap.getclient()

for mac,ip in pairs(table) do

print(mac^ ip)

end

–or shorter

for mac,ip in pairs(wifi.ap.getclient()) do

print(macip)

end

获取当前旳SoftAP配直。

句法

wifi.ap.getconfig(return_table)

参数

• return_table

° true返回表中的数据

o false以旧格式返回数据(默认)

返回

如果return_table是这样:

• config_table

。ssid网络名字

。pwd密码,nil如果没有配置没有密码-auth验证方法

(wifi.OPEN , wifi.WPA_PSK , wifi.WPA2_PSK 或 wifi.WPA, o channel频道号码

。hidden false =不隐藏,true =隐藏

。max客户端连接的最大数目

。beacon信标间隔 如果return_table是假的:

• ssid,密码,如果bssid_set等于。则bssid无关紧要

configuration table (NEW FORMAT)

print(“\n Current SoftAP configuration:”) for k,v in pairs(wifi.ap.getconfig(true)) do print(" .k.:\v)

end

end

–Get current SoftAP configuration (OLD FORMAT) do

local ssid, password=wifi・ap.getconfig()

print(“\n Current SoftAP configuration:、!! SSID : “. .ssid.

“\n Password :“j password)

ssid, password=nilj nil

end

wifi.ap.getdefaultconfig ()

获取存储在闪存中的默认SoftAP配置。

• return_table

° true返回表中的数据

0 false以旧格式返回数据(默认)

返回

如果return_table是这样:

• config_table

。ssid网络名字

。pwd密码,nil如果没有配置没有密码-auth验证方法

(wifi.OPEN , wifi.WPA_PSK , wifi.WPA2_PSK 或 wifi・WPA_WPA2_PSK ) o channel频道号码

。hidden false =不隐藏,true =隐藏

。max客户端连接的最大数目

。beacon信标间隔

如果return_table是假的:

• ssid,密码,如果bssid_set等于0则bssid无关紧要

–Get default SoftAP configuration tabLe (NEW FORMAT) do

print(”\n Default SoftAP configuration:”) for k,v in pairs(wifi.ap.getdefaultconfig(true)) do print(” .k.:\v)

end

end

–Get defauLt SoftAP configuration (OLD FORMAT) do

local ssid, password=wifi・ap.getdefaultconfig()

print(”\n Default SoftAP configuration:\n SSID : ". .ssid… "\n Password :“j password)

ssid, password=nilJ nil

end

wifi.ap.getip ()

在AP模式下获取IP地址,网络掩码和网关。

句法

wifi.ap.getip()

参数

没有

IP地址,网络掩偽,网夫地址作为字符申,例如“192168.0.111”, nil如果IP地址 =“0.0.0.0”则返回。

–print current ip, netmaskj gateway print(wifi.ap.getip())

–192.168.4.1 255.255.255.0 192.168.4.1 ip = wifi.ap.getip()

print(ip)

–192.168.4.1

ipj nm = wifi.ap.getip() print(nm)

–255.255.255.0

ipj nm, gw = wifi.ap.getip() print(gw)

–192.168.4.1

也可以看看

• wifi.ap.getmac()

wifi.ap.getmac ()

在AP模式下获取MAC地址。

句法

wifi.ap.getmac()

参数

没有

返回

MAC地址作为字符串,例如“1A-33-44-FE-55-BB”

也可以看看

wifi.ap.getip()

wifi.ap.setip ()

在AP模式下设置IP地址,网络掩码和网关地址。 句法

wifi.ap.setip(cfg)

cfg表包含IP地址,网络掩码和网关

返回

如果成功则为true,否则为false

cfg =

{

ip=“192.168.1.1"J netmask=“255.255.255.0”, gateway=,192.168.1.1”

}

wifi.ap.setip(cfg)

也可以看看

wifi.ap.setmac()

wifi.ap.setmac ()

在AP模式下设置MAC地址。

句法

wifi.ap.setmac(mac)

参数

字节串中的MAC地址,例如“AC- ID- 1C-B1-0B-22”

返回

如果成功则为真,否则为假

print(wifi.ap.setmac(“AC-lD-lC-Bl-0B-22”))

也可以看看

wifi.ap.setip()

wifi.ap.dhcp模块

wifi.ap.dhcp.config ()

配置DHCP服务。目前只支持设置dhcp地址池的起始地址。

dhcp_config包含DHCP地址池的起始IP的表,例如T92.168.1.100”

dhcp_config ={}

dhcp_config.start = H192.168.1.100" wifi ・ ap.dhcp.config(dhcp_config)

wifi.ap.dhcp.start ()

启动DHCP服务。

句法

wifi.ap.dhcp.start()

参数

没有

返回

布尔值表示成功

wifi.ap.dhcp.stop ()

停止DHCP服务。

句法

wifi.ap.dhcp.stop()

参数

没有

返回

布尔值表示成功

wifte ventmon 模 块

wifi.eventmon.register ()

注册/取消注册WiFi事件监视器的回调。-注册回调后,可能会随时调用此函数来更新回调函

。注意

为了确保所有WiFi事件都被捕获,Wifi事件监视器回调应该尽可能早地注册init.lua。 回调之前发生的任何事件都将被丢弃!

句法

wifi.eventmon.register (Event[, function (T)])

参数

事件:你想设置回拨的WiFi事件。

-有效的WiFi活动:

0 wifi.eventmon.SlA_CONNECTED

。wifi.eventmon.SlA_DISCONNECTED

0 wifi.eventmon.SlA_AUTHMODE_CHANGE

o wifi.eventmon.SlA_GOT_l P

o wifi.eventmon.SlA_DHCP_TIMEOUT

o wifi.eventmon.AP_STACONNECTED

o wifi.eventmon.AP_SlADISCONNECTED

o wifi.eventmon.AP_PROBEREQRECVED

返回

功能:

nil

回调:

T:由事件返回的表。

・wifi. eventmon. STA_CONNECTED 站连接到接入点。

o SSID :接入点南SSID。

。bssid :接入点的BSSIDo

° channel :接入点所在的频道。

•wifi. eventmon. STA_DISCONNECTED :站点与接入点断开连接。

。ssid :接入点WSSIDo

。bssid :接入点的BSSIDo

O reason :请参阅下面的wifi.eventmon.reason。

・wifi. eventmon. STA_AUTHMODE_CHANGE :接入点已更改授权模式。

O old_auth_mode :旧的WiFi授权模式。

O new_auth_mode :新的wifi授权模式。

•wifi.eventmon.STA_GOT_IP :电台有一个IP地址。

。IP :分配给该电台的IP地址。

0 netmask :子网掩码。

° gateway :电台连接的接入点的IP地址。

・wifi.eventmon.STA_DHCP_TIMEOUT :站点DHCP请求已超时。

O空白表被返回。

•wifi.eventmon.AP_STACONNECTED :新的客户端连接到接入点。

O MAC :连接的客户端的MAC地址。

O AID : SDK没有提供有关此返回值的详细信息。

・wifi.eventmon.AP STADISCONNECTED :客户端已经与接入点断开连接。

O MAC :断升连接旳客尸端旳MAC地址。

0 AID : SDK没有提供有关此返回值的详细信息。

・wifi.eventmon.AP_PROBEREQRECVED :收到了一个探测请求。

。MAC :探测接入点的客户端的MAC地址。

。RSSI :接收到客户端的信号强度指标。

•wifi.eventmon.WIFI_MODE_CHANGE : WiFi模式已经改变。

0 old_auth_mode :旧WiFi模式。

0 new_auth_mode :新的WiFi模式。

wifi.eventmon.register(wifi,eventmon.STA_CONNECTEDj function(T) print(“\n\tSTA - CONNECTED”…“\n\tSSID: “…T.SSID…”\n\tBSSID:”… T.BSSID…“\n\tChannel: “…T.channel)

end)

wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED> function(T) print(”\n\tSTA - DISCONNECTED”…“\n\tSSID: .T.SSID…”\n\tBSSID:“… T.BSSID…”\n\treason: “…T.reason)

end)

wifi.eventmon.register(wifi.eventmon.STA_AUTHMODE_CHANGEj function(T) print(”\n\tSTA - AUTHMODE CHANGE" … ,\n\told_auth_mode:.

T.old_auth_mode…“\n\tnew_auth_mode: “…T.new_auth_mode) end)

wifi.eventmon.register(wifi,eventmon.STA_GOT_IPj function(T) print(”\n\tSTA - GOT IP”…“\n\tStation IP: “…T.IP…”\n\tSubnet mask: T.netmask…”\n\tGateway IP: “…T.gateway)

end)

wifi・eventmon . register(wifi.eventmon.STA_DHCP_TIMEOUT, function() print(”\n\tSTA - DHCP TIMEOUT")

end)

wifi.eventmon.register(wifi.eventmon.AP_STACONNECTEDj function(T) print(“\n\tAP - STATION CONNECTED”…“\n\tMAC: “…T.MAC…”\n\tAID: “…T.AID) end)

wifi.eventmon.register(wifi.eventmon.AP_STADISCONNECTEDJ function(T) print(”\n\tAP - STATION DISCONNECTED”…“\n\tMAC: “…T.MAC…”\n\tAID: “…T.AID) end)

wifi.eventmon , register(wifi.eventmon.AP_PROBEREQRECVEDj function(T) print(n\n\tAP - PROBE REQUEST RECEIVED”…”\n\tMAC: T.MAC…“\n\tRSSI: ”…T・R: end)

wifi.eventmon , register(wifi.eventmon.WIFI_MODE_CHANGEDj function(T) print(n\n\tSTA - WIFI MODE CHANGED”…M\n\told_mode:

T.old_mode…"\n\tnew_mode: "…T.new_mode)

end)

也可以看看

・ wifi.eventmon.unregister()

wifi.eventmon.unreaister ()

取洎注册WiFi事件监视器旳回调。

句法

wifi.eventmon.unregister (事件)

参数

事件:你想设置回拨的WiFi事件。

-有效的WiFi活动:

。wifi.eventmon.SlA_CONNECTED

。wifi.eventmon.STA_DISCONNECTED

0 wifi.eventmon.SlA_AUTHMODE_CHANGE

o wifi.eventmon.SlA_GOT_l P

o wifi.eventmon.SlA_DHCP_TIMEOUT

o wifi.eventmon.AP_STACONNECTED

o wifi.eventmon.AP_STADISCONNECTED

o wifi.eventmon.AP_PROBEREQRECVED

o wifi.eventmon.WIFI_MODE_CHANGED

返回

nil

wifi.eventmon , unregister(wifi.eventmon.STA_CONNECTED)

也可以看看

・ wifi.eventmon.register()

wifi.eventmon.reason

包含断开原因的表。

断开原因 值

wifi, eventmon. reason. UNSPECIFIED 1

wifi.eventmon.reason.AUTH_EXP IRE 2

wifi.eventmon.reason.AUTH_LEAVE 3

wifi.eventmon.reason.ASSOC_EXP IRE 4

wifi.eventmon.reason.ASSOC_TOOMANY 五

wifi.eventmon.reason.NOT_AUTHED 6

wifi.eventmon. reason. NOT_ASSOCED 7

wifi.eventmon.reason.ASSOC_NOT_AUTHED 9

wifi.eventmon.reason.DISASSOC_PWRCAP_BAD 10

wifi.eventmon.reason.DISASSOC_SUPCHAN_BAD 11

wifi.eventmon.reason.lE_INVALID 13

wifi.eventmon.reason.MIC_FAILURE 14

wifi.eventmon.reason.4VW\Y_HANDSHAKE-TIMEOUT 15

wifi.eventmon.reason.GROUP_KEY_UPDATE_TIMEOUT 16

wifi.eventmon.reason.lE_IN_4VWKY_DIFFERS 17

wifi.eventmon.reason.GROUP_CIPHER_INVALID 18

wifi.eventmon.reason.PAIRWISE_CIPHER_INVALID 19

wifi.eventmon.reason.AKMP_INVALID 20

wifi.eventmon.reason.UNSUPP_RSN_IE_VERSION 21

wifi.eventmon.reason.lNVALID_RSN_IE_CAP 22

wifi.eventmon.reason.802_lX_AUTH_FAILED 23

wifi.eventmon.reason.CIPHER_SUITE_REJECTED 24

wifi.eventmon.reason.BEACON_TIMEOUT 200

wifi.eventmon.reason.NO_AP_FOUND 201

wifi.eventmon.reason.AUTH_FAIL 202

wifi.eventmon. reason. ASSOC_ FAIL 203

wifi.eventmon.reason.HANDSHAKE TIMEOUT 204

WPS模块

以来 起源/贡献者 维护者 资源

2017年1月1日 弗兰克Exoo 弗兰克Exoo wps.c

WPS允许将设备添加到现有网络,而无需输入网络凭证。

。危险

请谨慎使用。使用WPS存在严重的安全问题。

启用WPS功能的WPA/WPA2网络非常容易破解。一旦WPS引脚被盗,路由器即使更改密 码也会发出密码。

您应该使用禁用了 WPS功能的WPA/WPA2o

wps.disable () 禁用WiFi WPS功能。

wps.enable () 启用WiFi WPS功能。

wps.start () 启动WiFi WPS功能。

wps.disable ()

禁用WiFi WPS功能。

参数

没有

返回

nil

wps.enable ()

启用WiFi WPS功能。

参数

没有

nil

wps.start ()

启动WiFiWPS功能。在调用此函数之前,必须启用WPS。

❶注意

此功能仅配置AP的信息,不自动连接AP。

句法

wps ・ start([function(status)])

参数

• function(status)当WPS功能结束时的回调函数。

返回

nil

–Basic exampLe

wifi.setmode(wifi.STATION) wps.enable()

wps.start(function(status)

if status == wps.SUCCESS then wps.disable() print(“WPS: Success, connecting to AP… wifi ・ sta ・ connect()

return

elseif status

print(“WPS: elseif status

print(nWPS: elseif status

print(“WPS:

elseif status

print(HWPS:

else

print(status)

end

wps.disable()

end)

–FuLL exampLe

do

–Register wifi

wifi.eventmon.register(wifi.eventmon.STA_CONNECTEDj function(T)

print(n\n\tSTA - CONNECTED”…M\n\tSSID: H…T.SSID…n\n\tBSSID: T.BSSID…”\n\tChannel: “…T.channel)

end)

wifi.eventmon•register(wifi.eventmon.STA_GOT_IPj function(T) print(”\n\tSTA - GOT IP”…“\n\tStation IP: “.,T.IP…”\n\tSubnet mask:” T.netmask…“\n\tGateway IP: “…T.gateway)

end)

wifi.setmode(wifi.STATION)

wps_retry_func = function()

if wps_retry_count == nil then wps_retry_count = 0 end

if wps_retry_count < 3 then

wps.disable()

wps.enable()

wps_retry_count = wps_retry_count + 1

wps_retry_timer = tmr.create()

wps_retry_timer:alarm(3000, tmr.ALARM_SINGLE3 function() wps.start(wps_cl print(“retry #”…wps_retry_count)

else

wps_retry_count = nil

wps_retry_timer = nil

wps_retry_func = nil

wps_cb = nil

end

end

wps_cb = function(status)

if status == wps.SUCCESS then wps.disable()

printC’WPS: success, connecting to AP…”) wifi・ sta ・ connect() wps_retry_count = nil wps_retry_timer = nil wps_retry_func = nil wps_cb = nil

return

elseif status == wps.FAILED then print(HWPS: Failed”) wps_retry_func()

return

elseif status == wps.TIMEOUT then print(“WPS: Timeout”) wps_retry_func()

return

elseif status == wps.WEP then print(“WPS: WEP not supported”) elseif status == wps.SCAN_ERR then print(HWPS: AP not found") wps_retry_func()

return

else

print(status)

end

wps.disable()

wps_retry_count = nil wps_retry_timer = nil wps_retry_func = nil wps_cb = nil

end

wps.enable()

wps , start(wps_cb)

end

WS2801模块

以来 起源/贡献者 维护者 资源

2015 年7月 12 H Espressif 的例子,Konrad Beckmann 康拉德贝克曼 ws2801.c

ws2801.init () 初始化模块并设置引脚配置。

ws2801.write () 将_串24位RGB数据发送到WS280L

ws2801.init ()

初始化模块并设置引脚配置。

句法

ws2801.init(pin_clk, pin_data)

参数

-pin_clk 针为时钟。支持GPIO0,2,4,50

-pin_data 引脚的数据。支持GPIO0,2,4,5。

返回

nil

ws2801.write ()

将一串24位RGB数据发送到WS2801o不要忘记ws280i.init()之前打电话。

句法

ws2801.write(string)

参数

-string有效载荷被发送到一个或多个WS280L它应该由每个元素的RGB三元组构成。

O R1第一个像素的红色通道值(0-255)

O GI第一个像素的绿色通道值(0-255)

o B1第一个像素的蓝色通道值(0-255)

…你可以连接很多WS2801…

O R2 , G2 , B2是下WS2801的红色,绿色和蓝色通道值

返回

nil ws2801.write(string.char(255,0,0, 0,255,0, 0,0,255))

WS2812模块

以来 起源/贡献者 维护者 资源

2015年2月5日 直到Klocke, ThomasSoete 直到克洛克 ws2812.c

ws2812是一个图书馆处理类似ws2812的led灯带。它至少在WS2812, WS2812b, APA104, SK6812 (RGB或RGBW)上工作。

该库使用路由在GPIO2上的UART1 (NodeMCUDEVKIT上的引脚D4)来生成比特流。它可 以使用路由到TXDO的UARTO来同时处理两个LED灯条。

警告:在双重模式下,您将无法通过串口访问Lua的控制台(它将被重新配置为支持WS2812- like协议)。如果你想保持访问Lua的控制台,你将不得不使用其他输入通道,如TCP服务器

(请参阅示例)

ws2812.init () 初始化UART1和GPIO2,应该在write ()之前调用一次。

ws2812.write () 发送数据到一个或两个led灯带使用其原生格式,通常是绿色,红色,蓝 色的RGB条和绿色,红色,蓝色,白色的RGBW条。

ws2812.newBuffer () 分配一个新的内存缓冲区来存储主值。

ws2812.buffer:得到 ()

ws2812.buffer:()

设置

ws2812.buffer:尺寸 ()

ws2812.buffer:填写 () 用给定的颜色填充缓冲区。

ws2812.buffer:转储 () 以字符串形式返回缓冲区的内容(像素值)。

ws2812.buffer:替换 () 将字符串(或缓冲区)插入另一个具有偏移量的缓冲区中。

ws2812.buffer:混合 () 这是将数据加载到缓冲区的一般方法,该缓冲区是来自其他缓冲区的数 据的线性组合。

ws2812.buffer:功率 () 计算缓冲区的总能量需求。

ws2812.buffer:褪色 () 淡入或淡出。

将(一块)缓冲区的内容向正或负方向移动。

这实现了像字符串一样的提取功能。

这实现了。

ws2812.init ()

初始化UART1和GPI02,应该在write ()之前调用一次。初始化UARTO (TXDO)如 果 ws2812.M0DE_DUAL 被设置。

句法

ws2812.init([mode])

参数

• mode (可选)要么 ws2812.MODE_SINGLE (默认,如果省略)或 ws2812.MODE_DUAL

在WS2812.MODE_DUAL模式下,您将能够并行处理两个条带,但将失去对Lua串行控制台的访 问权限,因为它卖享相同的UART和PIN。

返回

nil

ws2812.write ()

发送数据到一个或两个led灯带使用其原生格式,通常是绿色,红色,蓝色的RGB条和绿色, 红色,蓝色,白色的RGBW条。

句法

ws2812.write(datal, [data2])

参数

-datal有效载荷通过GPIO2发送到一个或多个WS2812 (如LED)

-data2 (可选)有效负载通过TXDO发送到一个或多个WS2812 (如ws2812.M0DE_DUAL 需要的模式)

有效载荷类型可以是:-nil没有完成-string表示要发送的字节-ws2812.buffer请参 阅缓冲区模块

返回

nil

ws2812.init()

ws2812.write(string.char(2550, 0, 255, 0, 0)) – turn the two first RGB Leds

ws2812.init()

ws2812.write(string.char(00, 0, 255, 0,0, 0, 255)) – turn the two first RGBW

ws2812.init(ws2812.M0DE_DUAL)

ws2812.write(string.char(255, 0, 0, 255> Q, 0), string.char(0, 255, 0, 0, 255, 0 ws2812.init(ws2812.M0DE_DUAL)

ws2812.write(nil, string.char(0, 255, 255, 0)) ■- turn the two first RGB Li

缓冲模块

对于更高级的动画,保持条的“帧缓冲区",与其交互并将其冲刷到条上是有用的。

为此,WS2812库提供了一个读/写缓冲区。这个缓冲区有一个_tostring方法可以打印。这 对调试很有用。

带RGBW带的追踪器

ws2812.init()

local ij buffer = 0, ws2812.newBuffer(300, 4); buffer0, 0, 0); tmr.crea- i = i + 1

buffer:fade(2)

buffer:set(i % buffer:size() + 1, 0, 0> 0, 255)

ws2812.write(buffer)

end)

ws2812.newBuffer ()

分配一个新的内存缓冲区来存储主值。

句法

ws2812.newBuffer(numberOfLeds, bytesPerLed)

参数

• numberOfLeds led灯带的长度

・bytesPerLed RGB条纹为3, RGBW条纹为4

ws2812.buffer:得到()

返回给定位置的值

句法

buffer:get(index)

参数

-index在缓冲区中的位置(第一个LED为1)

返回

(color)

buffer = ws2812.newBuffer(32j 4)

print(buffer:get(1))

0 0 0 0

ws2812.buffer:()设置

在给定的位置设置值

句法

buffer:set(index, color)

参数

-index在缓冲区中的位置(1为第一个LED)

• color颜色的有效载荷

有效载荷可以是:-number, numberj …你应该传递尽可能多的参数bytesPerLed -

table 应该包含bytesPerLed 数字-string 应该包含bytesPerLed 字节

返回

nil

buffer = ws2812.newBuffer(32J 3)

buffer:set(1, 255, 0) – set the first Led green for a RGB strip

buffer = ws2812.newBuffer(32J 4)

buffer:set(1, (0, 0, 0, 255}) – set the first Led white for a RGBW strip

buffer = ws2812.newBuffer(32J 3)

buffer:set(1, string.char(255, 0, 0)) – set the first Led green for a RGB strip

ws2812.buffer:尺寸()

以数量的LED返回缓冲区的大小

句法

buffer:size()

参数

没有

返回

int

ws2812.buffer:填写()

用给定的颜色填充缓冲区。给定字节的数量必须与缓冲区的字节数目相匹配

句法

buffer:fill(color)

参数

• color颜色的字节,你应该传递许多参数bytesPerLed

返回

nil

buffer111(0 0) – fill the buffer with btack for a RGB strip

ws2812.buffer:转储()

以字符串形式返回缓冲区的内容(像素值)。这可以保存到文件或通过网络发送。

句法

buffer:dump()

返回

包含像素值的字符串。

ws2812.buffer:替换()

将字符串(或缓冲区)插入另一个具有偏移量的缓冲区中。每个LED的缓冲区必须具有相同数 量的颜色,否则会引发错误。

句法

buffer:replace(source[, offset])

参数

・source像素值将被设置到缓冲器中。这是一个字符串或一个缓冲区。 ・offset源放置在缓冲区中的偏移量。默认值是1.可以使用负值。

返回

nil buffer:replace(anotherbuffer:dump()) – copy one buffer into another via a strini buffer:replace(anotherbuffer) – copy one buffer into another

newbuffer = buffer.sub(l) – make a copy of a buffer into a new buffer

ws2812.buffer:混合()

这是将数据加载到缓冲区的一般方法,该缓冲区是来自其他缓冲区的数据的线性组合。它可 以用来复制一个缓冲区,或者更有用的做一个交叉淡入淡出。像素值按整数计算,然后范围 限制为[0,255]0这意味着负面因素如预期的那样工作,并且缓冲组合的顺序并不重要。

句法

buffer:mix(factorbufferlj ・.・)

参数

• factorl这是内容bufferl被乘以的因素。这个因子被缩放了256倍。因此factorl , 256的值是1.0的一个因子。

-bufferl这是源缓冲区。它必须与目标缓冲区具有相同的形状。

可以有任何数量的因子/缓冲液对。

返回

nil

–Loads buffer with a crossfade between bufferl and buffer2

buffer:mix(256 - crossmix, bufferl, crossmiXj buffer2)

–muLtipLies all voLues in buffer by 0.75

– This can be used in pLace of buffer:fade

buffer:mix(192_, buffer)

ws2812.buffer:功率()

计算缓冲区的总能量需求。这只是所有像素值的总和(假定每个像素中的每种颜色消耗相同 的功率量)。一个真正的WS2812 (或WS2811)有三个20mA的恒流驱动器-R, G和B各一 个。脉冲宽度调制将使平均电流与像素值成线性比例关系。

句法

buffer:power()

返回

一个整数,它是所有像素值的总和。

–Dim the buffer to no more than the PSU can provide

local psu_current_ma = 1000

local led_current_ma = 20

local led_sum = psu_current_ma * 255 / led_current_ma

local p = buffer:power()

if p > led_sum then

buffer:mix(256 * led_sum / p> buffer) – power is now Limited

end

ws2812.buffer:褪色()

淡入或淡出。默认是out。将每个LED的每个字节乘以或除以给定值。用于淡化效果。

句法

buffer:fade(value direction])

参数

• value用来分割或乘以每个字节的值

-direction ws2812.FADE_IN或ws2812.FADE_OUT。默认为ws2812.FADE_OUT

buffer:fade(2)

buffercfade^, ws2812. FADE_IN)

ws2812.buffer:移位()

将(一块)缓冲区的内容向正或负方向移动。这允许简单的动画效果。可以使用标准的起始 和结束偏移量Lua表示法来指定缓冲区的一部分。负值从缓冲区的末端向后计数。

句法

buffer:shift(value [, mode], j]]])

参数

• value旋转缓冲区的像素数量。正值向前旋转,负值向后旋转。

・mode是使用的换挡模式。可以是一个ws2812.SHIFT_LOGICAL

或ws2812.SHIFT_CIRCULAR。在SHIFT丄OGICAL的情况下,释放的像素被设置为0 (关 闭)。在SHIFT.CIRCULAR的情况下,屢冲区被视为一个环形缓冲区,在另一端再次插入 一个像素。默认为SHIFT_LOGICAL。

-i是受影响缓冲区中的第一个偏移量。负值是允许的,从最后倒数。缺省值是1。

-j是受影响缓冲区中的最后一个偏移量。负值是允许的,从最后倒数。缺省值是-1。

返回

nil

buffer:shift(3)

ws2812.buffer:子()

这实现了提取功能string.sub o这些索引是在LED和所有相同的规则适用。

句法

bufferl:sub(i[, j])

参数

-i这是提取数据的开始。可以使用负值。

-j这是提取数据的结尾。可以使用负值。默认值是-1。

返回

包含提取的片段的缓冲区。

文档》英语”模块»XPT2046

XPT2046模块

以来 起源/贡献者 维护者 资源

2017年3月9日 Starofall / Frank Exoo 弗兰克Exoo xpt2046.c

XPT2046是一种廉价显示器使用的触摸控制器,通常与ILI9341显示控制器结合使用。该模块 基于 spapadim 和 PaulStoffregen 的库建立。

xpt2046.init () 启动XPT2046模块,从显示屏上读取触摸值。

xpt2046.setCa 1 ibration () 设置显示器的校准。

xpt2046.is7buched () 检查触摸面板是否被触摸。

xpt2046.getPosition () 使用校准值和给定的宽度和高度返回显示触摸的位置。

xpt2046.getPositionAvg () 为了创建更好的测量,这个函数读取三次位置,并以最小距离平均 两个位置。

xpt2046.getRaw () 从显示器读取原始值。

xpt2046.init ()

启动XPT2046模块,从显示屏上读取触摸值。调用spi.setup。前需要调

用xpt2046.init (参见示例)。由于ucg库也需要spi.setup()被调用,因此只需调用一 次并激活即可spi.FULLDUPLEX。在clock_div所用spi.setup()应为16或更高,如较低 的值可能产生不准确的结果。

句法

xpt2046.init(cs_pin, irq_pinheight, width)

参数

・cs_pin CS的GPI。引脚

• irq_pin GPI。引脚用于 irq

-height以像素显示高度

-width以像素为单位显示宽度

返回

nil

–Setup spi with ‘cLock_div’ of 16 and spi. FULLDUPLEX

spi.setup(l, spi.MASTER, spi.CPOL_LOW, spi・CPHA_LOW, 8, 16,spi.FULLDUPLEX) --SETTING UP DISPLAY (using ucg moduLe)

local disp = ucg.ili9341_18x240x320_hw_spi(8j 4, 0) disp:begin(0)

–SETTING UP TOUCH

xpt2046.init(2J1,320,240)

xpt2046.setcalibration(198, 1776, 1762, 273)

xpt2046.setCalibration ()

设置显示器的校准。校准值可以通过使用xpt2046.getRaW()和读取边缘中的值来加以考 虑。

句法

xpt2046.setCalibration(xlj yl, x2, y2)

参数

-Xl原始X值在左上角

-yl原始的y值在左上角

-x2原始X值在右下角

-y2原始的y值在右下角

返回

nil

xpt2046.isTouched ()

检查触摸面板是否被触摸。

句法

xpt2046.isTouched()

返回

true如果显示被触摸,否则false

if(xpt2046.isTouched()) then local x, y = xpt2046.getPosition() print(x ・.,-H ・・ y)

end

xpt2046.getPosition ()

使用校准值和给定的宽度和高度返回显示触摸的位置。可以在中断引脚回调中使用,以在触 摸触摸屏时返回坐标。

句法

xpt2046 ・ getPosition()

返回

返回x和y的位置。

–Setup spi with ‘cLock_div’ of 16 and spi. FULLDUPLEX

spi.setup(l, spi.MASTER, spi.CPOL_LOW, spi.CPHA_L0W3 8, 16,Spi.FULLDUPLEX) --SETTING UP TOUCH

cs_pin = 2 – GPI04

irq_pin = 3 – GPIO0

height = 240

width = 320

xpt2046.init(cs_pinj irq_pinwidth, height) xpt2046.setcalibration(198, 1776, 1762, 273) gpio.mode(irq_pinjgpio.INT,gpio, PULLUP) gpio.trig(irq_pinj “down”, function()

print(xpt2046.getPosition())

end)

xpt2046.getPositionAvg ()

为了创建更好的测量,这个函数读取三次位置,并以最小距离平均两个位置。

句法

xpt2046 ・getPositionAvg()

返回

返回x和y的位置。

local Xj y = xpt2046.getPositionAvg()

print(x…y)

xpt2046.getRaw ()

从显示器读取原始值。用于调试和自定义转换。

句法

xpt2046.getRaw()

返回

返回x和y的位置作为原始值。

local rawX, rawY = xpt2046.getRaw() print(rawX …“-”…rawY)

继续阅读