目录
介绍
NodeMCU开发板基于ESP8266片上系统,它结合了Wi-Fi和微控制器的特性,可以在更短的时间内完成物联网应用原型设计的需求,并且只需几行Lua脚本。
Wi-Fi是用于短距离无线网络应用的无线LAN技术。它基于IEEE 802.11标准。
NodeMCU固件为网络应用程序提供事件驱动的API。NodeMCU wi-fi网络可用于连接,获取或上传数据到互联网。
NodeMCU Wi-Fi子系统定期在后台任务中运行。如果任何函数需要超过15毫秒,则可能导致wi-fi子系统崩溃。为了处理这些功能,NodeMCU有它们的API,通过它我们可以控制这个子系统。
NodeMCU Wi-Fi站和接入点模式
NodeMCU有四种Wi-Fi模式,
站(STA)模式:
在此模式下,NodeMCU加入现有网络。NodeMCU连接现有的Wi-Fi路由器。这提供了通过Wi-Fi路由器对NodeMCU的互联网访问。
接入点(AP)模式:
在此模式下,NodeMCU创建自己的网络,其他人可以加入此网络。它具有本地IP地址,其他设备可以使用该地址连接到该地址。NodeMCU将下一个可用IP分配给其他设备。
站+接入点(BOTH)模式:
这是一种模式,它创建自己的网络,同时加入另一个现有网络。
Wi-Fi关闭模式:
在此模式下,Wi-Fi保持关闭状态。
如上图所示,NodeMCU(AP模式)创建无线LAN,其他支持Wi-Fi的设备(如PC /笔记本电脑,智能手机,NodeMCU(STA模式)等)可以连接到该无线LAN。NodeMCU(AP模式)为连接到它的每个设备分配本地IP地址。
NodeMCU Wi-Fi功能
让我们看看可用于控制Wi-Fi操作的功能。
wifi.setmode()
此功能用于配置要使用的Wi-Fi模式。NodeMCU可以在以下四种Wi-Fi模式之一中运行:
- 站模式
- 接入点(AP)模式
- 站+ AP模式
- WiFi关闭
当使用组合的Station + AP模式时,两个网络将使用相同的信道,因为无线电只能收听单个信道。
注意即使设备已关闭,WiFi配置也将保留,直至更改为止。
句法: wifi.setmode(mode[, save])
参数:
Mode
:wifi.STATION:站模式
wifi.SOFTAP:接入点模式。除非您更改该值,否则将为NodeMCU设备提供本地IP地址192.168.4.1,并为您的计算机分配下一个可用的IP地址,例如192.168.4.2。
wifi.STATIONAP: wifi.STATION和wifi.SOFTAP模式。它允许您创建本地WiFi连接并连接到另一个WiFi路由器。
wifi.NULLMODE:将WiFi模式更改为NULL_MODE将使wifi进入类似于MODEM_SLEEP的低功耗状态,前提是wifi.nullmodesleep(false)尚未被调用。
Save
:选择是否将wifi模式保存为闪存。如果为true,则即使在重启/复位后也会保留配置(默认)。如果为false,则在重启/复位后不会保留配置。
返回:设置后的当前模式
例:
wifi.setmode(wifi.STATION)
wifi.sta.config()
此功能设置WiFi站配置。
句法: wifi.sta.config(station_config)
参数:
station_config
:包含站的配置数据的表
ssid
: SSID字符串小于32个字节。pwd
:密码字符串,为0-64。空字符串表示开放的WiFi接入点。auto
:true
启用自动连接并连接到接入点,因此使用自动启用时无需调用wifi.sta.connect()
。false
禁用自动连接并保持与接入点的连接。默认为true。bssid
: BSSID字符串,包含接入点的MAC地址(可选)。如果您有多个具有相同SSID的接入点,则可以设置BSSID。
例如“DE:A1:A6:52:F1:ED”
save
:将站配置保存到闪存。如果true
,则即使在重启/复位后也会保留配置(默认)。如果false
,则在重启/复位后不会保留配置。Event callbacks
仅在WIFI_SDK_EVENT_MONITOR_ENABLE
取消注释时才可用user_config.h
注意:为确保在引导时处理所有站事件,必须尽早init.lua
使用wifi.sta.config()
或中注册所有相关的回调wifi.eventmon.register()
。
connected_cb:当站连接到接入点时执行的回调。(可选的)
返回的项目:
SSID:接入点的SSID。(格式:字符串)
BSSID:接入点的BSSID。(格式:字符串)
channel:接入点所在的通道。(格式:数字)
disconnected_cb:当站与接入点断开连接时执行的回调。(可选的)
返回的项目:
SSID:接入点的SSID。(格式:字符串)
BSSID:接入点的BSSID。(格式:字符串)
REASON:请参阅下面的wifi.eventmon.reason。(格式:数字)
authmode_change_cb:当接入点更改授权模式时执行的回调。(可选的)
返回的项目:
old_auth_mode:旧的wifi授权模式。(格式:数字)
new_auth_mode:新的wifi授权模式。(格式:数字)
got_ip_cb:当站从接入点收到IP地址时执行的回叫。(可选的)
返回的项目:
IP:分配给工作站的IP地址。(格式:字符串)
netmask: 子网掩码。(格式:字符串)
gateway:工作站连接的接入点的IP地址。(格式:字符串)
dhcp_timeout_cb:站DHCP请求已超时。(可选的)
返回空白表。
返回:返回true
成功或false
失败。
例:
station_cfg={}
station_cfg.ssid="AccessPointA"
station_cfg.pwd="password"
wifi.sta.config(station_cfg)
wifi.sta.connect()
此功能用于在站模式下连接到已配置的AP。只有在wifi.sta.config()中禁用了自动连接时才需要调用此函数。
句法: wifi.sta.connect([connected_cb])
参数:
connected_cb
:当站连接到接入点时执行回调。(可选的)- 表格中返回的项目:
SSID
:接入点的SSID。(格式:字符串)BSSID
:接入点的BSSID。(格式:字符串)channel
:接入点所在的通道。(格式:数字)
返回: null
wifi.sta.autoconnect()
此自动以站模式连接到AP。
句法: wifi.sta.autoconnect(auto)
参数:
auto
:设置0表示禁用自动连接,设置1表示启用自动连接
返回: null
例:
wifi.sta.autoconnect(1)
wifi.suspend()
此功能用于暂停Wifi以减少电流消耗。
句法: wifi.suspend({duration[, suspend_cb, resume_cb, preserve_mode]})
参数:
duration
:暂停持续时间,以微秒(μs)为单位。如果暂停持续时间为0,则暂停将无限期(范围:0或50000 – 268435454μs(0:4:28.000454))suspend_cb
: WiFi暂停时执行回调。(可选的)resume_cb
:当WiFi从暂停中唤醒时执行回调。(可选的)preserve_mode
:通过节点睡眠保留当前的WiFi模式。(可选,默认值:true)。如果为true,则当NodeMCU恢复时,Station和Station + AP模式将自动重新连接到先前配置的接入点。如果为false,则丢弃WiFi模式,NodeMCU进入wifi.NULL_MODE。重启后,WiFi模式将恢复为原始模式。
返回:
suspend_state
如果没有提供参数,将返回当前的WiFi暂停状态
状态:
0 WiFi是工作着的。
1个WiFi暂停待定。(等待空闲任务)
2个WiFi暂停。
wifi.sta.gethostname()
用于获取当前站主机名。
句法: wifi.sta.gethostname()
返回:当前配置的主机名
例:
print("Current hostname is: \""..wifi.sta.gethostname().."\"")
wifi.sta.getip()
用于在站点模式下获取IP地址,网络掩码和网关地址。
句法: wifi.sta.getip()
返回:它IP address, netmask, gateway
以字符串形式返回地址,例如“192.168.0.111”。如果IP =“0.0.0.0”,则返回nil。
例:
print(wifi.sta.getip())
wifi.ap.config()
此功能在AP模式下设置SSID和密码。密码至少8个字符!如果不这样做,它将默认为无密码而不设置SSID!它仍然可以作为接入点使用,但使用默认SSID,例如NODE_9997C3。
句法: wifi.ap.config(cfg)
参数:
cfg
:要保存配置的表ssid
: wi-fi SSID字符1-32pwd
: wi-fi密码字符8-64auth
:身份验证方法,其中默认为wifi.OPEN
(默认),还可以是wifi.WPA_PSKwifi.WPA2_PSKwifi.WPA_WPA2_PSK
channel
:通道号1-14默认= 6hidden
: false =未隐藏,true =隐藏,默认= falsemax
:最大连接数1-4默认= 4beacon
:信标间隔时间范围为100-60000,默认值= 100save
:将配置保存到flash.true配置将通过电源循环保留(默认)。通过电源循环不会保留错误配置。Event callbacks
仅在WIFI_SDK_EVENT_MONITOR_ENABLE
取消注释时才可用user_config.h
注意:为了保证所有的SoftAP事件在启动时处理,所有相关的回调必须尽早在注册init.lua
使用两种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="myssid"
cfg.pwd="mypassword"
wifi.ap.config(cfg)
wifi.ap.setip()
此功能在AP模式下设置IP地址,网络掩码和网关地址。
句法: wifi.ap.setip(cfg)
参数:
cfg
:该表包含IP地址,网络掩码和网关
返回:true
如果成功,false
否则返回
例:
cfg =
{
ip="192.168.1.1",
netmask="255.255.255.0",
gateway="192.168.1.1"
}
wifi.ap.setip(cfg)
wifi.ap.setmac()