5. [Micropython]TPYBoard v202 Network连接网络¶
版权声明:翻译整理属于TPYBoard,转载时请以超链接形式标明文章原始出处和作者信息及本声明
5.1. 实验目的¶
- 学习在PC机系统中网络(network)的使用方法
- 学习TPYBoard V202连接网络的使用
5.2. 准备工作¶
- TPYBoard v202 1块
- micro USB数据线 1条
- 电脑 1台(本次实验以win7为例)
- 所需软件 MicroPython File Uploader(MFU) 点击下载
Network库的使用方法
网络模块用于配置WiFi连接。一共两种模式,模式一:是TPYBoard v202当STA节点,即连接路由器的节点。模式二,是TPYBoard v202做为AP,充当路由。
TPYBoard v202 STA节点模式
import network
wlan = network.WLAN(network.STA_IF) # 创建一个站(当ESP8266连接到路由器时)接口
wlan.active(True) # 激活接口
wlan.scan() # 扫描接入点
wlan.isconnected() # 检查站点是否连接到路由器
wlan.connect('essid', 'password') # 连接到路由器
wlan.config('mac') # 获取接口的MAC地址
wlan.ifconfig() # 获取接口的IP / netmask / gw / DNS地址
#检查是否连接是否建立
wlan.isconnected()
#检查接口是否活动
wlan.active()
#检查接口的网络设置
wlan.ifconfig()
TPYBoard v202自动连接本地网络:
from machine import Pin
import network
import time
def led_state():
p2 = Pin(2, Pin.OUT)
p2.value(0)
time.sleep_ms(500)
p2.value(1)
time.sleep_ms(500)
p2.value(0)
time.sleep_ms(500)
p2.value(1)
time.sleep_ms(500)
def do_connect():
sta_if = network.WLAN(network.STA_IF)
p2 = Pin(2, Pin.OUT)
sta_if.active(False)
if not sta_if.isconnected():
p2.value(0)
print('connecting to network...')
sta_if.active(True)
sta_if.connect('TurnipSmart', 'turnip2016')
while not sta_if.isconnected():
pass
if sta_if.isconnected():
print('connect success')
led_state()
print('network config:', sta_if.ifconfig())
do_connect()
只需要将上面代码写入到开发板中,复位重新运行程序后,就会看到蓝灯常亮(正在连接网络),然后蓝灯交替闪烁两次,打印connect success,证明已经连接到本地网络。
TPYBoard v202 AP模式
import network
ap = network.WLAN(network.AP_IF) #创建接入点接口
ap.active(True) # 激活接口
ap.config(essid='ESP-AP',password='123456') # 设计接入点的ESSID,密码为123456
也可以设置无密码开放模式,如下:
ap.config(essid='ESP-AP',authmode=0) # 设计接入点的ESSID,开放无密码模式
AuthMode有五种模式:
- 0 : OPEN
- 1 : WEP
- 2 : WPA-PSK
- 3 : WPA2-PSK
- 4 : WPA/WPA2-PSK
5.3. 实验一¶
实验要求
当TPYBoard v202未连接到网络时,LED亮起警示,当连接成功后,熄灭。
main.py程序代码
import network
from machine import Pin
sta_if = network.WLAN(network.STA_IF)
p2 = Pin(2, Pin.OUT)
#我们在这里把接入点接口禁用,方便观看实验效果,非实验可以去掉
sta_if.active(False)
if not sta_if.isconnected():
p2.value(0)
print('connecting to network...')
sta_if.active(True)
sta_if.connect('TurnipSmart', 'turnip2016')
while not sta_if.isconnected():
pass
if sta_if.isconnected():
print('connect success')
p2.value(1)
print('network config:', sta_if.ifconfig())
实验效果
当我们复位,把程序写进去的时候会看到TPYBoard V202板载的蓝灯亮起来,当连接成功后蓝灯熄灭,打印connect success。
5.4. 实验二¶
实验要求
当TPYBoard v202连接网络成功后,通过get方式向网址 http://old.tpyboard.com/esp8266/test.php 发起请求,带有一个参数val。 网站接收到请求后,判断参数val的值是否等于字符A,等于的话返回begin,反之返回error。TPYBoard v202收到begin后LED快闪2次。
发起HTTP GET请求的简单方法
def http_get(url):
_, _, 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()
main.py程序代码
import network
from machine import Pin
import socket
import urllib
import time
def led_state():
p2 = Pin(2, Pin.OUT)
p2.value(0)
time.sleep_ms(500)
p2.value(1)
time.sleep_ms(500)
p2.value(0)
time.sleep_ms(500)
p2.value(1)
def do_connect():
sta_if = network.WLAN(network.STA_IF)
p2 = Pin(2, Pin.OUT)
sta_if.active(False)
if not sta_if.isconnected():
p2.value(0)
print('connecting to network...')
sta_if.active(True)
sta_if.connect('essid', 'pwd')
while not sta_if.isconnected():
pass
if sta_if.isconnected():
print('connect success')
p2.value(1)
print('network config:', sta_if.ifconfig())
def http_get(url):
_, _, 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(50)
if data:
recive=str(data, 'utf8')
#print('recive:',recive)
print(str(data, 'utf8'), end='')
if(recive.find('begin')>-1):
led_state()
else:
break
s.close()
do_connect()
http_get('http://old.tpyboard.com/esp8266/test.php?val=A')