DETECTANDO PRESENÇA DE PESSOAS VIA BLE COM NINA B302 - OBSERVER
Instalando Arduino Adafruit no NINA B302
Abaixo o roteiro para você seguir:
Baixe e instale o Arduino IDE
Inicie o Arduino IDE, vá em Preferências e adicione
https://www.adafruit.com/package_adafruit_index.json
como "URL adicional do gerenciador de pastas"
Abra o Boards Manager no menu Tools -> Board e instale o "Adafruit nRF52 by Adafruit"
Selecione sua placa nRF5 no menu Ferramentas -> Placa
Adafruit Bluefruit nRF52 Feather
OBSERVAÇÃO: Durante a instalação, o Arduino IDE leva alguns minutos para extrair as ferramentas após o download, por favor, seja paciente.
Gravando bootloader da Adafruit
Use o gravador SEGGER JLINK para gravar o BREAKOUT com módulo NINA B302, conecte nos pinos do SWCLK (pino 7) e SWDIO (pino 9) do SEGGER JLINK nos pinos SWDCLK e SWDIO do BREAKOUT (pinos nas laterais, próximo à antena). Não esquecer de ligar os GND do BREAKOUT no GND do SEGGER JTAG, bem como alimentar o BREAKOUT com 3.3V.
Ligue os pinos SWD DIO e CLK ...
...nestes pinos da placa BREAKOUT
Você pode também usar o ST-LINK V2
Abra J-FLASH lite e grave o bootloader da Adafruit
O mesmo se encontra em
....\packages\adafruit\hardware\nrf52\0.19.0\bootloader\feather_nrf52840_express
Compile depois para o NINA B302
https://github.com/adafruit/Adafruit_nRF52_Bootloader
Com ele, você poderá transferir programas via DFU USB. Maiores detalhes sobre este bootloader
https://learn.adafruit.com/introducing-the-adafruit-nrf52840-feather/update-bootloader
Segundo a documentação, se você pressionar o reset, o módulo aguardará por um certo tempo se há algo sendo enviado pelo Arduino, ou seja, o programa a ser gravado via DFU.
ATENÇÃO, o bootloader usa USB para gravação do NINA 302, OU SEJA, CRIA UMA COMM VIRTUAL, TAMBÉM PARA SER A SERIAL PADRÃO DO ARDUINO
INSTALE OS DRIVERS
https://github.com/adafruit/Adafruit_Windows_Drivers
Conecte na USB + e USB - um cabo USB, AGUARDE INSTALAR OS DRIVERS
Futuramente altere arquivo variant.cpp para que as GPIOS sejam os mesmos do NINA B302, atualmente estão para o ADAFRUIT FEATHER EXPRESS.
Acrescente no final de boards.txt
C:\Users\tcpipchip\AppData\Local\Arduino15\packages\adafruit\hardware\nrf52\0.19.0\
# ----------------------------------
# NINA B302
# ----------------------------------
ninab302.name=NINA B302 u-blox
# VID/PID for bootloader with/without UF2, Arduino + Circuitpython App
ninab302.vid.0=0x239A
ninab302.pid.0=0x8029
ninab302.vid.1=0x239A
ninab302.pid.1=0x0029
ninab302.vid.2=0x7239A
ninab302.pid.2=0x002A
ninab302.vid.3=0x239A
ninab302.pid.3=0x802A
# Upload
ninab302.bootloader.tool=bootburn
ninab302.upload.tool=nrfutil
ninab302.upload.protocol=nrfutil
ninab302.upload.use_1200bps_touch=true
ninab302.upload.wait_for_upload_port=true
ninab302.upload.maximum_size=815104
ninab302.upload.maximum_data_size=237568
# Build
ninab302.build.mcu=cortex-m4
ninab302.build.f_cpu=64000000
ninab302.build.board=NRF52840_FEATHER
ninab302.build.core=nRF5
ninab302.build.variant=feather_nrf52840_express
ninab302.build.usb_manufacturer="Adafruit LLC"
ninab302.build.usb_product="Feather nRF52840 Express"
ninab302.build.extra_flags=-DNRF52840_XXAA {build.flags.usb}
ninab302.build.ldscript=nrf52840_s140_v6.ld
ninab302.build.vid=0x239A
ninab302.build.pid=0x8029
# SofDevice Menu
ninab302.menu.softdevice.s140v6=0.3.2 SoftDevice s140 6.1.1
ninab302.menu.softdevice.s140v6.build.sd_name=s140
ninab302.menu.softdevice.s140v6.build.sd_version=6.1.1
ninab302.menu.softdevice.s140v6.build.sd_fwid=0x00B6
# Debug Menu
ninab302.menu.debug.l0=Level 0 (Release)
ninab302.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0
ninab302.menu.debug.l1=Level 1 (Error Message)
ninab302.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1
ninab302.menu.debug.l2=Level 2 (Full Debug)
ninab302.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2
ninab302.menu.debug.l3=Level 3 (Segger SystemView)
ninab302.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3
Pegue aqui (inclusive "boards")
https://ricardoadulis.sharepoint.com/:f:/s/smartcore/Ek8KZOWlww9Dg77E27bqkxsBxru3jOnkUex2BiMlO0kVFw?e=pTDLsV
Criado pelo Autor
variant.h
viariant.cpp
ÓTIMA REFERENCIA PARA PINOS DO ARDUINO E PINOS (GPIOS) DO NINA B302
Consulte
https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_%28UBX-17052099%29.pdf
Compilando e Transferindo o programa CENTRAL_SCAN
Compile o programa e pressione o botão para gravar.
Ao aparecer a mensagem "Upgrading target on COM...", pressione imediatamente o botão de reset do módulo NINA B302
Como podem observar, o programa será transferido!
Vamos dar uma olhada no código-fonte e detectar onde aparece o MAC address e o RSSI.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/*********************************************************************
This is an example for our nRF52 based Bluefruit LE modules
Pick one up today in the adafruit shop!
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
MIT license, check LICENSE for more information
All text above, and the splash screen below must be included in
any redistribution
*********************************************************************/
#include <bluefruit.h>
void setup()
{
Serial.begin(115200);
while ( !Serial ) delay(10); // for nrf52840 with native usb
Serial.println("Bluefruit52 Central Scan Example");
Serial.println("--------------------------------\n");
// Initialize Bluefruit with maximum connections as Peripheral = 0, Central = 1
// SRAM usage required by SoftDevice will increase dramatically with number of connections
Bluefruit.begin(0, 1);
Bluefruit.setTxPower(4); // Check bluefruit.h for supported values
Bluefruit.setName("Bluefruit52");
// Start Central Scan
Bluefruit.setConnLedInterval(250);
Bluefruit.Scanner.setRxCallback(scan_callback);
Bluefruit.Scanner.start(0);
Serial.println("Scanning ...");
}
void scan_callback(ble_gap_evt_adv_report_t* report)
{
Serial.println("Timestamp Addr Rssi Data");
Serial.printf("%09d ", millis());
// MAC is in little endian --> print reverse
Serial.printBufferReverse(report->peer_addr.addr, 6, ':');
Serial.print(" ");
Serial.print(report->rssi);
Serial.print(" ");
Serial.printBuffer(report->data.p_data, report->data.len, '-');
Serial.println();
// Check if advertising contain BleUart service
if ( Bluefruit.Scanner.checkReportForUuid(report, BLEUART_UUID_SERVICE) )
{
Serial.println(" BLE UART service detected");
}
Serial.println();
// For Softdevice v6: after received a report, scanner will be paused
// We need to call Scanner resume() to continue scanning
Bluefruit.Scanner.resume();
}
void loop()
{
// nothing to do
}
|
VERSÃO ALTERADA PELO AUTOR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/*********************************************************************
This is an example for our nRF52 based Bluefruit LE modules
Pick one up today in the adafruit shop!
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
MIT license, check LICENSE for more information
All text above, and the splash screen below must be included in
any redistribution
*********************************************************************/
#include <bluefruit.h>
void setup()
{
Serial.begin(115200);
while ( !Serial ) delay(10); // for nrf52840 with native usb
pinMode(LED_RED, OUTPUT);
digitalWrite(LED_RED,LOW);
Serial.println("Bluefruit52 Central Scan Example");
Serial.println("--------------------------------\n");
// Initialize Bluefruit with maximum connections as Peripheral = 0, Central = 1
// SRAM usage required by SoftDevice will increase dramatically with number of connections
Bluefruit.begin(0, 1);
Bluefruit.setTxPower(4); // Check bluefruit.h for supported values
Bluefruit.setName("Bluefruit52");
// Start Central Scan
Bluefruit.setConnLedInterval(250);
Bluefruit.Scanner.setRxCallback(scan_callback);
Bluefruit.Scanner.start(0);
Serial.println("Scanning ...");
}
unsigned char smart_watch_mac[] = {0xD2,0x22,0xAE,0x63,0x01,0x3E};
void scan_callback(ble_gap_evt_adv_report_t* report)
{
//Serial.println("Timestamp Addr Rssi Data");
//Serial.printf("%09d ", millis());
// MAC is in little endian --> print reverse
//Serial.printBufferReverse(report->peer_addr.addr, 6, ':');
//Serial.print(" ");
if(report->peer_addr.addr[5]==smart_watch_mac[0])
if(report->peer_addr.addr[4]==smart_watch_mac[1])
if(report->peer_addr.addr[3]==smart_watch_mac[2])
if(report->peer_addr.addr[2]==smart_watch_mac[3])
if(report->peer_addr.addr[1]==smart_watch_mac[4])
if(report->peer_addr.addr[0]==smart_watch_mac[5])
{
Serial.println("Found MAC...");
Serial.println(report->rssi);
if(report->rssi>-40) //rssi
digitalWrite(LED_RED,HIGH);
else
digitalWrite(LED_RED,LOW);
}
//Serial.print(report->rssi);
//Serial.print(" ");
//Serial.printBuffer(report->data.p_data, report->data.len, '-');
//Serial.println();
// Check if advertising contain BleUart service
//if ( Bluefruit.Scanner.checkReportForUuid(report, BLEUART_UUID_SERVICE) )
//{
// Serial.println(" BLE UART service detected");
//}
//Serial.println();
// For Softdevice v6: after received a report, scanner will be paused
// We need to call Scanner resume() to continue scanning
Bluefruit.Scanner.resume();
}
void loop()
{
// nothing to do
}
|
O MAC do Smart Watch obtido pelo BLE SCANNER
unsigned char smart_watch_mac[] = {0xD2,0x22,0xAE,0x63,0x01,0x3E};
Agora aproxime o SMART WATCH do NINA B302 e se o RSSI estiver abaixo de -40 (estimado) deverá acender o LED, caso contrário, apagará!
Dúvidas:
suporte@smartcore.com.br
Referências:
https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_%28UBX-17052099%29.pdf
https://devzone.nordicsemi.com/f/nordic-q-a/26046/example-use-of-sd_ble_gap_scan_start
https://learn.adafruit.com/category/learn-arduino
Sobre a SMARTCORE
A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portifólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS / GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.