MAIX BIT K210与单片机通过串口通信

news/2025/2/23 3:10:56/

问题:在使用K210时使用官方介绍的串口通信,发送的数据为八位的数据,但是在使用中需要十六位的,因为所需数据可能涉及到百位。

解决方法:将数据打包后发送。

一下为打包函数:

def sending_data(cx,cy,ch):global uart;#frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];#data = bytearray(frame)data = ustruct.pack("<bbhhhb",              #格式为俩个字符俩个短整型(2字节)0x2C,                       #帧头10x12,                       #帧头2int(cx), # up sample by 4    #数据1int(cy), # up sample by 4    #数据2int(ch),0x5B)uart = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)uart.write(data);   #必须要传入一个字节数组

MAIX BIT K210端完整代码

# object detector boot.py
# generated by maixhub.comimport sensor, image, lcd, time
import KPU as kpu
import gc, sysimport ustruct#LED
from fpioa_manager import fm
from Maix import GPIO
io_led_red = 13
io_led_bule = 14
io_led_green = 12
fm.register(io_led_red, fm.fpioa.GPIO0)
fm.register(io_led_bule, fm.fpioa.GPIO1)
fm.register(io_led_green, fm.fpioa.GPIO2)
led_r=GPIO(GPIO.GPIO0, GPIO.OUT)
led_b=GPIO(GPIO.GPIO1, GPIO.OUT)
led_g=GPIO(GPIO.GPIO2, GPIO.OUT)#串口
from fpioa_manager import fm
from machine import UART
# need your connect hardware IO 10/11 to loopback
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(9, fm.fpioa.UART1_RX, force=True)def sending_data(cx,cy,ch):global uart;#frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];#data = bytearray(frame)data = ustruct.pack("<bbhhhb",              #格式为俩个字符俩个短整型(2字节)0x2C,                       #帧头10x12,                       #帧头2int(cx), # up sample by 4    #数据1int(cy), # up sample by 4    #数据2int(ch),0x5B)uart = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)uart.write(data);   #必须要传入一个字节数组def lcd_show_except(e):import uioerr_str = uio.StringIO()sys.print_exception(e, err_str)err_str = err_str.getvalue()img = image.Image(size=(224,224))img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00))lcd.display(img)def main(anchors, labels = None, model_addr="/sd/m.kmodel", sensor_window=(240, 240), lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):sensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)sensor.set_windowing(sensor_window)sensor.set_hmirror(sensor_hmirror)sensor.set_vflip(sensor_vflip)sensor.run(1)lcd.init(type=1)lcd.rotation(lcd_rotation)lcd.clear(lcd.WHITE)#uart = UART(UART.UART1, 500000, 8, 1, 0, timeout=1000, read_buf_len=4096)#白灯开机指示led_r.value(0)led_b.value(0)led_g.value(0)if not labels:with open('labels.txt','r') as f:exec(f.read())if not labels:print("no labels.txt")img = image.Image(size=(320, 240))img.draw_string(90, 110, "no labels.txt", color=(255, 0, 0), scale=2)lcd.display(img)return 1try:img = image.Image("startup.jpg")lcd.display(img)except Exception:img = image.Image(size=(320, 240))img.draw_string(90, 110, "loading model...", color=(255, 255, 255), scale=2)lcd.display(img)try:task = Nonetask = kpu.load(model_addr)kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) # threshold:[0,1], nms_value: [0, 1]while(True):img = sensor.snapshot()t = time.ticks_ms()objects = kpu.run_yolo2(task, img)t = time.ticks_ms() - tif objects:for obj in objects:pos = obj.rect()img.draw_rectangle(pos)img.draw_string(pos[0], pos[1], "%s : %.2f" %(labels[obj.classid()], obj.value()), scale=2, color=(255, 0, 0))#串口发送数据objx = (obj.x()+obj.w())/2objy = (obj.y()+obj.h())/2#uart.write("AB%sD%dE%dF" %(labels[obj.classid()], objx, objy))#print("AB%sD%dE%dF" %(labels[obj.classid()], objx, objy))if labels[obj.classid()] == "WWW":sending_data(1,objx,objy)led_r.value(0)if labels[obj.classid()] == "CAR":sending_data(2,objx,objy)led_b.value(0)if labels[obj.classid()] == "HHH":sending_data(3,objx,objy)led_g.value(0)else:sending_data(0,0,0)led_r.value(1)led_b.value(1)led_g.value(1)#print(00000)img.draw_string(0, 200, "t:%dms" %(t), scale=2, color=(255, 0, 0))lcd.display(img)except Exception as e:raise efinally:if not task is None:kpu.deinit(task)if __name__ == "__main__":try:labels = ["CAR", "WWW", "HHH"]anchors = [5.5, 6.90625, 5.0, 5.0, 4.1875, 4.125, 6.875, 5.25, 10.5, 9.9375]# main(anchors = anchors, labels=labels, model_addr=0x300000, lcd_rotation=0)main(anchors = anchors, labels=labels, model_addr="/sd/m.kmodel")except Exception as e:sys.print_exception(e)lcd_show_except(e)finally:gc.collect()

单片机端的数据处理代码

//Maix字节处理
void Maix_Byte_Get(u8 bytedata){static u8 rec_sta;//u8 check_val=0;maix_buf[rec_sta] = bytedata;if(rec_sta==0){if(bytedata==0x2C){rec_sta=1;}else{rec_sta=0;}}else if(rec_sta==1){if(bytedata==0x12){rec_sta=2;}else{rec_sta=0;}}else if(rec_sta==2){rec_sta=3;}else if(rec_sta == 3){maix.clas = maix_buf[3]<<8|maix_buf[2];rec_sta=4;}else if(rec_sta ==4){rec_sta=5;}else if(rec_sta == 5){maix.pos_x = maix_buf[5]<<8|maix_buf[4];rec_sta=6;}else if(rec_sta == 6){rec_sta=7;}else if(rec_sta == 7){maix.pos_y = maix_buf[7]<<8|maix_buf[6];rec_sta = 8;}else if(rec_sta == 8){rec_sta = 9;}else if(rec_sta ==9){rec_sta = 0;}}

http://www.ppmy.cn/news/832506.html

相关文章

使用51单片机模拟IIC从机,实现主机(51单片机)对模拟从机的读写操作

51单片机、IIC从机模拟、IIC协议、iiC读写 1.思路1.1写数据1.2读数据 2.从机IIC协议2.1起始信号和结束信号2.2从机读取和写数据2.3从机发送和接收ACK2.4判断主机发送读操作还是写操作2.5寄存器地址2.6主函数 3.主机IIC协议3.1起始信号和结束信号3.2主机写数据和读数据3.3主机发…

分享一款基于51单片机和MCP23017的IO扩展方案

大家好&#xff0c;我是『芯知识学堂』的SingleYork&#xff0c;今天笔者要给大家分享一款单片机IO扩展的设计方案。 学单片机的小伙伴们都知道&#xff0c;单片机的IO口数量都是固定的&#xff0c;在做项目的时候&#xff0c;需要根据自己实际用到的IO数量&#xff0c;再综合…

基于STM32单片机与wifi模块串口结合进行PC端或手机端无线通信(附项目资料包)

项目所需材料&#xff1a; stm32f103系列最小系统开发板一块。WiFi模块。具有WiFi功能的手机及PC机。达普电池一包&#xff08;或者学生电源一台&#xff09;。.1k电阻4个&#xff0c;杜邦线若干。 一.硬件环境搭建 1.1-----主控芯片采用的是stm32f103c8t6芯片。 1.2----- w…

51单片机总线扩展外设 -- 外部RAM测试

现在ARM芯片的内部存储和外设资源很丰富了&#xff0c;最近翻出了几个老旧芯片&#xff0c;设计个测试板来学习下51单片机总线的使用。 一、硬件方面 51单片机是学习MCU入门的基础&#xff0c;之前在教程上学习过外部总线的扩展方式。我设计这个板子主要是了解外设总线…

FSMC外设接口来外扩SRAM芯片、flash芯片

1、STM32学习笔记-FSMC外扩SRAM_行之无边的博客-CSDN博客_stm32外扩sram STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间&#xff0c;但当程序较大&#xff0c;内存和程序空间不足时&#xff0c;就需要在STM32芯片的外部扩展存储器了。STM32F407系列芯片可…

STM32MP157实现串口接收数据上云-MP157连接4G模块和电脑

文章目录 前言一.打开设备文件二.串口初始化三.多线程四.程序的移植和执行五.源码(转载请注明出处)结语 前言 本篇分享&#xff1a; 这次将会用几篇博客分享STM32MP157实现串口接收数据上云的一个基础功能&#xff0c;实现STM32MP157的串口在接收到数据时能上传至服务器&…

基于高速51单片机的模拟USB接口设计

基于高速51单片机的模拟USB接口设计 作者&#xff1a;廖颂文 摘要&#xff1a;参照AVRUSB技术给出了51单片机通过模拟USB通信的实现方法。用VC编写了上位机软件&#xff0c;通过libusb驱动实现了PC与ST12LE5608AD的通信。 关键字&#xff1a;AVRUSB&#xff0c;模拟USB&…

基于STC15W4K32S4单片机仿真《任意IO口组合4*4矩阵键盘》

1、 编 程 软 件&#xff1a;keil5版本。 2、仿 真 软 件&#xff1a;Proteus8.12 3、单片机选型&#xff1a;STC15W4K32S4 4、学 习 目 标&#xff1a;1、学习矩阵键盘扫描 2、不同端口组合使用&#xff0c;跟同一8个IO口一样。 5、程 序 …