цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Генерируем QR-код с помощью Arduino и отображаем его на дисплее ILI9341



Генерируем QR-код с помощью Arduino и отображаем его на дисплее ILI9341

Автор: Mike(admin) от 10-06-2022, 03:55

В настоящее время QR-коды практически являются частью нашей жизни. С помощью них мы осуществляем платежи, кодируем пароли Wi-Fi, осуществляем перенаправление по ссылкам URL, получаем информацию о местоположении, информацию о билете и так далее. Поэтому было бы интересно и, возможно, полезно сделать электронную систему, которая могла бы генерировать QR-коды и отображать их. И в этом нам помогут Arduino и дисплей ILI9341 с разрешением 240 x 320.


Генерируем QR-код с помощью Arduino и отображаем его на дисплее ILI9341

Для того, чтобы облегчить генерацию QR-кодов на Arduino следует загрузить и установить библиотеку QRCode (https://github.com/ricmoo/qrcode/).


Подключите Arduino к дисплею в соответствии со следующей схемой.


Генерируем QR-код с помощью Arduino и отображаем его на дисплее ILI9341

Далее приведен код программы Arduino, который весьма прост благодаря задействованной библиотеке QRCode. В коде замените содержимое строковой переменной amount на то, что вы хотите записать в QR-коде.



#include <LCDWIKI_GUI.h>
#include <LCDWIKI_SPI.h>
#include "qrcode.h"

#define MODEL ILI9341
#define CS    A5    
#define CD    A3
#define RST   A4
#define MOSI  11
#define MISO  12
#define SCK   13
#define LED   A0

//определения программного режима spi следующие:
//если модель микросхемы известна или модули нечитаемы, вы можете использовать эту функцию:
LCDWIKI_SPI mylcd(MODEL,CS,CD,MISO,MOSI,RST,SCK,LED);
//если модель микросхемы неизвестна, а модули доступны для чтения, вы можете использовать эту функцию:
//LCDWIKI_SPI mylcd(240,320,CS,CD,MISO,MOSI,RST,SCK,LED);

//определим некоторые значения цветов
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

int16_t xaxis=0, yaxis=0, w, h;

void setup() {
  Serial.begin(9600);
  mylcd.Init_LCD();
  w = mylcd.Get_Display_Width();
  h = mylcd.Get_Display_Height();
  xaxis = w/2;
  yaxis = h/2;
  mylcd.Set_Text_Mode(0);
}

void loop() {
  mylcd.Fill_Screen(BLACK);
  generateQRCode();
}

void generateQRCode() {
  // Создаем QR-код
    QRCode qrcode;
    String amount = "http://digitrode.ru";
    uint32_t str_len = amount.length() + 1;
    char am[str_len];
    amount.toCharArray(am, str_len);
    char *data = am;
    
    const uint8_t ecc = 0;  //самый низкий уровень исправления ошибок
    const uint8_t version = 3;

    uint8_t qrcodeData[qrcode_getBufferSize(version)];
    qrcode_initText(&qrcode, 
                    qrcodeData, 
                    version, ecc, 
                    data);
    const int xy_scale = 6;
    int xmax = w/2;
    int ymax = h/2;
    int offset = (xy_scale*qrcode.size);
    int x1 = xmax - (offset/2);
    int y1 = ymax - (offset/2);

    int px1 = x1;
    int py1 = x1;
    int px2 = px1;
    int py2 = py1;
    
    for (uint8_t y = 0; y < qrcode.size; y++) {
        for (uint8_t x = 0; x < qrcode.size; x++) {
            bool mod = qrcode_getModule(&qrcode, x, y);
            px1 = x1 + x * xy_scale;
            py1 = x1 + y * xy_scale;
            px2 = px1 + xy_scale;
            py2 = py1 + xy_scale;
            if(mod){   
              mylcd.Set_Draw_color(CYAN);   
              mylcd.Fill_Rectangle(px1, py1, px2, py2);
            }
        }
    }
    
}



© digitrode.ru


Теги: Arduino, дисплеи, QR-код




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий