Ξεκινήστε με το I2C στο BeagleBone Green Wireless - 💡 Fix My Ideas

Ξεκινήστε με το I2C στο BeagleBone Green Wireless

Ξεκινήστε με το I2C στο BeagleBone Green Wireless


Συγγραφέας: Ethan Holmes, 2019

Αυτό το mini-tutorial αφορά τη χρήση I2C (Inter-Integrated Circuit) στο BeagleBone Green Wireless Board. Η τρέχουσα βιβλιοθήκη BeagleBone Black Adafruit I2C έχει μερικά θέματα συμβατότητας με το BeagleBone Green Wireless (BBGW). Υπάρχουν πολύ λίγα έγγραφα σχετικά με τη χρήση της βιβλιοθήκης I2C του BBGW, της βιβλιοθήκης mraa, και ένιωθα ότι χρειάζεται μια θέση.

Ρύθμιση

Όταν χρησιμοποιείτε μια βιβλιοθήκη I2C στο BeagleBone ή το Raspberry Pi υπάρχουν δύο βιβλιοθήκες για να διαλέξετε. Μπορείτε να χρησιμοποιήσετε τη δημοφιλή βιβλιοθήκη Adafruit ή την ενσωματωμένη βιβλιοθήκη mraa. Με το τερματικό BeagleBone ή Raspberry Pi (τερματικό linux) μπορείτε να διαβάσετε το δίαυλο I2C χωρίς να χρειάζεται να γνωρίζετε τη διεύθυνση slave της συσκευής. Για να το κάνετε αυτό, χρησιμοποιείτε την εντολή "i2cdetect -y -r 0", όπου ο αριθμός είναι η συσκευή που αριθμείται στον δίαυλο I2C. Για να βρείτε τη συσκευή σας να στείλει ξανά την εντολή στο τερματικό με τον αριθμό που αυξήθηκε, μέχρι να βρείτε την ένδειξη στο τερματικό με το αναγνωριστικό μητρώου της συσκευής που εμφανίζεται σε hex.

Για παράδειγμα, το επιταχυνσιόμετρο με αναγνωριστικό 42, το οποίο ψάχνω, είναι το λεωφορείο αριθμημένο ως "1" στο "i2cdetect -y -r 1" ανάγνωσμα στο τερματικό.

Όπως μπορείτε να δείτε το μητρώο 0x0d είναι ο καταχωρητής του αριθμού αναγνώρισης συσκευής. Μπορούμε να δούμε ένα hex 0x2a το οποίο μεταφράζεται στο δεκαδικό 42. Γνωρίζω λοιπόν ότι το BeagleBone ή το Raspberry Pi ερμηνεύουν αυτή τη συσκευή ως δίαυλο "1" στις εντολές i2cdetect ή i2cdump. Αυτό γίνεται σημαντικό στη βιβλιοθήκη mraa που χρησιμοποιεί αυτόν τον αριθμό για την αντιμετώπιση της υποτελούς συσκευής. Η βιβλιοθήκη adafruit δεν χρειάζεται αυτόν τον αριθμό.

Χρησιμοποιώντας τις βιβλιοθήκες

Όταν γράφετε ένα πρόγραμμα Python είτε στο BeagleBone είτε στο Raspberry Pi, πρέπει να επιλέξουμε μια βιβλιοθήκη και να την εισαγάγουμε μόλις εγκατασταθεί. Το BeagleBone Green Wireless έχει ήδη ενσωματωμένη τη βιβλιοθήκη mraa, ώστε να μην χρειάζεται να το εγκαταστήσετε σαν τη βιβλιοθήκη adafruit. Όταν χρησιμοποιείτε αυτές τις βιβλιοθήκες για επικοινωνία i2c, πρέπει να ρυθμίσετε τη διεύθυνση και στη συνέχεια να χρησιμοποιήσετε εντολές ανάγνωσης και εγγραφής. Για τη βιβλιοθήκη mraa i2c χρησιμοποιούμε την πρώτη κλήση, η οποία είναι i2c = mraa.I2c (2, True).

Αυτό σημαίνει ότι εκχωρούμε τη μεταβλητή i2c στη συσκευή στον δίαυλο. Ο αριθμός 2 προέρχεται από την προαναφερθείσα εντολή i2cdetect. Μόλις αναθέσουμε τη μεταβλητή "i2c" μπορούμε να την απευθύνουμε απευθείας χρησιμοποιώντας τη διεύθυνση (I2c εαυτό, uint8_t διεύθυνση) εντολή. Για παράδειγμα, αν η διεύθυνση της συσκευής στο φύλλο δεδομένων είναι 0x1D γράφουμε τη γραμμή i2c.address (0x1D) για να την αρχικοποιήσουμε. Στη συνέχεια, γράφουμε το δείκτη (0x01) για την προετοιμασία του δείκτη στη συσκευή.

Για να διαμορφώσετε τη συσκευή, πρέπει να γράψουμε δεδομένα σε καταχωρητές στη συσκευή για να ρυθμίσουμε τη συσκευή i2c. Σας γράφουμε σε ένα μητρώο χρησιμοποιώντας τη συνάρτηση writeReg (). Όπου οι 2 παράμετροι στην παρένθεση είναι, writeReg (Εγγραφή Διεύθυνση, Δεδομένα) σε μορφή uint_8. Κατά την ανάγνωση από τη συσκευή χρησιμοποιούμε readReg (), όπου η παράμετρος 1 στην παρένθεση readReg (Εγγραφή Διεύθυνση) σε μορφή unit_8. Ένα παράδειγμα παρέχεται παρακάτω:

Εισαγωγή mraa

i2c = mraa.I2c (2, True)

i2c.address (0x1D)

i2c.writeReg (0x01, 0)

i2c.writeReg (0x17,0x08)

deviceID = i2c.readReg (0x0d)

Adafruit

Η βιβλιοθήκη Adafruit απαιτεί το πακέτο 'python-smbus' που είναι εγκατεστημένο στη συσκευή σας για χρήση. Η πρώτη κλήση για τη ρύθμιση της διεύθυνσης της συσκευής που αναφέρεται στο φύλλο δεδομένων είναι i2c = Adafruit_I2C (device_address) όπου 'device_address' είναι η hex τιμή της διεύθυνσης της συσκευής. Στη συνέχεια, προετοιμάζουμε το δείκτη στη συσκευή ρυθμίζοντας τον καταχωρητή 0x01 σε 0x00 χρησιμοποιώντας την εντολή i2c.write8 (εγγραφή, δεδομένα). Αυτό σημαίνει ότι θέλουμε να γράψουμε 8 bits σε ένα μητρώο. Στη συνέχεια, μπορούμε να ρυθμίσουμε τους καταχωρητές διαμόρφωσης της συσκευής χρησιμοποιώντας την εντολή i2c.write8 () ξανά με τον καταχωρητή και τα δεδομένα που συμπληρώνονται. Ο τρόπος που διαβάζουμε από τις περισσότερες συσκευές διαβάζει 8 bits κάθε φορά από ένα μητρώο. Ορίσαμε μια μεταβλητή στην οποία θέλουμε να εκχωρήσουμε τα δεδομένα. Στην περίπτωση αυτή είναι "deviceID". Χρησιμοποιούμε την εντολή i2c.readU8 (μητρώο) για να διαβάσουμε τα μη υπογεγραμμένα 8 bits από τον καταχωρητή 0x0d, ο οποίος είναι ο καταχωρητής αναγνώρισης συσκευής. Ένα παράδειγμα παρέχεται παρακάτω:

από την Adafruit_I2C εισαγωγής Adafruit_I2C

i2c = Adafruit_I2C (0x1D)

i2c.write8 (0x01,0x00)

i2c.write8 (0x17,0x08)

deviceID = i2c.readU8 (0x0d)

Διαφορές στις Βιβλιοθήκες

Η βιβλιοθήκη Adafruit απαιτεί το πακέτο python-smbus να εγκατασταθεί ενώ η βιβλιοθήκη mraa δεν το έχει. Η βιβλιοθήκη mraa απαιτεί να βρείτε τον αριθμό της συσκευής στο δίαυλο χρησιμοποιώντας το 'i2cdetect' για να ρυθμίσετε τη διεύθυνση πριν ξεκινήσετε την εγγραφή και την ανάγνωση μητρώων. Οι βιβλιοθήκες είναι παρόμοιες στη σύνταξη τους, αλλά είναι διαφορετικές στη ρύθμιση. Η βιβλιοθήκη Adafruit πρέπει επίσης να εγκατασταθεί από μια πηγή τρίτου μέρους και δεν είναι τυποποιημένη στο Beaglebone Green Wireless όπως το mraa είναι. Έτσι, μπορείτε να ξεκινήσετε να γράφετε τον κώδικα κατά την πρώτη εκκίνηση.

Αναφορά Βιβλιοθήκης

mraa:

mraa.I2c (mraa :: I2c αυτο, int bus, bool raw = Λάθος)

διεύθυνση(I2c εαυτό, uint8_t διεύθυνση) → mraa :: Αποτέλεσμα

ανάγνωση(I2c εαυτό, uint8_t * δεδομένα) → int

readByte (I2c εαυτό) → uint8_t

readBytesReg (I2c εαυτό, uint8_t reg, uint8_t * δεδομένα)

readReg (I2c εαυτό, uint8_t reg) → uint8_t

readWordReg (I2c εαυτό, uint8_t reg) → uint16_t

γράφω(I2c εαυτό, uint8_t const * δεδομένα) → mraa :: Αποτέλεσμα

writeByte (I2c εαυτό, uint8_t δεδομένα) → mraa :: Αποτέλεσμα

writeReg (I2c εαυτό, uint8_t reg, uint8_t δεδομένα) → mraa :: Αποτέλεσμα

writeWordReg (I2c εαυτό, uint8_t reg, uint16_t δεδομένα) → mraa :: Αποτέλεσμα

(Πηγή)

Adafruit:

class Adafruit_I2C

Μέθοδοι που ορίζονται εδώ:

__init __ (αυτο, διεύθυνση, busnum = -1, εντοπισμός σφαλμάτων = ψευδές)

errMsg (αυτο)

readList (αυτο, reg, μήκος)

Διαβάστε μια λίστα με bytes από τη συσκευή I2C

readS16 (αυτο, reg)

Διαβάζει μια υπογεγραμμένη τιμή 16 bit από τη συσκευή I2C

readS16Rev (αυτο, reg)

Αναγιγνώσκει μια υπογεγραμμένη τιμή 16-bit από τη συσκευή I2C με ανατροφοδότηση ανά δευτερόλεπτο

readS8 (αυτο, reg)

Διαβάζει ένα υπογεγραμμένο byte από τη συσκευή I2C

readU16 (αυτο, reg)

Διαβάζει μια τιμή 16-bit που δεν έχει υπογραφεί από τη συσκευή I2C

readU16Rev (αυτο, reg)

Αναγιγνώσκει μια τιμή 16-bit που δεν έχει υπογραφεί από τη συσκευή I2C με εντολή rev byte

readU8 (αυτο, reg)

Διαβάστε ένα μη υπογεγραμμένο byte από τη συσκευή I2C

reverseByteOrder (αυτο, δεδομένα)

Αντιστρέφει τη σειρά byte μιας τιμής int (16-bit) ή μακράς (32-bit)

write16 (αυτο, reg, τιμή)

Γράφει μια τιμή 16-bit στο καθορισμένο ζεύγος καταχωρητών / διευθύνσεων

write8 (αυτο, reg, τιμή)

Γράφει μια τιμή 8-bit στον καθορισμένο καταχωρητή / διεύθυνση

writeList (αυτο, reg, λίστα)

Γράφει μια σειρά από bytes χρησιμοποιώντας τη μορφή I2C

(Πηγή)

Αυτό είναι ... καλή τύχη!



Μπορεί Να Σας Ενδιαφέρει

Το $ 12 Κινητό τηλέφωνο

Το $ 12 Κινητό τηλέφωνο


Φωτιστικά E-κλωστοϋφαντουργικά κιτ και πολλά άλλα από το Fay Shaw

Φωτιστικά E-κλωστοϋφαντουργικά κιτ και πολλά άλλα από το Fay Shaw


Το πρώτο Διεθνές Ρομπότ του MAKE είναι το Meetup για την Πέμπτη

Το πρώτο Διεθνές Ρομπότ του MAKE είναι το Meetup για την Πέμπτη


Αναδρομή: Ζώνη ζωντανών φυτών αέρα

Αναδρομή: Ζώνη ζωντανών φυτών αέρα