BBC micro:bit este o placă de dezvoltare care folosește un microcontroller. Scopul acestui device este de a oferi studenților un bun start pentru a începe devoltarea competențelor în programare. Micro:bit V2 este un ARM Cortex M4, mic, ușor de utilizat. Este prevăzut cu 25 de LED-uri, pe care se pot afișa mesaje sau imagini, cu acclerometru pentru a detecta mișcarile, busolă, bluetooth, două butoane prin care se poate intercționa cu user-ul si alți senzori pe care-i vom descoperi pe parcursul laboratorului.
Programele se scriu pe PC și sunt încărcate pe BBC micro:bit, acestea rămân în memoria flash și se executa atunci când microcontroller-ul este alimentat.
Ce este un microcontroller? Microcontroller-ul este un calculator micșorat într-un singur chip, care poate rula câte un program o dată si consuma cu mult mai puțină decât un laptop sau un calculator. În plus, acestea sunt bune în a controla și a detecta semnalele electrice prin intermediul pinilor. Acestea se găsesc peste tot, de exemplu ceasul digital, cuptorul cu microunde, mouse-ul etc. sunt controlate de microcontrollere. Pentru mai multe informații despre acestea poți accesa acest link.
Pentru desfășurarea laboratoarelor, vom folosi MicroPython pentru a scrie programe pe micro:bit. Este un limbaj de programare creat pentru a lucra cu microcontrollere. Acesta este un subset al limbajului de programare numit Python.
Dacă ai BBC micro:bit V2 urmează instrucțiunile de la secțiunea "Conectarea micro:bit-ului la PC".
Dacă nu ai un BBC micro:bit urmează instrucțiunile de mai jos pentru a folosi simulatorul.
Pentru desfășurarea laboratoarelor se poate folosi și simulatorul de MicroPython. Pentru a-l putea utiliza trebuie să tastați urmatoarele comenzi în terminal, dacă folosiți Windows tastați comenzile în cmd.
Dacă nu aveți Python3 instalat sau nu sunteți siguri că-l aveți urmați pașii din acest document.
Urmatorul pas este să tastați urmatoarele comenzi:
git clone https://github.com/ducklord420/PythonEditor.git cd PythonEditor git submodule update --init --recursive py -m http.server --bind 0.0.0.0
Pentru a accesa simulatorul deschideti un browser si accesati pagina http://localhost:8000/editor.html
.
Pentru a simula codul faceți click pe “Sim”. Testați pentru Exemplul 1 din secțiunea următoare.
Primul pas pentru a conecta microcontroller-ul la calculator este să ne folosim de cablul micro USB din kit. Introduceți capatul USB tip B în partea de sus a micro:bit-ului, iar celălalt capăt în calculator.
Pentru desfășurarea acestui laborator vom scrie programele într-un editor de cod online, numit Makecode creat de Microsoft.
Primul program pe care îl vom scrie va fi afișarea textului “Hello” pe cele 25 LED-uri, urmat de abrevierea “SdE”, care va fi stocat într-o variabilă.
from microbit import display #import "diplay" from microbit library name = "SdE" #declaration of a variable with a String #all the code that is idented under the loop belongs to it while True: #infinite looop # "display" is an object that refers to the LEDs, this method allows us to control them display.scroll("HELLO" + " " + name) # concatenation of Strings
Transferul de program se numește flashing deoarece programul este copiat în memoria flash a micro:bit-ului.
După conectarea microcontroller-ului în calculator va aparea “MICROBIT” ca un stick de memorie.
Următorul pas este sa salvam programul din editorul de cod ca fișier .hex. Se apasă pe butonul “Load/Save”, apoi acesta downloadează făcând click pe “Download Project Hex”, așa cum este reprezentat în imaginile de mai jos:
Ultimul pas pentru a încarca programul pe micro:bit este să deschideți folder-ul unde s-a salvat fisierul .hex downloadat și să-l copiați în “MICROBIT”. Programul se va compila automat pe microcontroller.
Va apărea o fereastra similara cu cea de jos. Tot ce rămane de facut este să faceți click pe placuta “BBCmicrobit” pe care editorul o dectează, apoi click pe butonul “Connect”.
Ultimul pas pentru a flash-ui programul este să apasați pe butonul “Flash”. Este posibil să așteptați câteva secunde pana când programul va fi încarcat pe placută.
Open Serial
care va deschide terminalul cu un interpretorul de Python.
Un bloc de cod(corp de funcție, conținutul unei bucle) începe la prima linie identată și se termină la ultima linie care nu mai respectă identarea.
Trebuie să se țină cont de faptul că, în cazul în care o anumită linie se termină cu : este obligatoriu ca următoarea linie să fie identată.
De obicei, pentru identare se folosește un TAB, ca în exemplul următor:
for i in range(1,11): print(i) if i == 5: break
Spre deosebire de alte limbaje de programare, în Python nu etse necesară declararea variabilelor sau tipul lor inainte de a le utiliza. Din acest punct de vedere, Python face parte din categoria limbajelor de programare dinamice, unde tipul variabilelor este interpretat la moemntul execuției.
Python are 2 tipuri numerice: întregi și reale
# Sintaxa pentru a declara un număr întreg: myInt = 7 # Sintaxa pentru a declara un număr real: myFloat = 7.0 myFloat = float(7)
myString = 'hello' myString = "hello"
Se poate realiza atribuirea valorilor pentru mai multe variabile.
# Instrucțiuni corecte a, b = 1, 2 suma = a + b
# Instrucțiuni corecte hello = "hello" world = "world" message = hello + " " + world
#Codul următor nu va funcționa one = 1 two = 2 three = 3 hello = "hello" print (one + two + three + hello)
one = 1 two = 2 three = 3 hello = "hello" print ( str(one) + str(two) + str(three) + hello )
Listele sunt similare cu array-urile. Pot conține nenumărate tipuri de variabile și de de elemente.
Pentru a crea o listă care contine elemente de tip intreg vom rula următoarea linie de cod:
myList = [1,2,3,4,5]
Putem de asemeanea să creăm o listă goală, la care vom adăuga elemente ulterior:
# Declararea unei liste mylist = [] # Inserarea elementelor mylist.append(1) mylist.append(2) mylist.append(3)
Pentru a extrage un element din listă folosim o construcție de tipul lista[indice]
:
mylist = [1,2,3] # Afișarea fiecărui element print( mylist[0] ) print( mylist[1] ) print( mylist[2] ) # Output 1 2 3
range
care întoarce o listă cu toate numerele întregi dintr-un anumit interval. Funcția are urmăatarea definiție: range(start, stop, pas)
, unde start
este prima valoare din listă, stop
este valoarea de oprire (valoarea nu este inclusă), pas
este pasul de incrementare și este un parametru opțional (valoarea default e 1).
Exemplu
Pentru a crea o listă cu valori pare de la 2 la 12, vom rula următoarea linie de cod:
mylist = range (2, 13, 2)
Un dicționar este o structură de date similară cu vectorii sau cu listele, dar funcționează cu cheie și valoare în loc de indice. Fiecare valoare stocată într-un dicționar poate fi accesată cu ajutorul unei chei, care poate fi reprezentată de orice tip de obiect(un șir, un număr, o listă etc.).
De exemplu, dicționarele pot fi utilizate pentru a implementa baze de date, Presupunând că avem o bază de date de studenți trebuie să reținem specializarea pentru care fiecare a optat.
specialisation = {} specialisation["Ana"] = "Informatique" specialisation["Radu"] = "Electronique"
Sau
specialisation = { "Ana": "Informatique", "Radu": "Electronique" }
for nom, spec in specialisation.iteritems(): print ("Le nom de l'optionel ou {} a été répartisé est: {}".format(nom, spec))
del optionalRepartizare["Ana"] # sau optionalRepartizare.pop("Ana")
Într-un dicționar nu există restricționări pentru valori, doar pentru chei, acestea trebuie să fie unice. În cazul în care nu se respectă această proprietate și există aceeași cheie de 2 ori, doar ultima înregsitrată va fi validă. De exemplu, pentru următoarea secvență de cod:
age = { "Ana" : 14, "Ioana" : 13, "Ana" : 16, "Ioana" : 22, "Ana" : 11 } print ("Ana a {} années et Ioana a {} années.".format(age["Ana"], age["Ioana"]))
Se va afișa mesajul urmator: “Ana a 11 années et Ioana a 22 années.”.
numeDictionar.clear() → eliminarea tututot elemetelor dintr-un dicționar
# Decizie simplă a = 33 b = 200 if b > a: print("b is greater than a")
# Utilizare elif pentru a adăuga condiție suplimentară a = 33 b = 33 if b > a: print("b is greater than a") elif a == b: print("a and b are equal")
# Cuvantul cheie else care cuprinde tot ce nu a fost inclus anterior a = 200 b = 33 if b > a: print("b is greater than a") elif a == b: print("a and b are equal") else: print("a is greater than b")
# else fară elif a = 200 b = 33 if b > a: print("b is greater than a") else: print("b is not greater than a")
Contrar altor limbaje, care au forma strandard for(..) { code } pentru bucla for, Python a eliminat parantezele care arata iterarea unei liste si utilizează : pentru a indica începutul uni bloc de cos care va fi executat în interiorul buclei, ca în exemplul următor:
listaDeNume = ["Ana", "Maria", "Ioana", "Irina", "Andreea", "Cristina"] for nume in listaDeNume: print (nume)
În Python, indicele pasului la care ne aflăm în timpul parcurgerii, nu este vizibil, iar pentru asta exista o metodă care numără pașii, numită enumerate:
cours= [ "Analyse", "SdE", "ALF"] for index, hobby in enumerate(cours): print (index, hobby) # Output: 0 Analyse 1 SdE 2 ALF
O altă funcție este ultilitarul zip, care permite oarcurgerea a două liste simultan.
lista1 = [ 3, 9, 17, 15, 19] lista2 = [ 2, 4, 30, 24, 3] for a, b in zip( lista1, lista2 ): if a > b: print (a) else: print (b) # Output: 3 9 30 24 19
O altă particularitate a limbajului Python este faptul că se poate aplica conditioa else si pentru bucla for. În acest caz, ramura else va fi executată după bucla for, dacă și numai dacă în interiorul buclei for nu există p declarație de tip break. De exemplu:
listeAnimaux = [ "loup", "lapin", "lion", "ours" ] for i in listeAnimaux: print (i) if i == "lapin" print ("Le lapin n'est pas sauvage") break else: print ("Tous les animaux!") # Output loup lapin Le lapin n est pas sauvage #Si on execute la sequence suivante: for i in listeAnimaux: print (i) if i == "lapin" print ("Le lapin n'est pas sauvage") else: print ("Tous les animaux!") # Output loup lapin Le lapin n est pas sauvage lion ours Tous les animaux!
#Afficher les chiffres de 0 a 9 count = 0 while count < 10: print (count) count = count + 1
Ca și pentru bucla for există, de asemnea, posibilitatea de a aplica condița else pentru bucla while. Diferența este că blocul else va fi executat de fiecare dată când condiția de la structura repetitivă va fi evaluată ca și falsă:
print ("Dévinez de numéro de l'intervalle [ 1, 10 ]") monNr = 7 votreNr = 0 while votreNr!= monNr: votreNr = int( input("Choisissez. ") ) else: print ("Félicitations!")
Instrucțiunea break este utilizată pentru a ieși dintr-o structură repetitivă. De exemplu, se pot afișa numerele de la 0 la 9 în felul următor:
count = 0 while True: print (count) count = count + 1 if count > 10: break
Continue este utilizat pentru a ignora un bloc de instrucțiuni. De exemplu, il putem utiliza pentru a afișa numerele pare de la 0 la 20 astfel:
number = 0 while number < 21: if number % 2 == 1 continue print (number)
def myFunction(): print ("Welcome") # sau def simpleSum( a, b ): return a + b
myFunction() # sau first = 1 second = 1 sum = simpleSum( first, second ) print (sum) print (simpleSum( first, second ))
Un obiect este o încapsulare de variabile și de funcții într-o singură entitate, în timp ce o clasă reprezintă un model pentru a crea obiecte. În concluzie, un obiect își ia datele dintr-o clasă.
# Classe simple class MaClasse: variable = "Bonjour" def maFonction(self): print ("Bonjour de l'autre part!") # Association classe objet monObjet = MaClasse() # Afficher le contenu de la variable de MaClasse print (monObjet.variable) # Appeler la fonction maFonction, qui va afficher sur l'écran le message "Bonjour de l'autre part!" monObjet.maFonction()
Numărul de obiecte care pot fi create dintr-o clasă nu este limitat, acestea moștenesc toate caracteristicle clasei(variabile și funcții). Cu toate acestea, fiecare obiect conține copii independente ale variabilelor definite în interiorul clasei. Prin urmare, dacă se creaza un obiect nou din clasa mamă, se poate modifica conținutul făra a afecta clasa ințială.
class MaClasse: variable = "Bonjour" def maFonction(self): print ("Bonjour de l'autre part!") monObjet1 = MaClasse() monObjet2 = MaClasse() monObjet2.variable = "au revoir" print (monObjet1.variable) print (monObjet2.variable) #Output bonjour au revoir
Pentru a putea utiliza funcții care execută operații matematice în Python, trebuie ca modulul math să fie importat.
import math
math.functionName( params )
Câteva funcții elementare: floor, ceil, pow, sqrt.
functionName( params )
Exemple de funcții din acestă categorie: abs, round, sum.
Datele de intrare pot fi citite de la tastaura, pentru asta există funcția input(). Aceasta poate avea și parametrii suplimentari, string-ul care va fi afoșsat în linia de comanda la momentul citirii datelorȘ
name = input("Quel est votre nom? ") print("Bienvenue, " + name + "!")
# Output dans la ligne de commande Quel est votre nom? "Ana" Bienvenue, Ana!
Există 2 tipuri de execpții: erori de sintaxă și de excepții.
Erorile de sintaxă, cunoscute sub numele de erori de analiză (parsing error) sunt cele mai cunoscute:
>>> while True print('Hello world') File "<stdin>", line 1 while True print('Hello world') ^ SyntaxError: invalid syntax
Excepțiile apar la momentul execuției:
>>> 10 * (1/0) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero
Pentru a rezolva execpțiile în Python, se utilizează bloc-ul try-except, ca în exemplul următor:
while True: try: x = int(input("Please enter a number: ")) break except ValueError: print("Oops! That was no valid number. Try again...")
insert <încăpere> <sensor> <value>
- unde <incapere>
, <sensor>
si <value>
vor fi înlocuiți cu unul din cei 3 senzori și o valoare - inserează o valoarea nouă pentru senzorul respectivdelete <încăpere> <sensor> <value>
- șterge valoarea pentru senzorul respectiv, valoarea după ștergere va fi 0print <incapere><sensor>
- afișează valoarea pentru senzorul din încăperea precizatăprint <incapere>
- afișează toți senzorii și valorile aferente pentru încăperea precizatăadd_room <incapere>
- adaugă un nou set de senzori pentru o nouă încăperedel_room <incapere>
- șterge setul de senzori pentru o încăpereDacă se introduce o altă comandă, programul va arunca o excepție.