Πηγή: Your First Steps with Raspberry Pi Pico and Visual Studio Code – DEV Community

Δημοσιεύτηκε στις17 Φεβρουαρίου 2021• Ενημερώθηκε στις26 Μαρ 2021
iot, βατόμουρο, αρχάριους, vscode
Το Ίδρυμα Raspberry Pi κυκλοφόρησε πρόσφατα την πρώτη του πλακέτα μικροελεγκτή, το Raspberry Pi Pico . Αυτή η συσκευή $4 USD (όχι τυπογραφικό λάθος!) δεν είναι μόνο μια εισόδου χαμηλού κόστους στο οικοσύστημα Raspberry Pi, είναι επίσης εκπληκτικά χρήσιμη για την ανάπτυξη ενσωματωμένου IoT.
Ενώ τα Raspberry Pis είναι πιο γνωστά ως υπολογιστές με μία πλακέτα (π.χ. μοντέλα Raspberry Pi 1/2/3/4), το Pico σχεδιάστηκε για χρήση σε μια ποικιλία λύσεων φυσικών υπολογιστών. Σκεφτείτε όσον αφορά τον έλεγχο των κινητήρων, των αισθητήρων ανάγνωσης, της συνδεσιμότητας κινητής τηλεφωνίας , ακόμη και της μηχανικής εκμάθησης . Όπως και με άλλο υλικό Raspberry Pi, είναι φιλικό προς τους προγραμματιστές και μπορεί να προγραμματιστεί με C/C++ και MicroPython (μια εφαρμογή Python για μικροελεγκτές).
Ας ρίξουμε μια ματιά στο πώς μπορούμε να μεταβούμε από την αποσυσκευασία του Pico μας σε παραγωγικούς προγραμματιστές IoT χρησιμοποιώντας μια καθιερωμένη γλώσσα (MicroPython) και ένα παγκοσμίως λατρεμένο IDE (Κώδικας Visual Studio).
Γιατί MicroPython;
Όπως μόλις αναφέρθηκε, μπορείτε να αναπτύξετε στο Pico MCU χρησιμοποιώντας είτε C/C++ είτε MicroPython. Αν και θαυμάζω πλήρως όλους εσάς τους προγραμματιστές C εκεί έξω, στρέφομαι προς γλώσσες υψηλότερου επιπέδου όπως η Python λόγω της ευκολίας χρήσης και της εμπειρίας προγραμματιστή. Τα έγγραφα MicroPython κάνουν καλή δουλειά εξηγώντας τι είναι:
Η MicroPython είναι μια λιτή και αποτελεσματική εφαρμογή της γλώσσας προγραμματισμού Python 3 που περιλαμβάνει ένα μικρό υποσύνολο της τυπικής βιβλιοθήκης Python και είναι βελτιστοποιημένη για να εκτελείται σε μικροελεγκτές και σε περιβάλλοντα περιορισμού.
Και θυμηθείτε, εργαζόμαστε σε ένα MCU $4 με ελάχιστη μνήμη (264 KB). Το MicroPython, ως μια περικομμένη εφαρμογή της Python, είναι μια σχεδόν τέλεια λύση για τον προγραμματισμό του Pico σας. Η θύρα Pico της MicroPython περιλαμβάνει επίσης πρόσθετες μονάδες για πρόσβαση σε υλικό που είναι ειδικό για το Pico.
Γιατί Visual Studio Code;
Εάν έχετε προηγούμενη εμπειρία εργασίας με Raspberry Pi και MicroPython, το προεπιλεγμένο IDE σας είναι πιθανώς ο Thonny :

O Thonny είναι ένα εξαιρετικά διασκεδαστικό μικρό περιβάλλον IDE για να δουλέψετε. Το πρόβλημα με τον Thonny είναι ότι σε πάει μόνο τόσο μακριά. Του λείπουν οι επεκτάσεις παραγωγικότητας, η αυτόματη συμπλήρωση σύνταξης, η επισήμανση σφαλμάτων και το ενσωματωμένο τερματικό που παρέχεται από το Visual Studio Code .
Είμαι μεγάλος θαυμαστής της συνάντησης προγραμματιστών όπου βρίσκονται (μέσω δημοφιλών γλωσσών ΚΑΙ εργαλείων), οπότε η αξιοποίηση του δημοφιλούς κώδικα του Visual Studio για ανάπτυξη στο Pico μου είναι το σημείο που θα ξεκινήσω.

Εκτός από τις βελτιώσεις παραγωγικότητας που λαμβάνετε από το VS Code out of the box, για ανάπτυξη ειδικά για την Python, υπάρχουν μερικές πρόσθετες επεκτάσεις που προτείνω ανεπιφύλακτα:
- MagicPython – Προηγμένη επισήμανση σύνταξης για Python 3.
- Pylance – IntelliSense σε στεροειδή για Python.
- Python – Linting, debugging, εσείς το όνομα, για Python.
Μπορείτε να λάβετε όλα αυτά (και περισσότερα) με το πακέτο επέκτασης Python .
Τέλος, θα μπορούσα να προτείνω να εγκαταστήσετε το MicroPython τοπικά για να αποφύγετε τυχόν προβλήματα “εισαγωγών που λείπουν” όταν τοποθετείτε τον κώδικά σας σε VS Code. Μπορείτε να χρησιμοποιήσετε το Homebrew στο macOS brew install micropython
για να το κάνετε.
ΣΗΜΕΙΩΣΗ:Από τη στιγμή που γράφονται αυτές οι γραμμές, το Homebrew δεν υποστηρίζει την εγκατάσταση MicroPython σε υπολογιστές Apple Silicon M1 Mac.Επίσης, δεν μπόρεσα να βρω έναν αξιόπιστο τρόπο εγκατάστασης του MicroPython στα Windows.Ακούστε στα σχόλια αν έχετε οποιεσδήποτε προτάσεις!
Ρυθμίστε το Pico σας για MicroPython
Προγραμματίζετε το υλικολογισμικό του Pico κρατώντας πατημένο το BOOTSEL
κουμπί, συνδέοντάς το στον υπολογιστή σας μέσω USB και σύροντας και αφήνοντας ένα αρχείο σε αυτό. Αρκετά μαγικό. Αλλά…Το MicroPython δεν υποστηρίζεται από το κουτί.
Ευτυχώς, οι άνθρωποι στο Raspberry Pi έχουν κάνει τη μεγάλη προσπάθεια για να μας αφήσουν να εγκαταστήσουμε εύκολα το MicroPython.
Μεταβείτε στα έγγραφα του Raspberry Pi Pico και κάντε κλικ στην καρτέλα “Ξεκινώντας με το MicroPython”:

Ακολουθήστε τις οδηγίες που παρέχονται στην ενότητα “Σύρετε και αποθέστε το MicroPython” (συνοπτικά για εσάς εδώ):
- Κατεβάστε το αρχείο MicroPython UF2.
- Πατήστε και κρατήστε πατημένο το
BOOTSEL
κουμπί και συνδέστε το Pico στον υπολογιστή σας. - Περιηγηθείτε στις διαθέσιμες μονάδες δίσκου και αναζητήστε “RPI-RP2”.
- Σύρετε και αποθέστε το ληφθέν αρχείο UF2 στο RPI-RP2.
- Το Pico σας θα επανεκκινήσει αυτόματα…και τώρα εκτελείτε το MicroPython στο Pico σας!
Visual Studio Code…Γνωρίστε τον Pico
Η ομορφιά του VS Code είναι η τεράστια αγορά επέκτασης . Ένα καλό παράδειγμα αυτού είναι η επέκταση Pico-Go που θα εγκαταστήσουμε και θα χρησιμοποιήσουμε για να συνδεθούμε στο Pico μας από τον Κώδικα VS.
Εάν δεν έχετε εγκαταστήσει ποτέ μια επέκταση κώδικα VS (χάνετε!), απλώς μεταβείτε στην καρτέλα Επεκτάσεις και αναζητήστε Pico-Go
:

Εφόσον το Pico σας εξακολουθεί να είναι συνδεδεμένο, η επέκταση θα ανακαλύψει αυτόματα τυχόν συνδεδεμένες πλακέτες. Θα πρέπει να δείτε τα ακόλουθα στο ενσωματωμένο παράθυρο τερματικού:
Searching for boards on serial devices...
Connecting to COM3...
>>>
Εάν χρησιμοποιείτε macOS, αντί να συνδεθείτε,
COM3
θα το δείτε να συνδέεται στο/dev/tty.usbmodem0000000000001
.
Η >>>
προτροπή σάς λέει ότι βρίσκεστε στο MicroPython REPL και είστε έτοιμοι να εκτελέσετε κάποια Python! Για να το δοκιμάσετε, εισαγάγετε τις απλούστερες από τις απλές εντολές Python:
>>> print("Hello Pico")
Hello Pico
Τώρα που ξέρουμε ότι μπορούμε να επικοινωνήσουμε με το Pico, ας κάνουμε το επόμενο βήμα και ας αλληλεπιδράσουμε με το υλικό της συσκευής.
Το LED αναβοσβήνει!
Το μόνο υλικό στο Pico με το οποίο μπορούμε να αλληλεπιδράσουμε οπτικά είναι ένα μικροσκοπικό LED. Ας γράψουμε λοιπόν ένα απλό πρόγραμμα που ανάβει και σβήνει το LED.
Στο VS Code, δημιουργήστε έναν νέο κατάλογο έργου και ένα led.py
αρχείο σε αυτόν τον κατάλογο (το όνομα αρχείου δεν έχει σημασία). Μπορούμε led.py
να ξεκινήσουμε προσθέτοντας αυτήν τη δήλωση εισαγωγής:
from machine import Pin
Η machine
μονάδα χρησιμοποιείται για τον έλεγχο του υλικού σας στο chip. Στη συνέχεια, ας ορίσουμε μια led
μεταβλητή στην ακίδα GPIO 25, όπου είναι συνδεδεμένο το LED μας:
led = Pin(25, Pin.OUT)
Τέλος, για να ανάψετε το LED (όπου 1
== είναι αναμμένο και 0
== απενεργοποιημένο):
led.value(1)
Αποθηκεύστε το αρχείο και αναζητήστε την εντολή “➡️ Run” στο κάτω μέρος του παραθύρου του VS Code. Αυτό θα τρέξει led.py
στο Pico. Μπορείτε επίσης να χρησιμοποιήσετε την εντολή “⬆️ Upload” για να μεταφέρετε το ανοιχτό έργο σε VS Code.
Το LED του Pico σας θα πρέπει τώρα να βρίσκεται σε στατική θέση “on”:

Εάν θέλετε να γίνετε πιο φανταχτεροί, μπορείτε toggle
να αναβοσβήνει η λυχνία LED και να σβήνει βάζοντας την εντολή σε έναν άπειρο βρόχο και ενημερώνοντάς την κάθε δευτερόλεπτο:
import utime
while True:
led.toggle()
utime.sleep(1)
Προσθήκη εξωτερικής εισόδου και εξόδου
Ας πάμε το ταξίδι μας στο Pico σε άλλο επίπεδο, ενσωματώνοντάς το με ορισμένες εξωτερικές συσκευές. Σε αυτήν την ενότητα, θα ανάψουμε και θα απενεργοποιήσουμε μια εξωτερική λυχνία LED χρησιμοποιώντας ένα κουμπί.
Δεν βάζω ακριβώς φωτιά στον κόσμο εδώ, αλλά είναι ένα καλό επόμενο βήμα για όσους από εμάς μόλις μαθαίνουμε το Pico και το Micropython!
Για να συνεχίσετε, θα χρειαστείτε μερικά επιπλέον κομμάτια υλικού:
- Breadboard
- Καλώδια βραχυκυκλωτήρα
- LED
- Αντίσταση 330 ohm
- Διακόπτης με μπουτόν
Το τελειωμένο μας κύκλωμα θα μοιάζει κάπως έτσι:

Τώρα, όταν εξετάζετε γιατί τα εξαρτήματα έχουν τοποθετηθεί όπως είναι, είναι πάντα χρήσιμο να συμβουλευτείτε τη διάταξη καρφίτσας του Raspberry Pi Pico (ειδικά επειδή οι ετικέτες βρίσκονται κάτω από τον πίνακα):
Το κύκλωμά μας ολοκληρώνεται συνδέοντας:
GND38
στην-
πλευρά της ράγας ισχύος.3V3
(ισχύς) στο+
πλάι της ράγας ισχύος.GP15
στην ανοδική (μακρύτερη) πλευρά του καλωδίου LED μέσω της αντίστασης 330 ohm.GP14
για να διαβάσετε το πάτημα του κουμπιού.-
ράγα ισχύος στην κάθοδο (κοντύτερη) πλευρά του καλωδίου LED.+
ράγα τροφοδοσίας για να τροφοδοτήσετε το πάτημα του κουμπιού (βεβαιωθείτε ότι βρίσκεται στη διαγώνια πλευρά από την άλλη σύνδεση).
Δημιουργήστε ένα νέο αρχείο στο VS Code και, στο επάνω μέρος, εισαγάγετε τις ίδιες δύο λειτουργικές μονάδες που κάναμε στην προηγούμενη ενότητα ( machine
και utime
):
from machine import Pin
import utime
Δημιουργήστε αναφορές στο πάτημα του κουμπιού button
και στο εξωτερικό LED μας led
, αναφέροντας τις θέσεις των καρφιτσών που χρησιμοποιούνται παραπάνω:
button = Pin(14, Pin.IN)
led = Pin(15, Pin.OUT)
Τέλος, δημιουργήστε έναν βρόχο που θα ταιριάζει με την τιμή led (θυμηθείτε 1
== ενεργό και 0
== απενεργοποιημένο) με την τιμή του κουμπιού που πατάτε ( 1
== πατήθηκε και 0
== δεν πατήθηκε). Τέλος, μπορούμε να προσθέσουμε ένα σύντομο διάστημα sleep
μεταξύ των επαναλήψεων για να αποτρέψουμε το τρεμόπαιγμα κατά το πάτημα/απελευθέρωση του κουμπιού:
while True:
led.value(button.value())
utime.sleep(0.1)
Και τέλος! Τώρα, όταν κρατάτε πατημένο το κουμπί, η λυχνία LED πρέπει να ανάβει. ?
Προσθήκη νήματος
Αυτό είναι ωραίο και όλα, αλλά απαιτεί επίσης να διατηρήσουμε την πίεση στο κουμπί για να παραμείνει αναμμένο το LED. Τι θα γινόταν αν θέλαμε να λειτουργεί σαν διακόπτης φώτων; Για παράδειγμα, πατήστε το μία φορά για να ανάψετε το LED και ξανά για να το σβήσετε.
Ας δούμε πώς μπορούμε να χρησιμοποιήσουμε _thread
το module της Python για να προσθέσουμε ένα νήμα στο πρόγραμμά μας και να ενεργοποιήσουμε αυτό το σενάριο.
ΣΗΜΕΙΩΣΗ:Τα έγγραφα Python παρέχουν μιαεκτενή επισκόπηση του threadingεάν είστε περίεργοι.
Κατασκευάζοντας τον υπάρχοντα κώδικα μας από πάνω, συνεχίστε εισάγοντας την _thread
ενότητα:
import _thread
Στη συνέχεια θα δημιουργήσουμε μια global
μεταβλητή που μπορεί να οριστεί και να διαβαστεί από οποιοδήποτε νήμα του προγράμματός μας:
global button_pressed
button_pressed = False
Διαγράψτε τον υπάρχοντα while
βρόχο και προσθέστε αυτήν read_button()
τη μέθοδο:
def read_button():
global button_pressed
while True:
if button.value() == 1:
button_pressed = not button_pressed
utime.sleep(0.5)
Τι συμβαίνει εδώ? Αυτή η μέθοδος είναι το δεύτερο νήμα μας. Ο while
βρόχος θα τρέχει απεριόριστα για να δει αν το κουμπί πατιέται ενεργά. Αν ναι, ορίστε τη button_pressed
μεταβλητή να είναι το αντίθετο από αυτό που είναι αυτή τη στιγμή. Αν είναι False
θα γίνει True
και το αντίστροφο.
Στη συνέχεια, ξεκινάμε το νήμα με:
_thread.start_new_thread(read_button, ())
Και τέλος δημιουργούμε έναν άλλο άπειρο βρόχο που ελέγχει την τιμή της καθολικής μας button_pressed
μεταβλητής και ανάβει ή σβήνει το φως:
while True:
if button_pressed == True:
led.value(1)
else:
led.value(0)
Αν χαθήκατε στην πορεία, εδώ είναι η πλήρης πηγή:
from machine import Pin
import utime
import _thread
button = Pin(14, Pin.IN)
led = Pin(15, Pin.OUT)
global button_pressed
button_pressed = False
def read_button():
global button_pressed
while True:
if button.value() == 1:
button_pressed = not button_pressed
utime.sleep(0.5)
_thread.start_new_thread(read_button, ())
while True:
if button_pressed == True:
led.value(1)
else:
led.value(0)
Τι έπεται?
Συγχαρητήρια! Κάνατε τα πρώτα παιδικά σας βήματα με το Raspberry Pi Pico και το Visual Studio Code.
Ένα συνηθισμένο επόμενο βήμα θα ήταν να εξετάσουμε πρακτικές εφαρμογές αυτού που έχουμε αρχίσει να χτίζουμε εδώ, που συχνά σημαίνει ότι επιτρέπεται στη συσκευή σας να επικοινωνεί με τον κόσμο. Τι θα λέγατε για την άντληση ορισμένων δεδομένων αισθητήρων (π.χ. τοποθεσία GPS, υγρασία, θερμοκρασία, κ.λπ.) στο σύννεφο και τη δημιουργία ελκυστικών οπτικοποιήσεων δεδομένων και πίνακες εργαλείων;
Ο ευκολότερος, φθηνότερος και πιο αξιόπιστος τρόπος για να γίνει αυτό είναι με την παγκόσμια κινητή. φθηνότερο; Ρίξτε μια ματιά στο Notecard της Blues Wireless για 10 χρόνια παγκόσμιας κινητής τηλεφωνίας που ξεκινούν από 49 $. Πλήρης δήλωση αποποίησης ευθύνης: Δουλεύω για την Blues Wireless, αλλά στέκομαι πίσω από αυτό που λέω εδώ!
Εάν θέλετε να μάθετε περισσότερα για το cellular + Pico, ρίξτε μια ματιά σε αυτό το σεμινάριο σχετικά με την Προσθήκη Cellular στο Raspberry Pi Pico