This is an old revision of the document!
Sparrow Micro este o placă de dezvoltare similară cu Sparrow, doar că îi lipsesc senzorii on-board. Cu toate acestea, este similară ca dimensiuni și format cu Arduino Micro și permite conectarea de diverse module și periferice pe pinii de expansiune.
În rest, placa este complet compatibilă și poate fi programată în același mod cu o placă Sparrow normală (nu schimbați nimic la Board din Arduino IDE).
Fiecare placă Sparrow sau Sparrow Micro are încorporat un emițător-receptor radio. El este un periferic al microcontrolerului Atmega128RFA1 și este compatibil cu standardul IEEE 802.15.4. Acest periferic folosește banda de frecvență de 2.4GHz și, teoretic, poate comunica cu orice dispozitiv IoT ce implementează protocolul Zigbee.
Câteva exemple pentru astfel de dispozitive ar fi sistemul de iluminat inteligent PhilipsHue, sau senzorii IoT Samsung SmartThings.
Pentru lucrarea curentă de laborator veți folosi biblioteca SparrowRadio pentru transmisia radio. Clasa SparrowTransfer implementează un protocol peste functiile de transmisie și recepție obișnuite și poate fi descărcată de aici.
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).
Codul pentru Receiver este similar, doar că preia biții recepționați pe interfața radio și îi copiază în noua structură de date. Din această cauză, structurile de date de la Transmițător și de la Receptor trebuie să fie identice, altfel octeții nu se vor alinia corect. <note important>Încărcați codul de mai jos pe placa Sparrow Micro, ce are rol de Receptor.</note> <spoiler Cod receptor> <code C> #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; void setup(){ Serial.begin(9600); start the library, pass in the data details
ST.begin(details(mydata));
pinMode(11, OUTPUT);
digitalWrite(11, HIGH);
}
void blinkLED() {
digitalWrite(11, LOW); delay(20); digitalWrite(11, HIGH);
}
void loop(){
//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); }
</code> </spoiler>