Рубрики
Проекты на Raspberry Pi

Подключение к Raspberry Pi USB сканера штриховых кодов

Сканер штриховых кодов (Barcode Scanner) имеет возможность считывания различных типов штриховых кодов. Подобные сканеры находят сейчас широкое применение в торговых центрах, ресторанах, магазинах одежды и т.п. В данной статье мы рассмотрим подключение USB сканера штриховых кодов к последовательному порту платы Raspberry Pi. Результаты сканирования штрих-кода будут отображаться на экране ЖК дисплея 16х2.

Ранее на нашем сайте мы рассматривали сканирование QR кодов с помощью платы Raspberry Pi и камеры для нее, без использования специализированных сканеров штриховых кодов.

Необходимые компоненты

  1. Плата Raspberry Pi 4 B+ (или любая другая подходящая модель платы) (купить на AliExpress).
  2. Переносной USB сканер штриховых кодов (USB Handheld Barcode Scanner) (купить на AliExpress).
  3. ЖК дисплей 16×2 и модуль I2C для него (купить на AliExpress).
  4. Соединительные провода.
  5. Предметы с нанесенными на них штриховыми кодами.

Основные принципы работы сканера штриховых кодов

Ручной сканер штриховых кодов (Handheld Barcode Scanner) содержит USB порт и может подключаться к компьютеру/ноутбуку по технологии Plug and play. Обычно подобные сканеры могут выполнять до 300 сканирований в секунду и могут распознавать коды форматов Code11, Code39, Code93, Code32, Code128, Coda Bar, UPC-A, UPC-E, EAN-8, EAN-13, JAN.EAN/UPC и т.п. Кроме того, они могут выполнять сканирование шероховатых и местами неясно различимых кодов.

Подобные сканеры передают данные последовательно по интерфейсу USB и могут работать в режиме HID или RS232. Можно выбрать различные режимы сканирования со скоростью передачи 9600 или 115200 бод. Режим чтения данных можно выбрать триггерный (Triggering) или непрерывный (Continuous). Если вам необходимо сбросить сканер штриховых кодов к заводским настройкам, то вам необходимо просто просканировать специальный штриховой код, который поставляется на отдельном листе вместе со сканером.

Мы будем использовать сканер штриховых кодов, показанный на рисунке ниже. Он может работать в режимах USB и RS232, также программным способом можно изменять скорость его работы.

Типы штриховых кодов

Ниже перечислены наиболее популярные типы штриховых кодов.

EAN-13: Европейский товарный код (European Article Numbering System, EAN), состоит из 13 цифр.

UPC-A: универсальный товарный код (Universal Product Code, UPC), используемый в розничной торговле. Состоит из 12 цифр.

EAN-8: Европейский товарный код (European Article Numbering System, EAN), состоит из 8 цифр, обычно применяется для малых пакетов.

ITF: чередующийся штриховой код, содержащий только цифры и используемый для кодирования пар цифр в формате штрихового кода с высокой плотностью.

Code 39: самый простой из алфавитно-цифровых штриховых кодов, разработанный для самопроверки символов.

Code 128: очень эффективный алфавитно-цифровой код с высокой плотностью. Содержит контрольную сумму для целей проверки. Обычно Code 128 используется для хранения алфавитно-цифровых данных определенной длины. В нашем проекте мы будем использовать несколько случайных штриховых кодов в формате Code 128.

Схема проекта

Схема подключения к плате Raspberry Pi USB сканера штриховых кодов представлена на следующем рисунке.

В схеме мы подключили к плате Raspberry Pi ЖК дисплей 16х2 по интерфейсу I2C, на котором мы будем показывать значение штрихового кода, считанного сканером.

Схема соединений между платой Raspberry Pi и модулем I2C ЖК дисплея показана в следующей таблице.

Модуль I2C ЖК дисплея Плата Raspberry Pi
SDA Pin No. 2
SCL Pin No. 3
VCC Pin No. 4
GND Pin No. 6

Также она показана на следующем рисунке.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Включение интерфейса I2C в настройках Raspberry Pi

Для подключения ЖК дисплея к плате Raspberry Pi по интерфейсу I2C нам сначала необходимо включить использование данного интерфейса в настройках платы. Для этого войдем в настройки платы с помощью команды:

Далее войдем в настройки подключений (Interfacing options) и в них выберем пункт P5 – включение/выключение (Enable/Disable) I2C как показано на следующем рисунке.

После этого система спросит вас – “would you like the ARM interface to be enabled”? Нажмите “<Yes>” и после этого вы увидите сообщение что “The ARM I2C interface is enabled.” Далее нажмите <ok> и затем нажмите finish.

Но после этого нам необходимо еще узнать I2C адрес ЖК дисплея, используя следующую команду в терминале:

В результате выполнения этой команды вы увидите адрес I2C устройства, подключенного к контакту 27 платы.

Настройка сканера штриховых кодов

Наш сканер штриховых кодов мы настроили с помощью таблицы со штриховыми кодами, которая поставлялась в комплекте со сканером. Ее внешний вид показан на следующем рисунке. С ее помощью мы смогли установить такие основные настройки сканера как скорость передачи, триггерный режим, заводские настройки и т.д. Для этого необходимо лишь просканировать соответствующий код.

Перед тем как приступать к программированию платы Raspberry Pi убедитесь в том, что в качестве режима передачи данных в сканере установлен USB режим. В качестве режима чтения (Reading mode) должен быть выбран триггерный режим (Triggering mode), а в качестве Suffix – CR*.

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Вначале с помощью установщика pip установим в плату пакет rpi_lcd. Автор проекта (ссылка на оригинал приведена в конце статьи) использовал просмотрщик VNC для удаленного управления платой Raspberry Pi, подключенной к той же самой Wi-Fi сети, к какой подключен его ноутбук. Для написания программы он использовал программное обеспечение THONNY с поддержкой языка python версии 3.7.3.

В программе мы первым делом подключим (импортируем) необходимые библиотеки. Мы будем использовать библиотеку Sleep для организации задержек в программе и библиотеку LCD для работы с ЖК дисплеем 16х2.

Далее объявим переменную item_count, в которой мы будем хранить количество просканированных в течение цикла объектов. Первоначально мы присвоим ей значение 0. В переменной scode мы будем хранить просканированный штриховой код, первоначально ее значение будет пустым.

Затем в бесконечном цикле мы будем производить непрерывное сканирование штриховых кодов до тех пор пока плата не будет сброшена (reset).

В этом цикле мы будем использовать функцию input() для считывания данных со сканера штриховых кодов. Просканированный код мы будем сохранять в переменной scode в форме строки и выводить его на экран ЖК дисплея.

Также в нашем цикле мы будем инкрементировать переменную item_count с каждым просканированным объектом. Для вывода ее значения на экран ЖК дисплея мы будем использовать функцию lcd.text(), предварительно преобразовав ее в строковую переменную.

Тестирование работы проекта показано на рисунках ниже. Просканированный штриховой код будет отображаться 2 секунды на ЖК дисплее, после чего на экран дисплея будет выводиться сообщение ‘Item is added’, после чего спустя еще 2 секунды на экран ЖК дисплея будет выведено общее количество просканированных объектов.

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы на Python

Видео, демонстрирующее работу проекта

Источник статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *