项目简介
本项目是基于C语言开发的QR码生成与编译辅助系统。借助 libqrencode
库实现了QR码的生成与解码功能。同时,项目提供了在ESP32设备上编译 libqrencode
库的辅助工具,还包含生成不同版本、纠错级别和编码模式QR码的功能及相应测试用例,保证代码的正确性与稳定性。
项目的主要特性和功能
- 支持生成不同版本、纠错级别和编码模式的QR码。
- 可从QR码中解码出原始数据,能处理长数据、空数据以及不同纠错级别和编码模式的QR码。
- 拥有一系列测试用例,用于验证QR码编码和解码功能的正确性和稳定性。
- 支持生成和解码Micro QR码,适用于小尺寸设备。
- 能验证QR码中格式信息的正确性,包括版本信息、纠错级别等。
- 可帮助在ESP32设备上编译
libqrencode
库。
安装使用步骤
前提条件
假设用户已经下载了本项目的源码文件,且拥有C语言编程环境和相应的编译器(如GCC),对于测试功能,可能需要额外的依赖库(如SDL库用于图形渲染),确保所有依赖库已正确安装和配置。
安装 libqrencode
库
在 platformio
中执行以下命令:
sh
编写代码
在 src/whatever.ino
文件中编写代码,示例如下:
```c
include
include "qrencode.h"
static void printLine(const char *line, const unsigned int repeat) { for (int i = 0; i < repeat; i++) Serial.println(line); }
static void printQRcode(QRcode *q, const unsigned int xMult, const unsigned int yMult) { const unsigned int spacer = 3, hSpacer = spacer * xMult, vSpacer = spacer * yMult; const char charNotSpace = 'X', charSpace = ' '; const unsigned int lineLength = hSpacer * 2 + q->width * xMult; char row[lineLength + 1] = {0}; memset(row, charSpace, lineLength); printLine(row, vSpacer); for (int y = 0; y < q->width; y++) { for (int x = 0; x < q->width; x++) memset(row + hSpacer + x * xMult, (q->data[y * q->width + x] & 1)? charNotSpace : charSpace, xMult); printLine(row, yMult); } memset(row + hSpacer, charSpace, lineLength - hSpacer); printLine(row, vSpacer); }
void setup() { Serial.begin(115200); delay(2000); QRcode *q = QRcode_encodeString("hi there", 0, QR_ECLEVEL_Q, QR_MODE_8, 1); printQRcode(q, 3, 2); QRcode_free(q); }
void loop() { esp_deep_sleep_start(); } ```
编译运行
- 使用C语言编译器(如GCC)编译项目。
- 运行生成的程序,根据提示输入或选择参数来生成和解码QR码。
测试功能
执行测试用例,确保QR码编码和解码功能正确。
自定义参数
根据需要自定义QR码的大小、纠错级别、版本等参数。
更新 libqrencode
- 更新子树(需在以下命令中修正标签):
sh
- 更新
library.json
文件,包括新的platformio
版本和libqrencode
的正确版本定义。 - 更新本
README.md
中的git subtree
命令。 - 提交PR。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】