라즈파와 QR코드(not 카메라)로 뭘 해볼까요?

적색 펄스의 매.
여기는 IoTLT Advent Calendar 2018 16일째 보도입니다!

입문


라즈파와 QR코드를 조합한 작품의 예가 많죠.
부지런히 관리했어, 장서 관리.
Raspberry Pi3QR 인코더 - Qiita
구현 방법으로는 설치 카메라가 이미지 인식을 통해 QR을 읽는 봉합이 있습니다.
그러나 이 방법은 QR의 읽기 정밀도와 좋지 않음, 읽기에 시간이 걸리는 등의 문제도 있다.

USB 연결 바코드 스캐너 사용


USB로 연결된 바코드 스캐너는 가격이 좀 비싸지만 빠르고 정확하게 읽을 수 있다.
아마존 자동 바코드 스캐너 무정방향 고속 CCD 데스크탑 2차원 미니 바코드 판독기 휴대용 모바일 결제 2M USB 케이블(MP168)
구성으로 이런 느낌이에요.

문제


USB에 연결된 바코드 스캐너는 외부 키보드로 인식됩니다.
따라서 라즈파에서 직접 사용하려면 입력을 기다리는 단말기와 브라우저 등 입력 폼에 커서가 초점을 맞추지 않으면 입력할 수 없다.
IoT 장치니까 라즈파 부팅이 끝나면 초점 따위는 신경 쓰지 말고 QR코드를 읽고 싶어요.

배경 키 가져오기


python 라이브러리를 사용하면 백엔드의 키 입력을 얻을 수 있습니다.
다음은 예시 코드입니다.
from pynput.keyboard import Key, Listener

def on_press(key):
    global qr_data
    # 1文字ずつqr_dataに
    if str(key) != 'Key.enter':
        try:
            qr_data += key.char[0:1]
            return
        except AttributeError:
            return
    # 最後はenter入力になる
    else:
        print(qr_data)
    qr_data = ''


if __name__ == '__main__':
    with Listener(
        on_press=on_press,
    ) as listener:
        listener.join()
배경의 키를 입력할 수 있다면 그 다음은 카메라의 상황과 같다.
그 후에 저는 Thread로 pynput와 WebSocket 서버를 시작하여 WebSocket 송신 키로 입력한 결과를 라스파에 설치된 디스플레이 브라우저에 표시하고 Kintone에 데이터를 보내는 프로그램으로 제작하여 Supervisor로 지키고 시스템d로 자동으로 시작합니다.

잡담


배경에서 버튼 입력을 얻을 수 있고 남용할 수도 있을 것 같아서...
사용법에 주의하세요!!

보충하여 기록하다


MacOS의 경우 sudo에서 실행해도 키를 가져올 수 없습니다.
안전 대책을 세웠나 봐요.

참고 자료


파이썬에서 중요한 활동을 하고 싶은데 그러지 못하면←완료. -두부와 맑은 국

좋은 웹페이지 즐겨찾기