Ροή δεδομένων αισθητήρων μέσω WiFi με το Raspberry Pi Pico W

Raspberry Pi Pico W συνδεδεμένο με ένα ADXL343

Μια από τις καλύτερες χρήσεις του Raspberry Pi Pico W περιλαμβάνει την ικανότητά του να εξυπηρετεί μια ιστοσελίδα.

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

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

Βίντεο

Απαιτούμενα ανταλλακτικά

  • Breadboard
  • Καλώδια βραχυκυκλώματος

Τι είναι το ADXL343;

Το ADXL343 της Analog Devices αποτελεί συνέχεια του προκατόχου του, του ADXL345.

Ο αισθητήρας μπορεί να μετρήσει τρεις άξονες μέτρησης και διαθέτει τέσσερις ρυθμίσεις ευαισθησίας, +-2g, +-4g, +-8g ή +-16g. Το χαμηλότερο εύρος δίνει μεγαλύτερη ανάλυση για αργές κινήσεις, ενώ το υψηλότερο εύρος είναι καλό για παρακολούθηση υψηλής ταχύτητας.

Το ADXL343 διαθέτει επίσης μια βιβλιοθήκη CircuitPython που μπορούμε να χρησιμοποιήσουμε στο MicroPython, καθιστώντας πολύ πιο εύκολο το ξεκίνημα.

Θα χρειαστεί να έχετε κολλήσει τις ακροδέκτες στο ADXL343 καθώς και στο Pico W για να κάνετε αυτό το έργο.

Σύνδεση του ADXL343 στο Pico W

Υπάρχουν τέσσερις ακίδες που πρέπει να συνδέσετε στο Raspberry Pi.

Συνδέστε το VIN καρφίτσα σε ένα Έξοδος 3.3V στο Raspberry Pi Pico W,

Συνδέστε το GND σε έναν ακροδέκτη γείωσης στο Pico W,

Συνδέστε το SDA καρφίτσα σε GPIO0;

Συνδέστε το SCL καρφίτσα σε GPIO1.

Αναβοσβήσιμο firmware MicroPython για το Raspberry Pi Pico W

Πρώτα, θα πρέπει να κάνετε flash το firmware MicroPython στο Pico W, αν δεν το έχετε κάνει ήδη.

Μπορείτε να το κατεβάσετε εδώ.

Στη συνέχεια, πατήστε παρατεταμένα το κουμπί BOOTSEL και συνδέστε το Pico στον υπολογιστή σας. Θα πρέπει να δείτε μια νέα μονάδα δίσκου. Αντιγράψτε το αρχείο .UF2 που κατεβάσατε σε αυτόν τον δίσκο.

Ρύθμιση του Thonny για το Raspberry Pi Pico W

Ανοίξτε το Thonny. Αν δεν το έχετε κατεβάσει, πάρτε το εδώ.

Ορίστε τον διερμηνέα σε MicroPython (Raspberry Pi Pico) στο κάτω αριστερό μέρος του παραθύρου του Thonny IDE.

Αντιγραφή βιβλιοθηκών στο Pico W

Κατεβάστε τις βιβλιοθήκες και τα αρχεία εδώ από το Github repo μας.

Μπορείτε να κατεβάσετε ένα αρχείο ZIP πηγαίνοντας σε αυτόν τον σύνδεσμο και κάνοντας κλικ στο πράσινο "Κωδικός" και κάνοντας κλικ στο κουμπί Λήψη ZIP.

Μόλις το κατεβάσετε, αποσυμπιέστε το κάπου που θα θυμάστε.

Στη συνέχεια, στο Thonny IDE σας, κάντε κλικ στο Προβολή > Αρχεία για να δείτε το δικό σας σύστημα αρχείων και το σύστημα αρχείων του Pico W.

Πλοηγηθείτε στα αποσυμπιεσμένα αρχεία και μεταβείτε στο φάκελο MicroPython > II Διακομιστής αισθητήρων Pico W. Αντιγράψτε τα πάντα στο Pico W κάνοντας δεξί κλικ σε κάθε στοιχείο και κάνοντας κλικ στο "Upload to /".

Τροποποίηση του κώδικα

Για να μπορέσει το Raspberry Pi Pico να συνδεθεί στο δίκτυο WiFi, θα πρέπει να ανοίξετε το secrets.py και να τροποποιήσετε το ssid και pw's value. Εισάγετε το SSID (όνομα) του δικτύου σας στο πρώτο και τον κωδικό πρόσβασης στο δεύτερο. Αποθηκεύστε το αρχείο.

Το index.html είναι η ιστοσελίδα που θα σερβιριστεί. Η γραμμή "<p>X AccX | Y AccY | Z AccZ</p>" και <p>Αποτέλεσμα DiceVal</p> θα αντικατασταθεί με δεδομένα αισθητήρων όταν εκτελεστεί το έργο.

Συνδέστε το Raspberry Pi Pico στο WiFi

Το main.py είναι το σημείο όπου λαμβάνει χώρα η δράση.

Αυτές οι γραμμές το συνδέουν με το WiFi σας. Μην ξεχάσετε να αλλάξετε τη συμβολοσειρά στο rp2.country εάν η χώρα σας δεν είναι η Γερμανία (DE).


# Ορίστε τη χώρα για να αποφύγετε πιθανά σφάλματα
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Εάν πρέπει να απενεργοποιήσετε τη λειτουργία εξοικονόμησης ενέργειας
# wlan.config(pm = 0xa11140)

# Δείτε τη διεύθυνση MAC στο ασύρματο τσιπ OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Άλλα πράγματα προς αναζήτηση
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Φόρτωση δεδομένων σύνδεσης από διαφορετικό αρχείο για λόγους ασφαλείας
ssid = secrets['ssid']
pw = secrets['pw']

wlan.connect(ssid, pw)

Η ενσωματωμένη λυχνία LED θα αναβοσβήνει τρεις φορές εάν η σύνδεση WiFi ήταν επιτυχής, χάρη σε αυτές τις γραμμές κώδικα. Θα εκτυπώσει επίσης ένα μήνυμα και τη διεύθυνση IP σας, την οποία μπορείτε να δείτε στο Thonny. Αυτή η διεύθυνση IP είναι χρήσιμη για την πρόσβαση στον διακομιστή αργότερα.

   led = machine.Pin('LED', machine.Pin.OUT)
    for i in range(wlan.status()):
        led.on()
        time.sleep(0.2)
        led.off()
        time.sleep(0.2)
    print('Connected')
    status = wlan.ifconfig()
    print('ip = ' + status[0])

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

Σημασίες σφαλμάτων

  • 0 = Link Down
  • 1 = Σύνδεση συνδέσμου
  • 2 = Σύνδεσμος NoIp
  • 3 = Σύνδεση
  • -1 = Αποτυχία σύνδεσης
  • -2 = Σύνδεσμος NoNet
  • -3 = Σύνδεσμος BadAuth

Συνδέστε το Pico W στο ADXL343

Αυτή η γραμμή αρχικοποιεί ένα αντικείμενο I2C:

# Αρχικοποίηση I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)

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

# Δημιουργία αντικειμένου επιταχυνσιόμετρου
επιταχυνσιόμετρο = adafruit_adxl34x.ADXL343(i2c)

accelerometer.enable_tap_detection()

Ώρα να εκτελέσετε τον κώδικα

Για να εκτελέσετε τον κώδικα, πατήστε το κουμπί Εκτέλεση στο Thonny, το οποίο είναι το κουμπί με το εικονίδιο αναπαραγωγής σε ένα πράσινο κουμπί στην επάνω γραμμή εργαλείων.

Στη συνέχεια, συνδεθείτε στη διεύθυνση IP του Raspberry Pi Pico W. Αν έχετε ανοιχτό το κέλυφος του Thonny, μπορείτε να το δείτε εκεί. Αλλιώς, μπορείτε να συνδεθείτε στο δρομολογητή σας και να μάθετε ποια είναι η διεύθυνση IP του Pico W.

Το Pico W εκτελεί έναν διακομιστή HTTP με σύνδεση υποδοχής και ακούει για συνδέσεις, οι οποίες ορίζονται εδώ:

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()
s.bind(addr)
s.listen(1)

Όταν συνδεθείτε στη διεύθυνση IP του Pico W, θα ενεργοποιηθεί αυτός ο κώδικας που θα ανανεώνει το index.html με τα τελευταία δεδομένα κάθε δευτερόλεπτο.

   cl, addr = s.accept()
        print('Client connected from', addr)
        cl_file = cl.makefile('rwb', 0)
        while True:
            line = cl_file.readline()
            if not line or line == b'\r\n':
                break
            
        response = get_html('index.html')
        data = accelerometer.acceleration
        tapped = accelerometer.events['tap']
        response = response.replace('AccX', str(data[0]))
        response = response.replace('AccY', str(data[1]))
        response = response.replace('AccZ', str(data[2]))
        if tapped:
            dice_val = str(random.randint(1,6))
        response = response.replace('DiceVal', dice_val)
        
        cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\r\n\r\r\n')
        cl.send(response)
        cl.close()
Το main.py αντικαθιστά τις τιμές με την τρέχουσα ένδειξη όταν συνδέεστε στον διακομιστή του Pico W.

Όπως μπορείτε να δείτε, αντικαθιστά τα AccX, AccY και AccZ με τα δεδομένα από τον αισθητήρα σας.

Εάν ο αισθητήρας πατηθεί, τότε θα εκτυπώσει έναν τυχαίο ακέραιο αριθμό από το 1 έως το 6 στη συμβολοσειρά "DiceVal" στη σελίδα HTML.

Τι ακολουθεί;

Αυτό το σεμινάριο αντιπροσωπεύει έναν απλό τρόπο ροής δεδομένων αισθητήρων σε μια ιστοσελίδα.

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

Η μεθοδολογία παραμένει η ίδια. Πρέπει να βρείτε τις σωστές βιβλιοθήκες για τους αισθητήρες σας και στη συνέχεια να τροποποιήσετε τα main.py και index.html ώστε να μπορούν να λαμβάνουν τα δεδομένα των αισθητήρων και να μεταφέρουν τις σωστές τιμές στην ιστοσελίδα.

Υπάρχουν πολλά άλλα έργα που μπορείτε να ξεκινήσετε, όπως ένα έργο αισθητήρα θερμοκρασίας και υγρασίας με ένα DHT22 ή BME688, ή έναν αισθητήρα φωτεινότητας με μια αντίσταση φωτός.

1 Σχόλιο

  1. Ken Anderson στις Ιούλιος 15, 2022 στις 7:24 πμ

    Σίγουρα θα ήταν ωραίο να χρησιμοποιήσετε τα χαρακτηριστικά της HTML5 ώστε να δούμε πώς γίνεται η HTML5

Αφήστε ένα σχόλιο