0°

(八)ESPlorer系列:NodeMCU Wi-Fi使用方法

介绍

NodeMCU开发板基于ESP8266片上系统,它结合了Wi-Fi和微控制器的特性,可以在更短的时间内完成物联网应用原型设计的需求,并且只需几行Lua脚本。

Wi-Fi是用于短距离无线网络应用的无线LAN技术。它基于IEEE 802.11标准。

NodeMCU固件为网络应用程序提供事件驱动的API。NodeMCU wi-fi网络可用于连接,获取或上传数据到互联网。

NodeMCU Wi-Fi子系统定期在后台任务中运行。如果任何函数需要超过15毫秒,则可能导致wi-fi子系统崩溃。为了处理这些功能,NodeMCU有它们的API,通过它我们可以控制这个子系统。

 

(八)ESPlorer系列:NodeMCU Wi-Fi使用方法

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-32
  • pwd wi-fi密码字符8-64
  • auth身份验证方法,其中默认为wifi.OPEN(默认),还可以是wifi.WPA_PSKwifi.WPA2_PSKwifi.WPA_WPA2_PSK
  • channel通道号1-14默认= 6
  • hidden false =未隐藏,true =隐藏,默认= false
  • max最大连接数1-4默认= 4
  • beacon信标间隔时间范围为100-60000,默认值= 100
  • save将配置保存到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()

当前内容已被隐藏,您需要登录才能查看
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论