Differences

This shows you the differences between two versions of the page.

Link to this comparison view

iothings:laboratoare:lab5 [2022/02/11 16:53]
laura.ruse removed
iothings:laboratoare:lab5 [2022/04/06 19:35] (current)
cosmin.chenaru [Exerciții]
Line 1: Line 1:
-====== Protocoale de transmisie ======+===== Laborator 05. MicroPython pe ESP32 =====
  
-Pentru lucrarea curentă de laborator vețfolosi ​biblioteca SparrowTransfer ce folosește clasele definite în laboratorul anterior pentru transmisia radio. Clasa implementează un protocol peste functiile de transmisie și recepție obișnuite și poate fi descărcată ​de {{:​iothings::​sparrowradio.zip|aici}}.+În laboratorul de astăzi vom instala MycroPython pe plăcuța ESP32 pentru a folosi ​funcționalitatea acesteia cu ajutorul limbajului ​de programare Python.
  
-Instalarea ​bibliotecii este foarte facilă, trebuie doar să dezarhivați arhiva în Arduino\libraries+==== 1. Instalarea ​aplicației Thonny ====
  
-Mai jos aveți un exemplu care vă permite să trimiteți ​și să recepționați pachete de date de pe interfața radio. Pentru aceasta aveți nevoie de două noduri: primul rulează codul care transmite (Tx) și al doilea recepționează (Rx).+Vom folosi [[https://​randomnerdtutorials.com/​getting-started-thonny-micropython-python-ide-esp32-esp8266/​|acest tutorial]] pentru a instala tool-ul Thonny ​și pentru a scrie imaginea ​de MycroPython ​pe plăcuța ESP32.
  
-Codul pentru Transmitter: +O scurtă introducere cu cele mai folosite construcții în Python găsim [[https://randomnerdtutorials.com/micropython-programming-basics-esp32-esp8266|aici]].
-<code C> +
-#include "​SparrowTransfer.h"​ +
-  +
-//create object +
-SparrowTransfer ST;  +
-  +
-struct SEND_DATA_STRUCTURE{ +
-  ​//put your variable definitions here for the data you want to send +
-  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO +
-  uint16_t data; +
-};+
  
-//give a name to the group of data +==== 2. Documentația MicroPython pentru ESP32 ====
-SEND_DATA_STRUCTURE mydata;+
  
-void blinkLED() //blinks the LED +MicroPython este o implementare optimizată a limbajul de programare Python3destinată microcontroller-elor cu puține resurse disponibilece conține un mic subset din funcționalitatea standard a limbajului.
-+
-  digitalWrite(8,LOW); +
-  delay(20);​ +
-  digitalWrite(8,HIGH); ​  +
-+
-  +
-void setup(){ +
- ​Serial.begin(9600);​ +
-  +
- //​start the library, pass in the data details +
- ​ST.begin(details(mydata));​ +
-  +
- ​pinMode(8,​ OUTPUT); +
- ​digitalWrite(8,​ LOW); +
-  +
- ​mydata.data = 0; +
-   +
-}+
  
-void loop(){ +Documentația pentru ESP32 o avem [[https://​docs.micropython.org/en/latest/​esp32/​quickref.html|aici]]
-   +==== Exerciții ====
-  mydata.data++; +
-   +
-  ​//send the data +
-  ST.sendData(); +
-  ​blinkLED();​+
  
-  delay(1000);​ +=== Ex. 1 - WiFi Scan ===
-}+
  
 +Scanați retelele WiFi locale folosind următorul program:
 +
 +<​code>​
 +import network
 +
 +sta = network.WLAN(network.STA_IF)
 +sta.active(True)
 +
 +nets = sta.scan()
 +for net in nets:
 +    print(net[0])
 </​code>​ </​code>​
  
-Codul pentru Receiver:+Un mic exemplu cu partea de retea găsim [[https://​docs.micropython.org/​en/​latest/​library/​network.WLAN.html|aici]]
  
-<code C> +=== Ex2 - Web Server ===
-#include "​SparrowTransfer.h" +
-  +
-//create object +
-SparrowTransfer ST;  +
-  +
-struct RECEIVE_DATA_STRUCTURE{ +
-  //put your variable definitions here for the data you want to send +
-  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO +
-  uint16_t data; +
-  +
-}; +
-//give a name to the group of data +
-RECEIVE_DATA_STRUCTURE mydata;+
  
-uint16_t old_index, received_index,​ lost;+Urmăriți [[https://​randomnerdtutorials.com/​esp32-esp8266-micropython-web-server|acest]] tutorial pentru a porni un server web. Testați conexiunea din browser și aprindeți led-ul din pagina web.
  
-void setup(){ +<​note>​ 
-  ​Serial.begin(9600);​ +Tutorialul din link-ul de mai sus folosește aplicația uPyCraft, dar noi vom folosi tot aplicația Tonny
-   +</note>
-  ​//start the library, pass in the data details ​  +
-  ST.begin(details(mydata));​ +
-  +
-  pinMode(11, OUTPUT); +
-  digitalWrite(11,​ HIGH);  +
-  +
-}+
  
-void blinkLED() +{{:​iothings:​laboratoare:​lab5-web-server-2.png?​300|}}
-{ +
-  digitalWrite(11,​ LOW); +
-  delay(20);​ +
-  digitalWrite(11,​ HIGH); ​  +
-}+
  
-void loop(){ +=== ExSimularea unei intreruperi ===
-  //check and see if a data packet has come in.  +
-  if(ST.receiveData() ​== SUCCESS){ +
-     +
-    blinkLED();​ +
-     +
-    received_index++;​ +
-     +
-    if(old_index !0) +
-      lost += mydata.data old_index - 1; +
-       +
-    Serial.print("​Frame arrived: "); +
-    Serial.print(mydata.data);​ +
-    Serial.print("​ "); +
-    Serial.print(",​ lost: "); +
-    Serial.print(lost);​ +
-    Serial.print(",​ loss: "); +
-    Serial.print(lost*100.0/​(lost+received_index),​ 3); +
-    Serial.println("​%"​);​ +
-       +
-    old_index ​mydata.data;​ +
-  } +
-  +
-  //optional delay, to disable flooding serial interface +
-  //​delay(250);​ +
-}+
  
 +Folosiți programul de mai jos pentru a "​asculta"​ interuperi pe PIN-ul 23.
 +
 +<​code>​
 +from machine import Pin
 +from time import sleep
 +
 +shortCircuit = False
 +
 +def handle_interrupt(pin):​
 +  global shortCircuit
 +  shortCircuit = True
 +  print("​Interrupt"​)
 +
 +led = Pin(2, Pin.OUT)
 +
 +# Setting a ping on 3.3 volts
 +highVoltagePin = Pin(22, Pin.OUT)
 +highVoltagePin.value(1)
 +
 +# This pin should receive 3.3 volts to trigger an interrupt
 +pir = Pin(23, Pin.IN)
 +
 +pir.irq(trigger=Pin.IRQ_RISING,​ handler=handle_interrupt)
 +
 +while True:
 +  if shortCircuit:​
 +    led.value(1)
 +    sleep(1)
 +    led.value(0)
 +    print('​Interrupt stopped!'​)
 +    shortCircuit = False
 </​code>​ </​code>​
  
-<​note>​**Task 0:** Rulați exemplele de mai sus.</​note>​ +Din cauza lipsei unui device fizic care să livreze o întrerupere,​ vom pune PIN-ul 22 pe 1 logic (3.3 volți) iar cu ajutorul unui pix vom scurt-circuita PIN-ul 23
-<​note>​**Task 1:** Modificați structura de date pentru a conține urmatoarele câmpuriadresa nodului care face transmisia (un octet)sequence number pentru transmisie (doi octeți) și payload (32 octeți). Trimiteți mesaje și afișati-le pe serială.</​note>​ + 
-<​note>​**Task 2:** Modificați biblioteca pentru a permite transmisia bidirecțională de date.</​note>​+{{:iothings:laboratoare:​lab5-scurt-circuit.jpg?​300|}} 
 + 
 +Dacă nu merge cu un pixputeți încerca cu partea de grafit dintr-un creion mecanic
 + 
 +{{:iothings:​laboratoare:​lab5-scurt-circuit-grafit.jpg|}} 
 + 
 +Sau in cel mai ne-ingineresc caz, cu o furculiță :). 
 +===== Resurse =====
  
 +  * https://​randomnerdtutorials.com/​getting-started-thonny-micropython-python-ide-esp32-esp8266/​
 +  * https://​randomnerdtutorials.com/​micropython-programming-basics-esp32-esp8266/​
iothings/laboratoare/lab5.1644591192.txt.gz · Last modified: 2022/02/11 16:53 by laura.ruse
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0