AIUTO per estrarre un valore RSSI

Ciao a tutti,
sono uno studente universitario e mi sono avvicinato da poco ad arduino. Premetto che conosco molto poco di questo mondo ma è un argomento che mi ha sempre entusiasmato.

Sto facendo un progetto utilizzando un microprocessore Adafruit nRF52832 (Introduction | Bluefruit nRF52 Feather Learning Guide | Adafruit Learning System - link della scheda), utilizzando il bluetooth e in particolare la modalità Beacon. La scheda deve interagire con un altro dispositivo (in questo caso un app di un tablet) e regolare l'intensità luminosa di un led in base alla distanza.

Dato che il mio professore mi ha detto che per controllare la distanza devo utilizzare l'RSSI, sono arrivato a questo punto con il codice:

#include <bluefruit.h>                                   //includo la libreria adafruit
#define MANUFACTURER_ID 0X0059                           //definisce l'ID dell'azienda Nordic Semiconductor ASA ripreso da questo sito
                                                         //https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/
uint8_t beaconUuid[16] =                                 //Codice UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
{
  0xE2, 0xC5, 0x6D, 0xB5, 0xDF, 0xFB, 0x48, 0xD2,
  0xB0, 0x60, 0xD0, 0xF5, 0xA7, 0x10, 0x96, 0xE0, 
};

BLEBeacon beacon(beaconUuid, 0x0001, 0x0000, -80);        //Un pacchetto Beacon valido è costituito dalle seguenti informazioni: UUID, Major, Minor, RSSI @ 1M
                                                          //L'RSSI = -54 equivale alla distanza di circa 1 metro
void setup()
{
  Serial.begin(115200);                                   //Imposta la velocità dei dati in bit al secondo per la trasmissione dei dati
  Serial.println("Connessione Beacon Bluefruit52");       //Scrive sul monitor seriale quello tra le virgole, che potrebbe essere anche superfluo
  Bluefruit.begin();
  Bluefruit.setName("Bluefruit52");
  beacon.setManufacturer(MANUFACTURER_ID);                //L'ID del produttore è richiesto per i dati specifici del produttore
  setupAdv();                                             //Imposta il pacchetto pubblicitario
  Bluefruit.Advertising.start();                          //Inizia a fare pubblicità

  /* Start Central Scanning
   * - Enable auto scan if disconnected
   * - Filter out packet with a min rssi
   * - Interval = 100 ms, window = 50 ms
   * - Use active scan (used to retrieve the optional scan response adv packet)
   * - Start(0) = will scan forever since no timeout is given
   */
  Bluefruit.Scanner.setRxCallback(scan_callback);
  Bluefruit.Scanner.restartOnDisconnect(true);
  Bluefruit.Scanner.filterRssi(-80);
  //Bluefruit.Scanner.filterUuid(BLEUART_UUID_SERVICE);      // only invoke callback if detect bleuart service
  Bluefruit.Scanner.setInterval(160, 80);                    // in units of 0.625 ms
  Bluefruit.Scanner.useActiveScan(true);                     // Request scan response data
  Bluefruit.Scanner.start(0);                                // 0 = Don't stop scanning after n seconds

  Serial.println("Scanning ...");
}

void setupAdv(void)
{
  Bluefruit.Advertising.setBeacon(beacon);
  Bluefruit.ScanResponse.addName();
}

void scan_callback(ble_gap_evt_adv_report_t* report)
{
  /* RSSI value */
  Serial.printf("%14s %d dBm\n", "RSSI", report->rssi);
}

void loop()
{
  digitalToggle(LED_BUILTIN);                             //Attiva il LED ogni secondo
  delay(1000);
}

con questo riesco a connettere il dispositivo al tablet da cui riesco a vedere l'intensità del segnale RSSI, inoltre da questa funzione in poi
Bluefruit.Scanner.setRxCallback(scan_callback);
riesco a stampare sul monitor seriale il segnale RSSI in quel momento.

La mia domanda è: come faccio ad estrapolare quel valore RSSI che mi esce dal monitor seriale per poi associarlo ad un led? come posso ricavare il valore RSSI ogni tot secondi e non solamente all'avvio del dispositivo?

Grazie per la disponibilità.

Buonasera e benvenuto, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.