一 前言
最近需要實(shí)現(xiàn)一個(gè)使用二維碼進(jìn)行顯示的項(xiàng)目,記錄一下使用和實(shí)現(xiàn)過程,方便后面復(fù)習(xí)查看,也提供給大家進(jìn)行查考
二 開發(fā)環(huán)境
Arduino IDE
芯片 ESP32-WROOM
?所需環(huán)境的搭建可以參考我之前發(fā)布的文章
Arduino IDE 使用安裝以及ESP32庫的導(dǎo)入(離線)https://blog.csdn.net/herui_2/article/details/135296814?spm=1001.2014.3001.5502
三 所需庫
QRcode
Github 鏈接https://github.com/ricmoo/QRCode
首先先下載庫的壓縮包
首先先解壓我們的下載的壓縮包,找到src文件夾,里面的文件就是我們需要用到的文件
?將這兩個(gè)文件放到我們需要生成二維碼項(xiàng)目的文件夾里面即可
目錄如下圖所示,我們的項(xiàng)目就可以直接使用二維碼庫了。
U8g2
U8g2庫在我們的項(xiàng)目中直接安裝即可了
四 實(shí)現(xiàn)過程
避坑
一定不要采用雙拼色屏幕去做二維碼?。?/p>
一定不要采用雙拼色屏幕去做二維碼?。?/p>
一定不要采用雙拼色屏幕去做二維碼??!
因?yàn)殡p拼屏幕中間有條杠,二維碼顯示不完全;
效果
關(guān)于反顯二維碼
我在網(wǎng)上沒有找到相關(guān)資料,所以自己想了一下,我自己畫一個(gè)白色背景不就行了哈哈,結(jié)果還是舒適的,主要加了這段代碼,以及修改了二維碼的黑白反向
u8g2.drawBox(0, 0, 128, 64);? //畫箱
?代碼如下
// 顯示二維碼
void QR_Code() {
// 二維碼
QRCode qrcode;
uint8_t qrcodeData[qrcode_getBufferSize(3)];
qrcode_initText(&qrcode, qrcodeData, 3, ECC_LOW, "HX125458726");
// start draw
u8g2.firstPage();
do {
// get the draw starting point,128 and 64 is screen size
uint8_t x0 = (128 - qrcode.size * 2) / 2;
uint8_t y0 = (64 - qrcode.size * 2) / 2;
// u8g2.setDrawColor(1); //
u8g2.drawBox(0, 0, 128, 64); //畫箱
// get QR code pixels in a loop
for (uint8_t y = 0; y < qrcode.size; y++) {
for (uint8_t x = 0; x < qrcode.size; x++) {
// Check this point is black or white
if (qrcode_getModule(&qrcode, x, y)) {
u8g2.setColorIndex(0);
} else {
u8g2.setColorIndex(1);
}
// Double the QR code pixels
u8g2.drawPixel(x0 + x * 2, y0 + y * 2);
u8g2.drawPixel(x0 + 1 + x * 2, y0 + y * 2);
u8g2.drawPixel(x0 + x * 2, y0 + 1 + y * 2);
u8g2.drawPixel(x0 + 1 + x * 2, y0 + 1 + y * 2);
}
}
} while (u8g2.nextPage());
}
接口
?OLED顯示屏接口如下
代碼
?代碼編寫如下
#include <U8g2lib.h>
// OLED
#include <WiFi.h>
// 二維碼所需庫
#include "qrcode.h"
// 顯示屏 配置
#define SCL 22
#define SDA 21
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, /*reset=*/U8X8_PIN_NONE);
char str[50]; //拼接字符使用
void setup() {
Serial.begin(9600); // 啟動(dòng)串口通訊
//OELD
u8g2.begin();
u8g2.setFont(u8g2_font_ncenB08_tr); //設(shè)定字體
QR_Code(); // 生成
}
// 顯示二維碼
void QR_Code() {
// 二維碼
QRCode qrcode;
uint8_t qrcodeData[qrcode_getBufferSize(3)];
qrcode_initText(&qrcode, qrcodeData, 3, ECC_LOW, "https://blog.csdn.net/herui_2?spm=1000.2115.3001.5343");
// start draw
u8g2.firstPage();
do {
// get the draw starting point,128 and 64 is screen size
uint8_t x0 = (128 - qrcode.size * 2) / 2;
uint8_t y0 = (64 - qrcode.size * 2) / 2;
// get QR code pixels in a loop
for (uint8_t y = 0; y < qrcode.size; y++) {
for (uint8_t x = 0; x < qrcode.size; x++) {
// Check this point is black or white
if (qrcode_getModule(&qrcode, x, y)) {
u8g2.setColorIndex(1);
} else {
u8g2.setColorIndex(0);
}
// Double the QR code pixels
u8g2.drawPixel(x0 + x * 2, y0 + y * 2);
u8g2.drawPixel(x0 + 1 + x * 2, y0 + y * 2);
u8g2.drawPixel(x0 + x * 2, y0 + 1 + y * 2);
u8g2.drawPixel(x0 + 1 + x * 2, y0 + 1 + y * 2);
}
}
} while (u8g2.nextPage());
}
void loop() {
}
完整項(xiàng)目
鏈接:https://pan.baidu.com/s/1cfNZIBarf7X5ryMF7b8zbQ?pwd=XZY0
提取碼:XZY0