Arduino用のQRコードライブラリーがある。
https://github.com/ricmoo/qrcode/
公開は3年も前だが、Arduinoの少ないメモリで動く様工夫されていながらQRコードのバージョンや誤り補正の指定に対応しているなかなか素晴らしいライブラリである。
本ライブラリでデータ化し、u8glibでOLEDに表示すれば簡単にArduinoでQRコードを作成し表示させる事が出来る。
以下が https://programresource.net の文字列をQRコードでOLEDに表示するサンプルである。画面左右でモノクロ反転両方表示させているが、たったこれだけのスケッチである。
#include "qrcode.h" //https://github.com/ricmoo/qrcode/
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI
void display_qrcode(char *text) {
QRCode qrcode;
uint8_t qrcodeData[qrcode_getBufferSize(4)]; //バージョン4のQRコード 114バイトデータ 33x33ドット
qrcode_initText(&qrcode, qrcodeData, 4, ECC_LOW, text);
u8g.firstPage();
do {
u8g.setColorIndex(0);
u8g.drawBox(0, 0, 64, 64); //塗りつぶし
u8g.setColorIndex(1);
for (uint8_t y = 0; y < qrcode.size; y++) {
for (uint8_t x = 0; x < qrcode.size; x++) {
if (qrcode_getModule(&qrcode, x, y))
u8g.drawBox(15 + x, 15 + y, 1, 1);
}
}
u8g.setColorIndex(1);
u8g.drawBox(64, 0, 64, 64); //塗りつぶし
u8g.setColorIndex(0);
for (uint8_t y = 0; y < qrcode.size; y++) {
for (uint8_t x = 0; x < qrcode.size; x++) {
if (qrcode_getModule(&qrcode, x, y))
u8g.drawBox(79 + x, 15 + y, 1, 1);
}
}
} while ( u8g.nextPage() );
}
void setup() {
u8g.begin();
display_qrcode("https://programresource.net");
}
void loop() {
}
This post is also available in: 英語