"빠른 응답"코드 또는 QR 코드로 줄여서 우리 디지털 생활의 필수 부분이되었습니다. 지금 쯤이면 이미 무의식적으로 익숙해 졌을 가능성이 있습니다. 아마도 지역 식료품 점을 돌아 다니고있을 것입니다. 좋아하는 책을 읽거나 Google Pay, PhonePe 또는 Paytm으로 온라인 결제를하거나 웹 서핑 등을하고있을 수 있습니다. (예를 들어 계속할 수 있겠죠?) 이 이상하게 보이는 정사각형 일과 생각을 가로 질러이 정사각형 일이 무엇인지 그리고 만약 당신이… 글쎄, 그것이 조만간 일어날 것이라고 걱정하지 마십시오. 그래서 주제를 더 잘 이해하기 위해 우리는 Arduino 및 OLED로 재미있는 작은 프로젝트를 수행하고 다음 사항을 설명하십시오.
- QR 코드의 기본 개념.
- 작동 원리.
- Arduino를 사용하여 나만의 QR 코드를 만드는 방법.
- 마지막으로 OLED (SSD1306) 화면에 표시합니다.
그래서,이 QR 코드는 무엇입니까?
QR 코드 (빠른 응답 코드)는 1994 년 일본 자동차 산업을 위해 DENSO WAVE에서 개발 한 고속 데이터 읽기 용 매트릭스 2D 코드입니다. QR 코드는 표준 바코드에 비해 매우 효율적으로 데이터를 압축합니다.이를 달성하기 위해 4 개의 표준화 된 인코딩 모드 (숫자, 영숫자, 바이트 / 이진 및 한자)를 사용합니다.이 기술은 "오픈 소스"로 만들어졌습니다. 즉, 모든 사람이 사용할 수 있습니다. 기존 바코드에 비해 QR 코드의 큰 장점은 더 큰 데이터 용량과 높은 내결함성입니다.
QR 코드는 어떻게 작동합니까?
QR 코드 (및 기타 데이터 매트릭스 코드)는 사람이 아닌 특수 도구로 읽을 수 있도록 설계되었으므로 시각적으로 연구하여 이해할 수있는 특정 양만 있습니다. 비록 몇 가지 흥미로운 공통점을 포함하고 있지만 모든 코드는 다양한 방식으로 다릅니다. circuitdigest.com QR 코드를 관찰하여 기능 중 일부를 연구 할 것입니다.
- 파인더 패턴: 코드의 세 모서리에 내부에 단단한 상자가있는 큰 정사각형 상자는 QR 코드가 3 개뿐이므로 코드가 어느 방향인지 쉽게 확인할 수 있습니다.
- 정렬 패턴: 어떤 방향 으로든 코드를 읽을 수 있습니다.
- 타이밍 패턴: 세 개의 파인더 패턴 사이에서 수평 및 수직으로 실행되며 , 이 행을 사용하여 리더가 코드의 크기를 결정할 수 있습니다.
- 버전 정보: 현재 40 개의 서로 다른 버전의 QR 코드 표준이 있으며, 코드의이 섹션은 일반적으로 사용되는 마케팅 버전 1-7에 대해 사용중인 QR 코드 버전을 결정합니다.
- 형식 정보: 형식 파트너에는 오류 허용 및 데이터 마스킹에 대한 정보가 있습니다.
- 데이터 영역: 코드의이 섹션에는 모든 데이터 요소와 오류 수정 코드가 포함되어 있습니다.
- 종료 구역: 주변과 코드를 구별하기 위해 모든 QR 코드의 간격은 필수입니다.
아래 이미지는 코드에 대한 명확한 아이디어를 제공합니다.
코드의 다른 섹션은 데이터 및 중복 코드입니다.
이 튜토리얼에서 다루지 않을 많은 다른 기능과 복잡한 주제가 있습니다. QR 코드에 대한 자세한 내용을 읽으려면 EPCglobal Singapore Council, Tan Jin Soon의 QR 코드 튜토리얼을 따르십시오. 합성 저널, 2008.
QR 코드의 사양
기호 크기 |
최소 21x21 셀-최대. 177x177 셀 (4 셀 간격) |
|
정보 유형 및 볼륨 |
숫자 문자 |
최대 7,089 자 |
알파벳, 기호 |
최대 4,296 자 |
|
바이너리 (8 비트) |
최대 2,953 자 |
|
한자 |
최대 1,817 자 |
|
변환 효율 |
숫자 모드 |
3.3 세포 / 문자 |
영숫자 / 기호 모드 |
5.5 셀 / 문자 |
|
바이너리 (8 비트) 모드 |
8 개 셀 / 문자 |
|
한자 모드 (13 비트) |
13 개 셀 / 문자 |
|
오류 수정 기능성 |
레벨 L |
대략. 기호 영역의 최대 7 % 복원 |
레벨 M |
대략. 기호 영역의 최대 15 % 복원 |
|
레벨 Q |
대략. 기호 영역의 최대 25 % 복원 |
|
레벨 H |
대략. 심볼 영역의 최대 30 % 복원 |
|
연결 기능 |
최대 16 개 기호로 분할 가능 |
나만의 QR 코드 생성
아래 단계에 따라 나만의 QR 코드를 생성하세요.이 예에서는 우리가 사랑하는 Circuit Digest 웹 사이트 의 QR 코드를 만들 것입니다.
QR 코드를 생성하려면이 웹 사이트로 이동하고 웹 사이트 상단을 보면 옵션 목록을 볼 수 있습니다.이 튜토리얼에서는 URL에 대한 QR 코드를 생성하고 있으므로
- URL 탭을 클릭하고 URL 입력 섹션에 회로 다이제스트의 URL을 붙여 넣습니다.
- 저장을 클릭하십시오.
- 출력 파일의 파일 이름을 지정하십시오.
- 선호하는 파일 형식으로 PNG를 선택하십시오.
- 저장을 클릭합니다.
아래 이미지는 프로세스에 대한 명확한 아이디어를 제공합니다.
우리의 소중한 마이크로 컨트롤러“Arduino”는 원시 PNG 이미지를 컴파일하여 OLED 디스플레이에 표시 할 수있을만큼 지능적이지 않습니다. 따라서 QR 코드를 OLED에 표시하려면 몇 가지 간단한 단계를 수행하고 PNG 이미지를 Arduino에서 읽을 수 있는 비트 맵 배열 로 변환해야합니다. 이 변환은 이전에 SSD1306 OLED를 Arduino와 연결하고 Graphical LCD를 Arduino와 연결하면서 수행했습니다. 또한 SSD1306 OLED를 Raspberry Pi, ESP32, NodeMCU 및 기타 여러 마이크로 컨트롤러와 인터페이스했습니다. 비트 맵 배열 변환은 아래 두 단계로 수행 할 수 있습니다.
- PNG를 BMP 형식으로 변환.
- BMP 이미지를 HEX 코드 배열로 변환합니다.
PNG를 BMP 형식으로 변환
다운로드 한 PNG 이미지를 BMP 이미지로 변환하려면이 웹 사이트와 이미지 변환기 섹션으로 이동하여
- 드롭 다운 메뉴를 클릭하고
- BMP로 변환
- 이동을 클릭하십시오.
아래 이미지는 프로세스에 대한 명확한 아이디어를 제공합니다.
아래 이미지와 같은 새 페이지가 표시됩니다.
- 파일 선택 탭을 클릭하고 다운로드 한 이미지를 선택합니다.
- 옵션 설정에서 원하는 크기를 패널에 입력합니다 (128x64 OLED 사용).
- 변환 시작 버튼을 클릭하십시오.
다음 페이지가 표시되고 몇 초 후 다운로드가 자동으로 시작되지 않으면 파일 다운로드 옵션을 클릭하면 변환 된 이미지가 다운로드됩니다.
큰! 이제 BMP 파일을 Arduino에서 읽을 수있는 HEX 코드 배열로 변환 할 시간을 얻었습니다.
BMP 이미지를 HEX 코드 배열로 변환
다운로드 한 BMP 이미지를 HEX 어레이로 변환하려면이 웹 사이트로 이동하여 Tools-> image2cpp를 클릭하십시오.
아래 이미지는 프로세스에 대한 명확한 아이디어를 제공합니다.
네 가지 옵션이있는 화면이 표시되며 이에 대해 자세히 설명합니다.
- 이미지 선택
- 이미지 설정
- 시사
- 산출
이미지 섹션 선택
이 섹션에서는 방금 BMP로 변환 한 이미지를 선택합니다.
이미지 설정 섹션
이 섹션에서는 캔버스 크기, 배경색, 크기 조정 및 가운데 옵션을 필요한 값으로 설정합니다.
- 캔버스 크기 (128x64 픽셀 밀도의 OLED를 사용하기 때문에 128x64로 설정).
- 이 섹션에서는 OLED의 배경색을 설정할 수 있습니다 (흰색으로 선택).
- 배율은 원래 크기로 설정됩니다.
- 마지막으로 가운데 옵션에서 가로 및 세로 확인란을 클릭하면 이미지가 가운데에 나타납니다.
아래 이미지는 명확한 아이디어를 제공합니다
섹션 미리보기
미리보기 섹션에서 아래와 같이 OLED에 표시 될 이미지의 명확한 미리보기를 볼 수 있습니다.
출력 섹션
출력 섹션에서 생성 된 코드를 생성하고 복사하여 다음 단계를 따르십시오.
- 코드 출력 형식 (사용하고 있으므로 Arduino 코드로 설정).
- 식별자 (이 옵션은 생성 된 배열의 이름을 설정합니다. 기본값은 그대로 둡니다).
- 그리기 모드 (그리기 모드 옵션을 가로로 설정).
- 마지막으로 코드 생성 버튼을 클릭하면 최종 출력 코드가 생성됩니다.
아래 이미지는 명확한 아이디어를 제공합니다
회로도
아래 이미지는 Arduino Nano와 SSD1306 간의 인터페이스 연결을 보여 줍니다.
Arduino Nano 핀 |
OLED PIN |
GND |
GND |
3.3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
코드 설명
OLED에 이미지를 표시하려면이 GitHub 저장소에서 다운로드 할 수있는 Arduino 라이브러리의 도움이 필요합니다. 라이브러리 의 U8glib-1.19.1.zip 버전을 다운로드하고 Arduino IDE로 가져옵니다. Arduino를 처음 사용하는 경우 라이브러리를 가져 오는 방법을 설명하는이 링크의 도움을 받으십시오. 아래 섹션에서는 이전에 생성 된 HEX 배열을 OLED에 표시하도록 코드를 수정합니다. 작동하는 비디오가 포함 된 완전한 코드는이 기사의 끝에 제공됩니다. 코드의 상세 설명은 아래와 같습니다.
먼저 다운로드 한 라이브러리를 포함합니다.
#include "U8glib.h"// U8glib 라이브러리 포함
그런 다음 OLED에 필요한 모든 핀을 정의합니다.
#define OLED_CLK_PIN 13 // Arduino 디지털 핀 D13: SCK #define OLED_MOSI_PIN 11 // Arduino 디지털 핀 D11: MOSI #define OLED_RES_PIN 10 // Arduino 디지털 핀 D10: SS #define OLED_SDC_PIN 9 // Arduino 디지털 핀 D9: OC1A #define OLED_CSS_PIN 8 // Arduino 디지털 핀 D13: ICP1
u8glib 라이브러리를 초기화합니다.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
그런 다음 생성 된 이미지 배열을 포함합니다.
const uint8_t 회로 다이제스트 PROGMEM = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x00, 0x1c 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf0, 0x8f, 0xf0 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x81, 0x8f, 0x31,0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0x31, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x33, 0x8f, 0xc1, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0x98, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, …….. …… …..0xff, 0xff, …….. ………..0xff, 0xff, …….. ………..
Draw 함수는 u8g.drawBitmapP 함수의 도움으로 OLED에 비트 맵 이미지 (QR 코드)를 그리는 데 사용됩니다.
void draw (void) {// 전체 화면을 다시 그리는 그래픽 명령을 여기에 배치해야합니다. u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
마지막으로 loop () 함수에서 OLED에 이미지를 빌드하는 데 필요한 모든 절차를 호출합니다.
무효 루프 () {u8g.firstPage (); //이 프로 시저에 대한 호출은 그림 루프의 시작을 표시합니다. do {draw (); } while (u8g.nextPage ()); //이 프로 시저에 대한 호출은 그림 루프의 본문 끝을 표시합니다. // 지연 후 그림을 다시 빌드합니다. delay (1000); }
코드를 완성한 후 컴퓨터의 USB 포트에 Arduino를 연결하고 COM 포트를 선택한 다음 코드를 업로드하십시오. 모든 작업을 올바르게 수행하면 OLED에 QR 코드가있는 작업 디스플레이가 표시됩니다.
이 프로젝트를 좋아하고 새로운 것을 배우는 것을 즐겼기를 바랍니다. 계속 읽으십시오. 계속해서 배우십시오. 다음에 뵙겠습니다.