- Så, vad är den här QR-koden ändå?
- Skapa din egen QR-kod
- Konverterar PNG till BMP-format
- Konvertera BMP-bilden till en uppsättning HEX-koder
- Kretsschema
- Kodförklaring
"Quick Response" -koden eller förkortad som QR-kod har blivit en viktig del av våra digitala liv, chansen är att du redan omedvetet känner till dem nu att du förmodligen har strövat omkring i din lokala livsmedelsbutik, eller kanske är du läsa igenom din favoritbok, eller till och med göra en onlinebetalning med Google Pay, PhonePe eller Paytm, eller surfa på nätet, etc. (jag antar att jag skulle kunna fortsätta med exempel, va?) och du har råkar ha kommit över denna konstiga snygga fyrkantiga sak och tanke, vad är denna fyrkantiga sak i alla fall och om du inte har… ja, oroa dig inte, det kommer säkert att hända förr eller senare, så för att förstå ämnet bättre kommer vi att göra en roligt litet projekt med Arduino och OLED och avmystifiera följande saker:
- Grundkoncept för QR-koden.
- Hur det fungerar.
- Hur man skapar en helt egen QR-kod med Arduino.
- Och slutligen, visa den på en OLED-skärm (SSD1306).
Så, vad är den här QR-koden ändå?
QR-kod (Quick Response code) är en matris 2D-kod för läsning av data i hög hastighet, utvecklad av DENSO WAVE 1994 för bilindustrin i Japan. En QR-kod komprimerar data mycket effektivt jämfört med standardstreckkoden, för att uppnå detta använder den fyra standardiserade kodningslägen (numerisk, alfanumerisk, byte / binär och kanji), tekniken gjordes "öppen källkod" dvs tillgänglig för alla så, det fick popularitet mycket snabbt. Betydande fördelar med QR-koder jämfört med konventionella streckkoder är större datakapacitet och hög feltolerans.
Hur fungerar QR-koden?
QR-koder (och andra datamatriskkoder) är utformade för att läsas av specialverktyg, inte av människor, så det finns bara en viss mängd vi kan förstå genom att studera visuellt, även om varje kod är olika på olika sätt även om de innehåller några intressanta vanliga funktioner genom att följa circuitdigest.com QR-koden kommer vi att studera några av dem
- Finder Patterns: Stora fyrkantiga lådor med en solid ruta inuti i kodens tre hörn gör det enkelt att bekräfta att det är en QR-kod eftersom det bara finns tre av dem, så det är ganska uppenbart att på vilket sätt koden är orienterad.
- Justeringsmönster: Detta gör det säkert att oavsett riktning koden kan vara läsbar.
- Tidsmönster: Detta går horisontellt och vertikalt mellan de tre sökmönstren , med hjälp av dessa rader kan läsaren bestämma kodens storlek.
- Versioninformation: Det finns för närvarande 40 olika versioner av QR-kodstandarden. Detta avsnitt av koden avgör vilken QR-kodversion som används, för marknadsföring av version 1-7 som används normalt.
- Formatinformation: Formatpartnerna har information om feltolerans och datamaskering.
- Dataområde: Detta avsnitt av koden innehåller alla dataelement och felkorrigeringskod tillsammans.
- Avsluta zon: Avståndet i varje QR-kod är obligatoriskt för att skilja koden från dess omgivning.
Bilden nedan ger dig en tydlig uppfattning om koden
Andra delar av koden är data- och redundanskod.
Det finns ett antal andra funktioner och komplicerade ämnen som jag inte kommer att diskutera i den här handledningen. Om du vill läsa mer om QR-koden, följ denna QR-kodhandledning av Tan Jin Soon, EPCglobal Singapore Council. Synthesis Journal, 2008.
Specifikationen av QR-koden
Symbolstorlek |
Min. 21x21 cell - Max. 177x177-cell (med 4-cellintervall) |
|
Informationstyp och volym |
Numeriska tecken |
Högst 7289 tecken |
Alfabet, tecken |
Maximalt 4 296 tecken |
|
Binär (8 bitar) |
2 953 tecken högst |
|
Kanji-karaktärer |
Högst 1817 tecken |
|
Omvandlingseffektivitet |
Numeriska teckenläge |
3,3 celler / karaktär |
Alfanumeriskt / teckenläge |
5,5 celler / tecken |
|
Binärt (8 bitars) läge |
8 celler / karaktär |
|
Kanji-teckenläge (13 bitar) |
13 celler / karaktär |
|
Felkorrigering funktionalitet |
Nivå L |
Ungefär. 7% av symbolområdet återställs maximalt |
Nivå M |
Ungefär. 15% av symbolområdet återställs maximalt |
|
Nivå Q |
Ungefär. 25% av symbolområdet återställs maximalt |
|
Nivå H |
Ungefär. 30% av symbolområdet återställs maximalt |
|
Länkar funktionalitet |
Möjligt att delas upp i högst 16 symboler |
Skapa din egen QR-kod
Följ stegen nedan för att skapa din egen QR-kod, i det här exemplet ska vi skapa en QR-kod på vår älskade Circuit Digest- webbplats
För att generera en QR-kod, gå till den här webbplatsen och om du tittar längst upp på webbplatsen kan du se en lista med alternativ, i den här guiden genererar vi en QR-kod för en URL, så vi ska
- Klicka på URL-fliken och klistra in URL för Circuit Digest i avsnittet Enter URL.
- Klicka på spara.
- Ange ett filnamn för utdatafilen.
- Välj PNG som vårt föredragna filformat.
- och klicka på spara.
Bilden nedan ger dig en tydlig uppfattning om processen
Vår käraste mikrokontroller "Arduino" är inte så intelligent att den bara kan kompilera den råa PNG-bilden och visa den i OLED-skärmen. Så för att visa QR-koden till OLED måste vi följa några enkla steg och konvertera PNG-bilden till en bitmappsuppsättning som kan läsas av Arduino. Denna konvertering har vi tidigare gjort när vi gränssnitt SSD1306 OLED med Arduino och gränssnitt Grafisk LCD med Arduino. Vi kopplade också SSD1306 OLED med Raspberry Pi, ESP32, NodeMCU och många andra mikrokontroller. Bitmap-arraykonvertering kan göras i nedanstående två steg:
- Konverterar PNG till BMP-format.
- Konvertera BMP-bilden till en uppsättning HEX-koder.
Konverterar PNG till BMP-format
För att konvertera den nedladdade PNG-bilden till BMP-bilden, gå till den här webbplatsen och i avsnittet om bildkonverterare och
- Klicka på rullgardinsmenyn och välj
- Konvertera till BMP
- Klicka på Go
Bilden nedan ger dig en tydlig uppfattning om processen:
Du får en ny sida som ser ut som bilden nedan:
- Klicka på fliken Välj filer och välj den nedladdade bilden
- I de valfria inställningarna skriver du panelen önskad storlek (vi använder en 128x64 OLED)
- Klicka på Starta konverteringsknappen
Du kommer att presenteras med följande sida och efter några sekunder laddas din konverterade bild ned om nedladdningen inte startar automatiskt, klicka på ladda ner ditt filalternativ:
Bra! Nu har vi fått vår BMP-fil att konvertera den till en uppsättning HEX-koder som kan läsas av en Arduino.
Konvertera BMP-bilden till en uppsättning HEX-koder
För att konvertera den nedladdade BMP-bilden till en HEX-array, gå till den här webbplatsen och klicka på Verktyg -> image2cpp
Bilden nedan ger dig en tydlig uppfattning om processen
Du får en skärm som har fyra alternativ och vi kommer att diskutera dem i detalj
- Välj bild
- Bildinställningar
- Förhandsvisning
- Produktion
Välj bildavsnitt
I det här avsnittet väljer vi bilden som vi just har konverterat till BMP:
Avsnitt för bildinställningar
I det här avsnittet ställer vi in dukstorlek, bakgrundsfärg, skalning och mittalternativ till vårt önskade värde.
- Canvasstorlek (vi ställer in till 128x64 eftersom vi använder en OLED med 128x64 pixeldensitet).
- I det här avsnittet kan vi ställa in bakgrundsfärgen på OLED (vi väljer att den ska vara vit).
- Skalningen är inställd på originalstorleken.
- Slutligen klickar du på de horisontella och vertikala kryssrutorna i mittalternativet så att bilden visas i mitten.
Bilden nedan ger dig en tydlig uppfattning
Förhandsgranska avsnitt
I förhandsgranskningsavsnittet kan vi se en tydlig förhandsvisning av bilden som kommer att visas i OLED som visas nedan:
Utgångssektion
I utgångssektionen genererar vi och kopierar den genererade koden, för att göra det följ stegen nedan:
- Kodutmatningsformat (vi ställer in det som Arduino-kod eftersom vi använder ett).
- Identifier (det här alternativet ställer in namnet på den genererade matrisen, vi lämnar den som standard).
- Ritningsläge (vi ställer in alternativet Ritläge till horisontellt).
- Och slutligen klickar vi på knappen generera kod så genereras den slutliga utdatakoden.
Bilden nedan ger dig en tydlig uppfattning
Kretsschema
Bilden nedan visar gränssnittsanslutningarna mellan Arduino Nano och SSD1306:
Arduino Nano Pin |
OLED PIN |
GND |
GND |
3,3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Kodförklaring
För att visa bilden på OLED behöver vi hjälp av ett Arduino-bibliotek, som kan laddas ner från detta GitHub-arkiv. Ladda ner U8glib-1.19.1.zip- versionen av biblioteket och importera den i Arduino IDE. Om du är ny på Arduino kan du använda den här länken som beskriver hur du importerar ett bibliotek. I avsnittet nedan kommer vi att ändra koden för att visa den tidigare genererade HEX-matrisen till OLED. Komplett kod med en fungerande video ges i slutet av denna artikel. Detaljerad förklaring av koden ges nedan.
Inkludera först det nedladdade biblioteket.
#include "U8glib.h" // inklusive U8glib-biblioteket
Definiera sedan alla nödvändiga stift för OLED.
#define OLED_CLK_PIN 13 // Arduino Digital Pin D13: SCK #define OLED_MOSI_PIN 11 // Arduino Digital Pin D11: MOSI #define OLED_RES_PIN 10 // Arduino Digital Pin D10: SS #define OLED_SDC_PIN 9 // Arduino Digital Pin D9: D OLED_CSS_PIN 8 // Arduino Digital Pin D13: ICP1
Initiera u8glib-biblioteket.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Inkludera sedan den genererade bildmatrisen.
const uint8_t circuitdigest PROGMEM = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0x87, 0xf, 0x00, 0x0f, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x81, 0x8f, 0x31,0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0x98, 0xff, 0xff, 0xff, 0xff, 0……..0xff, 0xff, …….. ………..0xff, 0xff, …….. ………..
Ritningsfunktion används för att rita bitmappsbilden (QR-kod) på OLED med hjälp av u8g.drawBitmapP-funktionen.
void draw (void) {// grafiska kommandon för att rita om hela skärmen ska placeras här u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Slutligen, i loop () -funktionen, ring alla nödvändiga procedurer för att bygga bilden på OLED
ogiltig slinga () {u8g.firstPage (); // Ett samtal till denna procedur markerar början på bildslingan. gör {draw (); } medan (u8g.nextPage ()); // Ett samtal till denna procedur markerar slutet på bildslingans kropp. // bygga upp bilden efter en viss fördröjning (1000); }
När du har slutfört koden, anslut Arduino i USB-porten på din dator, välj din COM-port och ladda upp koden. Om du har gjort allt korrekt kommer du att ha en fungerande skärm med en QR-kod på OLED.
Jag hoppas att du gillade det här projektet och tyckte om att lära dig något nytt, fortsätt läsa fortsätt lära dig och jag ses igen nästa gång.