赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
k210、openmv串口打包通信
提示:这里可以添加本文要记录的大概内容:
设备间可以通过串口的方式来实现简单的通信,k210和openmv串口通信的方式相识,大部分代码可以通用。
提示:以下是本篇文章正文内容,下面案例可供参考
k210:
from machine import UART,Timer #串口库函数
from fpioa_manager import fm #GPIO重定向函数
(openmv不需要这一步)
k210:
fm.register(4, fm.fpioa.UART1_RX, force=True)
fm.register(5, fm.fpioa.UART1_TX, force=True)
openmv串口固定无需指定
k210:
uart = UART(UART.UART1, 115200, read_buf_len=4096)
openmv:
uart = UART(3, 115200, timeout_char=1000)
state = 0 rx_buff = [] tx_flag = 0 #定义串口发送打包的数据函数 def Receive(data): global state #状态标志位 global rx_buff #数据缓冲区 global tx_flag #用于表示是否需要发送数据的标志 if state == 0: #当状态 state == 0,如果接收到的数据为 0xb3,则进入状态 1;否则重置状态为 0 if data == 0xb3: state = 1 else: state = 0 rx_buff.clear() elif state == 1: if data == 0xb3: state = 2 else: state = 0 rx_buff.clear() elif state == 2:#当状态 state == 2,将接收到的数据追加到接收缓冲区 rx_buff 中 rx_buff.append(data) state = 3 elif state == 3: rx_buff.append(data) state = 4 elif state == 4:#当状态 state == 4,如果接收到的数据为 0x5b,则提取 rx_buff 中的第一个和第二个字节作为有效数据 x 和 y,并输出 if data == 0x5b: x = rx_buff[0] y = rx_buff[1] print("Received: x =", x, "y =", y) rx_buff.clear() # 清空 rx_buff uart.read(uart.any()) state = 0 # 重置 state 为 0 tx_flag = 1 # 设置标志位,表示需要发送数据 else: state = 0 rx_buff.clear() #定义串口打包发送函数 def send(c,d): FH = bytearray([0xb3,0xb3,c, d,0x5b])#打包数据 uart.write(FH);#串口发送数据 while True: if uart.any(): data = uart.readchar() # 从串口读取一个字节数据 Receive(data) # 处理接收到的数据 if tx_flag: Send(c, d) # 发送数据给设备 tx_flag = 0 # 重置标志位,表示数据已发送 #utime.sleep_ms(10) # 延时等待
rx_buff.clear() # 这一行接收完数据后清空 rx_buff非常重要,如果是连续且需要实时监测的数据,不清空的话可能会导致数据延迟,表现出来的效果就是反应迟钝,严重时可能会卡死。
from machine import UART,Timer #串口库函数 from fpioa_manager import fm #GPIO重定向函数 #设置串口TX/RX引脚 fm.register(4, fm.fpioa.UART1_RX, force=True) fm.register(5, fm.fpioa.UART1_TX, force=True) #初始化串口 uart = UART(UART.UART1, 115200, read_buf_len=4096) uart.write('Hello world!') state = 0 rx_buff = [] tx_flag = 0 #定义串口发送打包的数据函数 def Receive(data): global state #状态标志位 global rx_buff #数据缓冲区 global tx_flag #用于表示是否需要发送数据的标志 if state == 0: #当状态 state == 0,如果接收到的数据为 0xb3,则进入状态 1;否则重置状态为 0 if data == 0xb3: state = 1 else: state = 0 rx_buff.clear() elif state == 1: if data == 0xb3: state = 2 else: state = 0 rx_buff.clear() elif state == 2:#当状态 state == 2,将接收到的数据追加到接收缓冲区 rx_buff 中 rx_buff.append(data) state = 3 elif state == 3: rx_buff.append(data) state = 4 elif state == 4:#当状态 state == 4,如果接收到的数据为 0x5b,则提取 rx_buff 中的第一个和第二个字节作为有效数据 x 和 y,并输出 if data == 0x5b: x = rx_buff[0] y = rx_buff[1] print("Received: x =", x, "y =", y) rx_buff.clear() # 清空 rx_buff uart.read(uart.any()) state = 0 # 重置 state 为 0 tx_flag = 1 # 设置标志位,表示需要发送数据 else: state = 0 rx_buff.clear() #定义串口打包发送函数 def send(c,d): FH = bytearray([0xb3,0xb3,c, d,0x5b])#打包数据 uart.write(FH);#串口发送数据 while True: if uart.any(): data = uart.readchar() # 从串口读取一个字节数据 Receive(data) # 处理接收到的数据 if tx_flag: Send(c, d) # 发送数据给设备 tx_flag = 0 # 重置标志位,表示数据已发送 #utime.sleep_ms(10) # 延时等待
以上就是k210和openmv串口打包通信的一些相关代码,希望能帮助到有需要的朋友。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。