Menu
Your Cart

Add i2c Oled to Raspberry Pi

Add i2c Oled to Raspberry Pi

Στο σημερινό μάθημα θα σου εξηγήσω όλα τα βήματα που χρειάζονται για να  συναρμολογήσουμε και προγραμματίσουμε ένα Raspberry Pi στο οποίο θα συνδέσουμε έναν ανεμιστήρα για ψύξη και μία οθόνη για να βλέπουμε τις πληροφορίες λειτουργίας του.

Τα βήματα που θα ακολουθήσουν
  1. sd
  2. sinar
  3. ssh
είναι πολύ σημαντικό να ακολουθήσεις ένα-ένα τα παρακάτω βήματα να μην πηδήξεις κάτι έτσι ώστε να έχεις την καλύτερη εμπειρία μαθήματος εάν τη δείξεις κάποια από τα βήματα ή εάν εκτέλεσις κάποιο βήμα ή κώδικα με διαφορετική σειρά από την παρακάτω Υπάρχει περίπτωση να μη λειτουργήσει η εφαρμογή

σύντομα διαθέσιμο ακόμα το σχεδιάζω

Όπως όλοι οι υπολογιστές έτσι και το Raspberry χρειάζεται λογισμικό σύστημα για να λειτουργήσει.  Στην περίπτωσή μας θα χρησιμοποιήσουμε μία κάρτα sd 125 GB στην οποία θα εγκαταστήσουμε το λογισμικό και στη συνέχεια θα τοποθετήσουμε στο Raspberry
Θα χρησιμοποιήσουμε το λογισμικό Raspberry Pi Imager το οποίο θα μας  προετοιμάσει και εγκαταστήσει το λειτουργικό σύστημα στην κάρτα SD.
Ανάλογα με την εφαρμογή που θέλεις να κάνεις θα χρησιμοποιήσεις και διαφορετικό λειτουργικό ανάλογα με τις ανάγκες σου στο σημερινό παράδειγμα θα χρησιμοποιήσουμε το Raspberry Pi OS Lite ( 32 bit )
ακολουθήστε τα βήματα του βίντεο στα αριστερά για τις ρυθμίσεις του Raspberry Pi Imager 
ακολουθήστε τον παρακάτω σύνδεσμο για να κατεβάσεις το Raspberry Pi Imager 
σύντομα διαθέσιμο ακόμα το σχεδιάζω

Για να μπορέσουμε να εγκαταστήσουμε τα απαραίτητα πακέτα λογισμικού στο Raspberry θα πρέπει να συνδεθούμε σε αυτό και στη συνέχεια μέσω του terminal να του δώσουμε τις απαραίτητες εντολές ώστε να εγκατασταθούν μετά πακέτα που θα χρησιμοποιήσουμε.

Για να βρούμε την IP στην οποία έχει συνδεθεί το Raspberry θα χρησιμοποιήσουμε το λογισμικό Advanced IP Scanner.
Ακολούθησε τις οδηγίες του βίντεο στα αριστερά για να βρεις την IP

στη συνέχεια αφού βρήκαμε την ip θα πρέπει να συνδεθούμε στο Raspberry χρησιμοποιώντας το λογισμικό PuTTY 
ακολούθησε τις οδηγίες του βίντεο στα αριστερά για να συνδεθεί στο Raspberry
στο terminal που θα σου ανοίξει συμπλήρωσε το username και password που έβαλες στην αρχή όταν έφτιαχνε στην κάρτα SD

Το linux βασίζεται σε ένα πάρα πολύ αυστηρό σύστημα διαχείρισης χρηστών και αδειών ώστε να είναι ασφαλές Αυτό βέβαια κατά τη διαδικασία της εγκατάστασης ορισμένων πακέτων δημιουργεί προβλήματα.
Για να ξεπεράσουμε αυτό το πρόβλημα θα πρέπει να αλλάξουμε σε root χρήστη.  Το λογισμικό που εγκαταστήσαμε δεν έχει κωδικό για τον root  χρήστη οπότε θα πρέπει να τον δημιουργήσουμε. Στείλε την παρακάτω εντολή στο terminal

sudo passwd root

Στη συνέχεια θα σου ζητήσει έναν κωδικό και θα γράψει password:
εσύ θα πληκτρολογείς αλλά κείμενο δεν θα φαίνεται Μην σε παραξενεύει έτσι δουλεύει. 
Γράψε τον κωδικό που θέλεις και στη συνέχεια πατήστε enter θα σου ζητήσει να επιβεβαιώσει τον κωδικό επιβεβαίωσε τον κωδικό και στη συνέχεια Πάρε σε ξένα enter 

αφού δημιουργήσαμε τον κωδικό τώρα θα πρέπει να αλλάξουμε χρήστη Στείλε την παρακάτω εντολή στο terminal

su -

θα σου ζητήσει κωδικό password: ( γράψε αυτόν που έβαλες παραπάνω )

Είναι πολύ σημαντικό πριν ξεκινήσουμε οποιαδήποτε εγκατάσταση πακέτων στο Raspberry να τρέξουμε τις παρακάτω δύο εντολές έτσι ώστε να ενημερώσουμε Την λίστα με τα διαθέσιμα πακέτα και στη συνέχεια να εγκαταστήσουμε όσα από αυτά χρειάζονται ενημέρωση

ενημέρωση της λίστας των διαθέσιμων πακέτο με την παρακάτω εντολή

sudo apt update

εγκατάσταση των απαραίτητων ενημερώσεων με την παρακάτω

sudo apt full-upgrade

αφού τρέξε την παραπάνω εντολή Θα σου ζητήσει να επιβεβαίωση στην εγκατάσταση πάτησε το y  και στη συνέχεια enter

Στη συνέχεια θα εγκαταστήσουμε το webmin  το οποίο είναι ένα λογισμικό web διαχείρισης  το οποίο μας δίνει την δυνατότητα έχουμε πρόσβαση σε ένα Raspberry μέσω του web browser.
Πριν την εγκατάσταση θα πρέπει να προσθέσουμε στη λίστα διαθέσιμων λογισμικών webmin   στείλε στο terminal την παρακάτω εντολή

curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh
sh setup-repos.sh


Θα σου ζητήσει επιβεβαίωση Πάτησε το Y και στη συνέχεια enter

αφού ολοκληρωθεί η παραπάνω διαδικασία σε συνέχεια Στείλε την παρακάτω εντολή στο terminal για να εγκαταστήσεις στο webmin

apt-get install --install-recommends webmin

Θα σου ζητήσει επιβεβαίωση Πάτησε το Y και στη συνέχεια enter

Για να μπορέσουμε να  εμφανίσουμε κείμενο στην οθόνη που έχουμε συνδεδεμένη στο Raspberry θα πρέπει να αντικαταστήσουμε τις παρακάτω βιβλιοθήκες της Adafruit  μαζί με την python3
Στείλε τις παρακάτω εντολές με τη σειρά στο terminal

sudo apt-get install python3-pip

sudo apt-get install python3-pil

sudo pip3 install adafruit-circuitpython-ssd1306

sudo pip3 install --upgrade setuptools

sudo apt install lm-sensors


προσοχή την παρακάτω εντολή πρέπει να τη στείλεις ολόκληρη

cd ~
sudo pip3 install --upgrade adafruit-python-shell
wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.py
sudo python3 raspi-blinka.py


αφού ολοκληρωθεί η εγκατάσταση της τελευταίας εντολής Θα σου ζητήσει reboot πάτησε y  και enter

η σύνδεση στο terminal θα κλείσει μην αγχώνεσαι Είναι φυσιολογικό στο επόμενο βήμα θα αποκτήσουμε πρόσβαση μέσω του webmin που εγκαταστήσαμε πριν λίγο

Από το βήμα 2 χρησιμοποίησε το Advanced IP Scanner  για να βρεις την ip στην οποία είναι συνδεδεμένο το Raspberry είναι πολύ πιθανόν να είναι η ίδια με πριν
στη συνέχεια Άνοιξε έναν browser γράψε την IP Πού βρήκες πριν και στη συνέχεια συμπλήρωσε την πόρτα :10000  όπως το παρακάτω παράδειγμα
192.168.1.xx:1000 ( αντικατέστησε το xx  με την δική σου IP  μην ξεχάσεις την άνω-κάτω τέλεια πριν το 1000)
στη συνέχεια στο παράθυρο που θα σου ανοίξει θα επιλέξεις περισσότερες επιλογές και σύνδεση στη μία ασφαλής σελίδα τρέχει μέσα στο Raspberry είναι μη ασφαλές διότι δεν έχουμε εγκαταστήσει ακόμα ssl
στο παράθυρο που θα σου ανοίξει συμπλήρωσε το username και password που έβαλες στην αρχή όταν έφτιαχνε στην κάρτα SD
Γεια να εμφανίσουμε κείμενο στην οθόνη θα πρέπει πρώτα να δοκιμάσουμε αν την έχουμε συνδέσει σωστά με το Raspberry στο Βήμα 2

από την αριστερή στήλη του webmin επέλεξε Tools και στη συνέχεια το terminal και Στείλε την παρακάτω εντολή ώστε να σου εμφανίσει τη λίστα με τις διαθέσιμες διευθύνσεις i2c

sudo i2cdetect -y 1

στη συνέχεια Θα σου εμφανίσει ένα πίνακα με παύλες ανάμεσα στις τάβλες πρέπει να εντοπίσεις  το 3c
Εάν το βλέπεις είσαι σωστός και Μπορείς να προχωρήσεις παρακάτω
Εάν όχι έλεγξε τα καλώδια και ξαναδοκίμασε
ανάμεσα στις δοκιμές Καλό είναι να κάνεις επανεκκίνηση βγάζοντας και ξανά βάζοντας το ρεύμα

σε αντίθεση με το terminal του putty  το οποίο κλείνει και θέλει επανεκκίνηση μετά την διακοπή της επικοινωνίας το  terminal του webmin παραμένει ανοιχτό και συνδέεται αυτόματα
Αφού δοκιμάσαμε και είμαστε σίγουροι ότι η οθόνη δεν λειτουργεί και επικοινωνήσει με το Raspberry σε συνέχεια θα φτιάξουμε το αρχείο το οποίο θα οδηγεί την οθόνη.
Από την αριστερή στήλη του webmin  επιλέγουμε tools  και στη συνέχεια file manager  από εκεί επιλέγουμε τον φάκελο root  από το file επάνω δεξιά επιλέγουμε create new file  και στη συνέχεια το ονομάζουμε 

oled.py

τέλος στο περιεχόμενο του προσθέτουμε το παρακάτω κώδικα

import time
import subprocess
from board import SCL, SDA
import busio
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306
# Create the I2C interface.
i2c = busio.I2C(SCL, SDA)
# Create the SSD1306 OLED class.
# The first two parameters are the pixel width and pixel height.  Change these
# to the right size for your display!
disp = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c)
# Clear display.
disp.fill(0)
disp.show()
# Create blank image for drawing.
# Make sure to create image with mode '1' for 1-bit color.
width = disp.width
height = disp.height
image = Image.new("1", (width, height))
# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)
# Draw a black filled box to clear the image.
draw.rectangle((0, 0, width, height), outline=0, fill=0)
# Draw some shapes.
# First define some constants to allow easy resizing of shapes.
padding = -2
top = padding
bottom = height - padding
# Move left to right keeping track of the current x position for drawing shapes.
x = 0
# Load default font.
font = ImageFont.load_default()
# Alternatively load a TTF font.  Make sure the .ttf font file is in the
# same directory as the python script!
# Some other nice fonts to try: http://www.dafont.com/bitmap.php
# font = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 9)
start = 0
while True:
    # Draw a black filled box to clear the image.
    draw.rectangle((0, 0, width, height), outline=0, fill=0)
    # Shell scripts for system monitoring from here:
    # https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load
    cmd = "hostname -I | cut -d' ' -f1"
    IP = subprocess.check_output(cmd, shell=True).decode("utf-8")
    cmd = "echo $(sensors | awk '/^temp1:/{gsub(/[+]/, \"\", $2); printf \"%d °C\", $2}' | cut -d'.' -f1)"
    CPU = subprocess.check_output(cmd, shell=True).decode("utf-8")
    cmd = "echo $(awk '{printf \"%02d:%02d:%02d\", int($1/3600), int(($1%3600)/60), int($1%60)}' /proc/uptime)"
    MemUsage = subprocess.check_output(cmd, shell=True).decode("utf-8")
    # Write four lines of text.
    draw.text((x, top + 0), "Ct : " + CPU , font=font, fill=255)
    draw.text((x, top + 12), "Ot : " + MemUsage , font=font, fill=255)
    draw.text((x, top + 25), "IP : " + IP , font=font, fill=255)
    # Display image.
    disp.image(image)
    disp.show()
    time.sleep(1)


και αποθηκεύουμε
Αφού φτιάξαμε και αποθήκευσα με το αρχείο το οποίο θα εμφανίζει κείμενο στην οθόνη στη συνέχεια πρέπει να το "τρέξουμε" ώστε να λειτουργήσει και η οθόνη μας να ανάψει.

από την αριστερή στήλη του webmin επέλεξε Tools και στη συνέχεια το terminal και Στείλε την παρακάτω εντολή ώστε να  τρέξει το αρχείο που μόλις φτιάξαμε

sudo python3 oled.py

Εάν η οθόνη σου ανάψει τα έχεις κάνει όλα τέλεια και έχεις μία υπέροχη οθόνη η οποία σου λέει στο επάνω μέρος τη θερμοκρασία από κάτω τις ώρες Τα λεπτά και τα δευτερόλεπτα τα οποία έχουν περάσει από την τελευταία επανεκκίνηση του Raspberry και τέλος από κάτω την ip στην οποία είναι συνδεδεμένο

Εάν δεν λειτουργήσει Δεν έχω ιδέα τι έχεις κάνει λάθος ξανακάνω τα όλα από την αρχή να είσαι σίγουρος

για να σταματήσει να τρέχει το πρόγραμμα και να μπορέσουμε να συνεχίσουμε στο επόμενο βήμα που θα το βάλουμε να τρέχει την ώρα που ανάβει το Raspberry Πάτησε  από το πληκτρολόγιο σου το Control και  το C  ώστε να σταματήσει η εντολή και να συνεχίσουμε  σε επόμενο βήμα.
Για να ξεκινάει αυτόματα το script oled.py  θα πρέπει να προσθέσουμε την εντολή εκτέλεσης του sudo python3 oled.py στο παρακάτω αρχείο /etc/rc.local 

από το αριστερό μενού του web επέλεξε tools και στη συνέχεια file manager συνέχεια επέλεξα τον φάκελο εκτ και στη συνέχεια Πήγαινε στη σελίδα 6 όπου θα βρεις το αρχείο rc.local 

δίπλα στο εικονίδιο από τις τρεις τελείες επέλεξε το edit και στη συνέχεια πρόσθεσε την εντολή 

sudo python3 /root/oled.py & 

πριν το

exit 0



Ίσως παρατήρησες ότι ενώ όταν τρέχαμε την εντολή χρησιμοποιήσαμε μόνο το


 sudo python3 oled.py


στην εντολή που βάλαμε στο αρχείο για να τρέξει από την εκκίνηση χρησιμοποιήσαμε και το root Αυτό συμβαίνει διότι όταν είμαστε μέσα στο terminal ως χρήστης μπορούμε να τρέξουμε Τις εντολές που βρίσκονται κατευθείαν στο root αντίθετα όταν το Raspberry ξεκινάει θα πρέπει να ξέρει πού θα βρει το αρχείο το οποίο θα τρέξει από την βάσει των αρχαίων