Πίνακας περιεχομένων:

Παρακολούθηση υλικού υπολογιστή: 6 βήματα (με εικόνες)
Παρακολούθηση υλικού υπολογιστή: 6 βήματα (με εικόνες)

Βίντεο: Παρακολούθηση υλικού υπολογιστή: 6 βήματα (με εικόνες)

Βίντεο: Παρακολούθηση υλικού υπολογιστή: 6 βήματα (με εικόνες)
Βίντεο: Πως να εγκαταστήσεις Windows 10 σε άλλον υπολογιστή βήμα - βήμα | Kordmeister 2024, Ιούλιος
Anonim
Παρακολούθηση υλικού υπολογιστή
Παρακολούθηση υλικού υπολογιστή
Παρακολούθηση υλικού υπολογιστή
Παρακολούθηση υλικού υπολογιστή
Παρακολούθηση υλικού υπολογιστή
Παρακολούθηση υλικού υπολογιστή

Γεια σε όλους. Ξεκίνησα αυτό το έργο για δύο λόγους: έχτισα έναν βρόχο υδρόψυξης στον υπολογιστή μου πρόσφατα και χρειαζόμουν κάτι για να γεμίσω οπτικά λίγο χώρο στη θήκη ΚΑΙ ήθελα να μπορώ να ελέγχω τις θερμοκρασίες και άλλα στατιστικά με μια γρήγορη ματιά χωρίς να γεμίζουν τα ευρήματα OSD γωνία της οθόνης. Φυσικά υπάρχουν έτοιμες λύσεις για αυτό, αλλά οι περισσότερες απλώς δεν ταιριάζουν στο φενγκ σούι μου. Έτσι, αντί να βάλω μια οθόνη HDMI 7 στη θήκη μου με ένα καλώδιο να βγαίνει από τη θήκη και τη γραμμή εργασιών των Windows πάντα αναμμένη, αποφάσισα να φτιάξω το δικό μου παιχνίδι.

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

ΑΠΟΠΟΙΗΣΗ: ΟΛΑ ΤΑ ΕΡΓΑ ΜΟΥ ΚΟΙΝΟΠΟΙΗΘΗΚΑΝ ΔΗΜΙΟΥΡΓΙΚΗ ΚΟΙΝΗ ΚΟΙΝΗ ΑΠΟΔΟΣΗ-SHAREALIKE 4.0. ΠΗΡΑ ΕΜΠΝΕΥΣΗ ΑΠΟ ΠΟΛΛΑ ΠΑΡΑΔΕΙΓΜΑΤΑ ΣΕ ΟΛΟ ΤΟ ΔΙΑΔΙΚΤΥΟ, ΕΑΝ ΑΝΑΓΝΩΡΙΖΕΤΕ ΟΡΙΣΜΕΝΟ ΜΕΡΟΣ ΑΠΟ ΑΥΤΟ ΤΟ ΕΡΓΟ ΣΑΣ, ΠΑΡΑΚΑΛΩ ΕΠΙΚΟΙΝΩΝΗΣΤΕ ΜΑΖΙ ΜΟΥ ΓΙΑ ΠΡΟΣΦΟΡΑ. ΔΕΝ ΕΧΕΙ ΠΡΟΒΛΗΜΑ ΠΑΡΑΒΙΑΣΗΣ, ΘΑ ΕΙΜΑΙ ΕΥΤΥΧΙΣΜΕΝΟΣ ΝΑ ΔΙΟΡΘΩΣΩ ΟΠΟΙΟΔΗΠΟΤΕ ΛΑΘΟΣ. ΣΑΣ ΕΥΧΑΡΙΣΤΩ

ΔΕΥΤΕΡΗ ΑΠΟΠΟΙΗΣΗ: ΤΟ ΕΡΓΟ ΜΟΥ ΜΟΙΡΑΣΕΤΑΙ ΟΠΩΣ ΕΙΝΑΙ. ΔΕΝ ΕΙΜΑΙ ΥΠΕΥΘΥΝΟΣ ΓΙΑ ΟΠΟΙΑΔΗΠΟΤΕ ΖΗΜΙΑ ΠΡΟΒΛΗΜΑΤΑ ΑΠΟ ΤΗ ΧΡΗΣΗ ΟΠΟΙΟΥΔΗΠΟΤΕ ΚΩΔΙΚΟΥ ΚΑΙ ΟΔΗΓΙΩΝ ΜΟΥ

Προμήθειες

  • Arduino Nano (ή UNO αν θέλετε)
  • Οθόνη TFT. Στην περίπτωσή μου, είναι μια οθόνη 3.5 ιντσών συμβατή με ILI9486 / ILI9488L.
  • Θερμοκρασία Senso. Στην περίπτωση μου, ένας αναλογικός αισθητήρας θερμοκρασίας TMP36.
  • Καλώδια, καλώδια, συνδετήρες dupont (περισσότερα για αυτό αργότερα)
  • (προαιρετικά) Breadboard για δοκιμή
  • (προαιρετικό αλλά συνιστάται) ένα μικρό πάνινο

Βήμα 1: Μελέτη σκοπιμότητας (κατά σειρά)

Όπως είπα, δεν ήθελα και η οθόνη HDMI είχε κολλήσει στη θήκη του υπολογιστή μου, έτσι, με μανδύα με τη δική μου εφευρετικότητα, άρχισα να ψάχνω για παρόμοιες ιδέες στο διαδίκτυο. Και αυτή είναι η συμβουλή νούμερο ένα: Η Google είναι ο φίλος σας (καλά, κάθε αξιοπρεπής μηχανή αναζήτησης…). Ζούμε σε έναν κόσμο όπου τίποτα δεν είναι πραγματικά πρωτότυπο πια, αλλά αντί να δούμε αυτή τη φράση με αρνητικό νόημα, θα μπορούσαμε να το χρησιμοποιήσουμε για το πλεονέκτημά μας: ό, τι θέλετε να δημιουργήσετε, πιθανώς κάποιος κάπου είχε ήδη κάνει κάτι παρόμοιο, οπότε αν δεν ξέρω πώς να εφαρμόσω μια ιδέα, είναι πολύ πιθανό να βρείτε χρήσιμες πληροφορίες εκεί έξω. Κατά την αναζήτηση στο διαδίκτυο, είναι συχνά χρήσιμο να θυμάστε δύο κανόνες:

  1. Μην μπείτε στον κόπο να ακολουθήσετε τη σελίδα 3 ή 4 οποιασδήποτε αναζήτησης, είναι σχεδόν πάντα χάσιμο χρόνου. αντι αυτου
  2. αλλάξτε τους όρους αναζήτησης, απλώς αναδιατυπώστε την ερώτηση από άλλη οπτική γωνία (π.χ.: "αισθητήρας θερμοκρασίας arduino" -> "θερμοκρασία ανάγνωσης με arduino").

Στην πραγματικότητα είναι γεμάτο καλά έργα εκεί έξω, και ομολογώ ότι πέρασα τις πρώτες μέρες μελετώντας τα περισσότερα από αυτά τα έργα. Αλλά κανένας από αυτούς δεν ήταν έτοιμος να πάει για μένα, καθώς ήθελα κάτι που θα ταιριάζει στις ανάγκες μου.

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

Wantedθελα κάτι βασισμένο στο Arduino, γιατί το είχα ήδη, είναι καλά τεκμηριωμένο και η κοινότητά του ανθεί. Δεν υπάρχει πρόβλημα εδώ, όπως είπα πριν από πολλές πληροφορίες.

Iθελα μια οθόνη αρκετά μεγάλη για να φαίνεται καθαρά από μερικά μέτρα μακριά και που θα ταιριάζει με την εμφάνιση της κατασκευής μου, αυτό εξαιρούσε οποιαδήποτε οθόνη χαρακτήρων Nokia και LCD. Οι OLED είναι επίσης εκτός θέματος, καθώς είναι μικρές. Έτσι επέλεξα μια έγχρωμη οθόνη TFT. Δεν χρειάζεται οθόνη αφής, καθώς θα είναι μέσα στον υπολογιστή. Βρήκα ένα 3,5 , ήδη σχεδιασμένο για Arduino, ~ 15 € στο Amazon. Αρκετά καλό.

Τώρα, αφού εντοπιστεί το υλικό, εστίασα στο λογισμικό.

Σχεδόν όλα τα έργα, από πλευράς Arduino, είναι αρκετά παρόμοια. Απλώς πρέπει να προσαρμόσω τον κώδικα για την οθόνη και το πρωτόκολλο επικοινωνίας για τη συλλογή δεδομένων από την εφαρμογή διακομιστή. Από πλευράς υπολογιστή, τα περισσότερα έργα βασίζονταν σε C, C ++, C#, python και τα περισσότερα έργα προσέφεραν μόνο μια διεπαφή CLI ή έναν διακομιστή που μοιάζει με υπηρεσία Windows. Αντίθετα, ήθελα ένα GUI. Ποτέ δεν χρησιμοποίησα γλώσσα τύπου C στα Windows, αφήστε το κτίριο GUI. Έμαθα όμως κάποια Visual Basic πριν από 15 χρόνια, οπότε το δοκίμασα και κατέβασα τη δωρεάν έκδοση του Visual Studio από τη Microsoft.

Αφού μελέτησα πολλά παρόμοια έργα, αποφάσισα να χρησιμοποιήσω το OpenHardwareMonitor για να λάβω όλες τις πληροφορίες υλικού και το RivaTuner για FPS, επειδή αυτά είναι δωρεάν και αρκετά τεκμηριωμένα.

Βήμα 2: Δοκιμή υλικού

Δοκιμή υλικού
Δοκιμή υλικού
Δοκιμή υλικού
Δοκιμή υλικού
Δοκιμή υλικού
Δοκιμή υλικού

Πριν ενεργοποιήσετε το συγκολλητικό σίδερο και στερεώσετε για πάντα σε χρόνο και χώρο οποιοδήποτε ηλεκτρονικό εξάρτημα, είναι καλή πρακτική να φτιάξετε ένα δοκιμαστικό πρωτότυπο (άκρη νούμερο δύο). Ευτυχώς, δεν είναι πια το 1995. Σήμερα είναι αρκετά εύκολο να τακτοποιήσετε αρκετά περίπλοκα πρωτότυπα ακόμη και σε μικρές σανίδες ψωμιού. Στην περίπτωσή μου, η οθόνη TFT είχε πτώση στο pinout για το Arduino Uno, οπότε την έβαλα στο Arduino uno και άρχισα να παίζω με τις βιβλιοθήκες παραδείγματος και να διαβάζω τα εγχειρίδια αναφοράς για να κατανοήσω τις αρχές λειτουργίας και τους περιορισμούς της.

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

Κάποια στιγμή, είχα ένα κενό σημείο στην οθόνη, αλλά κανένα από τα δεδομένα από τους αισθητήρες PC δεν ήταν πραγματικά χρήσιμο, οπότε αποφάσισα να βάλω έναν αισθητήρα θερμοκρασίας μέσα στη θήκη για θερμοκρασία περιβάλλοντος. Η οθόνη τρώει σχεδόν όλες τις καρφίτσες Arduino, ευτυχώς ο αναλογικός πείρος A5 δεν χρησιμοποιείται, οπότε έδεσα ένα TMP36. Δοκίμασα ακόμη και ένα DHT22, αλλά είναι υπερβολικό για αυτήν την εφαρμογή.

Υπάρχουν πολλά παραδείγματα για το TMP36, μόλις αντέγραψα ένα από αυτά σε μια συνάρτηση. Το TMP35 έχει 3 ακίδες, το Vin πηγαίνει στα 5V, το GND πηγαίνει στη γείωση και το Out πηγαίνει στην ακίδα A5. Τοποθέτησα έναν κεραμικό πυκνωτή 0.1uF μεταξύ Vin και GND. Λένε ότι χρειάζεται. Πιθανότατα είναι άχρηστο σε αυτή την περίπτωση, αλλά… Έχω ρυθμίσει ακόμη και την αναλογική τάση αναφοράς Arduino στον ακροδέκτη 3,3v για καλύτερη ανάγνωση θερμοκρασίας. Ακόμα άχρηστο σε αυτή την περίπτωση, αλλά…

Βήμα 3: Κωδικός Arduino

Κάντε λήψη και ανοίξτε τον κωδικό Arduino που περιλαμβάνεται για να ακολουθήσετε την εξήγηση σε αυτό το βήμα. Προσπάθησα να αφήσω αρκετά σχόλια στον κώδικα για να είναι καθαρά χωρίς να τον κατακλύσω.

Θα χρειαστείτε οριστικά τις βιβλιοθήκες MCUFRIEND_kbv και Adafruit GFX. Και τα δύο μπορούν εύκολα να εγκατασταθούν από το Arduino IDE.

Το πρόγραμμα μπορεί να υποδιαιρεθεί σε ενότητες όπως αυτό:

  1. καθορίζει και δηλώνει όλες τις καθολικές μεταβλητές και άλλα απαραίτητα στοιχεία
  2. προετοιμάστε την οθόνη, ορίστε την εξωτερική αναφορά και σχεδιάστε το UI (όλα αυτά περιέχονται στη λειτουργία εγκατάστασης (), καθώς πρέπει να εκτελείται μόνο μία φορά)
  3. διαβάστε δεδομένα από σειριακή σύνδεση και κατανέμετέ τα στη συνάρτηση πίνακα (βρόχος ())
  4. ανάγνωση δεδομένων εξωτερικού αισθητήρα θερμοκρασίας (λειτουργία readExtTemp ())
  5. εκτύπωση δεδομένων στην οθόνη (λειτουργία printData ())
  6. πίσω στον βρόχο

ΤΜΗΜΑ 1: Δηλώσεις και ορισμοί

Στην αρχική ενότητα του κώδικα, χρησιμοποίησα πολλούς δείκτες και πίνακες, οπότε μπόρεσα να συμπιέσω πολλές επαναλαμβανόμενες γραμμές κώδικα πιο σύντομα για να γράψω κύκλους ΓΙΑ. Ναι, είμαι τεμπέλης. Όπως μπορείτε να δείτε, δήλωσα έναν πίνακα δείκτη και τον συμπλήρωσα με όλες τις εικόνες από το αρχείο pics.h. Αυτό κατέστησε δυνατή την εκτέλεση του κόλπου κύκλου FOR για να σχεδιάσετε όλα τα εικονίδια.

ΤΜΗΜΑ 2: εγκατάσταση (), κυρίως σχέδιο UI

Τακτοποιήθηκα με την προεπιλεγμένη γραμματοσειρά καθώς δεν έχει διαφανές φόντο, έτσι επιτρέπει την εγγραφή μιας νέας γραμμής κειμένου πάνω από μια παλιά χωρίς να χρειάζεται να τη διαγράψω. Η χρήση άλλης γραμματοσειράς θα σήμαινε να σχεδιάσετε ένα μαύρο τετράγωνο πάνω από το παλιό κείμενο πριν γράψετε μια νέα γραμμή, οδηγώντας σε ένα δυσάρεστο εφέ τρεμοπαίγματος.

Μετά από κάποιες δοκιμές, κατέληξα σε έναν καλό συμβιβασμό μεταξύ της αναγνωσιμότητας και των εμφανιζόμενων πληροφοριών. Χώρισα την οθόνη σε δύο στήλες και 5 σειρές. Η αριστερή στήλη αφορά δεδομένα CPU και μητρικής πλακέτας, συμπεριλαμβανομένων από επάνω προς τα κάτω όνομα CPU, θερμοκρασία, φορτίο, χρήση RAM και θερμοκρασία μητρικής πλακέτας. Το σωστό αφιερωμένο στη GPU και περιλαμβάνει όνομα GPU, θερμοκρασία, φορτίο, μετρητή καρέ ανά δευτερόλεπτο και εξωτερικό αισθητήρα θερμοκρασίας.

Όπως μπορείτε να δείτε στον κώδικα, αποφάσισα να αποφύγω τη χρήση εικόνων στην κάρτα SD, καθώς είναι πραγματικά αργή φόρτωση. Αποφάσισα να συμπεριλάβω όλα τα εικονίδια στη μνήμη PROGMEM και να σχεδιάσω τις γραμμές με την ειδική εντολή drawLine (). Αυτό είναι επίσης χρήσιμο για μικρές διορθώσεις διεπαφής χρήστη.

Στην αδύναμη προσπάθεια να δώσω στο UI μια εμφάνιση βάθους, σχεδίασα δύο από όλα (γραμμές, ορθογώνια, εικόνες) με διαφορετικά χρώματα και με μια μικρή μετατόπιση. Δυστυχώς δεν είναι το αποτέλεσμα που ήλπιζα, αλλά θα κάνει το κόλπο.

Οι τελευταίες γραμμές αυτής της συνάρτησης προορίζονται για εκτύπωση θέσεων στο TFT, έως ότου το Arduino λάβει τα δεδομένα.

ΤΜΗΜΑ 3: κύριος βρόχος (), ανάκτηση δεδομένων και μορφοποίηση

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

Το πρωτόκολλο επικοινωνίας με το οποίο ήρθα χωρίζεται σε δύο μέρη: μια αρχική εκτέλεση μιας χειραψίας και το πραγματικό μέρος δεδομένων.

Η χειραψία είναι απαραίτητη για την εφαρμογή της λειτουργίας αυτόματης σύνδεσης κατά την εκκίνηση του προγράμματος υπολογιστή. Πάει κάπως έτσι:

  • Ο υπολογιστής στέλνει τη σειρά χειραψίας (σε αυτήν την περίπτωση είναι απλά "*****;")
  • Το Arduino στέλνει πίσω μια απάντηση

Πανεύκολο.

Το τμήμα δεδομένων μοιάζει με αυτό: "i: xxx, yyy, zzz, aaa,;" το νόημα είναι:

"i" είναι ο δείκτης, το ονόμασα componentSelector στον κώδικα. Οι τιμές "i" είναι:

  • i = 0 - ΟΝΟΜΑΤΑ. Οι ακόλουθες τιμές είναι τα ονόματα που εμφανίζονται στη πρώτη σειρά στην οθόνη. Αυτό θα σταλεί και θα εκτυπωθεί στην οθόνη μόνο μία φορά, από σήμερα είναι αρκετά δύσκολο να απομακρυνθεί η CPU και η GPU…
  • i = 1 - 1η ΣΤΗΛΗ ΣΤΟΙΧΕΙΩΝ - οι ακόλουθες τιμές εμφανίζονται στο αριστερό μισό της οθόνης από πάνω προς τα κάτω. Στην περίπτωσή μου: θερμοκρασία CPU, φόρτωση CPU, χρήση RAM, θερμοκρασία μητρικής πλακέτας.
  • i = 2 - Δεύτερα στοιχεία στήλης - όπως παραπάνω, αλλά για το δεξί μισό της οθόνης
  • i = 3 - ΕΚΤΥΠΩΣΗ ΕΝΤΟΛΗΣ. Σε αυτήν την περίπτωση η ακατέργαστη σειριακή συμβολοσειρά θα είναι απλώς "3:;" καθώς δεν χρειάζονται άλλα δεδομένα.

"xxx, yyy, zzz, aaa" είναι οι πραγματικές τιμές. αυτά διαβάζονται ως συμβολοσειρές από το arduino και ολόκληρη η μορφοποίηση γίνεται από το πρόγραμμα υπολογιστή. Για i = 0, αυτές οι τιμές είναι 14 χαρακτήρες η καθεμία για τα ονόματα υλικού. Για i = 1 ή 2 αυτά θα είναι μόνο τρεις χαρακτήρες το καθένα, αρκετά για την εμφάνιση θερμοκρασιών και καρέ ανά δευτερόλεπτο. Φυσικά τα ":", "," και ";" οι χαρακτήρες απαγορεύονται σε αυτά τα πεδία.

Το ":" είναι ο διαχωριστής μεταξύ componentSelector και τιμών, το "," είναι ο διαχωριστής τιμών και το ";" είναι το τέλος της γραμμής

Κατά τη λήψη των δεδομένων, το Arduino θα τα αποθηκεύσει ως συμβολοσειρά μέχρι το ";" το σύμβολο ανακτάται, στη συνέχεια θα αναζητήσει το σύμβολο ":" και θα το χρησιμοποιήσει για να πάρει την τιμή componentSelecor. Αυτό θα χρησιμοποιηθεί για τη λειτουργία θήκης διακόπτη για να επιλέξετε τη σωστή διαδικασία που θα ακολουθήσετε. Χρησιμοποιείται επίσης για την επιλογή του σωστού ευρετηρίου στον πίνακα allData.

Μετά από αυτό, το Arduino θα αναζητήσει το σύμβολο "," και θα προχωρήσει στην τοποθέτηση των τιμών στον πίνακα allData.

Εάν το componentSelector είναι 0, η σημαία printName θα οριστεί σε true. Εάν το componentSelector είναι 3, καλούνται οι λειτουργίες readExtTemp () και printData ().

Ενότητα 4: συνάρτηση readExtTemp ()

Δεν χρειάζεται να πω πολλά, διαβάζεται 32 φορές από την ακίδα Α5 και εξάγει την τιμή της θερμοκρασίας ως συμβολοσειρά. Είμαι με τους Επαναστάτες, οπότε χρησιμοποιώ Κελσίου. Οτιδήποτε πάνω από 100 ° C είναι εσφαλμένο, επομένως θα εμφανίζεται ως "---" στην οθόνη. Για οτιδήποτε λιγότερο από 100 ° C θα διαμορφωθεί για να έχει αρκετούς χώρους για να καλύψει χώρο 3 χαρακτήρων στην οθόνη. Μπορείτε να αφαιρέσετε και να τοποθετήσετε ξανά τον αισθητήρα και δεν θα εμφανιστεί καμία περίεργη τιμή.

Ενότητα 5: συνάρτηση printData ()

Όπως πάντα χρησιμοποιούσα για κύκλους για διαδοχική εκτύπωση υλικών στην οθόνη. Εάν η σημαία printNames είναι αληθινή, θα εκτυπώσει τα ονόματα, θα ορίσει τη σημαία σε false και θα συνεχίσει.

Ενότητα 6: πίσω στον βρόχο

Επεξηγείται αρκετά, θα έλεγα…

αρχείο pics.h

Εδώ έχω αποθηκεύσει όλα τα εικονίδια για το περιβάλλον χρήστη. Είναι δυνατή η χρήση της συσκευής ανάγνωσης καρτών SD που περιλαμβάνεται στην οθόνη, αλλά είχα αρκετή μνήμη στο Arduino για τα ασπρόμαυρα εικονίδια μου.

Τα σχεδίασα με τον Junior Icon Editor καθώς είναι δωρεάν και αρκετά καλό για τη ζωγραφική pixel μικρών εικονιδίων. Έπρεπε να μετατρέψω τα αρχεία εικονιδίων (αποθηκευμένα ως PNG) με το διαδικτυακό εργαλείο SKAARHOJ.

Βήμα 4: Κώδικας Visual Basic

Visual Basic Code
Visual Basic Code

Εδώ είναι ο κωδικός VB

ΠΡΟΣΟΧΗ: είναι η πρώτη φορά που μοιράζομαι ένα έργο του Visual Studio. Απλώς αντέγραψα τους φακέλους του έργου και τους συμπιέστηκα. Εάν αυτό δεν λειτουργεί, ενημερώστε μου για έναν καλύτερο τρόπο για να μοιραστώ τέτοιου είδους έργα. Σας ευχαριστώ

Όπως είπα νωρίτερα, δεν μπορώ να δημιουργήσω ένα GUI σε C# ή άλλες γλώσσες, αλλά είχα κάποιες εμπειρίες στο Visual Basic εδώ και πολύ καιρό. Κατέβασα την έκδοση της Visual Studio Community (είναι δωρεάν φυσικά) με το περιβάλλον της Visual Basic. Λοιπόν, έπρεπε να καταλάβω πολλά πράγματα, καθώς την τελευταία φορά που χρησιμοποίησα το VB ήταν η έκδοση 2005 ή κάτι τέτοιο … Αλλά το διαδίκτυο είναι γεμάτο καλές συμβουλές, ως συνήθως.

Αφού καταλάβετε κάποια πράγματα διεπαφής, η νεότερη έκδοση είναι στην πραγματικότητα πιο εύκολη και πιο ευέλικτη από την παλιά.

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

Το "τελικό" πρόγραμμα είναι απλώς ένα εικονίδιο δίσκου με ένα αναδυόμενο μενού που εμφανίζει τα διάφορα στοιχεία ελέγχου και μια κύρια φόρμα με δύο λίστες που εμφανίζουν τα δεδομένα που αποστέλλονται στο Arduino.

Υλοποίησα μια λειτουργία αυτόματης σύνδεσης και μια λειτουργία "έναρξη κατά την εκκίνηση". Περισσότερα για αυτό αργότερα.

Το κύριο πρόγραμμα είναι απλώς μια προσαρμογή διαφόρων παραδειγμάτων και αποσπασμάτων κώδικα χρησιμοποιώντας τη βιβλιοθήκη OpenHardwareMonitor και τη βιβλιοθήκη RivaTuner Shared Memory.

Το πρόγραμμα έχει ως εξής:

  • λάβετε τα δεδομένα από τις βιβλιοθήκες OpenHardwareMonitor και RTSSSm
  • προετοιμάστε και μορφοποιήστε όλα τα δεδομένα για το πρωτόκολλο επικοινωνίας
  • στείλτε τα δεδομένα στο Arduino
  • ξεπλύνετε και επαναλάβετε

φυσικά τα ονόματα υλικού διαβάζονται στην αρχή και αποστέλλονται μόνο μία φορά.

Ο μετρητής FPS ενεργοποιείται μόνο όταν χρησιμοποιείται συμβατή εφαρμογή (π.χ. παιχνίδι, πρόγραμμα τρισδιάστατης μοντελοποίησης κ.ο.κ.), διαφορετικά το σύμβολο κράτησης θέσης "---" θα σταλεί στην οθόνη.

Δεν θα εξηγήσω βαθιά πώς να λάβετε τις τιμές από τις βιβλιοθήκες, καθώς είναι καλά τεκμηριωμένες στο Διαδίκτυο και κάπως κατανοητές από τον κώδικα. Απλώς θέλω να σας πω για τα προβλήματα εμφάνισης της θερμοκρασίας της μητρικής πλακέτας μέσω της βιβλιοθήκης OpenHardwareMonitor (στο εξής OHMonitor, επειδή η ζωή είναι πολύ μικρή). Έχω ένα Asus Maximus VIII Gene MoBo, το οποίο είναι εφοδιασμένο με αισθητήρες θερμοκρασίας fu ** ton στη μητρική πλακέτα, αλλά το OHMonitor τα ονομάζει ως αισθητήρα θερμοκρασίας #1, #2… #n ΚΑΙ πουθενά δεν καθορίζεται η θέση θερμοκρασίας. Έτσι έπρεπε να εγκαταστήσω το φοβερό λογισμικό Asus AI suite, όπου οι αισθητήρες έχουν τουλάχιστον NAMES και να συγκρίνουν τις διάφορες θερμοκρασίες μεταξύ των δύο προγραμμάτων. Φαίνεται ότι ο γενικός αισθητήρας θερμοκρασίας της μητρικής μου είναι #2 για το OHMonitor, οπότε όπως μπορείτε να δείτε στο Timer1_tick sub κάτω από τα στοιχεία του MoBo, έπρεπε να αναζητήσω ένα όνομα αισθητήρα που περιέχει τη συμβολοσειρά " #2" για να έχω τη σωστή ανάγνωση.

TL; DR: θα πρέπει να φροντίσετε για εσάς τους σωστούς αισθητήρες θερμοκρασίας μητρικής πλακέτας. Τα υπόλοιπα είναι μάλλον καλό να πάνε.

Ωστόσο, αυτή είναι μόνο η έκδοση 1, σκοπεύω να εγκαταστήσω αυτό το gadget στον άλλο υπολογιστή μου, οπότε πιθανότατα θα εφαρμόσω έναν τρόπο επιλογής των αισθητήρων και ίσως ακόμη και να επανασχεδιάσω τη διεπαφή στο Arduino εν κινήσει.

Η λειτουργία αυτόματης σύνδεσης

Αυτή η λειτουργία είναι πραγματικά απλή: εάν ο υπολογιστής δεν είναι συνδεδεμένος με ένα Arduino, κάθε x χιλιοστά του δευτερολέπτου (με βάση το χρονόμετρο1) αυτή η λειτουργία καλείται. Προσπαθεί να συνδεθεί με κάθε θύρα COM στον υπολογιστή, εάν είναι επιτυχής, στέλνει τη συμβολοσειρά χειραψίας "*****;". Εάν η απάντηση είναι "R", τότε η σωστή συσκευή είναι συνδεδεμένη και ακολουθείται η κανονική διαδικασία. Αλλιώς, δοκιμάζει την επόμενη θύρα COM.

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

Η λειτουργία Έναρξη κατά την εκκίνηση

Iθελα το πρόγραμμα να ξεκινήσει κατά την εκκίνηση. Αρκετά εύκολο, λες. Βάλτε έναν σύνδεσμο στον κατάλληλο φάκελο, λέτε. Αλλά όχι. Λόγω των βιβλιοθηκών OHMonitor και RTSS, χρειαζόμαστε επίπεδο εκτέλεσης διαχειριστή για τη συλλογή πληροφοριών. Αυτό σημαίνει την εντελώς ενοχλητική οθόνη UAC κάθε φορά που ξεκινά αυτή η εφαρμογή. Με τιποτα. Προσάρμοσα λοιπόν το σενάριο του Matthew Wai (σύνδεσμος εδώ) για να επιτύχω ένα αθόρυβο ξεκίνημα κατά την εκκίνηση. Μόλις αντέγραψα το σενάριο στο αρχείο Resources1, χωρίστηκε σε πολλά μέρη, έπειτα υλοποίησα μια υπορουτίνα που δημιουργεί (ή αφαιρεί) ένα αρχείο εργασιών των Windows, προσαρμοσμένο με την τρέχουσα θέση εκτέλεσης προγράμματος και τέτοια πράγματα.

Το εικονίδιο του δίσκου συστήματος

Χάρη στα αντικείμενα NotifyIcon και ContextMenu, μπόρεσα να εφαρμόσω έναν εύκολο και λιπαρό τρόπο ελέγχου της εφαρμογής. Απλώς κάντε δεξί κλικ στο εικονίδιο του δίσκου και εμφανίζεται το μενού. Υπάρχουν αυτές οι επιλογές:

  • Έναρξη κατά την εκκίνηση: μπορείτε να το ελέγξετε και να το αποεπιλέξετε για να ενεργοποιήσετε ή να απενεργοποιήσετε τη λειτουργία εκκίνησης κατά την εκκίνηση
  • Αυτόματη σύνδεση: ίδια με την παραπάνω, αλλά χειρίζεται τη λειτουργία αυτόματης σύνδεσης
  • Σύνδεση/Αποσύνδεση: χειρίζεται τη σύνδεση. Δεν λειτουργεί με ενεργοποιημένη την αυτόματη σύνδεση
  • Χρόνος ανανέωσης: δίνει ένα αναπτυσσόμενο υπομενού, μπορείτε να επιλέξετε τον χρόνο ανανέωσης από 1 έως δέκα δευτερόλεπτα
  • Μεγιστοποίηση: ανοίγει το κύριο παράθυρο. Το ίδιο με το διπλό κλικ στο εικονίδιο
  • Έξοδος: αυτονόητο

Μεταγλώττιση του λογισμικού

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

Μπορείτε να βρείτε τη βιβλιοθήκη OpenHardwareMonitor εδώ. Πρέπει να κατεβάσετε το λογισμικό, να ανοίξετε το αρχείο zip και να αντιγράψετε το αρχείο OpenHardwareMonitorLib. DLL στο φάκελο έργου.

Ακολουθεί ο σύνδεσμος για τη βιβλιοθήκη RTSSharedMemoryNET, πρέπει να κάνετε λήψη και μεταγλώττιση για την αρχιτεκτονική σας και, στη συνέχεια, να αντιγράψετε το RTSS [TL; DR] moryNET. DLL στο φάκελο του έργου σας.

Τώρα πρέπει να προσθέσετε μια αναφορά στον κωδικό σας, οδηγίες εδώ

Απλά φροντίστε να μεταγλωττίσετε και τα δύο έργα διακομιστή RTSS [TL; DR] moryNET και PCHwMon για την ίδια αρχιτεκτονική.

Έχω συμπεριλάβει ένα έτοιμο πρόγραμμα εγκατάστασης, ώστε να μπορείτε να το εγκαταστήσετε ολόκληρο χωρίς να μπλέξετε με τη Visual Basic. Έχει καταρτιστεί για x86, θα λειτουργήσει τόσο σε αρχιτεκτονικές x86 όσο και σε x64. Απαιτεί το. NET framework 4.7.2 για εκτέλεση.

Σε κάθε περίπτωση, θα χρειαστεί να εγκαταστήσετε το RivaTuner. Μπορείτε να το βρείτε εδώ ως αυτόνομη εφαρμογή ή μπορείτε να εγκαταστήσετε το Msi Afterburner, το οποίο θα πρέπει να περιλαμβάνει τον RTServer.

Βήμα 5: Τελική υλοποίηση υλικού

Συνιστάται: