字符串函数mv和831笔记

95 篇文章 5 订阅
该代码示例展示了如何使用OpenMV摄像头通过串口与8a8k设备进行通信,包括发送图片信息、接收和解析命令。OpenMV端首先初始化串口,设置波特率,并通过定时器检查串口数据。当接收到特定命令时,如cmdA和cmdB,OpenMV会发送响应,如调整LED状态或发送角度数据。同时,文章还包含了一段Python串口通信代码,用于与OpenMV交互并处理接收到的数据。
摘要由CSDN通过智能技术生成
23     uart.write("$7$"+str(pic.width()))      #原始图片宽度 
24     uart.write(str(pic.height()))           #原始图片高度 
25     uart.write(str(formate))                #原始图片格式 
26     uart.write(str(pic.size())+"\n")        #发送图片的字节数 
27 
 
28     uart.write("$")                         #图片头帧 
29     uart.write(pic)                         #图片 
30     uart.write("$_$")                       #图片尾帧 

mv。串口比赛中可以用,接收字符串中判断

mv--115200
8a8k---串口3,P00-rxd3,P01txd3---  mv连接
8a8k--串口1电脑串口助手,调试。

8a8k发送 ReccmdA给openmv,
mv收到之后,进行判断,然后

mv端代码先发送
LED=0#,
再发送angle-x=1.3#给8a8k。

8a8k串口3收到数据,判断LED=0,再提取数据(在超时之内),将数据发送给mv,print出来,同时串口1发给串口助手,打印出来。测试数据是不是正常。

## mv端代码

```cpp
# Untitled - By: Administrator - 周四 四月 7 2022

import sensor, image, time
from pyb import UART
from pyb import Pin, Timer, LED

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

#uart=UART(1,9600)  #PA9 txd   PA10--rxd 微翻weact 版OPENMV

uart = UART(3, 115200)  #正式openmv
uart.init(115200, bits=8, parity=None, stop=1) # init with given parameters timeout_char=1000

clock = time.clock()


g_uart_cmdA_flag=0   # 将变量声明为全局变量,如此才可改变其数值
g_uart_cmdB_flag=0

def Uart_recv():  # 串口接收数据
    global g_uart_cmdA_flag
    global g_uart_cmdB_flag

    if (uart.any()):   # 更新串口接收数据
        recv_data = eval(str(uart.read()))
        print(recv_data)
        #uart.write(recv_data)
        if ("Rec" in recv_data) :
            print("Openmv has recved CMD data.")
            if ("cmdA" in recv_data):
                g_uart_cmdA_flag = 1
                print("Ready for cmdA !")

            if ("cmdB" in recv_data):
                g_uart_cmdB_flag = 1
                print("Ready for cmdB !")

#--------------------------------定时器部分 start
is_need_send_data=False

def uart_time_tick(timer):
    global is_need_send_data
  #  uart.write("tick = true ^^^^^^\r\n ")
    is_need_send_data=True


##5ms读取一次检测一次串口,t=5ms f=1/t=200hz
tim = Timer(4, freq=5)      # create a timer object using timer 2 - trigger at 100Hz
tim.callback(uart_time_tick)          # set the callback to our tick function
#--------------------------------定时器结束

angle_x =10.2
xmm=896

#--------------------------------

while(True):
    clock.tick()
    if  is_need_send_data==False:
        continue    #注意continue用法,退出当前的循环一次,不执行后面的语句
    if is_need_send_data==True:
        is_need_send_data =False
       # uart.write("is_need_send_data = False *******\r\n ")
        Uart_recv()
        #time.sleep(500)
        img = sensor.snapshot()
        if g_uart_cmdA_flag ==1  :
           # uart.write("loc"+(str)adata+"num"+(str)bdata+"#")   # 串口发送
           # time.sleep(1000)
            uart.write("LED=0#")
            time.sleep(2)
            uart.write("angle_x=%0.2f#"%(angle_x))
            angle_x=angle_x+1.2
            if angle_x>2000:
                angle_x=10.2
            g_uart_cmdA_flag = 0

        if g_uart_cmdB_flag ==1  :
            #time.sleep(1000)
            uart.write("LED=1#")
            uart.write("xmm=%d#"%(xmm))
            g_uart_cmdB_flag = 0

V=831==和电脑串口通信1111

用PG6和PG7两个串口,是串口 1,需要查看下串口号哦。
在这里插入图片描述

import serial

ser = serial.Serial("/dev/ttyS1", 115200, timeout=0.01)
ser.write(b"Heeea!!!\n")             # 输入需要通讯的内容 必须是字节型

while True:
#     data = ser.read_all()
    data = ser.read(10)
    if data:
        rec_str = data.decode('utf-8')
      #  print(rec_str)
        if ("Rec" in rec_str) :
            #print("has recved CMD data.\r\n")
            if ("cmdA" in rec_str):
                print("Ready for cmdA !")
                ser.write(b"Hello cmdA !!!\n")             # 输入需要通讯的内容 必须是字节型

            if ("cmdB" in rec_str):
                print("Ready for cmdB !")
                ser.write(b"Hello cmdB !!!\n")             # 输入需要通讯的内容 必须是字节型

python串口代码学习

#!/usr/bin/python
# coding=UTF-8

import serial

###################################################
#
# 功 能: 将接收到的数据已hex显示
# 参 数: 串口接受到的数据
# 返 回: 转换后的数据
#
###################################################

def hexshow(data):
    hex_data = ''
    hLen = len(data)
    for i in xrange(hLen):
        hvol = ord(data[i])
        hhex = '%02x' % hvol
        hex_data += hhex+' '
    print 'hexshow:', hex_data


###################################################
#
# 功 能: 将需要发送的字符串以hex形式发送
# 参 数: 待发送的数据
# 返 回: 转换后的数据
#
###################################################

def hexsend(string_data=''):
    hex_data = string_data.decode("hex")
    return hex_data



if __name__ == '__main__':
    serial = serial.Serial('/dev/ttyS0', 115200)
    print serial
    if serial.isOpen():
       print("open success")
    else:
        print("open failed")


    try:
        while True:
            count = serial.inWaiting()
            if count > 0:
                data = serial.read(count)
                if data != b'':
                    print("receive:", data)
                    serial.write(data)
                else:
                    serial.write(hexsend(data))
    except KeyboardInterrupt:
        if serial != None:
            serial.close()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值