- Απαιτείται υλικό:
- Γνωριμία με τις οθόνες OLED:
- Υλικό και συνδέσεις:
- Προγραμματισμός της οθόνης OLED SSD1306 για το Arduino:
Οι περισσότεροι από εμάς θα εξοικειωθήκαμε με την οθόνη LCD 16 × 2 Dot matrix που χρησιμοποιείται στα περισσότερα έργα για την εμφάνιση ορισμένων πληροφοριών στον χρήστη. Αλλά αυτές οι οθόνες LCD έχουν πολύ περιορισμό στο τι μπορούν να κάνουν. Σε αυτό το σεμινάριο θα μάθουμε για τις οθόνες OLED και πώς να τις χρησιμοποιήσουμε Arduino. Υπάρχουν πολλοί τύποι οθονών OLED στην αγορά και υπάρχουν πολλοί τρόποι για να λειτουργήσουν. Σε αυτό το σεμινάριο θα συζητήσουμε για τις ταξινομήσεις του και επίσης ποιες θα ταιριάζουν καλύτερα στο έργο σας.
Απαιτείται υλικό:
- Μονάδα οθόνης OLED 7pin 128 × 64 (SSD1306)
- Arduino UNO / Nano
- Ψωμί
- Σύνδεση καλωδίων
- Υπολογιστής / φορητός υπολογιστής
Γνωριμία με τις οθόνες OLED:
Ο όρος OLED σημαίνει « Organic Light emitting diode» , χρησιμοποιεί την ίδια τεχνολογία που χρησιμοποιείται στις περισσότερες τηλεοράσεις μας, αλλά έχει λιγότερα pixel σε σύγκριση με αυτές. Είναι πραγματικά διασκεδαστικό να έχουμε αυτές τις εντυπωσιακές ενότητες οθόνης για διασύνδεση με το Arduino καθώς θα κάνει τα έργα μας να φαίνονται δροσερά. Εδώ έχουμε καλύψει ένα πλήρες άρθρο σχετικά με τις οθόνες OLED και τους τύπους του.
Χρησιμοποιούμε μια μονόχρωμη οθόνη 7 ιντσών SSD1306 0,96 ”OLED. Ο λόγος για την επιλογή αυτής της οθόνης είναι ότι μπορεί να λειτουργήσει σε τρία διαφορετικά πρωτόκολλα επικοινωνίας, όπως η λειτουργία WI SPI 3, η λειτουργία τεσσάρων καλωδίων SPI και η λειτουργία IIC. Αυτό το σεμινάριο θα καλύψει τον τρόπο χρήσης της μονάδας σε λειτουργία 4 συρμάτων SPI, καθώς είναι η ταχύτερη λειτουργία επικοινωνίας και η προεπιλεγμένη.
Οι καρφίτσες και οι λειτουργίες του εξηγούνται στον παρακάτω πίνακα.
Αριθμός Pin |
Όνομα καρφιτσώματος |
Αλλα ονόματα |
Χρήση |
1 |
Gnd |
Εδαφος |
Καρφίτσα γείωσης της μονάδας |
2 |
Vdd |
Vcc, 5V |
Τροφοδοτικό (3-5V ανεκτό) |
3 |
SCK |
D0, SCL, CLK |
Λειτουργεί ως καρφίτσα ρολογιού. Χρησιμοποιείται τόσο για I2C όσο και για SPI |
4 |
SDA |
D1, MOSI |
Καρφίτσα δεδομένων της ενότητας. Χρησιμοποιείται τόσο για IIC όσο και για SPI |
5 |
ΑΠΕ |
RST, ΕΠΑΝΑΦΟΡΑ |
Επαναφέρει τη μονάδα (χρήσιμο κατά τη διάρκεια SPI) |
6 |
DC |
Α0 |
Καρφίτσα εντολών δεδομένων. Χρησιμοποιείται για πρωτόκολλο SPI |
7 |
CS |
Επιλογή τσιπ |
Χρήσιμο όταν περισσότερες από μία λειτουργικές μονάδες χρησιμοποιούνται στο πρωτόκολλο SPI |
Σε αυτό το σεμινάριο θα λειτουργήσουμε απλώς τη μονάδα σε λειτουργία 4-Wire SPI, θα αφήσουμε τα υπόλοιπα για κάποιο άλλο σεμινάριο.
Η κοινότητα του Arduino μας έχει ήδη δώσει πολλές βιβλιοθήκες που μπορούν να χρησιμοποιηθούν άμεσα για να το κάνουν πολύ πιο απλό. Δοκίμασα μερικές βιβλιοθήκες και διαπίστωσα ότι η βιβλιοθήκη Adafruit_SSD1306 ήταν πολύ εύκολη στη χρήση και είχα μια χούφτα γραφικών επιλογών, επομένως θα χρησιμοποιήσουμε το ίδιο σε αυτό το σεμινάριο. Ωστόσο, εάν το έργο σας έχει περιορισμό μνήμης / ταχύτητας, δοκιμάστε να χρησιμοποιήσετε τη βιβλιοθήκη U8g καθώς λειτουργεί πιο γρήγορα και καταλαμβάνει λιγότερη μνήμη προγράμματος.
Υλικό και συνδέσεις:
Το διάγραμμα κυκλώματος για διασύνδεση OLED SSD1306 με το Arduino είναι πραγματικά απλό και φαίνεται παρακάτω
Απλώς έχουμε δημιουργήσει μια επικοινωνία SPI μεταξύ της μονάδας OLED και του Arduino. Δεδομένου ότι το OLED λειτουργεί με 3V-5V και καταναλώνει πολύ μικρή ισχύ, δεν χρειάζεται εξωτερική τροφοδοσία. Μπορείτε απλά να χρησιμοποιήσετε καλώδια για να πραγματοποιήσετε τη σύνδεση ή να χρησιμοποιήσετε ένα breadboard όπως έχω χρησιμοποιήσει έτσι ώστε να είναι εύκολο να πειραματιστείτε. Η σύνδεση αναφέρεται επίσης στην ιστορία παρακάτω
ΝΟ |
Καρφίτσωμα στην ενότητα OLED |
Καρφίτσωμα στο Arduino |
1 |
Gnd, έδαφος |
Εδαφος |
2 |
Vdd, Vcc, 5V |
5V |
3 |
SCK, D0, SCL, CLK |
10 |
4 |
SDA, D1, MOSI |
9 |
5 |
RES, RST, RESET |
13 |
6 |
DC, Α0 |
11 |
7 |
CS, Chip Select |
12 |
Σημείωση: Δεν θα μπορείτε να απεικονίσετε οπίσθιο φωτισμό / λάμψη στη μονάδα OLED απλώς ενεργοποιώντας το. Πρέπει να το προγραμματίσετε σωστά για να παρατηρήσετε τυχόν αλλαγές στην οθόνη OLED.
Προγραμματισμός της οθόνης OLED SSD1306 για το Arduino:
Όταν οι συνδέσεις είναι έτοιμες, μπορείτε να ξεκινήσετε τον προγραμματισμό του Arduino. Όπως είπαμε νωρίτερα, θα χρησιμοποιούμε τη βιβλιοθήκη Adafruit και τη βιβλιοθήκη GFX για εργασία με αυτήν την ενότητα OLED. Ακολουθήστε τα βήματα για να δοκιμάσετε να εκτελέσετε την οθόνη OLED.
Βήμα 1: Κατεβάστε τη βιβλιοθήκη Adafruit και τη βιβλιοθήκη GFX από το Github χρησιμοποιώντας τον παρακάτω σύνδεσμο
- Βιβλιοθήκη Adafruit
- Βιβλιοθήκη γραφικών GFX
Βήμα 2: Πρέπει να έχετε κατεβάσει δύο αρχεία Zip. Τώρα προσθέστε τα στο Arduino σας ακολουθώντας
Σκίτσο-> Συμπερίληψη βιβλιοθήκης -> Προσθήκη βιβλιοθήκης Zip όπως φαίνεται παρακάτω. Στη συνέχεια, επιλέξτε τη βιβλιοθήκη που μόλις κατεβάσαμε. Μπορείτε να επιλέξετε μόνο μία βιβλιοθήκη κάθε φορά, επομένως πρέπει να επαναλάβετε αυτό το βήμα ξανά.
Βήμα 3: Ξεκινήστε το παράδειγμα προγράμματος επιλέγοντας Αρχείο-> Παραδείγματα-> Adafruit SSD1306 -> SSD1306_128 * 64_SPI.ino όπως φαίνεται στην παρακάτω εικόνα.
Βήμα 4: Μέσα στο παράδειγμα προγράμματος στην κορυφή της γραμμής 64 προσθέστε τη γραμμή "#define SSD1306_LCDHEIGHT 64" όπως φαίνεται στην παρακάτω εικόνα.
Βήμα 5: Τώρα ανεβάστε το πρόγραμμα και θα πρέπει να δείτε την οθόνη OLED να ενεργοποιείται με τον προεπιλεγμένο κώδικα Adafruit όπως φαίνεται στην παρακάτω εικόνα. Το πλήρες βίντεο εργασίας δίνεται στο τέλος.
Αυτό το παράδειγμα προγράμματος σας δείχνει όλα τα πιθανά γραφικά που θα μπορούσαν να εμφανιστούν στην οθόνη OLED. Αυτός ο κωδικός πρέπει να είναι αρκετός για να δημιουργήσετε bitmap, να σχεδιάσετε γραμμές / κύκλους / ορθογώνια, να παίξετε με pixel, να εμφανίσετε char και string με διαφορετικές γραμματοσειρές και μέγεθος κ.λπ.
Αν θέλετε να κατανοήσετε καλύτερα τη Βιβλιοθήκη και τις λειτουργίες της, μπορείτε να διαβάσετε περαιτέρω. Κάθε σκουπίδια του κώδικα χωρίζεται και εξηγείται με τη βοήθεια των γραμμών σχολίων. Ο πλήρης κωδικός δίνεται στο τέλος αυτού του άρθρου
Εμφάνιση και εκκαθάριση της οθόνης:
Το γράψιμο στην οθόνη OLED είναι ακριβώς σαν να γράφετε σε έναν μαύρο πίνακα, πρέπει να γράψουμε τις τιμές και στη συνέχεια να το καθαρίσουμε πριν μπορέσει να αντικατασταθεί. Οι ακόλουθες εντολές χρησιμοποιούνται για την εγγραφή και την εκκαθάριση της οθόνης
display.display (); // Εγγραφή στην οθόνη display.clearDisplay (); // καθαρίστε την οθόνη
Εμφάνιση μεταβλητής χαρακτήρα:
Για την εμφάνιση του περιεχομένου μέσα σε μια μεταβλητή μπορεί να χρησιμοποιηθεί ο ακόλουθος κωδικός.
char i = 5; // η μεταβλητή που θα εμφανίζεται display.setTextSize (1); // Επιλέξτε το μέγεθος του κειμένου display.setTextColor (WHITE); // για μονόχρωμη οθόνη μόνο το whit είναι πιθανό display.setCursor (0,0); // 0,0 είναι η επάνω αριστερή γωνία της οθόνης OLED.write (i); // Γράψτε τη μεταβλητή που θα εμφανιστεί
Σχεδίαση γραμμής, κύκλος, ορθογώνιο, τρίγωνο:
Εάν θέλετε να προσθέσετε μερικά σύμβολα στην οθόνη σας, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα για να σχεδιάσετε οποιοδήποτε από τα παρακάτω
display.drawLine (display.width () - 1, 0, i, display.height () - 1, ΛΕΥΚΟ); // void drawLine (x0, y0, x1, y1, χρώμα); display.drawRect (i, i, display.width () - 2 * i, display.height () - 2 * i, WHITE); // void drawRect (x0, y0, w, h, χρώμα); display.drawTriangle (display.width () / 2, display.height () / 2-i, display.width () / 2-i, display.height () / 2 + i, display.width () / 2+ i, display.height () / 2 + i, ΛΕΥΚΟ); // void drawTriangle (x0, y0, x1, y1, x2, y2, χρώμα); display.drawCircle (display.width () / 2, display.height () / 2, i, WHITE); // void drawCircle (x0, y0, r, χρώμα);
Σχεδίαση συμβολοσειράς στην οθόνη:
Μπορείτε να χρησιμοποιήσετε το ακόλουθο κομμάτι κώδικα για να εμφανίσετε οποιοδήποτε μήνυμα στην οθόνη σε ένα συγκεκριμένο μέρος και μέγεθος
display.setTextSize (2); // ορίστε το μέγεθος του κειμένου display.setTextColor (WHITE); // χρωματική ρύθμιση display.setCursor (10,0); // Η συμβολοσειρά θα ξεκινήσει στο 10,0 (x, y) display.clearDisplay (); // Γόμα οποιαδήποτε προηγούμενη οθόνη στην οθόνη display.println ("Circuit Digest"); // Εκτυπώστε τη συμβολοσειρά εδώ "Circuit Digest" display.display (); // στείλτε το κείμενο στην οθόνη
Εμφάνιση εικόνας bitmap:
Ένα μη αξιόπιστο πράγμα που μπορεί να γίνει με την ενότητα OLED είναι ότι μπορεί να χρησιμοποιηθεί για την εμφάνιση bitmap. Ο παρακάτω κώδικας χρησιμοποιείται για την εμφάνιση μιας εικόνας bitmap
static const unsigned char PROGMEM logo16_glcd_bmp = {B00000000, B11000000, B00000001, B11000000, B00000001, B11000000, B00000011, B11100000, B11110011, B11100000, B11111110, B11111000, B111111, B111111, B11111111, B11111111, B111111 B10100000, B00111111, B11100000, B00111111, B11110000, B01111100, B11110000, B01110000, B01110000, B00000000, B00110000}; display.drawBitmap (XPO], YPOS, bitmap, w, h, WHITE); // void drawBitmap (x, y, * bitmap, w, h, χρώμα);
Όπως μπορείτε να δείτε, για να εμφανιστεί μια εικόνα, τα δεδομένα bitmap πρέπει να αποθηκευτούν στη μνήμη του προγράμματος με τη μορφή της εντολής PROMGMEM. Με απλά λόγια, πρέπει να καθοδηγήσουμε στην οθόνη OLED τι να κάνει με κάθε εικονοστοιχείο, περνώντας μια ακολουθία ή τιμές από έναν πίνακα όπως φαίνεται παραπάνω. Αυτός ο πίνακας θα περιέχει τα δεδομένα bitmap της εικόνας.
Μπορεί να ακούγεται περίπλοκο, αλλά με τη βοήθεια ενός διαδικτυακού εργαλείου είναι πολύ εύκολο να μετατρέψετε μια εικόνα σε λίγες τιμές χάρτη και να τις φορτώσετε στον παραπάνω πίνακα.
Απλώς φορτώστε την εικόνα και προσαρμόστε τις ρυθμίσεις για να λάβετε την προτιμώμενη προεπισκόπηση της εικόνας. Στη συνέχεια, κάντε κλικ στην επιλογή "Δημιουργία κώδικα", αντιγράψτε τον κώδικα και επικολλήστε τον στο Array σας. Ανεβάστε το πρόγραμμα και τελειώσατε. Προσπάθησα να εμφανίσω ένα λογότυπο batman και έτσι αποδείχθηκε.
Υπάρχουν ακόμα πολλά πράγματα που μπορείτε να κάνετε με αυτές τις βιβλιοθήκες. Για να μάθετε τις πλήρεις δυνατότητες, επισκεφθείτε τη σελίδα Adafruit GFX Graphit Primitives.
Ελπίζω να το τρέχετε και να είστε έτοιμοι να εφαρμόσετε μια οθόνη OLED σε ορισμένα από τα έργα σας. Εάν είχατε κάποιο πρόβλημα, μοιραστείτε τα στην ενότητα σχολίων και θα προσπαθήσω το καλύτερό μου για να τα διορθώσω.