目录
导包:
import network, time
from machine import UART
from Maix import GPIO
from fpioa_manager import fm
network库
'''
构建 WIFI 模块连接对象。ESP8285 表示模块型号。
参数:
【uart】串口的对象
返回值:
网卡对象。
'''
wlan = network.ESP8285(uart)
'''
连接热点(AP/路由器)
参数:
【ssid】: 热点的账号
【key】: 热点的密码
返回值:
无, 如果发生错误会抛出异常。
'''
wlan.connect(ssid, key)
'''
查看wifi连接信息,目前network不支持设置网卡配置
参数:
无
返回值:
tuple 类型, 元素都是字符串:(ip, netmask, gateway, dns_server, dhcp_server, mac, ssid), 如果没有查询到或者无效,值为"0"
'''
wlan.ifconfig()
'''
查看wifi是否连接
参数:
无
返回值:
True: 已经连接
False: 断开连接
'''
wlan.isconnected()
'''
断开 wifi 连接
参数:
无
返回值:
无
'''
wlan.disconnected()
'''
扫描周围的热点信息
参数:
无
返回值:
一个 list对象, 每个元素包含了一个字符串, 字符串来自AT模块的响应,内容和esp8285的AT指令文档所描述的相同,如下:ecn, ssid, rssi,mac, channel, freq offset, freq cali, pairwise_cipher, group_cipher, bgn, wps。
ecn:加密⽅式
0:OPEN
1:WEP
2:WPA_PSK
3:WPA2_PSK
4:WPA_WPA2_PSK
5:WPA2_Enterprise(⽬前 AT 不⽀持连接这种加密 AP)
ssid:字符串参数,AP 的 SSID
rssi:信号强度
mac:字符串参数,AP 的 MAC 地址
channel:信道号
freq offset:AP 频偏,单位:kHz。此数值除以 2.4,可得到 ppm 值
freq cali:频偏校准值
pairwise_cipher:
0:CIPHER_NONE
1:CIPHER_WEP40
2:CIPHER_WEP104
3:CIPHER_TKIP
4:CIPHER_CCMP
5:CIPHER_TKIP_CCMP
6:CIPHER_UNKNOWN
group_cipher: 定义与 pairwise_cipher 相同
bgn: bit0 代表 b 模式; bit1 代表 g 模式; bit2 代表 n 模式;若对应 bit 为 1,表示该模式使能;若对应 bit 为 0,则该模式未使能。
wps:0,WPS 未使能;1,WPS 使能
'''
wlan.scan ()
'''
打开热点。
警告:截止 2020年11月26日前, MaixPy 的 socket 还未实现 listen / bind / accpet 等函数操作。
参数:
【ssid】: SSID
【key】: 密码
【chl】: WiFi信号的通道号
【ecn】: 加密方法, 有OPEN``WPA2_PSK等,参考本页ESP8285的常量部分, 默认值是3, 也就是ESP8285.WPA2_PSK
'''
wlan.enable_ap(ssid,key,chl=5,ecn=3) # 1
nic = network.ESP8285(uart) # 2
nic.enable_ap("maixpy", "12345678", 5, nic.OPEN)
nic.enable_ap("maixpy", "12345678", 5, network.ESP8285.OPEN) # 3
'''
关闭热点
'''
wlan.disable_ap()
'''
wlan.scan ()的返回值
'''
info_strs = ['4,"ChinaNet-lot0",-79,"c8:50:e9:e8:21:3e",1,-42,0,4,3,7,1',
'4,"TOPSTEP2G4",-70,"f8:e7:1e:0d:0d:f8",1,-57,0,4,4,7,0']
#需要对返回值进行处理才能使用
def wifi_deal_ap_info(info):
res = []
for ap_str in info:
ap_str = ap_str.split(",")
info_one = []
for node in ap_str:
if node.startswith('"'):
info_one.append(node[1:-1])
else:
info_one.append(int(node))
res.append(info_one)
return res
info_strs = ['4,"ChinaNet-lot0",-79,"c8:50:e9:e8:21:3e",1,-42,0,4,3,7,1',
'4,"TOPSTEP2G4",-70,"f8:e7:1e:0d:0d:f8",1,-57,0,4,4,7,0']
info = wifi_deal_ap_info(info_strs)
print(info)
#输出是:
[[4, 'ChinaNet-lot0', -79, 'c8:50:e9:e8:21:3e', 1, -42, 0, 4, 3, 7, 1],
[4, 'TOPSTEP2G4', -70, 'f8:e7:1e:0d:0d:f8', 1, -57, 0, 4, 4, 7, 0]]
#需要获得所有AP的SSID只需要使用:
for ap_info in info:
print(ap_info[1])
注册引脚:
'''
【pin】芯片外部 IO
【function】芯片功能
【force】=True 则强制注册,清除之前的注册记录
'''
fm.register(pin,function,force=False)
fm.register(8, fm.fpioa.GPIOHS0, force=True)#IO8连接着ESP8266的EN引脚(官方安装)
fm.register(7, fm.fpioa.UART2_TX, force=True)#IO7连接着ESP8266的RX0引脚(官方安装)
fm.register(6, fm.fpioa.UART2_RX, force=True)#IO6连接着ESP8266的TX0引脚(官方安装)
构造GPIO口的对象:
'''
【ID】内部 GPIO 编号
【MODE】 GPIO 模式;
GPIO.IN :输入模式
GPIO.OUT :输出模式
【PULL】 GPIO.PULL_UP :上拉
GPIO.PULL_DOWN :下拉
GPIO.PULL_NONE :无
【value】GPIO 初始化电平
1:高电平
0:低电平
'''
GPIO(ID,MODE,PULL,VALUE)
wifi_en=GPIO(GPIO.GPIOHS0, GPIO.OUT)
uart = UART(UART.UART2,115200, read_buf_len=4096)
例程:
例程思路
注意事项
连接上板子,再插ESP8266WiFi模块!!!
'''
main.py
官方例程
通过ESP8266WiFi模块连接无线路由器
'''
import network, time
from machine import UART
from Maix import GPIO
from fpioa_manager import fm
SSID='*******' # WiFi 账号
KEY='********' # WiFi 密码
###### WiFi 模块初始化 ######
#使能引脚初始化
fm.register(8, fm.fpioa.GPIOHS0, force=True)
wifi_en=GPIO(GPIO.GPIOHS0, GPIO.OUT)
#串口初始化
fm.register(7, fm.fpioa.UART2_TX, force=True)
fm.register(6, fm.fpioa.UART2_RX, force=True)
uart = UART(UART.UART2,115200, read_buf_len=4096)
#使能函数
def wifi_enable(en):
global wifi_en
wifi_en.value(en)
#使能 wifi 模块
wifi_enable(1)
time.sleep(1)
#构建 WiFi 对象
wlan = network.ESP8285(uart)
#正在连接印提示
print("Trying to connect... (may take a while)...")
#连接网络
wlan.connect(SSID,KEY)
#打印 IP 相关信息
print(wlan.ifconfig())