User Tools

Site Tools


lab4

Sparrow WSN - Transmisia radio

Pentru a folosi transceiver-ul radio cu care sunt dotate nodurile senzoriale, vom utiliza o bibliotecă scrisă pentru Arduino ce ne va smplifica foarte mult codul. Această bibliotecă se numește ZigduinoRadio și poate fi descărcată de aici.

Instalarea bibliotecii este foarte facilă, trebuie doar să dezarhivați arhiva în Arduino\libraries

Mai jos aveți un exemplu care vă permite să trimiteți și să recepționați date de pe interfața radio.

/*
 
Run this sketch on two Zigduinos, open the serial monitor at 9600 baud, and type in stuff
Watch the Rx Zigduino output what you've input into the serial port of the Tx Zigduino
 
*/
 
#include <ZigduinoRadio.h>
 
void setup()
{
  ZigduinoRadio.begin(11);
  Serial.begin(9600);
 
  ZigduinoRadio.attachError(errHandle);
  ZigduinoRadio.attachTxDone(onXmitDone);
}
 
void loop()
{
  if (Serial.available())
  {
    ZigduinoRadio.beginTransmission();
 
    Serial.println();
    Serial.print("Tx: ");
 
    while(Serial.available())
    {
      char c = Serial.read();
      Serial.write(c);
      ZigduinoRadio.write(c);
    }
 
    Serial.println(); 
 
    ZigduinoRadio.endTransmission();
  }
 
  if (ZigduinoRadio.available())
  {
    Serial.println();
    Serial.print("Rx: ");
 
    while(ZigduinoRadio.available())
      Serial.write(ZigduinoRadio.read());
 
    Serial.println();
    Serial.print("LQI: ");
    Serial.print(ZigduinoRadio.getLqi(), 10);
    Serial.print(", RSSI: ");
    Serial.print(ZigduinoRadio.getLastRssi(), 10);
    Serial.print(" dBm, ED: ");
    Serial.print(ZigduinoRadio.getLastEd(), 10);
    Serial.println("dBm");
  }
 
 
  delay(1000);
}
 
void errHandle(radio_error_t err)
{
  Serial.println();
  Serial.print("Error: ");
  Serial.print((uint8_t)err, 10);
  Serial.println();
}
 
void onXmitDone(radio_tx_done_t x)
{
  Serial.println();
  Serial.print("TxDone: ");
  Serial.print((uint8_t)x, 10);
  Serial.println();
}
Task 0: Rulați exemplul de mai sus și adăugați un identificator unic fiecărui nod (de ex. numele vostru).
Task 1: Proiectați un protocol de transmisie simplu pentru pachete în rețea. Fiecare pachet va fi de lungime fixă (39 octeți), primul octet va fi adresa nodului care face transmisia, următorii doi octeți vor codifica un sequence number pentru transmisie, urmează 32 de biți pentru payload și 4 octeți la final pentru CRC. Pentru CRC-32 puteți să folosiți implementarea de aici

Task 2: Folosind protocolul de mai sus și codul din laboratorul trecut, trimiteți datele de la senzori periodic prin radio. Dacă reușiti, veți putea vedea toate datele de la toti ceilalti senzori (inclusiv ale senzorilor vostri). Datele de la senzori vor fi codificate în payload-ul pachetelor de rețea în perechi de tipul: <sensor_id><sensor_value>, unde sensor_id are 1 octet iar sensor_value are 2 octeți lungime. Sensor_id poate avea următoarele valori: 0-temperatură, 1-umiditate, 2-luminozitate, 3-tensiune baterie.
Task 3: Scrieți un sketch Processing care să vă afișeze grafic toate datele de la toți senzorii conectați
lab4.txt · Last modified: 2017/10/27 10:02 by dan.tudose