「クイックレスポンス」コードまたはQRコードと略されるものは、私たちのデジタルライフの不可欠な部分になっています。おそらく、地元の食料品店を歩き回っている、またはおそらくあなたは、すでに無意識のうちにそれらに精通している可能性があります。お気に入りの本を読んだり、Google Pay、PhonePe、Paytmでオンライン決済を行ったり、ウェブを閲覧したりしている場合もあります(例を続けていくことができると思いますか?)。この奇妙に見える四角いものと考えを横切って、とにかくこの四角いものは何ですか…まあ、遅かれ早かれ起こることを心配しないでください、それでトピックをよりよく理解するために私たちはするつもりですArduinoとOLEDを使った楽しい小さなプロジェクトで、次のことをわかりやすく説明します。
- QRコードの基本コンセプト。
- 使い方。
- Arduinoを使用して独自のQRコードを作成する方法。
- そして最後に、それをOLED(SSD1306)画面に表示します。
それで、とにかくこのQRコードは何ですか?
QRコード(クイックレスポンスコード)は、1994年にデンソーウェーブが日本の自動車産業向けに開発した、データを高速で読み取るためのマトリックス2次元コードです。QRコードは、標準のバーコードと比較して非常に効率的にデータを圧縮します。これを実現するために、4つの標準化されたエンコードモード(数値、英数字、バイト/バイナリ、およびカンジ)を使用し、テクノロジーは「オープンソース」になりました。従来のバーコードに対するQRコードの重要な利点は、データ容量が大きく、耐障害性が高いことです。
QRコードはどのように機能しますか?
QRコード(およびその他のデータマトリックスコード)は、人間ではなく特別なツールで読み取るように設計されているため、視覚的に調べることで理解できるのは特定の量だけですが、いくつかの興味深い共通点が含まれていますが、すべてのコードはさまざまな点で異なりますCircuitdigest.comのQRコードを観察することで機能のいくつかを調査します
- ファインダーパターン:コードの3つのコーナーに実線のボックスが入った大きな正方形のボックスは3つしかないため、QRコードであることを簡単に確認できます。したがって、コードがどちらの方向に向いているかは明らかです。
- 配置パターン:これにより、どの方向でもコードを読み取れるようになります。
- タイミングパターン:これは、水平方向および垂直方向に3つのファインダパターンの間に実行され、コードのサイズを決定することができ、これらのラインリーダーを使用して。
- バージョン情報:現在、QRコード標準には40の異なるバージョンがあります。コードのこのセクションは、通常使用されるマーケティングバージョン1〜7に対して、使用されているQRコードバージョンを決定します。
- フォーマット情報:フォーマットパートナーは、エラートレランスとデータマスキングに関する情報を持っています。
- データ領域:コードのこのセクションには、すべてのデータ要素とエラー訂正コードが含まれています。
- 終了ゾーン:コードを周囲と区別するために、すべてのQRコードの間隔は必須です。
以下の画像は、コードについての明確なアイデアを提供します
コードの他のセクションは、データと冗長性コードです。
このチュートリアルでは説明しない機能や複雑なトピックが他にもたくさんあります。QRコードの詳細を知りたい場合は、EPCglobal SingaporeCouncilのTanJinSoonによるこの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 DigestWebサイトのQRコードを作成します。
QRコードを生成するには、このWebサイトにアクセスし、Webサイトの上部を見ると、オプションのリストが表示されます。このチュートリアルでは、URLのQRコードを生成しているので、次のようにします。
- [URL]タブをクリックし、[URLの入力]セクションにサーキットダイジェストのURLを貼り付けます。
- 保存をクリックします。
- 出力ファイルのファイル名を指定します。
- 推奨ファイル形式としてPNGを選択します。
- 保存をクリックします。
下の画像は、プロセスについての明確なアイデアを提供します
私たちの最愛のマイクロコントローラー「Arduino」は、生のPNG画像をコンパイルしてOLEDディスプレイに表示できるほどインテリジェントではありません。したがって、QRコードをOLEDに表示するには、いくつかの簡単な手順に従って、PNG画像をArduinoで読み取り可能なビットマップ配列に変換する必要があります。SSD1306 OLEDとArduinoのインターフェース、およびグラフィカルLCDとArduinoのインターフェース中に、以前に行ったこの変換。また、SSD1306OLEDをRaspberryPi、ESP32、NodeMCU、および他の多くのマイクロコントローラーとインターフェースしました。ビットマップ配列の変換は、以下の2つのステップで実行できます。
- PNGをBMP形式に変換します。
- BMPイメージをHEXコードの配列に変換します。
PNGをBMP形式に変換する
ダウンロードしたPNG画像をBMP画像に変換するには、このWebサイトにアクセスし、画像変換セクションで
- ドロップダウンメニューをクリックして、
- BMPに変換
- [移動]をクリックします
以下の画像は、プロセスについての明確なアイデアを提供します。
次の画像のような新しいページが表示されます。
- [ファイルの選択]タブをクリックして、ダウンロードした画像を選択します
- オプション設定で、パネルに希望のサイズを入力します(128x64 OLEDを使用しています)
- [変換を開始]ボタンをクリックします
次のページが表示されます。ダウンロードが自動的に開始されない場合は、数秒後に変換された画像がダウンロードされます。[ファイルのダウンロード]オプションをクリックします。
すごい!これで、BMPファイルをArduinoで読み取り可能なHEXコードの配列に変換する時間ができました。
BMP画像をHEXコードの配列に変換します
ダウンロードしたBMPイメージをHEXアレイに変換するには、このWebサイトにアクセスし、[ツール] -> [image2cpp]をクリックします。
下の画像は、プロセスについての明確なアイデアを提供します
4つのオプションがある画面が表示され、それらについて詳しく説明します
- 画像を選択
- 画像設定
- プレビュー
- 出力
画像セクションを選択
このセクションでは、BMPに変換したばかりの画像を選択します。
画像設定セクション
このセクションでは、キャンバスサイズ、背景色、スケーリング、中央のオプションを必要な値に設定します。
- キャンバスサイズ(128x64ピクセル密度のOLEDを使用しているため、128x64に設定しました)。
- このセクションでは、OLEDの背景色を設定できます(白を選択します)。
- スケーリングは元のサイズに設定されます。
- 最後に、中央のオプションで、水平および垂直のチェックボックスをクリックします。これにより、画像が中央に表示されます。
下の画像はあなたに明確な考えを与えるでしょう
プレビューセクション
プレビューセクションでは、以下に示すように、OLEDに表示される画像の明確なプレビューを見ることができます。
出力セクション
出力セクションでは、生成されたコードを生成してコピーします。これを行うには、以下の手順に従います。
- コード出力フォーマット(使用しているのでArduinoコードとして設定)。
- 識別子(このオプションは、生成された配列の名前を設定し、デフォルトのままにします)。
- 描画モード(描画モードオプションを水平に設定します)。
- 最後に、[コードの生成]ボタンをクリックすると、最終的な出力コードが生成されます。
下の画像はあなたに明確な考えを与えるでしょう
回路図
下の画像は、ArduinoNanoとSSD1306間のインターフェース接続を示しています。
Arduinoナノピン |
OLEDピン |
GND |
GND |
3.3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
コードの説明
OLEDに画像を表示するには、このGitHubリポジトリからダウンロードできるArduinoライブラリの助けが必要です。ライブラリの U8glib-1.19.1.zip バージョンをダウンロードし、 ArduinoIDEに インポートします。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 Circuitdigest PROGMEM = {0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0x 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、0xf0、0x00、0x1 0x87、0xf0、0x00、0x0f、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xf0、0x00、0x0c、0x01、0x87、0xf0、0x00、0x0f、0xff、0xff、0x 0xff、0xff、0xff、0xf3、0xff、0x8f、0xf0、0x7f、0x31、0xff、0x8f、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xf3、0xff、0x8f、0x 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、0x 0xff、0xff、0xff、0xf3、0x01、0x8f、0xb1、0x80、0x33、0x81、0xcf、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xff、0xf3、0x01、0x8f、0xc1、0 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上にイメージを構築するために必要なすべてのプロシージャを呼び出します
void loop(){u8g.firstPage(); //このプロシージャの呼び出しは、画像ループの開始を示します。do {draw(); } while(u8g.nextPage()); //このプロシージャを呼び出すと、画像ループの本体の終わりがマークされます。//遅延delay(1000);後に画像を再構築します。}
コードが完成したら、ArduinoをコンピューターのUSBポートに接続し、COMポートを選択して、コードをアップロードします。すべてを正しく行うと、OLEDにQRコードが付いたディスプレイが機能します。
このプロジェクトが気に入って、何か新しいことを楽しんでいただけたら幸いです。読み続けて学び続けてください。次回お会いしましょう。