본문 바로가기
Hardware/Scanner

[지브라 스캐너] RS232 통신 - 스캐너 연결하기

by 알파쿼카 2026. 6. 17.

================================== 스캐너 설정하는 법 (하드웨어)==================================

1. 컴퓨터와 컨버터를 랜선으로 연결
2. 컨버터의 RS-232 포트와 스캐너를 연결
3. (2)에서 연결한 선에 동봉된 스캐너 전원을 꽂는다.
4. 컨버터 전원을 꽂는다.

5. 컨버터와 스캐너에 불 들어오는지 확인

 

================================== 스캐너 설정하는 법 (네트워크)==================================

1. Win + R을 눌러 실행기 실행
2. ncpa.cpl 입력 후 엔터

3. 올바르게 연결될 경우 이렇게 뜬다. (# 컨버터 전원이 켜져있는지 확인할 것)

 

4. 더블클릭 후 속성 클릭

 

5.인터넷 프로토콜 버전 4 클릭

 

6. 여기에 컨버터에 적혀있는 대역과 맞는 IP 설정해준다.

저는 컨버터에 기본 IP가 192.168.0.100으로 되어 있어서 192.168.0.50으로 설정했어요!

 

7.그리고 인터넷 주소창에 컨버터 기본 IP(192.168.0.100)를 입력하면 컨버터 설정 창이 뜹니다.

 

8.지브라 스캐너 기준으로 ID:admin PW:없음을 입력하면 설정 창이 뜹니다.

 

9. CMD 창에 ipconfig를 입력해서 ip를 봅니다.

 

10. 제 IP 는 25 대역이므로 25에 맞춰 컨버터 설정을 변경합니다.

스캐너 포트는 9005로 설정하겠습니다.

다하면 하단의 SAVE 클릭

 

11. 그리고 컴퓨터와 컨버터 대역을 맞추기 위해 25대역으로 고정해줍니다.

올바르게 설정했다면 192.168.25.100 으로 접속하면 컨버터 설정창(위의 파란화면)이 뜹니다.

 

12. 파이썬 코드

import socket
import pymysql

# DB 연결 설정
db_config = {
    'host': 'localhost',
    'user': '아이디',
    'password': ' 비밀번호',
    'db': ' DB 이름',
    'charset': 'utf8mb4'
}

# 컨버터(서버) 정보 설정
# 컨버터가 TCP Server 모드라면 프로그램이 Client가 되어 접속합니다.
CONVERTER_IP = "192.168.25.100"
CONVERTER_PORT = 9005

def save_to_db(scan_data, status, error_msg=None):
    """결과를 MariaDB에 저장하는 함수"""
    conn = pymysql.connect(**db_config)
    try:
        with conn.cursor() as cursor:
            sql = """
                INSERT INTO scan (scan_data, status, error_message)
                VALUES (%s, %s, %s)
            """
            cursor.execute(sql, (scan_data, status, error_msg))
        conn.commit()
        print(f" DB 저장 완료: [{status}] {scan_data if scan_data else error_msg}")
    except Exception as e:
        print(f" DB 저장 실패: {e}")
    finally:
        conn.close()

def start_client():
    # 소켓 생성 및 컨버터 연결
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   
    try:
        print(f"컨버터 연결 시도 중... ({CONVERTER_IP}:{CONVERTER_PORT})")
        client_socket.connect((CONVERTER_IP, CONVERTER_PORT))
        print("컨버터 연결 성공! 바코드를 스캔하세요.\n" + "="*40)
       
        while True:
            # 컨버터로부터 데이터 수신 (최대 1024바이트)
            data = client_socket.recv(1024)
            if not data:
                print("연결이 끊어졌습니다.")
                break
               
            # 바이트 데이터를 문자열로 변환 및 공백 제거
            scan_data = data.decode('utf-8').strip()
           
            # [조건문] 초보자 수준의 간단한 데이터 검증 (성공/오류 판별)
            if not scan_data:
                # 데이터가 비어있는 경우
                save_to_db(None, "ERROR", "Empty data received")
            elif "ERROR" in scan_data or len(scan_data) < 3:
                # 스캐너 자체 에러 읽힘 또는 데이터가 지나치게 짧은 경우
                save_to_db(scan_data, "ERROR", "Invalid barcode length or format")
            else:
                # 정상적인 스캔
                save_to_db(scan_data, "SUCCESS")
               
    except KeyboardInterrupt:
        print("\n프로그램을 종료합니다.")
    except Exception as e:
        print(f"오류 발생: {e}")
        # 연결 실패 등의 물리적 오류도 에러 로그로 기록 가능
        save_to_db(None, "ERROR", f"Connection error: {str(e)}")
    finally:
        client_socket.close()

if __name__ == "__main__":
    start_client()

 

13. 실행 결과

 

14. DB 확인