当前位置:   article > 正文

k210、openmv串口打包通信_openmv连接k210

openmv连接k210

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

k210、openmv串口打包通信


前言

提示:这里可以添加本文要记录的大概内容:

设备间可以通过串口的方式来实现简单的通信,k210和openmv串口通信的方式相识,大部分代码可以通用。


提示:以下是本篇文章正文内容,下面案例可供参考

一、引入库

k210:

from machine import UART,Timer #串口库函数
from fpioa_manager import fm   #GPIO重定向函数
  • 1
  • 2

(openmv不需要这一步)

二、设置串口TX/RX引脚

k210:

fm.register(4, fm.fpioa.UART1_RX, force=True)
fm.register(5, fm.fpioa.UART1_TX, force=True)
  • 1
  • 2

openmv串口固定无需指定

三、初始化串口

k210:

uart = UART(UART.UART1, 115200, read_buf_len=4096)
  • 1

openmv:

uart = UART(3, 115200, timeout_char=1000)
  • 1

四、主函数

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)  # 延时等待
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

rx_buff.clear() # 这一行接收完数据后清空 rx_buff非常重要,如果是连续且需要实时监测的数据,不清空的话可能会导致数据延迟,表现出来的效果就是反应迟钝,严重时可能会卡死。

四、k210串口数据打包通信完整代码

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)  # 延时等待

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

总结

以上就是k210和openmv串口打包通信的一些相关代码,希望能帮助到有需要的朋友。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/399539
推荐阅读
相关标签
  

闽ICP备14008679号