Στο άρθρο αυτό θα γίνει μια προσπάθεια να εξηγήσουμε πως συνδέεται μια οθόνη LCD της σειράς Nextionστο RaspberryPi 3. Αρχικά τονίζω οτι κυκλοφορούν αρκετές οθόνες ΤΥΠΟΥ nextion και όχι Nextion. Πολλοί την πάτησαν, οπότε διευκρινίζω οτι οι οδηγίες ΔΕΝ αφορούν κλώνους. Η οθόνη που έχω τώρα μπροστά μου και γράφω τον οδηγό, είναι αυτή από το Banggood.
Στην επόμενη φωτογραφία φαίνονται τα τέσσερα καλώδια και σε τι χρησιμεύουν
Για να συνδέσουμε την οθόνη μας στο RaspberryPi 3 υπάρχουν δύο τρόποι. Απ' ευθείας στα GPIO ή με χρήση ενός USB TTL.
GPIO:
Πρώτα θα πρέπει να απενεργοποιήσουμε την σειριακή κονσόλα ως εξής.
Από το αγαπημένο μας τερματικό δίνουμε την εντολή
sudo raspi-config
και μεταβαίνουμε στην επιλογή 8 Advanced Options και μετά A8 Serial και επιλέγουμε NO.
Για Ubuntu MATE:
Από το τερματικό τρέχουμε
sudo nano /boot/config.txt
Και στο τέλος του αρχείου προσθέτουμε
dtoverlay=pi3-miniuart-bt
Στη συνέχεια τρέχουμε
sudo nano /boot/cmdline.txt
και διαγράφουμε τις τιμές που αφορούν το console. Για παράδειγμα:
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Αποθηκεύουμε τα δύο αρχεία που τροποιοιήσαμε και κάνουμε επανεκκίνηση.
Τώρα είμαστε έτοιμοι να συνδέσουμε την οθόνη όπως στο σχήμα. ΠΡΟΣΟΧΗ, μια λάθος σύνδεση εγγυάται μια καμένη οθόνη.
USB to TTL:
Αντίστοιχα συνδέουμε τα τέσσερα καλώδια στο USB πλακετάκι το οποίο στη συνέχεια συνδέουμε σε μια USB θύρα του RaspberryPi 3.
Πριν συνδέσουμε μόνιμα την οθόνη στο Raspberry Pi 3 θα πρέπει να της φορτώσουμε τα γραφικά που θα δείχνει. Αυτό γίνεται με τρεις τρόπους. Ακολουθούμε έναν από τους τρείς και όχι όλους.
1. Μέσω του προγράμματος Nextion Editor σε περιβάλλον windows
Κατεβάζουμε το πρόγραμμα nextion editor από εδώ και το εγκαθιστάμε
Κατεβάζουμε στη συνέχεια τo αρχείο της οθόνης που έχουμε από εδώ στο φάκελο Nextion. Κοιτάμε το πίσω μέρος τη οθόνης που έχουμε ώστε να δούμε ποιό μοντέλο είναι. Για παράδειγμα, αυτή που έχω μπροστά μου, είναι η NX3224T024, οπότε κατεβάζω το αρχείο NX3224T024.HMI.
Συνδέουμε την οθόνη με τη χρήση του USB TTL στον υπολογιστή μας και βάζουμε τους drivers του ttl. Οι drivers είναι ανάλογα με το πλακετάκι που έχουμε και παρέχονται με αυτό.
Ανοίγουμε το nextion editor και πατάμε πάνω αριστερά Open και ανοίγουμε το αρχείο που κατεβάσαμε για την οθόνη μας. Πατάμε Compile και στη συνέχεια Upload. Επιλέγουμε σε ποιά COM βρίσκεται το USB to TTL μας και πατάμε Go.
Στο σημείο αυτό θα εμφανιστεί το MMDVM στην οθόνη και είμαστε έτοιμοι.
2. Μέσω microSD κάρτας
Κατεβάζουμε το αρχείο της οθόνης που έχουμε από εδώ στο φάκελο Nextion. Κοιτάμε το πίσω μέρος τη οθόνης που έχουμε ώστε να δούμε ποιό μοντέλο είναι. Για παράδειγμα, αυτή που έχω μπροστά μου, είναι η NX3224T024, οπότε κατεβάζω το αρχείο NX3224T024.tft.
Βάζουμε το αρχείο αυτό μόνο του σε μια κάρτα microSD και τοποθετούμε την κάρτα στην nextion οθόνη. Βάζουμε στην οθόνη στο raspberry με ttl ή gpio και βλέπουμε να ξεκινάει το flashάρισμα. Μόλις τελειώσει, αποσυνδέουμε την οθόνη και αφαιρούμε την κάρτα.
Συνδέουμε πάλι την οθόνη και στο σημείο αυτό θα εμφανιστεί το MMDVM στην οθόνη και είμαστε έτοιμοι.
3. Λατρεμένο τερματικό και μόνο από Linux
Εγκαθιστούμε την python και το python-serial τρέχοντας
sudo apt-get install python python-serial
Μετακινούμαστε στο φάκελο του MMDVMhost
cd /opt/MMDVMHost/Nextion_G4KLX
ή σε παλιότερες εκδόσεις mmdvmhost
cd /opt/MMDVMHost/Nextion
βλέπουμε το περιεχόμενο με
ls -la
και σύμφωνα με το τι γράφει η οθόνη μας από την πίσω πλευρά, επιλέγουμε το αρχείο που μας ταιριάζει. Για παράδειγμα, αυτή που έχω μπροστά μου, είναι η NX3224T024, οπότε θα χρησιμοποιήσω το αρχείο NX3224T024.tft
Ελέγχουμε σε ποιά θύρα είναι συνδεδεμένη η οθόνη μας με
dmesg | grep tty
αν είναι με GPIO, θα βρίσκεται στο ttyAMA0
αλλιώς με USB στο ttyUSB0 ή ttyUSB1 κλπ
οπότε τώρα θα πρέπει να τρέξουμε την εντολή
sudo python nextion.py file_to_upload.tft /path/to/dev/ttyDevice
αντίστοιχα με αυτά που είδαμε πιο πάνω για GPIO τρέχουμε
sudo python nextion.py NX3224T024.tft /dev/ttyAMA0
ή για USB TTL
sudo python nextion.py NX3224T024.tft /dev/ttyUSB0
(ΠΡΟΣΟΧΗ, βάζουμε σωστό αρχείο και διαδρομή οθόνης)
Στο σημείο αυτό θα εμφανιστεί το MMDVM στην οθόνη και είμαστε έτοιμοι.
Για να επικοινωνήσει η οθόνη με το MMDVMHost πρέπει να ρυθμίσουμε το αρχείο MMDVM.ini.
Διακόπτουμε το MMDVMHost αν τρέχει με
sudo systemctl stop mmdvmhost.service
επεξεργαζόμαστε
sudo nano /opt/MMDVMHost/MMDVM.ini
και τροποποιούμε ως εξής:
Στην ενότητα [General], το Display=Nextion
και στην ενότητα [Nextion]
Port=/dev/ttyUSB0 ή /dev/ttyAMA0 (ότι βάλαμε πιο πάνω)
Brightness=50 (το βάζουμε όσο θέλουμε εμείς από 1-100, είναι η φωτεινότητα της οθόνης)
DisplayClock=1
UTC=0
IdleBrightness=20 (το βάζουμε όσο θέλουμε εμείς από 1-100, είναι η φωτεινότητα της οθόνης όταν είναι σε αναμονή)
Για τους hard coders...
Επειδή βλέπω πολλούς που τροποποιούν το γραφικό περιβάλλον της Nextion και είναι ωραίο να υπάρχουν άνθρωποι που δημιουργούν, οποιοσδήποτε, άφοβα, μπορεί μέσω του Nextion Editor σε windows, πριν το Compile να τροποποιήσει ότι θέλει μέσα στα γραφικά της οθόνης. Προσέχουμε όμως να μην αλλάξουν οι ονομασίες κα τα id από τα objects που λαμβάνουν δεδομένα από τη σειριακή επικοινωνία γιατί μετά δεν θα εμφανίζονται τα δεδομένα στην οθόνη. Αν αποτύχουμε κάπου και δε μας δουλεύει, δεν ανησυχούμε, φλασάρουμε πάλι την οθόνη με τον ίδιο τρόπο. Αν επιλέγουμε το flash με χρήση microSD κάρτας, το Nextion Editor μετά το Compile, μας δίνει το αρχείο για την κάρτα πατώντας Open -> Openbuildfolder. Και για τους πιο επίμονους ακόμα, μπορούμε να τροποποιήσουμε το αρχείο Nextion.cpp που βρίσκεται στο φάκελο του MMDVMhost. Αυτό απαιτεί καλή γνώση της γλώσσας προγραμματισμού C++. Φυσικά εκεί μας δίνονται όλες οι δυνατότητες της οθόνης. Μετά την τροποποίηση θα πρέπει να κάνουμε πάλι compile το MMDVMhost ώστε να μεταγλωττιστούν οι αλλαγές και να εγκατασταθούν. Δεν ξεχνάμε σε κάθε updateτου MMDVMhost, να ξαναπερνάμε το τροποποιημένο Nextion.cpp αρχείο πριν κάνουμε το compile.
Ένα παράδειγμα τροποποίησης του αρχείου αυτού φαίνεται στην παρακάτω εικόνα.
Έχει προστεθεί η θερμοκρασία του πομποδέκτη motorola GM350, η ip που έχει αυτή τη στιγμή το wifi καθώς και το ethernet. Όλα τα στοιχεία αυτά αλλάζουν δυναμικά σε πραγματικό χρόνο.
Ευχαριστώ για το χρόνο σας,
de SV6NOB