请求改写代码使二维码占满200x200的1.54寸电子纸屏幕
问题描述
使用Waveshare 1.54寸电子纸模块(200x200分辨率),通过ricmoo/qrcode库生成二维码,但当前二维码仅占据屏幕小部分,需要修改代码让二维码完全铺满屏幕。当前效果如下:
原代码:
#include <SPI.h> #include "epd1in54_V2.h" #include "qrcode.h" #include "epdpaint.h" //set the pins of the ESP32 Epd epd(33, 25, 26, 27); // my Pins ESP32 (Reset, DC, CS, Busy) unsigned char image[1024]; Paint paint(image, 0, 0); QRCode qrcode; #define BLACK 0 #define WHITE 1 void setup() { uint8_t qrcodeData[qrcode_getBufferSize(3)]; qrcode_initText(&qrcode, qrcodeData, 3, 0, "https://vinotes.app"); epd.LDirInit(); epd.Clear(); paint.SetWidth(45); paint.SetHeight(45); paint.Clear(WHITE); for (int y = 0; y < qrcode.size; y++) { for (int x = 0; x < qrcode.size; x++) { if (qrcode_getModule(&qrcode, x, y)) { paint.DrawPixel(x, y, BLACK); } } } epd.SetFrameMemory(paint.GetImage(), 0, 0, paint.GetWidth(), paint.GetHeight()); epd.DisplayFrame(); epd.Sleep(); } void loop() { }
修改后的代码
#include <SPI.h> #include "epd1in54_V2.h" #include "qrcode.h" #include "epdpaint.h" // ESP32引脚配置 Epd epd(33, 25, 26, 27); // Reset, DC, CS, Busy // 200x200屏幕所需缓存:(200 * 200) / 8 = 5000 字节 unsigned char image[5000]; Paint paint(image, 200, 200); QRCode qrcode; #define BLACK 0 #define WHITE 1 void setup() { // 选择版本10的二维码(对应57x57模块),可容纳目标链接且缩放后适配200x200屏幕 uint8_t qrcodeData[qrcode_getBufferSize(10)]; qrcode_initText(&qrcode, qrcodeData, 10, 0, "https://vinotes.app"); epd.LDirInit(); epd.Clear(); // 设置画布为屏幕全尺寸 paint.SetWidth(200); paint.SetHeight(200); paint.Clear(WHITE); // 计算缩放比例与偏移量,保证二维码居中铺满 int scale = 200 / qrcode.size; int offsetX = (200 - qrcode.size * scale) / 2; int offsetY = (200 - qrcode.size * scale) / 2; // 绘制放大后的二维码模块 for (int y = 0; y < qrcode.size; y++) { for (int x = 0; x < qrcode.size; x++) { if (qrcode_getModule(&qrcode, x, y)) { // 绘制scale×scale的黑色色块 paint.DrawFilledRectangle(offsetX + x*scale, offsetY + y*scale, offsetX + (x+1)*scale - 1, offsetY + (y+1)*scale - 1, BLACK); } } } epd.SetFrameMemory(paint.GetImage(), 0, 0, paint.GetWidth(), paint.GetHeight()); epd.DisplayFrame(); epd.Sleep(); } void loop() { }
关键修改说明
- 缓存容量升级:原1024字节缓存仅支持小尺寸画布,200x200屏幕需要5000字节(单色屏幕每字节存8个像素)
- 二维码版本调整:版本3仅29x29模块,改为版本10的57x57模块,缩放后更接近屏幕尺寸,避免过度拉伸模糊
- 画布适配屏幕:将画布尺寸设为200x200,直接使用全屏幕绘制区域
- 缩放与居中逻辑:通过计算缩放比例,把每个二维码模块放大为色块,偏移量确保二维码在屏幕居中
- 绘制效率优化:用填充矩形替代单像素绘制,减少循环次数,提升绘制速度
内容的提问来源于stack exchange,提问作者luegm.dev
相关产品推荐
相关产品推荐

