You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求改写代码使二维码占满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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:10:31