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

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

Θέλατε ποτέ να μεταδώσετε δεδομένα αισθητήρων με το Raspberry Pi Pico W;

Μια από τις καλύτερες χρήσεις του Raspberry Pi Pico W περιλαμβάνει την ικανότητά του να εξυπηρετεί μια ιστοσελίδα. Αυτό σημαίνει ότι μπορείτε να το χρησιμοποιήσετε για να παρακολουθείτε δεδομένα αισθητήρων από το τηλέφωνό σας, εφόσον βρίσκεστε σε εμβέλεια WiFi. Αυτό το έργο θα παρέχει μια απλή βάση για το πώς μπορείτε να παρακολουθείτε δεδομένα επιτάχυνσης και επίσης να δημιουργήσετε ένα ψηφιακό ζάρι, το οποίο ενεργοποιείται όταν πατάτε τον αισθητήρα ADXL343.

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

Βίντεο

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

Τι είναι το ADXL343;

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

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

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

Θα χρειαστεί να έχετε τις κεφαλίδες κολλημένες στο ADXL343 καθώς και στο Pico W, προκειμένου να κάνετε ροή δεδομένων αισθητήρα με το 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).


# Set country to avoid possible errors
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# If you need to disable powersaving mode
# wlan.config(pm = 0xa11140)

# See the MAC address in the wireless chip OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Other things to query
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Load login data from different file for safety reasons
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:

# Initialize I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)

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

# Create Accelerometer object
accelerometer = 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\n\r\n')
        cl.send(response)
        cl.close()

Το main.py αντικαθιστά τις τιμές με την τρέχουσα ένδειξη όταν συνδέεστε στον διακομιστή του Pico W.

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

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

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

Αυτό το σεμινάριο αποτελεί έναν απλό τρόπο για να μεταφέρετε δεδομένα αισθητήρων σε μια ιστοσελίδα με το Raspberry Pi Pico W.

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

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

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

7 Σχόλια

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

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

  2. Terry Young στις Σεπτέμβριος 24, 2022 στις 6:47 μμ

    Θα μπορούσαν τα δεδομένα απλά να μεταδοθούν ως συμβολοσειρά σε μια θύρα μέσω TCP/UDP αντί για μορφή ιστοσελίδας, έτσι ώστε να μπορούν να διαβαστούν από έναν άλλο υπολογιστή (για την κατασκευή μετρητών ή κάτι τέτοιο;)
    κάτι σαν
    192.168.1.24:9060
    AccX, 7.923, AccY, 1.093, AccZ, -5.452
    AccX, 6.423, AccY, 1.241, AccZ, -8.769

  3. Ingo στις Ιανουάριος 10, 2023 στις 9:11 μμ

    Mal angenommen man hätte einen Pico W, der in einer Dauerschleife läuft und Messwerte erfasst; wie können die Messwerte von einem anderen Pico W über WLAN abgefragt werden?
    In deinem Beispielcode ist es so, das der Pico W etwas macht, wenn er über HTML angesprochen wird. In meinem Fall bräuchte ich sowas wie eine
    "getvaluefromotherpico(192.178.2.44, variablename)" - sprich er soll immer in seiner Schleife laufen und die per WLAN angefragten Anfragen nebenher bedienen, z.B. per Interrupt.
    Πώς είναι αυτό δυνατόν;

    Besten Dank und Gruß
    Ingo

    • raspi berry στις Φεβρουάριος 4, 2023 στις 11:51 πμ

      Der andere Pico könnte in einer Schleife laufen, und die Werte per REST API vom ersten Pico abfragen?
      Ich verstehe die Problemstellung sonst vielleicht nicht ganz?

      Wenn es ein kommerzielles Projekt ist, können wir gern consulting-technisch aktiv werden 🙂

  4. Luis στις Ιανουάριος 11, 2023 στις 3:30 μμ

    Πώς μπορώ να αναθέσω τα δεδομένα στο thinspeak;

  5. Eddi Baars στις Μάρτιος 18, 2023 στις 1:02 μμ

    guten Tag, ich habe dasselbe Problem. Mit curl oder wget funktioniert es nicht. Ich möchte die Messwerte vom Pico auf meinem Raspi4 speichern und αργότερα grafisch darstellen und statistisch auswerten. ???

  6. andrew στις Ιούλιος 19, 2023 στις 10:31 μμ

    καμία ενότητα που ονομάζεται δίκτυο, αν προσθέσετε προσθέσετε ενότητα netwrk από thonny στη συνέχεια παραπονιέται για καμία ενότητα που ονομάζεται υποδοχή lol

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