Raspberry Pi – [δευτερο επισόδειο] «Εισοδος» – «Εξοδος» Τι ειναι όλα αυτά;

Εισαγωγή

Κατά τη γνώμη μου το πρώτο άρθρο Raspberry Pi, έδωσα μια γρήγορη ματιά στο διοικητικό συμβούλιο, και έδειξε πόσο εύκολο ήταν να φορτώσει ένα λειτουργικό σύστημα και να κλωτσήσει την πλακέτα στη ζωή, να συνδεθείτε στο Internet και να περιηγηθείτε στο The CodeProject.

Σε αυτό το άρθρο, ελπίζω να καταδείξει πώς να συνδέσετε τον πίνακα με τον πραγματικό κόσμο. Σε αντίθεση με τους πίνακες Arduino, δεν υπάρχουν εύκολες ψηφιακής εισόδου-εξόδου in / out ή αναλογική πινέζες, μόνο ένα απλό εισόδου-εξόδου γενικού σκοπού (GPIO) σετ καρφίτσες.

Λοιπόν, πολλά για την ευτυχία μου, υπάρχει ένα διοικητικό συμβούλιο γι ‘αυτό!

Φέρτε στο Gertboard!

Η Gertboard είναι μια σανίδα extender διεπαφή που συνδέεται με το Raspberry Pi μέσω των πινέζες GPIO χρησιμοποιώντας ένα καλώδιο κορδέλα. Η παρακάτω εικόνα είναι ό, τι το Gerboard (αριστερά) συνδεδεμένο με RasPi (δεξιά) πρέπει να μοιάσει όταν είμαι τελειώσει. (Η φωτογραφία είναι ευγενική προσφορά του Element14)?

Αγόρασα ορυχείο μέσω Element 14 (Μέρος Code 211 – 5337). Ακριβώς όπως η αρχική έκδοση RasPi, υπήρχε μια πίσω σειρά, όταν το ορυχείο διέταξε, έτσι απλά έπρεπε να περιμένει.

Το κιτ που παρήγγειλα ήταν μια μονάδα έχουν συναρμολογηθεί και δεν με πειράζει ξεσκόνισμα από το κολλητήρι. Αυτό ήταν μέχρι που είδα το κιτ όταν έφτασε και ανακάλυψε απολύτως μικροσκοπικά εξαρτημάτων επιφανειακής στήριξης! Συνολικά υπήρξαν 33 ατομικές σακούλες των συστατικών, IC και τις διάφορες κεφαλίδες και σακάκια και φυσικά το PCB 1x Gertboard.

Στην ιστοσελίδα Farnell, μπορείτε να παραγγείλετε τώρα πλήρως συναρμολογημένο πίνακες που θα πάρει μερικά από τον πόνο και την ταλαιπωρία για ορισμένους. (Μέρος Κωδικός 225 – 0034).

Farnell έχουν τώρα ένα ολόκληρο τμήμα αφιερωμένο στην Raspberry Pi, με διάφορα συμβούλια, περιπτώσεις, φωτογραφικές μηχανές και άλλα αξεσουάρ.

Η οικοδόμηση του διοικητικού συμβουλίου

Μετά το άνοιγμα της συσκευασίας που έφτασε και εξαπλώνεται τα πάντα. Παρατήρησα ότι δεν υπάρχουν οδηγίες συναρμολόγησης. Έτσι, δεν είχε ιδέα όπου κάθε συστατικό πρέπει να πάει. Μια γρήγορη αναζήτηση στο διαδίκτυο και βρήκε το εγχειρίδιο συναρμολόγησης και τις οδηγίες χρήσης που συνδέονται από την ιστοσελίδα RasPi πίσω στο Element14?

Η παρακάτω φωτογραφία δείχνει τα πάντα απλώνονται ακόμα στη συσκευασία του πριν από την έναρξη του τεράστιου έργου:

Μετά τη λήψη του εγχειριδίου συναρμολόγησης και το άνοιγμα, θα ήταν ωραίο να δούμε στην εισαγωγή έναν οδηγό για συγκόλληση η επιφάνεια τοποθέτησης συσκευών. Ποτέ δεν είχε προσπαθήσει να κολλήσεις αυτά πριν, οπότε ήταν λίγο ανήσυχος με δεδομένο το πόσο μικρό ήταν. Ως ένα παράδειγμα, υπήρχαν 2 χ 0 Ohm SMD αντιστάσεις στο κιτ. Αυτά είναι 2 χιλιοστά x 1,2 χιλιοστά. Στην παραπάνω φωτογραφία μπορείτε να δείτε τις ταινίες στοιχείο SMD κάτω αριστερά στα λευκά σακούλες.

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

Έτσι, ήρθε η ώρα να πιάσουμε δουλειά. Το πρώτο πράγμα που έκανα ήταν που τις σακούλες των SMD εξαρτημάτων. Αυτοί είχαν μόνο τον αριθμό είδους Farnell/Element14 τους και καμία περιγραφή του περιεχομένου. Αξίζει να πάτε στην ιστοσελίδα της και να αναζητήσετε κάθε εξάρτημα και να γράψετε την περιγραφή του στην τσάντα. Η SMDs, αν πυκνωτές ή αντιστάσεις μοιάζει το ίδιο, έτσι δεν θέλετε να τα συγχέουμε. Επίσης, κατά τη συναρμολόγηση του σκάφους, να κολλήσει σε έναν τύπο εξαρτήματος σε έναν χρόνο, και πάλι, έτσι ώστε να μην τα συγχέουμε. Μόλις ολοκληρωθεί με αυτόν τον τύπο στοιχείου, να θέσει μακριά την τσάντα του κάθε ανταλλακτικών και να προχωρήσουμε στο επόμενο. Καλό θα είναι να ξεκινήσετε με το μικρότερο μέγεθος του συστατικού, και στη συνέχεια να εργάζονται μέχρι τα μεγαλύτερα πράγματα, όπως υποδοχείς IC και των κατόχων ασφαλειών.

Πάρτε το χρόνο σας, ακολουθήστε τις οδηγίες. Όλα πάνε καλά, τα πάντα θα πρέπει να λειτουργήσει μια χαρά!

Πώς πήγε τότε;

Δεν πήγε και τόσο άσχημα. Προσπαθώντας να ανοίξουν τα περιτυλίγματα στοιχείο SMD ήταν ένα κομμάτι ενός πόνου, και το πρώτο πακέτο είχε ως αποτέλεσμα πυκνωτές να εξαπλωθεί σε όλη τη χώρα, αλλά κατάφερε να τα βρείτε όλα. Κατάφερα να βάλει μία από τις γέφυρες αντίστασης σε λάθος τρύπες, αλλά παρατήρησα όταν είχα ανατρέψουν την πρώτη leg.Then έβαλα έναν κάτοχο IC με λάθος τρόπο γύρο, αλλά μόνο είχε συγκολληθεί 2 γωνίες, έτσι κατάφερε να ανακτήσει την κατάσταση, χωρίς πολύ φασαρία.

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

Ας Do The Time Lapse!

Στην ιστοσελίδα RasPi, υπήρχε μια εποχή lapse βίντεο από τον Mike Cook από τον κτίριο Gertboard του. Ποτέ δεν είχα κάνει ένα βίντεο πάροδο του χρόνου πριν, έτσι σκέφτηκα ότι θα έπρεπε επίσης να πάει σε αυτό. Αυτό θα μπορούσε επίσης να είναι μια καλή δικαιολογία για να βάλει μου GoPro HD Hero 2 για να χρησιμοποιήσετε!

Το βίντεο που ακολουθεί δημιουργήθηκε από την πρώτη γυρίσματα μια χρονική ακολουθία παρέλευση της κατασκευής σε 1 Πλαίσιο / 5 δευτερόλεπτα @ 3200 x 2400 ανάλυση, στη συνέχεια, χρησιμοποιώντας το GoPro Cineform Studio μετατρέψει αυτό σε 1280×720 Έξοδος HD στα 10 καρέ ανά δευτερόλεπτο.

http://www.youtube.com/watch?v=hNPQao6wops

Όπως μπορείτε να δείτε στην αρχή του βίντεο, η χρήση λαβίδας ήταν σίγουρα απαιτείται για την αντιμετώπιση των εξαρτημάτων SMD. Ήταν ένας εφιάλτης! Είχα επίσης την χαρά του μεγαλύτερου μου, Maya (8), που ενώνει μου αργότερα να κάνουν ένα κομμάτι της εποπτείας. Συζήτηση για (τουλάχιστον) είκοσι ερωτήσεις …

Τι είναι στο διοικητικό συμβούλιο;

Η Gertboard έχει διάφορες λειτουργίες. Αυτά είναι όλα ξεσπάσει σε διάφορες κεφαλίδες, επιτρέποντάς σας να τα χρησιμοποιήσετε όπως νομίζετε. Οι κύριες λειτουργίες του σκάφους είναι?

  • 2 x ψηφιακό σε αναλογικό μετατροπείς (8-bit)
  • 2 x αναλογικού σήματος σε ψηφιακό μετατροπείς (10-bit)
  • 12 x LED δείκτες
  • 3 x πλήκτρα
  • 6 x εξόδους ανοικτού συλλέκτη
  • 12 x ψηφιακό IO
  • 1 x ελεγκτή κινητήρα (σε δύο κατευθύνσεις μέχρι 18v @ 2amps)

Υπάρχουν επίσης 3 x Πλήκτρα δεμένο σε 3 από τις ΥΠ και 12 x LEDs δεμένο στο IO.

Μια άλλη αξιοσημείωτη πτυχή της Gertboard, είναι το γεγονός ότι έχει επίσης έναν μικροελεγκτή ATmega328 χτισμένο πάνω στην πλακέτα, με όλα τα πινέζες ξεσπάσει σε ένα σύνολο κεφαλίδων. Αυτό ουσιαστικά σημαίνει ότι υπάρχει ένα Arduino επίσης στο διοικητικό συμβούλιο.

Δοκιμή του διοικητικού συμβουλίου

ΣΗΜΕΙΩΣΗ: Έκδοση 1 (Δική μας Συνέλευση) και έκδοση 2 (Προσυναρμολογημένη) είναι ελαφρώς διαφορετική από την άποψη των συνδέσμων και σακάκια, έτσι ώστε να χρειάζεται να αναφερθώ στις σωστές τους οδηγούς για το δικό σας σκάφος.

Στο εγχειρίδιο, υπάρχουν links για να κατεβάσετε το δείγμα κώδικα από την ιστοσελίδα Element14, αλλά υπάρχουν ένα σωρό άλλα πράγματα εκεί έξω στο Gertboard. Ένα καλό μέρος για να ξεκινήσετε είναι σε αυτό το φόρουμ? http://www.raspberrypi.org/phpBB3/viewforum.php?f=42

Έχοντας κατεβάσει και να εγκαταστήσει την τελευταία έκδοση του συριγμό (όπως μου Episode 1 του άρθρου), δίπλα ανάγκη να πάρει στα χέρια του κατάλληλου κώδικα δοκιμών python.

Από την κονσόλα εντολών στο Raspi μπορείτε να κάνετε τα ακόλουθα?

Collapse | Copy Code
  wget http://raspi.tv/download/GB_Python.zip
 unzip GB_Python.zip
 cd GB_Python
 nano README.txt

Στο αρχείο readme, υπάρχουν περαιτέρω οδηγίες και συνδέσμους για να κωδικοποιήσει και demos βίντεο στο Youtube του τρέχοντος κώδικα.

Για τους σκοπούς του παρόντος άρθρου, θα δοκιμάσει μόνο μερικά από αυτά.

LED Test

Τρέχοντας την εντολή?

Collapse | Copy Code
  sudo python leds-rg.py

αποτελέσματα του προγράμματος εκτύπωση που άλτες θα πρέπει να συνδεθείτε για την εξέταση, και στη συνέχεια να περιμένει για να χτυπήσει «Enter». Αυτό θα τρέξει τα LEDs μέσω μιας σειράς 1 -> 12 -> 1 κλπ.

Δυστυχώς, για οποιονδήποτε λόγο μόνο τα LEDs 1-8 θα μπορούσε να λειτουργήσει επί του σκάφους μου. Αντάλλαξα τις γέφυρες πάνω σε Pins Β1 και Β12 για να επιβεβαιωθεί η Β12 προσπαθεί να οδηγήσετε τουλάχιστον ένα σήμα, και αυτό επιβεβαιώθηκε από LED1 φωτισμού όταν θα έπρεπε ως 12. Το επόμενο πράγμα που πήγα να κάνω ήταν να ανταλλάξουν πάνω από 2 ΣΔ, μόνο σε περίπτωση που ένα από αυτά ήταν τηγανητά. Πήγα και τράβηξε το IC (U5), η οποία οδηγεί το 9/10/11/12 leds, και αυτό είναι, όταν είδα ότι δεν είχα τις συνδέσεις άλτης εγκατεστημένη η οποία διαπιστωθεί αν πρόκειται εισόδου ή εξόδου, βρεθώ αυτές τις γέφυρες σε, επανατοποθέτηση της IC και εκτελώντας τη δοκιμή επιβεβαίωσε ότι τα LED ήταν τώρα όλα αλληλουχίας σωστά. Panic πάνω!

RasPi.TV δημοσίευσε ένα βίντεο της δοκιμής αυτής στο Youtube εδώ: http://www.youtube.com/watch?v=fFHEi1ur7yg (Σημείωση, στο βίντεο που θα δείτε μόνο ότι έχουν γεφυρωθούν μόνο το 1ο 10 LEDs αντί της πλήρους 12).

Κουμπί δοκιμής

Τρέχοντας την εντολή?

Collapse | Copy Code
  sudo python κουμπιά-rg.py

αποτέλεσμα το πρόγραμμα και πάλι η εκτύπωση των οδηγιών των οποίων άλτες να εισαγάγετε και στη συνέχεια να περιμένει για σας για να πατήσετε «Enter». Μόλις πατήσετε το πλήκτρο, το πρόγραμμα εξάγει την δυαδική κατάσταση από τα κουμπιά π.χ. ‘111 ‘και φωτίζει τα LEDs, όταν πατάτε τα κουμπιά, η δυαδική κατάσταση και τα LED αλλάξει, όπως θα περιμένατε.

Δοκιμή αναφοράς για RasPi.TV: http://www.youtube.com/watch?v=DwlI2Fr1AXg

Κωδικός πίσω

Συχνά, ο καλύτερος τρόπος για να μάθουν και να καταλάβουν τι συμβαίνει είναι απλά να ανοίξει το κάποιον άλλο κώδικα και να λάβει μια ματιά. Ο κώδικας που ακολουθεί είναι η δοκιμή LED από leds-rg.py?

Collapse | Copy Code
  #! / Usr / bin / env python2. 7
 # Python 2. 7 έκδοση από τον Alex Eames του http:// RasPi.TV  
  # Λειτουργικά ισοδύναμο με το τεστ Gertboard LEDs με 
 # Gert Jan van Loo & Myra VanInwegen.  Χρησιμοποιήστε το με δική σας ευθύνη
 # Είμαι αρκετά βέβαιος ότι ο κώδικας είναι ακίνδυνο, αλλά τον ελέγξετε οι ίδιοι. 

  εισαγωγή RPi.GPIO ως GPIO 
  από το χρόνο εισαγωγής στον ύπνο 
  συστήματα εισαγωγής 
  board_type = sys.argv [-1] 

  αν GPIO.RPI_REVISION == 1: # Έλεγχος Pi Αναθεώρηση για να οριστεί από λιμάνι 21/27 σωστά 
      # Define κατάλογο λιμένων για την αναθεώρηση 1 Pi 
      λιμάνια = [25, 24, 23, 22, 21, 18, ​​17, 11, 10, 9, 8, 7] 
  αλλού: 
      # Define θύρες λίστα όλα τα άλλα 
      λιμάνια = [25, 24, 23, 22, 27, 18, ​​17, 11, 10, 9, 8, 7]    
  ports_rev = λιμάνια [:] # κάνουν ένα αντίγραφο του καταλόγου των λιμένων 
  ports_rev.reverse () # και να αντιστραφεί, όπως χρειαζόμαστε και τα δύο 

  GPIO.setmode (GPIO.BCM) # εκκίνηση RPi.GPIO 

  για port_num στα λιμάνια: 
      GPIO.setup (port_num, GPIO.OUT) # συσταθεί θύρες για έξοδο 

  def led_drive (επαναλήψεις, πολλαπλές, κατεύθυνση): # define λειτουργία για το αυτοκίνητο 
      για i in range (επαναλήψεις): # επαναλήψεις, απλές ή πολλαπλές 
          για port_num στην κατεύθυνση: # και την κατεύθυνση 
              GPIO.output (port_num, 1) # διακόπτη σε μια led 
              ύπνου (0,11) # αναμονή για ~ 0,11 δευτερόλεπτα 
              αν δεν είναι πολλαπλά: # αν δεν «εκ νέου αφήνοντας στην
                 GPIO.output (port_num, 0) # το απενεργοποιήσετε και πάλι

 Οδηγίες καλωδίωσης # εκτύπωσης ανάλογα με το διοικητικό συμβούλιο
 αν board_type == "m":
     εκτύπωση "Αυτές είναι οι συνδέσεις για τη δοκιμή Multiface LEDs:"                
     εκτύπωση "BUFFER ΡΥΘΜΙΣΕΙΣ ΚΑΤΕΥΘΥΝΣΗ, άλτες σε όλες τις θέσεις (1-12)"
     print "GPIO 25 --- BUFFERS 1 \ nGPIO 24 --- BUFFERS 2"
     print "GPIO 23 --- BUFFERS 3 \ nGPIO 22 --- BUFFERS 4"
     print "GPIO 21 --- BUFFERS 5 \ nGPIO 18 --- BUFFERS 6"
     print "GPIO 17 --- BUFFERS 7 \ nGPIO 11 --- BUFFERS 8"
     print "GPIO 10 --- Ρυθμιστικά διαλύματα 9 \ nGPIO 9 --- BUFFERS 10"
     print "GPIO 8 --- BUFFERS 11 \ nGPIO 7 --- BUFFERS 12"

 αλλού:
     εκτύπωση "Αυτές είναι οι συνδέσεις για τη δοκιμή Gertboard LEDs:"                
     εκτύπωσης "άλτες σε κάθε τοποθεσία έξω (U3-out-B1, U3-out-B2, κλπ)"
     εκτύπωση "GP25 στο J2 --- B1 σε J3 \ nGP24 στο J2 --- B2 σε J3"
     εκτύπωση "GP23 στο J2 --- Β3 J3 \ nGP22 στο J2 --- B4 σε J3"
     εκτύπωση "gp21 στην J2 --- B5 σε J3 \ nGP18 στο J2 --- Β6 J3"
     εκτύπωση "ΓΔ17 στο J2 --- B7 στο J3 \ nGP11 στο J2 --- Β8 στον J3"
     εκτύπωση "GP10 στο J2 --- B9 στην J3 \ nGP9 στο J2 --- Β10 σε J3"
     εκτύπωση "GP8 στο J2 --- Β11 J3 \ nGP7 στο J2 --- Β12 σε J3"
     εκτύπωση "(Αν δεν έχετε αρκετά ιμάντες και σακάκια μπορείτε να εγκαταστήσετε"
     εκτύπωση "μόνο μερικά από αυτά, στη συνέχεια, εκτελέστε ξανά αργότερα με την επόμενη παρτίδα.)"

 raw_input ("Όταν είστε έτοιμοι πατήστε enter. \ n")

 δοκιμάστε: # Καλέστε τη λειτουργία οδήγησης υπό την ηγεσία
     led_drive (3, 0, λιμάνια) # για κάθε απαιτούμενο πρότυπο
     led_drive (1, 0, ports_rev)
         # Τρέχουν αυτή τη φορά, η απενεργοποίηση οδήγησε πριν από την επόμενη έρχεται επάνω, προς τα εμπρός
     led_drive (1, 0, λιμάνια)                  
         # Τρέξει μια φορά, διακόπτης οδήγησε μακριά πριν από την επόμενη μία, αντίστροφη κατεύθυνση
     led_drive (1, 0, ports_rev)
         # (1, 1, λιμάνια) = τρέξει μια φορά, αφήνοντας κάθε οδήγησε σε, κατεύθυνση προς τα εμπρός
     led_drive (1, 1, λιμάνια)
     led_drive (1, 0, λιμάνια)        
     led_drive (1, 1, λιμάνια)
     led_drive (1, 0, λιμάνια)
 εκτός KeyboardInterrupt: # παγίδα CTRL + C πληκτρολόγιο διακοπής
     GPIO.cleanup () # καθαρίσει GPIO θύρες CTRL + C
 GPIO.cleanup () # καθαρίσει GPIO λιμάνια για την κανονική έξοδο

Όπως μπορείτε να δείτε ότι είναι αρκετά ευθεία προς τα εμπρός και σχολίασε να βοηθήσουν να καταλάβουν τι συμβαίνει χωρίς άλλη περιγραφή. Ο κώδικας που ακολουθεί είναι από τη δοκιμή κουμπί, αυτό θα επιτρέψει τη χρήση για να κατανοήσουμε τον τρόπο που διαβάζουμε πίσω επάνω οθόνη την κατάσταση των πλήκτρων (πλήκτρα-rg.py)?

Collapse | Copy Code
  #! / Usr / bin / env python2. 7
 # Python 2. 7 έκδοση από τον Alex Eames του http:// RasPi.TV  
  # Λειτουργικά ισοδύναμο με το τεστ Gertboard κουμπιά από 
 # Gert Jan van Loo & Myra VanInwegen
 # Χρησιμοποιήστε με δική σας ευθύνη - Είμαι αρκετά βέβαιος ότι ο κώδικας είναι ακίνδυνο,  
  # Αλλά τον ελέγξετε οι ίδιοι. 

  εισαγωγή RPi.GPIO ως GPIO 
  συστήματα εισαγωγής 
  board_type = sys.argv [-1] 

  GPIO.setmode (GPIO.BCM) # εκκίνηση RPi.GPIO 
  για i in range (23,26): # συσταθεί θύρες 23-25  
      GPIO.setup (i, GPIO.IN, pull_up_down = GPIO.PUD_UP) # ως εισροές pull-ups υψηλή       

  # Εκτύπωση οδηγίες κατάλληλες για την επιλεγμένη συμβούλιο 
  αν board_type == "m": 
      εκτύπωση "Αυτές είναι οι συνδέσεις για τη δοκιμή Multiface κουμπιά:"  
      print "GPIO 25 --- 1 σε BUFFERS" 
      print "GPIO 24 --- 2 σε BUFFERS" 
      print "GPIO 23 --- 3 σε BUFFERS" 
      εκτύπωση "Προαιρετικά, αν θέλετε τα LEDs για να απεικονίσει την κατάσταση κουμπιού, κάντε τα εξής:" 
      εκτύπωση "jumper στις ΡΥΘΜΙΣΕΙΣ BUFFER ΚΑΤΕΥΘΥΝΣΗ, OUT 1" 
      εκτύπωση "jumper στις ΡΥΘΜΙΣΕΙΣ BUFFER ΚΑΤΕΥΘΥΝΣΗ, OUT 2" 
      εκτύπωση "jumper στις ΡΥΘΜΙΣΕΙΣ BUFFER ΚΑΤΕΥΘΥΝΣΗ, OUT 3" 

  αλλού: 
      εκτύπωση "Αυτές είναι οι συνδέσεις για τη δοκιμή Gertboard κουμπιά:" 
      εκτύπωση "GP25 στο J2 --- B1 σε J3" 
      εκτύπωση "GP24 στο J2 --- B2 σε J3" 
      εκτύπωση "GP23 στο J2 --- Β3 J3" 
      εκτύπωση "Προαιρετικά, αν θέλετε τα LEDs για να απεικονίσει την κατάσταση κουμπιού, κάντε τα εξής:" 
      εκτύπωση "jumper για U3-out-B1" 
      εκτύπωση "jumper για U3-out-B2" 
      εκτύπωση "jumper για U3-out-B3" 

  raw_input ("Όταν είστε έτοιμοι πατήστε enter. \ n") 

  button_press = 0 # που intial τιμές για τις μεταβλητές 
  PREVIOUS_STATUS = '» 

  δοκιμάστε: 
      ενώ button_press <20: # διαβάσετε εισόδους μέχρι να γίνουν 19 αλλαγές 
          status_list = [GPIO.input (25), GPIO.input (24), GPIO.input (23)] 
          για i in range (0,3): 
              αν status_list [i]: 
                  status_list [i] = "1" 
              αλλού: 
                  status_list [i] = "0" 
          # Χωματερή τρέχουσες τιμές της κατάστασης σε μια μεταβλητή 
          CURRENT_STATUS = ''. join ((status_list [0], status_list [1], status_list [2])) 
          # Εάν αυτή η μεταβλητή δεν είναι ίδια όπως την τελευταία φορά  
          αν CURRENT_STATUS = PREVIOUS_STATUS!: 
              CURRENT_STATUS εκτύπωσης # εκτυπώσετε τα αποτελέσματα  
              Μεταβλητή κατάσταση # ενημέρωση για την επόμενη σύγκριση 
              PREVIOUS_STATUS = CURRENT_STATUS 
              button_press + = 1 # αύξηση μετρητή button_press 

  εκτός KeyboardInterrupt: # παγίδα CTRL + C πληκτρολόγιο διακοπής 
      GPIO.cleanup () # επαναφέρει όλες τις θύρες GPIO που χρησιμοποιούνται από το πρόγραμμα 
  GPIO.cleanup () # για έξοδο, επαναφέρετε όλες τις θύρες GPIO

Δοκιμή θερμοκρασίας DS18B20 με 1-Wire αισθητήρα θερμοκρασίας

Έχω ένα σχέδιο στο μυαλό κατά την οποία θέλω να παρακολουθούν το σπίτι μου, κεντρική θέρμανση, ζεστό νερό, ηλιακή θερμική ενέργεια και τα ηλιακά φωτοβολταϊκά συστήματα. Να μου επιτρέψετε να παρακολουθεί τη θερμοκρασία Αγόρασα μια δέσμη των αισθητήρων θερμοκρασίας ‘One Wire ». Αυτά ήταν προ-καλωδιωμένα σε μια αδιάβροχη καθετήρα και σε έναν ακροδέκτη 1 μέτρο. Αυτά αισθητήρας είναι Ντάλας Semiconductos DS18B20 και κάθε αισθητήρες έχει ένα μοναδικό αναγνωριστικό που τους επιτρέπει να το λεωφορείο ενσύρματων και δημοσκόπηση.

Η παρακάτω εικόνα είναι setup δοκιμή μου, από αριστερά προς τα δεξιά, RasPi, Gertboard, breadboard, Arduino (ακριβώς συμβαίνει να επισυνάπτεται στο breadboard, αλλά δεν χρησιμοποιείται σε αυτό το άρθρο). Μπορείτε να δείτε το άκρο του αισθητήρα στο μεσαίο κάτω μέρος της εικόνας.

Αντί να εφεύρουμε εκ νέου τον τροχό για τη δοκιμή, μια γρήγορη αναζήτηση στο Google τράβηξε μέχρι αυτό το εξαιρετικό σεμινάριο πάνω στο Adafruit: Raspberry Pi Μάθημα Adafruit 11. DS18B20 αίσθησης της θερμοκρασίας .

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

Στην έξοδο Python παραπάνω, μπορείτε να δείτε τη θερμοκρασία σε «C και« F π.χ. (33.5, 92.3)

Θερμοκρασία δοκιμής Κωδικός

Η ελαφρώς τροποποιημένη εκδοχή του παραδείγματος κώδικα από το φροντιστήριο φαίνεται παρακάτω?

Collapse | Copy Code
  εισαγωγή OS
 glob εισαγωγής
 χρόνο εισαγωγής
 υποεπεξεργασία εισαγωγής

 os.system («modprobe w1-GPIO»)
 os.system («modprobe w1-όρου«)

 base_dir = 'sys/bus/w1/devices /'
 device_folder = glob.glob (base_dir + »* 28 ') [0]
 device_file = device_folder + '/ w1_slave »

 print "Folder Device:" + device_folder
 Αρχείο εκτύπωσης "Device: + device_file 

  def read_temp_raw (): 
      catdata = subprocess.Popen ([«γάτα», device_file], stdout = subprocess.PIPE, stderr = subprocess.PIPE) 
      έξω, σφάλουν = catdata.communicate () 
      out_decode = out.decode ('utf-8') 
      γραμμές = out_decode.split ('\ n') 
      γραμμές επιστροφής 

  def read_temp (): 
      εκτύπωση "Raw δεδομένων της συσκευής:" 
      γραμμές = read_temp_raw () 
      γραμμές εκτύπωσης [0] 
      γραμμές εκτύπωσης [1] 
      γραμμές εκτύπωσης [2] 

      ενώ (. γραμμές [0] βρείτε («ΝΑΙ»)> 0): 
          γραμμές = read_temp_raw () 
          equal_pos = γραμμές [1]. βρείτε ('t =') 
          αν equal_pos = -1!: 
              temp_string = γραμμές [1] [equal_pos +2:] 
              temp_c = float (temp_string) / 1000.0 
              temp_f = temp_c * 9,0 / 5,0 + 32,0 
              temp_c επιστροφής, temp_f 

  ενώ True: 
      εκτύπωση "Θερμοκρασία (« C », F):" 
      print (read_remp ()) 
      εκτύπωση "" 
      εκτύπωση "Sleeping ..... (1 δευτερόλεπτο)." 
      time.sleep (1)

Όπως μπορείτε να δείτε στο παραπάνω κώδικα, αυτό ουσιαστικά είναι parsing χορδές για να εξαγάγετε τη θερμοκρασία από τη γραμμή ‘t = ». Αυτό κλιμακώνεται έτσι πρέπει να χωρίζεται από το 1000 για να πάρει την ανάγνωση Κελσίου. Ο κώδικας θα λειτουργήσει μόνο τη στιγμή για μια ενιαία Bussed αισθητήρα, θα πρέπει να τροποποιηθεί για να διαβάσει πολλαπλούς αισθητήρες.

Τι το επόμενο βήμα;

Λοιπόν, είμαι ικανοποιημένος με ό, τι έχει έρθει μαζί μέχρι στιγμής.

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

Απαίτηση για το πώς όλα αυτά που πηγαίνει, θα μπορούσε να κάνει το αντικείμενο ενός μελλοντικού άρθρου.

Ευχαριστώ για να πάρει αυτό το μέτρο …… θα δούμε στο επόμενο επεισόδιο ίσως.

Links αναφοράς

Ιστορία

5 Δεκ 2013 – άρθρο δημοσιεύτηκε για πρώτη φορά.

Άδεια

Το άρθρο αυτό, μαζί με κάθε σχετικό πηγαίο κώδικα και τα αρχεία, έχει αδειοδοτηθεί από την Άδεια Κωδικός Έργου Open (cpol)