MicroPython

您所在的位置:网站首页 esp8266显示wifi信号强度 MicroPython

MicroPython

2024-01-22 21:37| 来源: 网络整理| 查看: 265

MicroPython-On-ESP8266——WIFI与网络 1 WIFI功能

esp8266芯片的核心就是与wifi功能,对应使用micropython里面的network模块。

wifi模块有两种模式

STA_IF 也就是station站点模式,将本芯片作为客户端连接到已知的无线网络上AP_IF 也就是AP/热点模式,将本芯片作为无线热点,等待其他客户端连接上来

配置wifi模式的基本代码如下

>>> import network >>> sta_if = network.WLAN(network.STA_IF) >>> ap_if = network.WLAN(network.AP_IF)

后面就结合代码示例来具体了解两种模式

1.1 WIFI热点网络创建 import network ap = network.WLAN(network.AP_IF) # 指定用ap模式 ap.active(True) # 启用wifi前需要先激活接口 ap.config(essid="EUROPA-AP") # 设置热点名称 ap.config(authmode=3, password='1234567890') # 设置认证模式与密码 1.1.1 config可设置参数 mac, MAC地址essid, 热点名称channel, wifi通道hidden, 是否隐藏authmode, 认证模式 0 – 无密码1 – WEP认证2 – WPA-PSK3 – WPA2-PSK4 – WPA/WPA2-PSK password, 连接密码dhcp_hostname, DHCP主机名

config函数,参数指定值时为设定对应配置,不指定参数时就是读取配置

1.1.2 其他限制

使用AP热点模式时,esp8266芯片可提供的连接数量是有限的,像我使用的青蛙创客europa开发板它限制最多支持4个客户端连接。

1.2 连接现有WIFI网络 import network import utime sta_if = network.WLAN(network.STA_IF) # 配置wifi模式为station if not sta_if.isconnected(): # 判断有无连接 print('connecting to network...') sta_if.active(True) # 激活wifi接口 sta_if.connect('', '') # 连接现有wifi网络,需要替换为已知的热点名称和密码 while not sta_if.isconnected(): utime.sleep(1) # 未连接上就等待一下,直到连接成功 print('network config:', sta_if.ifconfig()) # 输出当前wifi网络给自己分配的网络参数 # ('192.168.1.100', '255.255.255.0', '192.168.1.1', '8.8.8.8') 2 连接网络 (TCP sockets)

一旦wifi网络连接成功,那咱们就可以畅游网络,网络连接在micropython中主要是使用或封装socket模块来实现。

七层网络协议知道吧,socket模块应该是介于应用层和网络层+传输层中间的一个抽象封装,为上层应用层提供直接使用底层网络的能力。

2.1 socket通信的基本流程

既然是通信,那就是两方之间对话。socket通信中需要区分是服务端还是客户端,服务端自然是提供一个网络服务,等待其他客户连接上来并请求数据, 客户端自然是主动的那一方,连接到指定的服务端然后干一些不可描述的事情。

咱们看一下通信的流程图 在这里插入图片描述

这里姑且只放此流程图大家粗品一下,要细品的还是得从度娘下手,这里不扩展了。毕竟把不可描述的手伸向度娘,大家都熟。

2.2 socket客户端 2.2.1 使用socket来收发数据 def http_get(url): import socket _, _, host, path = url.split('/', 3) addr = socket.getaddrinfo(host, 80)[0][-1] s = socket.socket() s.connect(addr) s.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8')) while True: data = s.recv(100) if data: print(str(data, 'utf8'), end='') else: break s.close() http_get("https://www.baidu.com/more/") 2.2.2 已封装好的socket模块urequests

python语言中requests模块简直是网络功能使用的首选模块,特别是广泛应用于爬虫圈。 micropython里面大神们也参考requests库将socket封装出一个urequests库。

request库地址

用法上面基本一致,简单是我辈福音

import urequests rep = urequests.get("https://www.baidu.com/more/") print(rep.text) rep = urequest.post("http://xxx.com", date=...) 2.4 socket服务端 import machine pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 2, 4, 5, 12, 13, 14, 15)] html = """ ESP8266 Pins ESP8266 Pins PinValue %s """ import socket addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.bind(addr) s.listen(1) print('listening on', addr) while True: cl, addr = s.accept() print('client connected from', addr) cl_file = cl.makefile('rwb', 0) while True: line = cl_file.readline() if not line or line == b'\r\n': break rows = ['%s%d' % (str(p), p.value()) for p in pins] response = html % '\n'.join(rows) cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') cl.send(response) cl.close()

开发板作为socket服务端使用时,需要结合wifi使用。用AP模式开热点或者连接上现有wifi都是可以的。

我这边用AP模式,启动服务后,电脑或手机连接上热点并查看网关地址效果如下: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3