요새 스마트폰에도 바코드나 QR 코드를 읽어내는 기능이 있지만, 그 값을 읽어내기만 하고 그 값을 활용하기 위해서는 별도의 앱을 만들어야 할 것입니다.
일을 하다 보면 많이 쌓여있는 시스템에서 바코드 값을 읽어서 필요한 정보를 찾아봐야 할 때가 종종 있습니다.
그래서, 좀 고민하다가 라즈베리파이로 바코드 스캐너를 하나 만들어 보기로 했습니다. 스마트폰 앱을 만들면 되겠지만, 그건 제가 잘 모르는 영역이라, 라즈베리파이로 하기로 했습니다.
아두이노를 쓸까, 라즈베리파이를 쓸까 조금 고민했는데, PC에서 접근이 용이하고 내가 필요한 데이터를 집어넣고 프로그램 수정이 쉬운 라즈베리파이로 구현하기로 했습니다.
주요 구성 품목은 다음과 같습니다.
- 라즈베리파이 Zero W
- Nokia 5110 LCD (SPI 방식)
- Waveshare Barcode Scanner 모듈
연결은 다음과 같이 합니다.
디스플레이로 사용한 LCD 모듈은 예전에 노키아 5110이란 모델에 쓰였다고 하는 건데, 요새 아두이노, 라즈베리파이 등 프로젝트에 많이들 쓰는 겁니다.
Adafruit라고 이런 개발 환경 관련 제품을 많이 다루는 사이트에서 라이브러리도 만들어서 제공하기도 하는데, 그쪽 파이썬 라이브러리를 사용하기로 하고 참고하였습니다.
learn.adafruit.com/nokia-5110-3310-monochrome-lcd
실제로 5110 LCD는 SPI라는 규격으로 통신을 해야 해서, 라즈베리파이의 SPI 포트에 연결해야 합니다.
5110 LCD의 핀 설명은 다음과 같습니다.
위의 설명은 1~8번까지 저렇게 되어 있지만, 실물 뒷면에 Signal name이랑 적혀 있으니 그거랑 맞춰야 합니다.
5110 LCD | RPi | RPi | 5110 LCD |
VCC | [17] 3.3V | [18] GPIO24 | RESET |
DIN | [19] SPI_MOSI | [20] GND | GND |
N/A | [21] SPI_MISO | [22] GPIO25 | DC |
CLK | [23] SPI_CLK | [24] SPI_CE0_N | CE |
Adafuit의 라이브러리를 보면 Reset과 DC를 다른 핀에 연결했지만, 이 부분은 빈 GPIO 핀에 연결하고 설정만 해주면 되는 거라 저는 #18과 #22에 배치하여 2x4 커넥터로 연결할 수 있게 했습니다.
바코드 스캐너 모듈은 중국 쪽에 이런 개발 관련 아이템 많이 만드는 Waveshare사의 모듈을 사용했습니다.
www.waveshare.com/barcode-scanner-module.htm
이 바코드 스캐너 모듈은 USB로 연결해서 쓸 수도 있고, UART 시리얼 연결로 사용할 수도 있습니다.
그런데, 스캐너 모듈을 제가 원하는 동작으로 쓰려면 UART로 연결해야겠더군요.
아두이노에서 시리얼 통신은 많이 해봤는데, 라즈베리파이에서 시리얼 통신은 안 해봤습니다. 사실 일반 x86 컴퓨터의 리눅스 환경에서 시리얼 포트로 제품 개발을 해본 적은 있어 프로그램 부분은 별 문제가 안 되는데, 라즈베리파이에서 UART 설정이 좀 낯설긴 하더라고요.
일단 연결은
RPi | Barcode Scanner |
[4] 5V | VCC |
[6] GND | GND |
[8] TXD0 | RXD |
[10] RXD0 | TXD |
이렇게 하고 raspi-config에서 시리얼 포트를 활성화해줍니다.
- #sudo raspi-config
- 3 Interface Options에서 P6 Serial Port 선택
- login shell을 serial로 액세스 가능하게 할까? >> NO
- serial port hardwared를 활성화할까? >> YES
설정에 따라 시스템 재부팅이 필요할 수도 있습니다.
이렇게 되면 /dev/serial0 을 통해 시리얼 통신을 할 수 있습니다. (RPi Zero W 기준)
프로그램은 파이썬3로 작성했습니다.
리눅스에서는 보통 쉘 스크립트를 만들어 쓰곤 했는데, 시리얼 통신은 쉘 스크립트가 쉽지 않더라고요. 그래서, 2년 쯤 전에 파이썬으로 시리얼 통신하는 걸 좀 익혀서 개발 프로젝트를 진행한 적이 있어 이번엔 처음부터 파이썬으로 접근을 했습니다.
파이썬이 참 매력적인 언어더라고요. 머리 속에 생각하는 어지간한 건 다 인터넷 찾으면 라이브러리 혹은 샘플이 있어서 짜깁기해서 구현하기 쉬워요. ^^
여자자차해서 간이 버전을 만들었습니다.
윈도에서 RPi로 Samba로 네트워크 공유 연결이 가능하게 설정했습니다. 이를 위해서 LCD 상단에 현재 IP 주소를 나오게 해놨고요.
필요한 정보를 엑셀에서 편집하고 CSV 포맷으로 저장합니다. 이후에 바코드를 바라보고 스캐너 모듈의 버튼을 누르면 그 값을 읽어서 제가 따로 저장한 설정파일에서 필요한 정보를 읽어서 화면에 보여 줍니다.
아래는 현장 투입해서 사용하는 모습. 박스에 있는 물건을 12번 위치에 옮기라는 뜻입니다.
이렇게 해서 쓰다가 케이스도 설계해 봤습니다. 스케치업으로 했고요...
아직 3D 프린터의 공차를 잘 이해를 못해서 딱 맞지는 않았지만, 어느 정도 쓸만한 상태이긴 합니다.
내부에 사용하고자 했던 배터리 모듈이 원하던 대로 동작을 안 해서, 그 부분 좀 더 테스트하고 개선해서 업그레이드 모델 준비 중입니다. ㅋㅋ
2021-3-31 추가
3D 프린터 구입해서 케이스 설계 좀 바꿔서 직접 출력했습니다. ^^
2021.03.21 - [디지털 라이프 電子的生活 My Digital Life/3D 프린팅 (3D Printing)] - 바코드 스캐너 케이스를 프루사 미니에서 출력해 보았습니다.
'디지털 라이프 電子的生活 My Digital Life > 라즈베리파이 (Raspberry Pi)' 카테고리의 다른 글
라즈베리파이3B와 Asus RT-AX55 공유기 호환성 문제 해결하기 (0) | 2022.10.01 |
---|---|
새 라즈베리파이 OS, Bullseye는 WiringPi가 없다 (0) | 2022.04.28 |
키보드 일체형 라즈베리파이 - Raspberry Pi 400 (0) | 2020.12.22 |