본문 바로가기
코딩/아두이노

아두이노 바코드 리더기로 바코드 찍는 방법 GM-65

by DIYver 2022. 9. 7.

아두이노에서 바코드 리더기 사용하는 방법에 대해서 안내하고자 한다.

그 누구도 제대로 알려주지 않아서 필자가 데이터시트 다 찾아보면서 아두이노에서 바코드를 가장 편하게 읽어 들일 수 있게 하는 방법이니, 해당 모듈을 사용하실 분들에게 도움이 되었으면 좋겠다.

 

왜 GM-65 인가?

디바이스마트에서 보이는 바코드 리더기 검색을 해보면 특정 업체밖에 검색이 안된다.

DYSCAN 업체인데
해당 업체의 데이터시트를 봐도 부족함 투성이다.

무슨 데이터 시트가 12페이지가 전부이고, 내용도 다 허술하기 그지없다.

이런 제품을 아두이노에서 호환된다고 팔고 있는 실정이다...

문제는 인터페이스가 USB가 기본이라서 아두이노와 해당 바코드 리더기만 있다고 해서 사용할 수가 없다.

아두이노에 USB쉴드도 있어야 된다.

 

컴퓨터용 바코드 리더기 올려놓고 아두이노 호환용이라고 판매하고 있고,
USB 쉴드가 필요하다는 내용은 쏙 빼놓고 판매하고 있다.

가끔 보면 디바이스마트에 정떨어지려 한다...
나같은 사람이야 다 조사해서 구매하니 상관없는데, 
지식이 별로 없는 초보자들은 구매하고 어떻게 해야할지도 모를텐데 말이다.

 

아무튼 이런 문제 때문에 바코드 리더기를 찾던 중 좋은 바코드 리더기를 발견했다.

그게 바로 GM-65 라는 제품이다.

중국 제조 제품이긴 하나, 
아두이노에서 기본적으로 사용하기에 충분한 제품이다.

 

구매함에 있어서 주의해야 하는 것은
해당 제품도 기본 USB 인터페이스를 제공하는지라, 저렴한 모델은 UART 인터페이스가 제거된 모델이 있다는 것이다.

꼭 UART 인터페이스가 제공되는지 확인하고 구매하면 된다.

 

GM65 Barcode reader module User Manual.pdf
3.64MB

그리고 디바이스마트에서 판매하는 DYSCAN 과 차원이 다르게 꽉꽉 찬 데이터시트를 제공한다.
무려 76페이지나 된다.

해당 제품을 구매해서 동봉된 USB 케이블을 이용해 컴퓨터에서 사용해본다면
메모장에 커서를 두고 바코드를 찍으면 바코드 값이 메모장에 적히게 된다.

 

이제 이걸 아두이노에서 사용하려면 USB 케이블은 제거하고

UART 케이블로 아두이노에 연결하면 된다.

아두이노 우노나 나노에서는 software serial 포트를 추가해서 통신하면 되고
메가에서는 Serial2 를 이용하여 시리얼 통신을 하면 된다.

코드 부터 살펴보자.

아두이노 우노, 나노를 사용하는 경우

#include <SoftwareSerial.h>
SoftwareSerial GM65(2,3);

void setup() {
 
  Serial.begin(115200);
  GM65.begin(9600);
  
}

void loop() { 
  while (GM65.available()) {
    String barcode_Data = GM65.readStringUntil('\n');
    Serial.print("read : ");
    Serial.println(barcode_Data);
  }
  delay(20);
}

 

ESP32 를 이용하는 경우
>> ESP32는 SoftwareSerial.h 를 사용할 수 없으며, HardwareSerial.h의 방법으로 Serial2 에 사용할 핀을 지정해주면 된다.
이 때, 되는 핀이 있고, 안되는 핀이 있는데, 잘 모르겠다면 필자와 같은 핀번호를 사용하면 된다.

// ESP32 code
#define RXD2 25
#define TXD2 27

void setup() {
  // Note the format for setting a serial port is as follows: Serial2.begin(baud-rate, protocol, RX pin, TX pin);
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
  Serial.println("Serial Txd is on pin: "+String(TX));
  Serial.println("Serial Rxd is on pin: "+String(RX));
}

void loop() { //Choose Serial1 or Serial2 as required
  while (Serial2.available()) {
    String barcode_Data = Serial2.readStringUntil('\n');
    Serial.print("read : ");
    Serial.println(barcode_Data);
  }
  delay(20);
}

 

 

회로는 바코드 리더기의 Tx는 아두이노의 Rx 에,  
바코드 리더기의 Rx는 아두이노의 Tx에 연결해주면 된다.

그러니깐 아두이노 우노,나노 에서는
D2 핀 == GM65 Tx 
D3 핀 == GM65 Rx

ESP32 에서는
25 핀 == GM65 Tx
27 핀 == GM65 Rx

에 연결하면 되는 것이다.

 

전원은 GM65의 전원 특성상 5V 에 연결하기 보다는 Vin에 연결해주는 것이 좋다.

다만 Vin이 4.2V ~ 6V 범위에 있어야 한다.

아두이노에 12V 전원을 공급하는 경우에는 바코드 리더기를 5V pin으로 전원 공급을 해주거나
별도의 전원으로 공급해주는 것이 좋다.

 

 

배선까지 완료되었으면 이제 바코드를 찍으면서 시리얼 모니터 창을 보면 된다.

 

시리얼 모니터의 baudrate 를 115200 으로 맞추고(위의 코드 그대로 사용시)
아래의 바코드를 찍어보자,
띡 -  소리가 나면 찍힌 것이다.

어떤 값이 읽히는지 파악해 보면 된다.

 

그런데 아마 시리얼 모니터에 값이 안뜰 것이다.
(기본 설정으로 되어 있다면 될 수도 있다.)

필자도 많이 당황했던 부분이고,
그 누구도 알려주지 않았던 부분이라 많이 헤매었던 부분이다.

모든 답은 데이터시트에 나와있는법!

데이터 시트를 보면 바코드 리더기의 인터페이스를 변경해주어야 한다고 설명되어있다.

기본 USB 인터페이스 를 UART 인터페이스로 변경해주어야 한다는 것이다.

해당 QR 코드를 바코드로 인식시켜서 Serial 통신 인터페이스 출력으로 바꿔야 한다.

그러면 이제 바코드를 찍으면 해당 값이 아두이노 시리얼창에 출력될 것이다.

 

 


※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!

 

 

 

댓글