openmv和STM32串口通信识别条形码、二维码(HAL库)

这篇具有很好参考价值的文章主要介绍了openmv和STM32串口通信识别条形码、二维码(HAL库)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

因为自己的毕设用到了条形码识别,所以在这里写一篇关于使用openmv识别条形码和二维码并且与STM32实现串口通讯,希望能帮到以后用到这一模块的同学,STM32方面我使用的是STM32F103RCT6,并且使用HAL进行编写代码。

硬件连接

  1. OpenMV端:由图知UART_RX—P5 ------ UART_TX—P4
    openmv和STM32串口通信识别条形码、二维码(HAL库)
    2.STM32端:这里我使用了串口1和串口3,串口一方便看数据和调试,串口三用来接收OpenMV传输的数据。
    串口一:
    openmv和STM32串口通信识别条形码、二维码(HAL库)串口三:
    openmv和STM32串口通信识别条形码、二维码(HAL库)

软件代码——OpenMV端

条形码识别

import sensor, image, time, math
from pyb import UART, LED
import json
import ustruct

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.VGA) # High Res!
sensor.set_windowing((640, 200)) # V Res of 80 == less work (40 for 2X the speed).
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False)  # 必须关闭此功能,以防止图像冲洗…
sensor.set_auto_whitebal(False)  # 必须关闭此功能,以防止图像冲洗…
clock = time.clock()


uart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1)  #8位数据位,无校验位,1位停止位


# 条形码检测可以在OpenMV Cam的OV7725相机模块的640x480分辨率下运行。
# 条码检测也将在RGB565模式下工作,但分辨率较低。 也就是说,
# 条形码检测需要更高的分辨率才能正常工作,因此应始终以640x480的灰度运行。

def barcode_name(code):
    if(code.type() == image.EAN2):
        return "EAN2"
    if(code.type() == image.EAN5):
        return "EAN5"
    if(code.type() == image.EAN8):
        return "EAN8"
    if(code.type() == image.UPCE):
        return "UPCE"
    if(code.type() == image.ISBN10):
        return "ISBN10"
    if(code.type() == image.UPCA):
        return "UPCA"
    if(code.type() == image.EAN13):
        return "EAN13"
    if(code.type() == image.ISBN13):
        return "ISBN13"
    if(code.type() == image.I25):
        return "I25"
    if(code.type() == image.DATABAR):
        return "DATABAR"
    if(code.type() == image.DATABAR_EXP):
        return "DATABAR_EXP"
    if(code.type() == image.CODABAR):
        return "CODABAR"
    if(code.type() == image.CODE39):
        return "CODE39"
    if(code.type() == image.PDF417):
        return "PDF417"
    if(code.type() == image.CODE93):
        return "CODE93"
    if(code.type() == image.CODE128):
        return "CODE128"

while(True):
    clock.tick()
    img = sensor.snapshot()
    codes = img.find_barcodes()
    for code in codes:
        img.draw_rectangle(code.rect())
        print_args = (barcode_name(code), code.payload(), (180 * code.rotation()) / math.pi, code.quality(), clock.fps())
        print("Barcode %s, Payload \"%s\", rotation %f (degrees), quality %d, FPS %f" % print_args)
        FH = bytearray([0xb3,0xb3])
        uart.write(FH)
        uart.write(code.payload())
        FH = bytearray([0x0d,0x0a])
        uart.write(FH)
        time.sleep_ms(100)
    if not codes:
        print("FPS %f" % clock.fps())

二维码识别

二维码识别部分,可以参考这篇文章
openmv和stm32串口通信完成二维码识别

软件代码——STM32端

STM32CobeMX配置

其他配置我这里就没有展示了,只展示串口一和串口三的配置
openmv和STM32串口通信识别条形码、二维码(HAL库)
openmv和STM32串口通信识别条形码、二维码(HAL库)
串口配置好后,要想使用printf打印,别忘了串口重定向文章来源地址https://www.toymoban.com/news/detail-412261.html

int fputc(int ch, FILE *f){
HAL_UART_Transmit (&huart1,(uint8_t *)&ch,1,0xffff);
	return ch;
}

串口接收数据

/* USER CODE BEGIN 1 */
	void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    uint16_t tempt;/*定义临时变量存放接受的数据*/
    if(huart->Instance==USART3)
    {
        tempt=USART3_RXbuff;
        
        openmv_receive_data(tempt);       
    }	
	HAL_UART_Receive_IT(&huart3,(void *)&USART3_RXbuff,1);/*再次开启接收中断*/
}
/* USER CODE END 1 */
#include "openmv.h"
#include "stdio.h"
#include "usart.h"
#include "main.h"
/*四个变量用于存放目标物体的色彩种类以及中心坐标*/

unsigned int  center_x = 0, center_y = 0;
unsigned int color_type = 0;
double  center_x_cm = 0, center_y_cm = 0;
/*数据接收函数*/
uint8_t Uart3_RxFlag = 0;
uint8_t UsartDisPlay[200];
uint8_t Uart3_Rx_Cnt = 0;     //接收缓冲计数
void openmv_receive_data(uint8_t com_data)
{
    /*循环体变量*/
    uint8_t i;
    /*计数变量*/
		 static uint8_t rx_state = 0;
   			if(rx_state==0&&com_data==0xB3)
			{
				rx_state = 1;
			}
			else if(rx_state==1&&com_data==0xB3)
			{
				rx_state=2;
			}
			else if(rx_state==2)
			{
				UsartDisPlay[Uart3_Rx_Cnt++] = com_data;   //接收数据转存
				if((UsartDisPlay[Uart3_Rx_Cnt-1] == 0x0A)&&(UsartDisPlay[Uart3_Rx_Cnt-2] == 0x0D)) //判断结束位
				{
				rx_state = 0;
				printf("recive buff is %s\r\n",UsartDisPlay);
        Uart3_Rx_Cnt = 0;
        memset(UsartDisPlay,0x00,256);
				}
			}
    else   //接收异常
    {
        rx_state = 0;
        Uart3_Rx_Cnt = 0;
        for (i = 0; i < 30; i++)
        {
						UsartDisPlay[i] = 0x00;
        }
    }
}

到了这里,关于openmv和STM32串口通信识别条形码、二维码(HAL库)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android OpenCV(七十五): 看看刚”转正“的条形码识别

    2021年,我们写过一篇《OpenCV 条码识别 Android 平台实践》,当时的条形码识别模块位于 opencv_contrib 仓库,但是 OpenCV 4.8.0 版本开始, 条形码识别模块已移动到 OpenCV 主仓库,至此我们无需自行编译即可轻松地调用条形码识别能力。 Bar code detector and decoder moved from Contrib to main re

    2024年02月12日
    浏览(44)
  • 利用先进的条形码识别和 OCR 技术改善机场行李处理

    机场每年处理数百万件行李,主要航空公司每家运输超过 1 亿件行李。每年有 2500 万件行李被错误处理,正确处理至关重要。使用最好的技术是关键,首先是从机场到飞机的正确转乘。 行李分拣 Dynamsoft 的客户是一家机场行李分拣解决方案提供商。这家航空公司软件提供商不

    2024年01月17日
    浏览(44)
  • uniapp写微信小程序实现二维码条形码扫描识别

    1.最重要的就是一个函数uni.scanCode() 下边是我的代码可以直接使用 上述代码就直接实现了扫描功能很简单记得定义下扫描结果!有啥问题随时@我

    2024年04月09日
    浏览(57)
  • Python - OpenCV识别条形码、二维码(已封装,拿来即用)

    此代码可识别条形码和二维码,已封装好,拿来即用: 结果:

    2024年02月12日
    浏览(45)
  • Openmv识别Apriltag码并与stm32进行串口通信

            本文使用带有独立处理图像模块的摄像头Openmv进行Apriltag码的识别,并将Openmv与stm32进行串口通信,将Apriltag码的ID、中心位置相对于Openmv摄像头中心坐标的偏移量、以及Apriltag码相对于Openmv镜头的距离通过串口通信传输给stm32。         接线图Openmv通过电脑USB口

    2024年04月27日
    浏览(39)
  • C#中轻松实现二维码和条形码识别:OpenCvSharp和ZXing详细教程

      概述: 本教程使用OpenCvSharp和ZXing库,详细介绍了在C#中识别二维码和条形码的步骤。通过导入必要的命名空间、加载图像,并使用ZXing库进行二维码和条形码的识别,提供了清晰的示例代码。这方便了开发人员在项目中集成二维码和条形码识别功能。 要使用OpenCvSharp来分别

    2024年03月09日
    浏览(79)
  • H5实现扫码读取二维码条形码功能(二维码+条形码)

    本文主要介绍二维码实现的原理 1、使用插件 npm install @zxing/library 2、主要用到 BrowserMultiFormatReader 这个构造函数,用于打开摄像头 视图 核心代码(以vue3写法举例) 二维码的样式 ``

    2024年02月11日
    浏览(54)
  • Java生成条形码

    生成条形码工具类:   生成结果如下:  

    2024年02月15日
    浏览(48)
  • uniapp生成条形码?

    首先先在插件市场找到条形码 链接:https://ext.dcloud.net.cn/search?q= 下载到项目里面 三、在pages.json中写入以下: 四、在html页面 这样就已经差不多了 条形码可以出来了

    2024年02月04日
    浏览(45)
  • java代码实现生成条形码

    2024年02月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包