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()