目录
导包:
import network,usocket,time
from machine import UART,Timer
from Maix import GPIO
from fpioa_manager import fm
usocket库
'''
构建 usocket 对象。
【af】: AF_INET→IPV4,AF_INET6 → IPV6;
【type】: SCOK_STREAM→TCP,SOCK_DGRAM→UDP;
【proto】: IPPROTO_TCP→TCP 协议,IPPROTO_UDP→UDP 协议。
(注:如果要构建 TCP 连接,可以使用默认参数配置,即不输入任何参数。)
'''
s=usocket.socekt(af=AF_INET, type=SOCK_STREAM,proto=IPPROTO_TCP)
'''
创建连接。
【address】:地址格式为 IP+端口。例:('192.168.1.115',10000)
'''
s.connect(address)
'''
发送。
【bytes】:发送内容格式为字节
'''
s.send(bytes)
'''
接收数据。
【bufsize】:单次最大接收字节个数。
'''
s.recv(bufsize)
'''
绑定,用于服务器角色
'''
s.bind(address)
'''
监听,用于服务器角色。
【backlog】:允许连接个数,必须大于 0。
'''
s.listen([backlog])
'''
接受连接,用于服务器角色。
'''
s.accept()
注册引脚:
'''
【pin】芯片外部 IO
【function】芯片功能
【force】=True 则强制注册,清除之前的注册记录
'''
fm.register(pin,function,force=False)
fm.register(8, fm.fpioa.GPIOHS0, force=True)
fm.register(7, fm.fpioa.UART2_TX, force=True)
fm.register(6, fm.fpioa.UART2_RX, force=True)
构造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,timeout=1000,read_buf_len=4096)
AT指令
'''
临时设置指令。
【baudrate】:UART波特率
【databits】:数据位
5: 5 bit 数据位
6: 6 bit 数据位
7: 7 bit 数据位
8: 8 bit 数据位
【stopbits】:停止位
1: 1 bit 停止位
2: 1.5 bit 停止位
3: 2 bit停止位
【parity】:校验位
0∶ None
1 : Odd
2: Even
【flow control】:流控
0∶不使能流控
1∶使能RTS
2∶使能CTS
3∶同时使能RTS和CTS
响应:OK
'''
AT+UART_CUR=<baudrate> ,<databits> , <stopbits>, <parity> ,<flow control>
AT+UART_CUR=921600,8,1,0,0
'''
握手。
响应:OK
'''
AT
例程:
例程思路
'''
main.py
#ESP8266通过WiFi与服务器通信
## 通过 WiFi 模块编程实现 K210 的 Socket 通信,数据收发.
##作者:01Studio
'''
#encoding:utf-8
import network,usocket,time
from machine import UART,Timer
from Maix import GPIO
from fpioa_manager import fm
SSID='********' # WiFi 账号
KEY='********' # WiFi 密码
#socket 数据接收中断标志位
socket_node = 0
###### 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,timeout=1000,read_buf_len=4096)
#WiFi 使能函数
def wifi_enable(en):
global wifi_en
wifi_en.value(en)
#WiFi 对象初始化,波特率需要修改
def wifi_init():
global uart
wifi_enable(0)
time.sleep_ms(200)
wifi_enable(1)
time.sleep(2)
uart = UART(UART.UART2,115200,timeout=1000, read_buf_len=4096)
tmp = uart.read()
uart.write("AT+UART_CUR=921600,8,1,0,0\r\n")#发送AT指令临时修改配置
print(uart.read())#WiFi串口接收应答
#实测模块波特率太低或者缓存长度太短会导致数据丢失。
uart = UART(UART.UART2,921600,timeout=1000, read_buf_len=10240)
uart.write("AT\r\n")
tmp = uart.read()
print(tmp)
if not tmp.endswith("OK\r\n"):
print("reset fail")
return None
try:
nic = network.ESP8285(uart)
except Exception:
return None
return nic
############################
######### 主程序 ##########
############################
#构建 WiFi 对象并使能
wlan = wifi_init()
#正在连接印提示
print("Trying to connect... (may take a while)...")
#连接网络
wlan.connect(SSID,KEY)
#打印 IP 相关信息
print(wlan.ifconfig())
#创建 socket 连接,连接成功后发送“Hello 01Studio!”给服务器。
client=usocket.socket()
#client=usocket.socket(af=AF_INET,type=SOCK_DGRAM,proto=IPPROTO_UDP)
addr=('10.3.22.7',10000) #服务器 IP 和端口
client.connect(addr)#连接服务器
client.send('Hello 01Studio!\n')
a=u"你好"
client.send(a.encode('gbk'))
client.send(a+'\n')
client.settimeout(0.1)
#定时器回调函数
def fun(tim):
global socket_node
socket_node = 1 #改变 socket 标志位
#定时器 0 初始化,周期 1ms
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC,period=1, callback=fun)
while True:
if socket_node:
try:
data = client.recv(1024)
except OSError:
data = None
if data:
#data=data.decode('gbk')
client.send(data)
print("rcv:", len(data),data)
print(data)
socket_node = 0
else:
pass