国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

openmv和STM32串口通信識別條形碼、二維碼(HAL庫)

這篇具有很好參考價值的文章主要介紹了openmv和STM32串口通信識別條形碼、二維碼(HAL庫)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

因為自己的畢設用到了條形碼識別,所以在這里寫一篇關于使用openmv識別條形碼和二維碼并且與STM32實現(xiàn)串口通訊,希望能幫到以后用到這一模塊的同學,STM32方面我使用的是STM32F103RCT6,并且使用HAL進行編寫代碼。

硬件連接

  1. OpenMV端:由圖知UART_RX—P5 ------ UART_TX—P4
    openmv和STM32串口通信識別條形碼、二維碼(HAL庫)
    2.STM32端:這里我使用了串口1和串口3,串口一方便看數(shù)據(jù)和調試,串口三用來接收OpenMV傳輸?shù)臄?shù)據(jù)。
    串口一:
    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位數(shù)據(jù)位,無校驗位,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打印,別忘了串口重定向文章來源地址http://www.zghlxwxcb.cn/news/detail-412261.html

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

串口接收數(shù)據(jù)

/* USER CODE BEGIN 1 */
	void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    uint16_t tempt;/*定義臨時變量存放接受的數(shù)據(jù)*/
    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;
/*數(shù)據(jù)接收函數(shù)*/
uint8_t Uart3_RxFlag = 0;
uint8_t UsartDisPlay[200];
uint8_t Uart3_Rx_Cnt = 0;     //接收緩沖計數(shù)
void openmv_receive_data(uint8_t com_data)
{
    /*循環(huán)體變量*/
    uint8_t i;
    /*計數(shù)變量*/
		 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;   //接收數(shù)據(jù)轉存
				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模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Android OpenCV(七十五): 看看剛”轉正“的條形碼識別

    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日
    瀏覽(43)
  • 利用先進的條形碼識別和 OCR 技術改善機場行李處理

    利用先進的條形碼識別和 OCR 技術改善機場行李處理

    機場每年處理數(shù)百萬件行李,主要航空公司每家運輸超過 1 億件行李。每年有 2500 萬件行李被錯誤處理,正確處理至關重要。使用最好的技術是關鍵,首先是從機場到飛機的正確轉乘。 行李分揀 Dynamsoft 的客戶是一家機場行李分揀解決方案提供商。這家航空公司軟件提供商不

    2024年01月17日
    瀏覽(26)
  • Python - OpenCV識別條形碼、二維碼(已封裝,拿來即用)

    Python - OpenCV識別條形碼、二維碼(已封裝,拿來即用)

    此代碼可識別條形碼和二維碼,已封裝好,拿來即用: 結果:

    2024年02月12日
    瀏覽(24)
  • uniapp寫微信小程序實現(xiàn)二維碼條形碼掃描識別

    1.最重要的就是一個函數(shù)uni.scanCode() 下邊是我的代碼可以直接使用 上述代碼就直接實現(xiàn)了掃描功能很簡單記得定義下掃描結果!有啥問題隨時@我

    2024年04月09日
    瀏覽(26)
  • Openmv識別Apriltag碼并與stm32進行串口通信

    Openmv識別Apriltag碼并與stm32進行串口通信

    ????????本文使用帶有獨立處理圖像模塊的攝像頭Openmv進行Apriltag碼的識別,并將Openmv與stm32進行串口通信,將Apriltag碼的ID、中心位置相對于Openmv攝像頭中心坐標的偏移量、以及Apriltag碼相對于Openmv鏡頭的距離通過串口通信傳輸給stm32。 ????????接線圖Openmv通過電腦USB口

    2024年04月27日
    瀏覽(14)
  • C#中輕松實現(xiàn)二維碼和條形碼識別:OpenCvSharp和ZXing詳細教程

    C#中輕松實現(xiàn)二維碼和條形碼識別:OpenCvSharp和ZXing詳細教程

    ? 概述: 本教程使用OpenCvSharp和ZXing庫,詳細介紹了在C#中識別二維碼和條形碼的步驟。通過導入必要的命名空間、加載圖像,并使用ZXing庫進行二維碼和條形碼的識別,提供了清晰的示例代碼。這方便了開發(fā)人員在項目中集成二維碼和條形碼識別功能。 要使用OpenCvSharp來分別

    2024年03月09日
    瀏覽(33)
  • H5實現(xiàn)掃碼讀取二維碼條形碼功能(二維碼+條形碼)

    本文主要介紹二維碼實現(xiàn)的原理 1、使用插件 npm install @zxing/library 2、主要用到 BrowserMultiFormatReader 這個構造函數(shù),用于打開攝像頭 視圖 核心代碼(以vue3寫法舉例) 二維碼的樣式 ``

    2024年02月11日
    瀏覽(21)
  • uniapp生成條形碼?

    uniapp生成條形碼?

    首先先在插件市場找到條形碼 鏈接:https://ext.dcloud.net.cn/search?q= 下載到項目里面 三、在pages.json中寫入以下: 四、在html頁面 這樣就已經差不多了 條形碼可以出來了

    2024年02月04日
    瀏覽(17)
  • Java生成條形碼

    Java生成條形碼

    生成條形碼工具類:? ?生成結果如下: ?

    2024年02月15日
    瀏覽(20)
  • java代碼實現(xiàn)生成條形碼

    2024年02月20日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包