条形码扫描器(Barcode Scanner)具有扫描各种类型的线性条形码的能力。条形码扫描器主要用于购物中心、食品供应链、餐厅、服装店等。如今,条形码扫描器正用于智能购物车,因为它们提供快速和故障安全的物品识别。在本篇文章中,我们将学习如何在树莓派Raspberry Pi的串行终端中访问条形码扫描仪的输出,以及如何在16X2字符型LCD中显示扫描的代码。用户每次扫描商品代码时,购物车的商品数量都会增加,然后显示在LCD上。
所需的组件 ● 树莓派4 B+ ● USB 手持条形码扫描器 ● 16X2字符型LCD ● 跳线
条形码扫描器的基础知识 手持式条形码扫描器是一种即插即用设备,带有USB端口,可以连接到您的笔记本电脑。一般来说,条形码扫描器每秒可以进行300次扫描,具有Code11、Code39、Code93、Code32、Code128、Coda Bar、UPC-A、UPC-E、EAN-8、EAN-13、JAN.EAN/UPC等的解码能力。此外,他们可以轻松读取各种粗糙、模糊的条码。
它既可以通过USB串行输出,也可以在HID模式或RS232模式下工作。用户可以自定义后缀如add CR、add LF、Add CR+LF、None、传输数据的波特率,9600 或115200 都可以,读取模式也可以自定义为Triggering 或Continuous Mode。如果您想要出厂默认设置,您也可以通过扫描机器附带的设置表的条形码来实现。
我已经用过了这个条形码阅读器。这可用于USB和RS232模式。此外,它是一个可编程条码,可以更改其波特率。
条码类型 一些著名的条形码类型如下: EAN-13:欧洲物品编码系统 (EAN) 是 U.P.C. 的超集。 EAN13由13个数字组成。
UPC-A:通用产品代码 (UPC) 条形码用于零售业。 UPC-A由12个数字组成。
EAN-8:欧洲物品编码系统 (EAN) 是 U.P.C. 的超集。 EAN-8由8位数字组成,适用于小包装。
ITF:Interleaved 2 of 5 (ITF) 是一种纯数字条码,用于以类似于代码128字符集C的高密度条码格式对数字对进行编码。
Code 39:Code 39 条形码是最容易使用的字母数字条码,专为字符自检而设计,因此无需进行校验字符计算。
Code 128:一种非常有效的高密度符号体系,允许对字母数字数据进行编码。符号体系包括用于验证的校验和数字,并且还可以逐个字符地验证条形码以验证每个数据字节的奇偶校验。
大多数使用Code 128,因为它可以存储一定长度的字母数字数据,所以我们为项目取出一些Code 128的随机条形码。
连接电路图 本文中,我们将在I2C模式下将1602字符型LCD与树莓派4进行连接,并显示条码扫描器扫描的条码值。
下图显示了LCD和条形码扫描器与树莓派的连接方式。这里给出了 I2C 的表示,因为它有 4 条通信线。
让我们来看看实际的组件。在这里,您可以看到我们生成了一些随机条形码并将它们粘贴到不同的物品上,例如面包板、消毒剂等。此外,您可以看到我们的条形码扫描仪有一个设置页面。
在树莓派上启用I2C以连接LCD 首先,我们应该在树莓派中启用 I2C。我们可以通过下面给出的终端命令启用。
现在,通过向下箭头键转到Interfacing(接口)选项,然后转到P5选项,即I2C启用/禁用选项,如下所示。
之后它会问“你要启用ARM接口吗?”按“<Yes>”,然后会显示“The ARM I2C interface is enabled”。按<确定>,然后按完成。
在操作LCD之前,请使用命令检查您在python终端上与raspberry连接的LCD的I2C地址。
在这里可以看到连接的I2C设备的地址是27。
设置条码扫描仪 我的条码扫描仪附带了这个。此卡将帮助我们自定义一些基本设置,例如波特率、触发模式、出厂默认设置等,只需扫描相应的代码即可。
在我们开始编程之前,请确保数据传输的模式是 USB 模式。此外,请确保读取模式为触发模式且后缀为 CR*。
编程树莓派读取条形码 现在使用pip下载并安装rpi_LCD,使用pi的shell安装rpi_lcd。除此之外,我使用Python版本为3.7.3的THONNY 对其进行了编程。
在程序中,我们首先从Time导入Sleep对象,因为我们将使用Delay在LCD上显示内容。之后,我们将从rpi_lcd导入LCD对象以连接16X2 LCD。 - from time import sleep
- from rpi_lcd import LCD
复制代码之后,我们将声明一个变量item_count,它存储编号。执行循环之前扫描的项目数。同样,scode变量存储扫描的条码。 - item_count=0 #For storing the no. of scanned items
- scode="" #variable that will contain the scan code
- lcd.text("Scan the Code... ", 1) #welcome message that will display in first line of the display
复制代码
现在在 while 循环中,我们将无休止地扫描,直到我们复位控制器。
在这个循环中input() 函数将需要来自终端的数据,然后这些数据将以字符串格式存储在scode 中。然后我们将其打印在 LCD 显示屏上。 - while 1: #for Endless scans
- scode= str(input()) #will wait to get the input from barcode reader
- lcd.text("Scanned Barcode is", 1)
- lcd.text(scode,2) #displaying Scanned Barcode on 2nd Row
- sleep(2) #Delay of 2 seconds
- lcd.text(" Item Added", 1)
- sleep(2)
- item_count=item_count+1 #count and will increase the count every time it scan a barcode
- IC=str(item_count) #type casting item_count from Integer to STRING
- lcd.text(" Total Item = ",1)
- lcd.text(IC,2)
- sleep(1)
复制代码
现在,在执行循环时,item_count将增加,最初为0。现在item_count的值为1。我们将通过类型转换将item_count值从整数转换为字符串,然后使用lcd.text()函数在LCD上显示此计数。
您可以参考以下图片以更好地理解。扫描的条码将在LCD上显示2秒钟,然后将显示一条消息“Item is added”,然后在2秒钟后,您可以看到LCD将一直显示已扫描项目的总数。
以上这就是在树莓派上使用条形码扫描器的方法。如果有任何疑问,请在本帖下面进行回复。 |