ESPHome
2025.9.0-dev
Loading...
Searching...
No Matches
esphome
components
qr_code
qr_code.cpp
Go to the documentation of this file.
1
#include "
qr_code.h
"
2
#include "
esphome/components/display/display.h
"
3
#include "
esphome/core/color.h
"
4
#include "
esphome/core/log.h
"
5
6
namespace
esphome
{
7
namespace
qr_code {
8
9
static
const
char
*
const
TAG =
"qr_code"
;
10
11
void
QrCode::dump_config
() {
12
ESP_LOGCONFIG(TAG,
13
"QR code:\n"
14
" Value: '%s'"
,
15
this->
value_
.c_str());
16
}
17
18
void
QrCode::set_value
(
const
std::string &value) {
19
this->
value_
= value;
20
this->
needs_update_
=
true
;
21
}
22
23
void
QrCode::set_ecc
(qrcodegen_Ecc ecc) {
24
this->
ecc_
= ecc;
25
this->
needs_update_
=
true
;
26
}
27
28
void
QrCode::generate_qr_code
() {
29
ESP_LOGV(TAG,
"Generating QR code"
);
30
uint8_t tempbuffer[qrcodegen_BUFFER_LEN_MAX];
31
32
if
(!qrcodegen_encodeText(this->
value_
.c_str(), tempbuffer, this->qr_, this->ecc_, qrcodegen_VERSION_MIN,
33
qrcodegen_VERSION_MAX, qrcodegen_Mask_AUTO,
true
)) {
34
ESP_LOGE(TAG,
"Failed to generate QR code"
);
35
}
36
}
37
38
void
QrCode::draw
(
display::Display
*buff, uint16_t x_offset, uint16_t y_offset,
Color
color,
int
scale) {
39
ESP_LOGV(TAG,
"Drawing QR code at (%d, %d)"
, x_offset, y_offset);
40
41
if
(this->
needs_update_
) {
42
this->
generate_qr_code
();
43
this->
needs_update_
=
false
;
44
}
45
46
uint8_t qrcode_width = qrcodegen_getSize(this->
qr_
);
47
48
for
(
int
y
= 0;
y
< qrcode_width * scale;
y
++) {
49
for
(
int
x
= 0;
x
< qrcode_width * scale;
x
++) {
50
if
(qrcodegen_getModule(this->
qr_
,
x
/ scale,
y
/ scale)) {
51
buff->
draw_pixel_at
(x_offset +
x
, y_offset +
y
, color);
52
}
53
}
54
}
55
}
56
57
uint8_t
QrCode::get_size
() {
58
if
(this->
needs_update_
) {
59
this->
generate_qr_code
();
60
this->
needs_update_
=
false
;
61
}
62
63
uint8_t size = qrcodegen_getSize(this->
qr_
);
64
65
return
size;
66
}
67
68
}
// namespace qr_code
69
}
// namespace esphome
esphome::display::Display
Definition
display.h:208
esphome::display::Display::draw_pixel_at
void draw_pixel_at(int x, int y)
Set a single pixel at the specified coordinates to default color.
Definition
display.h:226
esphome::qr_code::QrCode::value_
std::string value_
Definition
qr_code.h:30
esphome::qr_code::QrCode::qr_
uint8_t qr_[qrcodegen_BUFFER_LEN_MAX]
Definition
qr_code.h:33
esphome::qr_code::QrCode::draw
void draw(display::Display *buff, uint16_t x_offset, uint16_t y_offset, Color color, int scale)
Definition
qr_code.cpp:38
esphome::qr_code::QrCode::set_ecc
void set_ecc(qrcodegen_Ecc ecc)
Definition
qr_code.cpp:23
esphome::qr_code::QrCode::set_value
void set_value(const std::string &value)
Definition
qr_code.cpp:18
esphome::qr_code::QrCode::needs_update_
bool needs_update_
Definition
qr_code.h:32
esphome::qr_code::QrCode::dump_config
void dump_config() override
Definition
qr_code.cpp:11
esphome::qr_code::QrCode::get_size
uint8_t get_size()
Definition
qr_code.cpp:57
esphome::qr_code::QrCode::ecc_
qrcodegen_Ecc ecc_
Definition
qr_code.h:31
esphome::qr_code::QrCode::generate_qr_code
void generate_qr_code()
Definition
qr_code.cpp:28
color.h
display.h
log.h
esphome
Providing packet encoding functions for exchanging data with a remote host.
Definition
a01nyub.cpp:7
qr_code.h
esphome::Color
Definition
color.h:17
x
uint16_t x
Definition
tt21100.cpp:5
y
uint16_t y
Definition
tt21100.cpp:6
Generated by
1.12.0