墨水屏相比其他LCD屏幕在低功耗方面有着显著优势,特别适合纽扣电池甚至是无电池的nfc价签的应用场合。价签经常要显示二维码,因此网上找了下找到了一个合适的适合在mcu上进行使用的二维码生成库。
这个qrcode很适合在mcu上,就一个.c和.h文件。
使用流程:
// Create the QR code 按照所需字符串生成对应的二维码
QRCode qrcode;
uint8_t qrcodeData[qrcode_getBufferSize(3)];
qrcode_initText(&qrcode, qrcodeData, 3, 0, "https://blog.csdn.net/hydfxy2018");
printf( "qrcode.size:%d\r\n", qrcode.size);
qrcode_getBufferSize(3) 这里的参数3代表使用qr version3,不同版本对应生成的二维码分辨率不一样。
Version | Size | Error Correction | Mode | ||
---|---|---|---|---|---|
Numeric | Alphanumeric | Byte | |||
1 | 21 x 21 | LOW | 41 | 25 | 17 |
MEDIUM | 34 | 20 | 14 | ||
QUARTILE | 27 | 16 | 11 | ||
HIGH | 17 | 10 | 7 | ||
2 | 25 x 25 | LOW | 77 | 47 | 32 |
MEDIUM | 63 | 38 | 26 | ||
QUARTILE | 48 | 29 | 20 | ||
HIGH | 34 | 20 | 14 | ||
3 | 29 x 29 | LOW | 127 | 77 | 53 |
MEDIUM | 101 | 61 | 42 | ||
QUARTILE | 77 | 47 | 32 | ||
HIGH | 58 | 35 | 24 |
这部分在qrcode的仓库里面有进行说明,依据如上可以选择合适的版本以及相应的ecc设定。
生成的二维码显示到墨水屏上
for (uint8_t y = 0; y < qrcode.size; y++) {
for (uint8_t x = 0; x < qrcode.size; x++) {
if (qrcode_getModule(&qrcode, x, y)) {
Paint_DrawFillRect(0 + x * 3,
150 + y * 3, 3, 3);
}
}
}
原理是依据二维码code在屏幕上进行打点显示,这里通过点的大小也可以进行实际二维码大小进行调整,如如上按每个点3像素进行设定。
显示效果如下:
完整代码参考如下:
GitHub - iot-lorawan/MCU_QRCode_LCD: Ink-Display with QRCode in MCU