Πηγή: The ELECFREAKS Wukong2040 Inventor’s Kit For Raspberry Pi
Παρουσίαση

Το WuKong2040 είναι μια πολυ-λειτουργική πλακέτα επέκτασης σχεδιασμένη για το Raspberry Pi Pico. Όσον αφορά τη λειτουργικότητα, διαθέτει ενσωματωμένο βομβητή, κουμπί A\B, πολύχρωμα φώτα (RGB led), οδήγηση κινητήρων, κουμπί επαναφοράς κ.λπ. για να ικανοποιήσει τον προγραμματισμό I/O των δημιουργών και την επέκταση των περιφερειακών που απαιτούνται. Όσον αφορά τη διάρκεια ζωής της μπαταρίας, υποστηρίζει μια μπαταρία 18650 υψηλής χωρητικότητας με ενσωματωμένο έξυπνο τσιπ διαχείρισης ενέργειας και προσεκτική ένδειξη ισχύος, η οποία μπορεί να διαρκέσει για περισσότερα από 120 λεπτά κανονικής χρήσης.
Όσον αφορά τη δομή, χρησιμοποιεί ένα τυπικό πλαίσιο τετράγωνου μπλοκ 7 × 11 ως βάση, το οποίο μπορεί να επεκταθεί για το Wukong 2040 σε μια ποικιλία από ζωντανά σχήματα. Το ELECFREAKS παρέχει στους αρχάριους πληθώρα παραδειγμάτων εκμάθησης που μπορούν να βοηθήσουν να ξεκινήσουν γρήγορα τον κόσμο των κατασκευών και να τα εφαρμόσουν στην πραγματική ζωή.
** Το Raspberry Pi Pico είναι μια πλακέτα ανάπτυξης μικροελεγκτή υψηλής απόδοσης σχεδιασμένο από το Ίδρυμα Raspberry. Χρησιμοποιεί το δικό του τσιπ μικροελεγκτή RP2040 του Raspberry Pi, εξοπλισμένο με επεξεργαστή ARM Cortex M0 + διπλού πυρήνα, που τρέχει στα 133 MHz, με 264 KB SRAM και 2 MB μνήμης και έως και 26 πολυ-λειτουργικές ακίδες GPIO στο τσιπ.
Χαρακτηριστικά
- Τα ενσωματωμένα εξαρτήματα όπως ο βομβητής, τα κουμπιά A\B, το πολύχρωμο φως, το κουμπί επαναφοράς κ.λπ. είναι εξαιρετικά ενσωματωμένα και ισχυρά.
- Υποστήριξη μπαταρίας 18650 υψηλής χωρητικότητας, ενσωματωμένο έξυπνο τσιπ διαχείρισης ενέργειας με ένδειξη τροφοδοσίας, που επιτρέπει στους χρήστες να απαλλαγούν από ανησυχίες σχετικά με την τροφοδοσία και να απολαμβάνουν τη δημιουργία διασκέδασης οποτεδήποτε, οπουδήποτε.
- Επέκταση έως και 14 ακροδέκτες I/O γενικής χρήσης και μια ξεχωριστή διεπαφή I2C, καθιστώντας πολύ βολικό για τους χρήστες να συνδέσουν διάφορα περιφερειακά.
- Τυπική βάση πλαισίου οικοδομικού τετραγώνου για εύκολη κατασκευή δομής.
- Υποστήριξη πολλαπλών μεθόδων προγραμματισμού: MicroPython, CircuitPython, C, C++.
- Πλούσια παραδείγματα μάθησης.
Διαστάσεις

Εισαγωγή

Λεπτομέρειες παραμέτρων
Είδη | Παράμετρος |
SKU | EF02054 |
Μέγεθος | 87,8 × 55,8 × 36,3 χιλιοστά |
Καθαρό βάρος | 50g (Εξαιρούνται η μπαταρία και το Pico) |
Διακόπτης ρεύματος | Ενεργοποίηση/απενεργοποίηση |
Κουμπί επαναφοράς | Υποστήριξη |
Παροχή ηλεκτρικού ρεύματος | Μπαταρία λιθίου 18650 (Προαιρετικό) |
Ρεύμα φόρτισης | 1000 mA |
Χρόνος φόρτισης | Περίπου 120 λεπτά |
Τάση λειτουργίας | 2,8V~4,2V |
Συνολική διάρκεια ζωής της μπαταρίας | 60 λεπτά |
Επέκταση θυρών GPIO | 14 τρόποι |
Θύρες IIC | Υποστήριξη |
Θύρες SPI | Υποστήριξη |
Θύρες UART | Υποστήριξη |
Ενσωματωμένα εξαρτήματα | 2 x Rainbow LEDs; 2 x Buttons; 1 x Buzzer; |
Οδήγηση με κινητήρα | 4 τρόποι (M1, M2, M3, M4) |
Τάση λειτουργίας κινητήρα | 3,7V |
Μέθοδος στερέωσης | Συμπεριλάβετε ένα τετράγωνο τούβλο 11 x 7, διαθέσιμο για σύνδεση με τούβλα |
Διαμόρφωση περιβάλλοντος προγραμματισμού
Πρόλογος
Το Raspberry Pi Pico υποστηρίζει C, C++, MicroPython, CircuitPython και άλλες μεθόδους προγραμματισμού, κάντε κλικ στον παρακάτω σύνδεσμο για να κατεβάσετε το αντίστοιχο αρχείο προγράμματος οδήγησης. Όλες οι περιπτώσεις σε αυτό το άρθρο βασίζονται στο CircuitPython. Εάν είστε νέος χρήστης στο Raspberry Pi Pico, συνιστάται να κατεβάσετε πρώτα το πρόγραμμα οδήγησης CircuitPython και να ανατρέξετε στα παραδείγματα για εκμάθηση. Η CircuitPython είναι μια γλώσσα προγραμματισμού που έχει σχεδιαστεί για να απλοποιεί τον πειραματισμό και την εκμάθηση κωδικοποίησης σε πλακέτες μικροελεγκτών χαμηλού κόστους. Η CircuitPython είναι ο ευκολότερος τρόπος προγραμματισμού μικροελεγκτών. Μπορείτε να μάθετε περισσότερες λεπτομέρειες στον ιστότοπο και τα φόρουμ της CircuitPython.
Επίσημος ιστότοπος CircuitPython
Φόρουμ CircuitPython
Η σύνδεσμος για το Υλικολογισμικό της CircuitPython είναι;
https://circuitpython.org/board/raspberry_pi_pico/
Αφού κάνετε κλικ στη σελίδα λήψης υλικολογισμικού, κάντε κλικ στον σύνδεσμο στην ακόλουθη τοποθεσία:

Εγκατάσταση Υλικολογισμικού
Η πλήρης παρουσίαση της εγκατάστασης του υλικολογισμικού φαίνεται παρακάτω:
Βήμα 1: Πατήστε το κουμπί BOOSEL του Raspberry Pi Pico και μην το αφήσετε.

Βήμα 2: Συνδέστε το Raspberry Pi Pico στον υπολογιστή σας χρησιμοποιώντας ένα καλό καλώδιο USB και αφήστε το ενσωματωμένο κουμπί BOOSEL Raspberry Pi Pico όταν ο κατάλογος δίσκου του υπολογιστή εμφανίσει τη μονάδα “RPI-RP2”.

Βήμα 3: Σύρετε το αρχείο UF2 που λάβατε προηγουμένως στον δίσκο “RPI-RP2” και όταν ολοκληρωθεί η αντιγραφή, η μονάδα δίσκου “RPI-RP2” θα εξαφανιστεί και η μονάδα “CIRCUITPY” θα εμφανιστεί. Συγχαρητήρια, εγκαταστήσατε με επιτυχία το CircuitPython.

Ρυθμίσεις πλατφόρμας προγραμματισμού
Εάν είστε νέος στο Raspberry Pi Pico, σας συνιστούμε να ξεκινήσετε με το περιβάλλον προγραμματισμού Thonny. Κάντε κλικ στον παρακάτω σύνδεσμο για να επιλέξετε το Thonny για το λειτουργικό σύστημα του υπολογιστή σας και να το κατεβάσετε.
Το Thonny είναι ένα απλοϊκό Python IDE για αρχάριους, σχεδιασμένο για εκμάθηση και διδασκαλία προγραμματισμού. Αναπτύχθηκε από το Πανεπιστήμιο Tartu στην Εσθονία, το Thonny είναι φιλικό προς τους χρήστες προγραμματισμού υλικού, με διαφορετικούς διερμηνείς για επιλογή ανάλογα με το υλικό ανοιχτού κώδικα.
Σύνδεσμος ονόματος
Thonny https://thonny.org/

Επιλογή διερμηνέα Thonny
Ανοίξτε το Thonny στον υπολογιστή σας, κάντε κλικ στο μενού “Configure interperter” στην επιλογή “Run”, κάτω από την επιλογή “Interperter”, κάντε κλικ στο αναπτυσσόμενο μενού Select interpreter και επιλέξτε “CircuitPython(generic)”, κάντε κλικ στο “OK” για να ολοκληρώσετε τη διαμόρφωση του διερμηνέα.
Τα βήματα φαίνονται στο σχήμα:


Ξεκινώντας
Τρόπος ενεργοποίησης και φόρτισης της πλακέτας επέκτασης Wukong 2040
Όπως φαίνεται στην εικόνα (1) παρακάτω, τραβήξτε πάνω τον διακόπτη λειτουργίας για να απενεργοποιηθεί η πλακέτα επέκτασης Wukong 2040. Τραβήξτε κάτω το διακόπτη λειτουργίας, για να ενεργοποιηθεί η πλακέτα επέκτασης Wukong 2040 και να ανάψει η ένδειξη τροφοδοσίας.
Συνδέστε το καλώδιο τροφοδοσίας USB στη θύρα φόρτισης όπως φαίνεται στην εικόνα παρακάτω (2) και η ένδειξη τροφοδοσίας ανάβει.


- Κατάσταση ένδειξης ισχύος.
- Το χρώμα του δείκτη είναι κόκκινο όταν το επίπεδο ισχύος είναι κάτω από 20%.
- ο επίπεδο ισχύος είναι μεταξύ 20% και 80% και το χρώμα του δείκτη είναι πορτοκαλί.
- Το χρώμα της ένδειξης είναι πράσινο όταν το επίπεδο ισχύος είναι υψηλότερο από 80%.
- Κατάσταση ένδειξης φόρτισης:
- Δεν είναι πλήρης, το χρώμα του δείκτη είναι κόκκινο.
- Πλήρης κατάσταση, το χρώμα του δείκτη είναι πράσινο.
Μελέτη παραδείγματος
Περίπτωση 1: Ανάβει τα ενσωματωμένα LED Raspberry Pi Pico
Το Raspberry Pi Pico έρχεται με ένα LED στην πλακέτα, την ακίδα GP25, η οποία είναι προγραμματισμένη να δίνει στο LED ένα εφέ αναπνοής.
Κώδικας αναφοράς (1):
import board #Εισαγωγή της βιβλιοθήκης του Pi Pico για πρόσβαση στο υλικό από τις ακίδες
import time # Εισαγωγή της βιβλιοθήκης χρόνου για τον έλεγχο της εκτέλεσης κώδικα, όπως η αναστολή της εκτέλεσης του προγράμματος σε διαφορετικούς χρόνους αδρανοποίησης
import digitalio #Εισαγωγή της βιβλιοθήκης digitalio για να επιτρέψετε την πρόσβαση και να ορίσετε το υλικό ως είσοδο και έξοδο
led_onboard = digitalio.DigitalInOut(board.LED) # Δημιουργία αντικειμένου LED.
led_onboard.direction = digitalio.Direction.OUTPUT # Ρύθμιση σε λειτουργία εξόδου
while True:
led_onboard.value = True # Ρύθμιση του ενσωματωμένου led σε υψηλό (αναμμένο)
time.sleep(1)
led_onboard.value = False # Ρύθμιση του ενσωματωμένου led σε χαμηλό (σβηστό)
time.sleep(1)
Κώδικας αναφοράς (2):
import time
import board
import pwmio # Εισαγάγετε το pwmio, τη μονάδα που περιέχει τις κλάσεις για τη βασική διαμόρφοση παλμών
led_onboard = pwmio.PWMOut(board.LED, frequency=5000, duty_cycle=0) # Δημιουργήστε έξοδο αντικειμένου pwm στην ακίδα LED
while True:
for i in range(100):
if i < 50:
led_onboard.duty_cycle = int(i * 2 * 65535 / 100) # Ορισμός τιμής κύκλου λειτουργίας
else:
led_onboard.duty_cycle = 65535 - int((i - 50) * 2 * 65535 / 100)
time.sleep(0.01)
Περίπτωση 2: Προγραμματιζόμενα κουμπιά A\B
Το Wukong 2040 διαθέτει δύο ενσωματωμένα προγραμματιζόμενα κουμπιά A και B. Στο παρακάτω παράδειγμα τα ενσωματωμένα LED του Raspberry Pi Pico έχουν προγραμματιστεί να ανάβουν όταν πατηθεί το ενσωματωμένο κουμπί A στο Wukong 2040 και τα LED θα σβήσουν όταν πατηθεί το κουμπί B.
Κώδικας αναφοράς:
import board
import digitalio
led_onboard = digitalio.DigitalInOut(board.LED)
led_onboard.direction = digitalio.Direction.OUTPUT
button_a = digitalio.DigitalInOut(board.GP18) # Δημιουργήστε ένα αντικείνενο πλήκτρου στο wukong2040 για την ακίδα 18.
button_b = digitalio.DigitalInOut(board.GP19) # Δημιουργήστε ένα αντικείνενο πλήκτρου στο wukong2040 για την ακίδα 19.
button_a.direction = digitalio.Direction.INPUT # Θέστε το button_a ως είσοδο
button_b.direction = digitalio.Direction.INPUT
button_a.pull = digitalio.Pull.UP # με αντίσταση στην τάση (θα έχει τιμή HIGH)
button_b.pull = digitalio.Pull.UP
while True:
if button_a.value == False: # Η τιμή της button_a.value ΄είναι η κατάσταση του πλήκτρου Α. Πιεργμένο είναι 0, απελευθερωμένο είναι 1.
led_onboard.value = True
elif button_b.value == False: # Η τιμή της button_a.value ΄είναι η κατάσταση του πλήκτρου Β. Πιεργμένο είναι 0, απελευθερωμένο είναι 1.
led_onboard.value = False
Περίπτωση 3: Φωτίστε ολόχρωμες ανοιχτόχρωμες χάντρες
Το Wukong 2040 διαθέτει επάνω του δύο έγχρωμα LED (ws2812b), στις ακίδες GP22_0 και GP22_1. Προγραμματίστε τα δυο φώτα να αλλάζουν χρώματα και να αναβοσβήνουν.
Για να προγραμματίσετε το έγχρωμο LED (ws2812b) χρησιμοποιώντας το CircuitPython, πρέπει να χρησιμοποιήσετε το αρχείο βιβλιοθήκης neopixel, μπορείτε να κάνετε λήψη του αρχείου βιβλιοθήκης neopixel κάνοντας κλικ στον παρακάτω σύνδεσμο και να το αποθηκεύσετε στον κατάλογο "lib" του προγράμματος οδήγησης "CIRCUITPY".
Σύνδεσμοι σε αρχεία βιβλιοθήκης neopixel
https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel
Όπως φαίνεται στο σχήμα:

Κώδικας αναφοράς:
import time
import board
from rainbowio import colorwheel
import neopixel
NUMPIXELS = 2
SPEED = 0.05
BRIGHTNESS = 0.2 # Οι τιμές είναι (0.0, 1.0), όπου 0.0 είναι off και 1.0 μέγιστο
PIN = board.GP22 # η ακίδα για το RGB led είανι η GP22
pixels = neopixel.NeoPixel(PIN, NUMPIXELS, brightness=BRIGHTNESS, auto_write=False)
def rainbow_cycle(wait):
for color in range(255):
for pixel in range(len(pixels)):
pixel_index = (pixel * 256 // len(pixels)) + color * 5
pixels[pixel] = colorwheel(pixel_index & 255)
pixels.show()
time.sleep(wait)
while True:
rainbow_cycle(SPEED)
Περίπτωση 4: Οδήγηση του βομβητή
Το Wukong 2040 διαθέτει ένα ενσωματωμένο βομβητή, στην ακίδα GP9, προγραμματισμένο να παίζει ένα μουσικό κομμάτι όταν πατηθεί το πλήκτρο.
Κώδικας αναφοράς:
import time # Εισαγωγή της βιβλιοθήκης χρόνου για τον έλεγχο της εκτέλεσης κώδικα
import array #Εισαγωγή της βιβλιοθήκης πινάκων
import math #Εισαγωγή της βιβλιοθήκης μαθηματικών
import board #Εισαγωγή της βιβλιοθήκης του Pi Pico για πρόσβαση στο υλικό από τις ακίδες
import digitalio #Εισαγωγή της βιβλιοθήκης digitalio για να επιτρέψετε την πρόσβαση και να ορίσετε το υλικό ως είσοδο και έξοδο
from audiocore import RawSample #Εισαγωγή από την βιβλιοθήκη audiocore της κλάσης RawSample
try:
from audioio import AudioOut
except ImportError:
try:
from audiopwmio import PWMAudioOut as AudioOut
except ImportError:
pass
button = digitalio.DigitalInOut(board.GP18) #πλήκτρο Α
button.switch_to_input(pull=digitalio.Pull.UP)
tone_volume = 0.9
frequency = 440
length = 8000 // frequency
sine_wave = array.array("H", [0] * length)
for i in range(length):
sine_wave[i] = int((1 + math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
audio = AudioOut(board.GP9) #έξοδος στον βομβητή
sine_wave_sample = RawSample(sine_wave)
while True:
if not button.value:
audio.play(sine_wave_sample, loop=True)
time.sleep(1)
audio.stop()
Περίπτωση 5: Οδήγηση του βομβητή
Ενσωματωμένη τετραπλή οδήγηση διεπαφή κινητήρων στο Wukong 2040: M1, M2, M3, M4, προγραμματισμένη να σταματά μετά από 5 δευτερόλεπτα την περιστροφή του κινητήρα M2.
Κώδικας αναφοράς:
import board
import digitalio
import timemotor = digitalio.DigitalInOut(board.GP10)
motor.direction = digitalio.Direction.OUTPUT
while True:
motor.value = True
time.sleep(5)
motor.value = False
time.sleep(5)
Περίπτωση 6: Drive S90
Το Wukong 2040 διαθέτει 12 διεπαφές επέκτασης I/O (ακίδες: 0, 1, 2, 3, 4, 5, 6, 7, 8, 26, 27, 28), οι οποίες μπορούν να χρησιμοποιηθούν για την οδήγηση σερβομηχανισμών S90. Εάν χρησιμοποιείτε ένα καλώδιο προσαρμογέα για τη σύνδεση του σερβομηχανισμού με την ενσωματωμένη διεπαφή ακίδων Wukong 2040 (ακίδες: 16, 17) μπορείτε επίσης να χρησιμοποιήσετε και αυτές. Σύνδεσμος αρχείου βιβλιοθήκης adafruit_motor
https://github.com/adafruit/Adafruit_CircuitPython_Motor/archive/refs/heads/main.zip
Προγραμματισμός Servos με CircuitPython
Για να χρησιμοποιήσετε τη βιβλιοθήκη adafruit_motor, κάντε κλικ στον παραπάνω σύνδεσμο για να κάνετε λήψη του αρχείου βιβλιοθήκης adafruit_motor και να το αποθηκεύσετε στον κατάλογο “lib” της μονάδας δίσκου “CIRCUITPY”. Όπως φαίνεται στο σχήμα:

Κώδικας αναφοράς:
import time
import board
import pwmio
from adafruit_motor import servo
pwm = pwmio.PWMOut(board.GP0, duty_cycle=2 ** 15, frequency=50)
my_servo = servo.Servo(pwm)
while True:
for angle in range(0, 180, 5):
my_servo.angle = angle
time.sleep(0.05)
for angle in range(180, 0, -5):
my_servo.angle = angle
time.sleep(0.05)
Περίπτωση 7: Χρήση ακίδων GPIO για οδήγηση LED
Το Wukong 2040 διαθέτει 12 διεπαφές IO επέκτασης (ακίδες: 0, 1, 2, 3, 4, 5, 6, 7, 8, 26, 27, 28), οι οποίες μπορούν να χρησιμοποιηθούν για την οδήγηση αισθητήρων ψηφιακού σήματος, όπως LED φώτα.
Επίδειξη περίπτωση με χρήση αισθητήρων της σειράς Octopus ELECFREAK .
Κώδικας αναφοράς:
<em># Εισαγωγή απαιτούμενων μονάδων για το πρόγραμμα</em>
import board
from digitalio import *
from time import *
<em># ορισμός ακίδων και κατε΄ύθυνσης τους για την σύνδεση των LED (Δίοδος Εκπομπής Φωτός)</em>
led_0 = DigitalInOut(board.GP0)
led_1 = DigitalInOut(board.GP1)
led_0.direction = Direction.OUTPUT
led_1.direction = Direction.OUTPUT
<em># </em>εκαλλαγή της κατάστασης των<em> 2 LED μεταξύ on και off</em>
while True:
led_0.value = True
led_1.value = False
sleep(1)
led_0.value = False
led_1.value = True
sleep(1)
Περίπτωση 8: Ανάγνωση αναλογικών τιμών ποτενσιομέτρου
Οι ακίδες GP26, GP27 και GP28 στο Raspberry Pi Pico μπορούν να χρησιμοποιηθούν ως ψηφιακοί είσοδοι GPIO ή αναλογικοί είσοδοι ADC (Μετατροπέας Αναλογικού σε Ψηφιακό) και μπορούν να προγραμματιστούν για να επιλεγόμενη λειτουργία.
Επίδειξη περίπτωση με χρήση αισθητήρων της σειράς Octopus ELECFREAK .
Αναφορά κώδικα:
import time
import board
from analogio import AnalogIn
analog_in = AnalogIn(board.GP26)
while True:
print(analog_in.value)
time.sleep(0.1)
Περίπτωση 9: Οδήγηση οθονών OLED
Το Wukong 2040 διαθέτει ενσωματωμένες ακίδες IIC (GP16, GP17), οι οποίες μπορούν να οδηγήσουν την οθόνη OLED μέσω IIC, χρειάζεστε το αρχείο βιβλιοθήκης adafruit ssd1306.py και το αρχείο βιβλιοθήκης adafru_framebuf.py, κάντε κλικ στον παρακάτω σύνδεσμο για λήψη και αποθήκευση adafruit_ssd1306.py, adaf .py στον κατάλογο “lib” της μονάδας δίσκου “CIRCUITPY”.
Σύνδεσμος λήψης αρχείου βιβλιοθήκης adafruit_ssd1306.py
https://github.com/adafruit/Adafruit_CircuitPython_SSD130
Σύνδεσμος λήψης αρχείου βιβλιοθήκης adafru_framebuf.py
https://github.com/adafruit/Adafruit_CircuitPython_framebuf/releases/tag/1.4.14
Όπως φαίνεται στο σχήμα.

Επίδειξη περίπτωση με χρήση αισθητήρων της σειράς Octopus της ELECFREAK . Η ανάλυση της οθόνης OLED είναι: 128*64.
Κώδικας αναφοράς:
import board
import busio
import adafruit_ssd1306
import time
i2c = busio.I2C(board.GP17, board.GP16)
display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
bgColor=0
display.fill(bgColor)
for i in range(0,display.height,4):
for j in range(0,display.width,4):
display.pixel(j, i, not bgColor)
display.show()
display.fill(bgColor)
for i in range(0,display.height,4):
display.hline(0, i,display.width, not bgColor)
display.show()
display.fill(bgColor)
for i in range(0,display.width,8):
display.vline(i, 0,display.height, not bgColor)
display.show()
display.fill(bgColor)
for i in range(0,display.height,4):
display.line(0, 0, display.width, i, not bgColor)
display.line(display.width, display.height, 0, display.height-i, not bgColor)
display.show()
display.fill(bgColor)
for i in range(0,display.width//2,4):
display.circle(display.width//2, display.height//2, i, not bgColor)
display.show()
display.fill(bgColor)
for i in range(0,display.height,16):
for j in range(0,display.width,16):
display.rect(j, i, 12, 12, not bgColor)
display.show()
for i in range(0,display.height,16):
for j in range(0,display.width,16):
display.fill_rect(j+2, i+2, 8, 8, not bgColor)
display.show()
display.fill(bgColor)