Raspberry Pi Pico este cel mai nou membru al familiei Raspberry Pi. Înainte de aceasta, linia de produse Raspberry Pi erau computere cu o singură placă capabile să ruleze un sistem de operare.
Bazat pe noul cip RP2040, Raspberry Pi Pico acceptă atât MicroPython, cât și C/C++. Cu Raspberry Pi Pico, începătorii și entuziaștii pot controla hardware-ul și dispozitivele conectate. Pinii GPIO ai Raspberry Pi Pico pot fi folosiți pentru a estompa luminile, pentru a citi starea comutatoarelor și multe altele.
Ce este MicroPython?
Programarea pe microcontrolere s-a făcut predominant în limbajul C, așa cum sa văzut folosit în plăcile de dezvoltare Arduino . Apoi, în 2014, a fost publicat un nou limbaj de programare pentru microcontrolere, MicroPython. MicroPython vă permite să scrieți cod Python pe metalul gol al unui microcontroler. Aceasta înseamnă că puteți scrie cod Python fără un sistem de operare.
Python este un limbaj de programare de nivel înalt, prietenos pentru începători, care permite utilizatorilor să se concentreze pe învățarea conceptelor de programare. Este aproape același lucru cu MicroPython.
Folosind un LED
Pentru a controla hardware-ul, Pico vorbește cu seria de pini de-a lungul ambelor margini. Aceștia se numesc pini de ieșire de intrare de uz general (GPIO), iar LED-ul de la bord poate fi găsit pe GPIO 25. Pentru a-l controla, importați mai întâi bibliotecile necesare:
import machine
import utime
Apoi apelați funcția Pin folosind biblioteca mașinii pentru a gestiona pin-ul GPIO al Pin-ului, în acest caz, setăm Pin-ul la GPIO 25, deci este primul parametru. Al doilea parametru îl setează ca pin de ieșire mai degrabă decât ca pin de intrare, făcând acest lucru, pinul știe ce ar trebui să facă:
onboard_led = machine.Pin(25, machine.Pin.OUT)
Pentru a continua, în următorul cod, îi spunem lui Pico să-și seteze apoi valoarea pinului la GPIO 25 la 1 sau „pornit”.
while True: onboard_led.value(1)
Cu toate acestea, s-ar putea să realizezi că nu pare să se întâmple nimic. Acest lucru se datorează faptului că Pico funcționează foarte repede, astfel încât LED-ul se aprinde mai repede decât poți percepe cu ochiul. Pentru a remedia acest lucru, trebuie să încetinim programul utilizând comanda sleep din biblioteca utime . Codul complet în care LED-ul se va aprinde și se va stinge poate fi văzut mai jos:
import machine import utime onboard_led = machine.Pin(25, machine.Pin.OUT) while True: onboard_led.value(1) utime.sleep(5) onboard_led.value(0) utime.sleep(5)
Comutarea LED-urilor pornit și oprit
Alternativ, există o altă modalitate de a porni și opri LED-urile, cu comanda de comutare :
import machine import utime onboard_led = machine.Pin(25, machine.Pin.OUT) while True: led_onboard.toggle() utime.sleep(5)
În exemplu, comanda de comutare înlocuiește necesitatea de a seta valoarea LED-ului la 1 și mai târziu la 0. Acesta se va aprinde în continuare timp de 5 secunde și apoi se va stinge încă cinci, atâta timp cât programul rulează.
Crearea Funcțiilor
Pe măsură ce programele devin mai complexe, ajută la gruparea unor bucăți de cod împreună, astfel încât să mențină coerența. Pentru a face acest lucru, MicroPython precum Python permite utilizarea funcțiilor. Funcțiile sunt un grup de instrucțiuni înrudite care îndeplinesc o anumită sarcină. De exemplu, în următorul cod, este definită o funcție numită printNames :
def printNames: print(“Raspberry Pi 1”) print(“Raspberry Pi 2”) print(“Raspberry Pi 3”) print(“Raspberry Pi 4”) print(“Raspberry Pi Compute Module”) print(“Raspberry Pi 400”) print(“Raspberry Pi Pico”) printNames()
Ultima linie din cod apelează funcția astfel încât să se execute efectiv.
Bucle
Logica condiționată efectuează diferite acțiuni în funcție de faptul dacă o constrângere booleană este evaluată drept adevărat sau fals. O mulțime de proiecte Raspberry Pi Pico se bazează pe aceste declarații logice. În exemplul următor, o instrucțiune if-else este utilizată pentru a determina dacă o instrucțiune print se va executa:
i = 17 def printNames(): if i > 15: print("i is greater than 15!") else: print("i is not greater than 15") printNames()
În exemplul următor, bucla for este utilizată cu funcția range . Aceste bucle pot fi folosite pentru a repeta un bloc de cod de mai multe ori.
Pentru acest exemplu, comanda de imprimare va fi executată de cinci ori cu o întârziere de cinci secunde între fiecare dintre ele cu comanda de repaus :
import utime def printNames(): for i in range(5): print("Raspberry Pi Pico") utime.sleep(5) printNames()
Convertor analog-digital (ADC)
Deși nu o veți putea vedea, Raspberry Pi Pico are un convertor intern analog-digital. În exemplul următor, un potențiometru este conectat la Raspberry Pi Pico pe GPIO 26, care este capabil de funcționalitate ADC:
import machine import utime pot = machine.ADC(26) while True: print(pot.read_u16()) utime.sleep(1)
Aici, înainte de a putea folosi acest pin capabil de ADC, acesta trebuie configurat cu funcția ADC. Apoi, în timp ce programul rulează, valoarea potențiometrului se va imprima în fiecare secundă. Alți pini de pe Raspberry Pi Pico care sunt capabili ADC includ GPIO27, 28 și 29.
Modulație pe lățime a impulsurilor (Pwm)
Ieșirea digitală a unui microcontroler poate fi doar 1 sau 0. Pentru a crea un semnal analogic, veți avea nevoie de un convertor digital-analogic. Cu toate acestea, o altă modalitate este de a crea în mod artificial un semnal analogic, folosind modularea lățimii impulsului sau PWM pe scurt.
Prin pornirea și oprirea unui semnal digital, acesta este cunoscut sub numele de puls. Prin modularea lățimii unui impuls, acesta creează artificial un semnal analogic, așa cum se vede în exemplul următor:
import machine import utime pot = machine.ADC(26 led = machine.PWM(machine.Pin(21)) led.freq(1000) while True: led.duty_u16(pot.read_u16())
Mai întâi, au fost importate bibliotecile mașină și utime . Un obiect, onboard_led este creat cu o ieșire PWM activată pe pinul GPIO 21. Apoi, folosind comanda freq , aceasta setează frecvența pentru a modula lățimea impulsului. Imaginați-vă că întoarceți potențiometrul, LED-ul va crește mai luminos când este rotit într-un sens.
Acest lucru se întâmplă deoarece valoarea analogică de la potențiometru este folosită ca valoare pentru ciclul de lucru al semnalului PWM, este o valoare între 0 și 65535. Cu toate acestea, fără conversie, rotirea ușor a potențiometrului poate determina deja ca LED-ul să atingă nivelul maxim de luminozitate. .
Pentru a remedia acest lucru, astfel încât potențiometrul să atingă luminozitatea maximă doar când este rotit până la capăt, valoarea este convertită cu funcția duty_u16 . Această funcție îl transformă într-un număr întreg de 16 biți, care este o valoare între 0 și 1024, care este același interval de valori pe care l-ați primi de la pinul analog al lui Pico.
Creați mai multe cu Raspberry Pi Pico
Acest articol a acoperit comenzile de bază din MicroPython pe Raspberry Pi Pico. Pentru mai multe informații, consultați documentația oficială despre programarea MicroPython cu Raspberry Pi Pico .
Dacă nu este deja configurat pe Raspberry Pi Pico, obțineți Thonny IDE pentru a rula codul MicroPython sau, alternativ, verificați emulatorul CPU Unicorn pentru a rula un microcontroler virtual direct pe computer.