- Dus, wat is deze QR-code eigenlijk?
- Uw eigen QR-code genereren
- Het omzetten van de PNG naar BMP-indeling
- Converteer de BMP-afbeelding naar een reeks HEX-codes
- Schakelschema
- Code Uitleg
De "Quick Response" -code of afgekort als QR-code is een essentieel onderdeel van ons digitale leven geworden, de kans is groot dat u er al onbewust mee bekend bent. je favoriete boek doorleest, of misschien zelfs een online betaling doet met Google Pay, PhonePe of Paytm, of op internet surft, enz. (ik veronderstel dat ik door kan gaan met voorbeelden hè?) en je bent toevallig gekomen tegenover dit vreemd uitziende vierkante ding en dacht: wat is dit vierkante ding eigenlijk en als je niet… nou, maak je geen zorgen, het zal vroeg of laat gebeuren, dus om het onderwerp beter te begrijpen, gaan we een leuk klein project met Arduino en OLED en demystificeer de volgende dingen:
- Basisconcept van de QR-code.
- Hoe het werkt.
- Hoe u uw eigen QR-code kunt maken met Arduino.
- En tot slot, geef het weer op een OLED-scherm (SSD1306).
Dus, wat is deze QR-code eigenlijk?
QR-code (Quick Response-code) is een 2D-matrixcode voor het lezen van gegevens met hoge snelheid, ontwikkeld door DENSO WAVE in 1994 voor de auto-industrie van Japan. Een QR-code comprimeert gegevens zeer efficiënt in vergelijking met de standaardbarcode, om dit te bereiken gebruikt het vier gestandaardiseerde coderingsmodi (numeriek, alfanumeriek, byte / binair en kanji), de technologie werd "open source" gemaakt, dwz beschikbaar voor iedereen, dus het werd zeer snel populair. Significante voordelen van QR-codes ten opzichte van conventionele barcodes zijn grotere gegevenscapaciteit en hoge fouttolerantie.
Hoe QR-code werkt?
QR-codes (en andere datamatrixcodes) zijn ontworpen om te worden gelezen door speciale tools, niet door mensen, dus er is maar een bepaald bedrag dat we kunnen begrijpen door visueel te bestuderen, hoewel elke code op verschillende manieren anders is, hoewel ze een paar interessante gemeenschappelijke functies door de QR-code van circuitdigest.com te observeren, zullen we enkele ervan bestuderen
- Zoekpatronen: grote vierkante vakken met een stevig vak in de drie hoeken van de code maken het gemakkelijk om te bevestigen dat het een QR-code is, aangezien er maar drie zijn, dus het is vrij duidelijk dat de code is georiënteerd.
- Uitlijningspatroon: dit zorgt ervoor dat, ongeacht de richting, de code leesbaar is.
- Timingpatroon: dit loopt horizontaal en verticaal tussen de drie zoekerpatronen , met behulp van deze lijnen kan de lezer de grootte van de code bepalen.
- Versie-informatie: er zijn momenteel 40 verschillende versies van de QR-codestandaard, dit gedeelte van de code bepaalt de QR-codeversie die wordt gebruikt, voor marketingversie 1-7 die normaal wordt gebruikt.
- Formaatinformatie: De formaatpartners hebben informatie over fouttolerantie en gegevensmaskering.
- Gegevensgebied: dit gedeelte van de code bevat alle gegevenselementen en foutcorrectiecode.
- Zone verlaten: De afstand in elke QR-code is verplicht om de code te onderscheiden van de omgeving.
De onderstaande afbeelding geeft u een duidelijk idee over de code
Andere secties van de code zijn gegevens- en redundantiecode.
Er zijn een aantal andere functies en gecompliceerde onderwerpen die ik in deze tutorial niet zal bespreken.Als je meer details over de QR-code wilt lezen, volg dan deze tutorial over QR-codes door Tan Jin Soon, EPCglobal Singapore Council. Synthesis Journal, 2008.
De specificatie van de QR-code
Symboolgrootte |
Min. 21x21 cellen - Max. 177x177 cellen (met interval van 4 cellen) |
|
Informatietype en volume |
Numerieke tekens |
Maximaal 7.089 tekens |
Alfabetten, tekens |
Maximaal 4.296 tekens |
|
Binair (8 bit) |
Maximaal 2.953 tekens |
|
Kanji-tekens |
Maximaal 1.817 tekens |
|
Omzettingsrendement |
Numerieke tekens-modus |
3.3 cellen / karakter |
Alfanumeriek / tekenmodus |
5,5 cellen / teken |
|
Binaire (8 bit) modus |
8 cellen / karakter |
|
Kanji-karaktersmodus (13 bit) |
13 cellen / karakter |
|
Foutcorrectie functionaliteit |
Niveau L |
Ca. Maximaal 7% van het symboolgebied hersteld |
Niveau M |
Ca. Maximaal 15% van het symboolgebied hersteld |
|
Niveau Q |
Ca. Maximaal 25% van het symboolgebied hersteld |
|
Niveau H |
Ca. Maximaal 30% van het symboolgebied hersteld |
|
Koppelingsfunctionaliteit |
Op te delen in maximaal 16 symbolen |
Uw eigen QR-code genereren
Volg de onderstaande stappen om uw eigen QR-code te genereren, in dit voorbeeld gaan we een QR-code maken van onze geliefde Circuit Digest- website
Ga naar deze website om een QR-code te genereren en als je naar de bovenkant van de website kijkt, zie je een lijst met opties, in deze tutorial genereren we een QR-code voor een URL, dus we gaan naar
- Klik op het tabblad URL en plak de URL voor de Circuit Digest in het gedeelte URL invoeren.
- Klik op opslaan.
- Geef een bestandsnaam voor het uitvoerbestand.
- Selecteer PNG als ons voorkeursbestandsformaat.
- en klik op opslaan.
De onderstaande afbeelding geeft u een duidelijk beeld van het proces
Onze dierbaarste microcontroller "Arduino" is niet zo intelligent genoeg dat hij alleen de onbewerkte PNG-afbeelding kan compileren en weergeven in het OLED-scherm. Dus om de QR-code op de OLED weer te geven, moeten we enkele eenvoudige stappen volgen en de PNG-afbeelding converteren naar een bitmap-array die door Arduino kan worden gelezen. Deze conversie hebben we eerder gedaan terwijl we de SSD1306 OLED met Arduino en de grafische LCD met Arduino communiceerden. We hebben ook SSD1306 OLED gekoppeld aan Raspberry Pi, ESP32, NodeMCU en vele andere microcontrollers. Bitmap-array-conversie kan worden gedaan in onderstaande twee stappen:
- Het omzetten van de PNG naar BMP-indeling.
- Converteer de BMP-afbeelding naar een reeks HEX-codes.
Het omzetten van de PNG naar BMP-indeling
Om de gedownloade PNG-afbeelding naar BMP-afbeelding te converteren, gaat u naar deze website en in het gedeelte over het converteren van afbeeldingen en
- Klik op het dropdown-menu en selecteer
- Omzetten naar BMP
- Klik op Go
De onderstaande afbeelding geeft u een duidelijk beeld van het proces:
U krijgt een nieuwe pagina te zien die lijkt op de onderstaande afbeelding:
- Klik op het tabblad Bestanden kiezen en selecteer de gedownloade afbeelding
- Typ in de optionele instellingen het gewenste formaat (we gebruiken een 128x64 OLED)
- Klik op de knop Conversie starten
U krijgt de volgende pagina te zien en na een paar seconden wordt uw geconverteerde afbeelding gedownload als de download niet automatisch start, klik op de optie om uw bestand te downloaden:
Super goed! Nu we ons BMP-bestand hebben, is het tijd om het te converteren naar een reeks HEX-codes die leesbaar zijn voor een Arduino.
Converteer de BMP-afbeelding naar een reeks HEX-codes
Om de gedownloade BMP-afbeelding naar een HEX-array te converteren, gaat u naar deze website en klikt u op Tools -> image2cpp
De onderstaande afbeelding geeft u een duidelijk beeld van het proces
U krijgt een scherm te zien met vier opties en we zullen deze in detail bespreken
- Selecteer foto
- Afbeelding instellingen
- Voorbeeld
- Uitvoer
Selecteer afbeeldingsectie
In deze sectie zullen we de afbeelding selecteren die we zojuist hebben geconverteerd naar BMP:
Sectie Beeldinstellingen
In deze sectie zullen we de canvasgrootte, achtergrondkleur, schaal- en centreeropties instellen op de door ons gewenste waarde.
- Canvasformaat (we hebben ingesteld op 128x64 omdat we een OLED gebruiken met een pixeldichtheid van 128x64).
- In dit gedeelte kunnen we de achtergrondkleur van de OLED instellen (we kiezen ervoor dat deze wit is).
- De schaal wordt ingesteld op het originele formaat.
- Klik ten slotte in de middelste optie op de horizontale en verticale selectievakjes, hierdoor verschijnt de afbeelding in het midden.
Onderstaande afbeelding geeft u een duidelijk idee
Preview-sectie
In het voorbeeldgedeelte kunnen we een duidelijk voorbeeld zien van de afbeelding die zal worden weergegeven in de OLED zoals hieronder weergegeven:
Uitvoersectie
In het uitvoergedeelte zullen we de gegenereerde code genereren en kopiëren, volg hiervoor de onderstaande stappen:
- Code-uitvoerformaat (we stellen het in als Arduino-code omdat we er een gebruiken).
- Identifier (deze optie stelt de naam voor de gegenereerde array in, we laten het standaard zoals het is).
- Tekenmodus (we hebben de tekenmodusoptie ingesteld op horizontaal).
- En tot slot klikken we op de knop Code genereren om de uiteindelijke uitvoercode te genereren.
Onderstaande afbeelding geeft u een duidelijk idee
Schakelschema
Onderstaande afbeelding toont de interfacing-verbindingen tussen Arduino Nano en SSD1306:
Arduino Nano Pin |
OLED-pincode |
GND |
GND |
3.3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Code Uitleg
Om de afbeelding op de OLED te laten zien, hebben we de hulp nodig van een Arduino-bibliotheek, die kan worden gedownload vanuit deze GitHub-repository. Download de U8glib-1.19.1.zip- versie van de bibliotheek en importeer deze in de Arduino IDE. Als je nieuw bent bij Arduino, gebruik dan deze link die beschrijft hoe je een bibliotheek kunt importeren. In het onderstaande gedeelte zullen we de code wijzigen om de eerder gegenereerde HEX-array weer te geven aan de OLED. De volledige code met een werkende video wordt aan het einde van dit artikel gegeven. De gedetailleerde uitleg van de code wordt hieronder gegeven.
Voeg eerst de gedownloade bibliotheek toe.
#include "U8glib.h" // inclusief de U8glib-bibliotheek
Definieer vervolgens alle benodigde pinnen voor OLED.
#define OLED_CLK_PIN 13 // Arduino digitale pin D13: SCK #define OLED_MOSI_PIN 11 // Arduino digitale pin D11: MOSI #define OLED_RES_PIN 10 // Arduino digitale pin D10: SS #define OLED_SDC_PIN 9 // Arduino digitale pin D9: OC1A #define OLED_CSS_PIN 8 // Arduino digitale pin D13: ICP1
Initialiseer de u8glib-bibliotheek.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Voeg vervolgens de gegenereerde afbeeldingsarray toe.
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, 0xffx, 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, 0xf0, 0x00, 0x1, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xf, 0x33, 0 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, 0x31, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xffx, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8x33, 0x98 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0x98, 0x33, 0x81, 0xcf, 0xff, 0xff… 0xff, 0xff, …….. …..0xff, 0xff, …….. ………..0xff, 0xff, …….. ………..
De tekenfunctie wordt gebruikt om de bitmapafbeelding (QR-code) op OLED te tekenen met behulp van de u8g.drawBitmapP-functie.
void draw (void) {// grafische opdrachten om het volledige scherm opnieuw te tekenen moeten hier worden geplaatst u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Roep ten slotte in de functie loop () alle noodzakelijke procedures aan om de afbeelding op OLED te bouwen
leegte lus () {u8g.firstPage (); // Een oproep voor deze procedure markeert het begin van de beeldlus. do {draw (); } while (u8g.nextPage ()); // Een aanroep van deze procedure markeert het einde van de body van de picture loop. // herbouw de afbeelding na enige vertraging vertraging (1000); }
Sluit na het voltooien van de code de Arduino aan op de USB-poort van je computer, selecteer je COM-poort en upload de code. Als je alles correct hebt gedaan, heb je een werkend display met een QR-code op OLED.
Ik hoop dat je dit project leuk vond en het leuk vond om iets nieuws te leren, blijf lezen, blijf leren en ik zie je de volgende keer.