U-BLOX NINA B302 e BLYNK - ETHERNET 802.3 - BLE
O objetivo deste BLOG é demonstrar como é possível utilizar a IDE do Arduino para programar o módulo U-BLOX NINA B302 para acessar o servidor BLYNK e e mandar o STATUS da Temperatura, obtido de módulo sensor de temperatura BLE. Foi utilizado o NINA B302 BREAKOUT para os testes.
BLINKY
1) INSTALE O APP DO BLYNKBLINKY
Junte-se à plataforma IoT mais popular para conectar seus dispositivos à nuvem, projetar aplicativos para controlá-los e gerenciar seus produtos implantados em escala! Crie sua APP rapidinho e depois porte Blynk para seu próprio servidor.
BLE DE TEMPERATURA
Módulo BLE que fica propagando tempos em tempos as temperatura, advertising.
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
Abra J-FLASH lite e grave o bootloader da Adafruit
Mudar NRF52840
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
Copie
BLE DE TEMPERATURA
Módulo BLE que fica propagando tempos em tempos as temperatura, advertising.
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
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
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.
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 ...
Abra J-FLASH lite e grave o bootloader da Adafruit
Mudar NRF52840
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.
Copie
Criado pelo Autor
variant.h
viariant.cpp
ÓTIMA REFERENCIA PARA PINOS DO ARDUINO E PINOS (GPIOS) DO NINA B302
Consulte
ENC28J60
O módulo Ethernet ENC28J60 utiliza o novo IC controlador controlador independente Microchip ENC28J60 com uma série de recursos para lidar com a maioria dos requisitos de protocolo de rede. A placa se conecta diretamente à maioria dos microcontroladores com uma interface SPI padrão com uma velocidade de transferência de até 20MHz.
Conexão com NINA B302
static const uint8_t SS = (10);----> CS (ENC28J60)
static const uint8_t MOSI = PIN_SPI_MOSI; ----> SI (ENC28J60)
static const uint8_t MISO = PIN_SPI_MISO;----> SO (ENC28J60)
static const uint8_t SCK = PIN_SPI_SCK;----> SCK (ENC28J60)
#define PIN_SPI_MISO (24) //24 original IO1
#define PIN_SPI_MOSI (25) //25 original IO3
#define PIN_SPI_SCK (26) //26 original IO45
// D24 .. D26 (aka SPI pins)
32, // D24 is P1.00 (SPI MISO)
15, // D25 is P0.15 (SPI MOSI)
7, // D26 is P0.07 (SPI SCK )
14, // D10 is P0.14
Blynk
Blynk é uma plataforma com aplicativos iOS e Android para controlar
Arduino, Raspberry Pi e afins pela Internet.
Você pode criar facilmente interfaces gráficas para todos os seus
projetos simplesmente arrastando e soltando widgets
Instale um APP do BLYNK e crie uma conta. Crie um projeto de um FRONT END para acesso ao NINA B302
Então um TOKEN será gerado para o seu e-mail com instruções
Auth Token : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Happy Blynking!
-
Getting Started Guide -> https://www.blynk.cc/getting-started
Documentation -> http://docs.blynk.cc/
Sketch generator -> https://examples.blynk.cc/
Latest Blynk library -> https://github.com/blynkkk/blynk-library/releases/download/v0.6.1/Blynk_Release_v0.6.1.zip
Latest Blynk server -> https://github.com/blynkkk/blynk-server/releases/
-
https://www.blynk.cc
twitter.com/blynk_app
www.facebook.com/blynkapp
COPIE AS LIBRARIES PARA O ARDUINO
1) Copie para Sketch o exemplo a seguir. Ele fará um SCAN do BLE, pegará a temperatura e então enviará para o servidor BLYNK.
/*********************************************************************
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>
#define USE_UIP_ETHERNET true
#define BLYNK_PRINT Serial
#include <UIPEthernet.h>
#include <BlynkSimpleUIPEthernet.h>
#define USE_LOCAL_SERVER true
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
#if USE_LOCAL_SERVER
// Local Blynk Server
char token[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxf";
// Fill the name of Blynk Server
char server[] = "xxxxxxxxxx.ddns.net";
//char server[] = "****.ddns.net";
//char server[] = "192.168.2.112";
#else
//Cloud Blynk Server
char token[] = "******";
char server[] = "blynk-cloud.com";
#endif
#define BLYNK_HARDWARE_PORT 8080
#define BLYNK_HARDWARE_PORT 8080
WidgetLED led1(V1);
WidgetLCD lcd(V0);
unsigned short Temp_D1,Temp_D2;
BlynkTimer timer;
// V1 LED Widget is blinking
void blinkLedWidget()
{
if (led1.getValue())
{
led1.off();
Serial.println("LED on V1: off");
}
else
{
led1.on();
Serial.println("LED on V1: on");
}
}
int cnt = 0;
char Temp[32];
void doSomething(void)
{
Serial.println("============ Print Every 120s ============");
blinkLedWidget();
Serial.println("========== And Blink LED widget ==========");
sprintf(Temp,"%0d.%0d",Temp_D1,Temp_D2);
lcd.print(0,0,String(Temp));
}
void heartBeatPrint(void)
{
static int num = 1;
if (Blynk.connected())
Serial.print(F("B")); // For Blynk OK
else
Serial.print(F("F")); // Failure
if (num == 80)
{
Serial.println();
num = 1;
}
else if (num++ % 10 == 0)
{
Serial.print(F(" "));
}
}
void check_status()
{
static unsigned long checkstatus_timeout = 0;
#define STATUS_CHECK_INTERVAL 60000L
// Send status report every STATUS_REPORT_INTERVAL (60) seconds: we don't need to send updates frequently if there is no status change.
if ((millis() > checkstatus_timeout) || (checkstatus_timeout == 0))
{
heartBeatPrint();
checkstatus_timeout = millis() + STATUS_CHECK_INTERVAL;
}
}
#define BLYNK_CONNECT_TIMEOUT_MS 20000
#define USE_NON_BLOCKING_BLYNK false
void setup()
{
// Debug console
Serial.begin(115200);
while ( !Serial ) delay(10); // for nrf52840 with native usb
#if USE_NON_BLOCKING_BLYNK
Blynk.config(token, server, BLYNK_HARDWARE_PORT);
Blynk.connect(BLYNK_CONNECT_TIMEOUT_MS);
#else
//Blynk.begin(auth);
// You can also specify server:
Blynk.begin(token, server, BLYNK_HARDWARE_PORT);
#endif
if (Blynk.connected())
{
Serial.print(F("Conn2Blynk: server = "));
Serial.print(server);
Serial.print(F(", port = "));
Serial.println(BLYNK_HARDWARE_PORT);
Serial.print(F("Token = "));
Serial.print(token);
Serial.print(F(", IP = "));
Serial.println(Ethernet.localIP());
}
// Every 120s, doSomething => print and blink LED (V1) on APP
timer.setInterval(5000L, doSomething);
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 ...");
}
//DB:9C:ED:D2:A2:F7
unsigned char smart_watch_mac[] = {0xDB,0x9C,0xED,0xD2,0xA2,0xF7};
void scan_callback(ble_gap_evt_adv_report_t* report)
{
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])
{
// MAC is in little endian --> print reverse
Serial.printBufferReverse(report->peer_addr.addr, 6, ':');
Serial.printBuffer(report->data.p_data, report->data.len, '-');
Serial.println();
Serial.print(report->data.p_data[11]);
Serial.print(".");
Serial.println(report->data.p_data[12]);
Temp_D1 = report->data.p_data[11]; //to blynk
Temp_D2 = report->data.p_data[12]; //to blynk
}
// 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()
{
Blynk.run();
timer.run();
check_status();
}
Coloque o TOKEN e o servidor!
char server[] = "blynk-cloud.com";
Leia Atentamente
2) COMPILE E GRAVE
3) EXECUTE
4) EXECUTANDO
5) NO SEU APP CRIE UM LED VIRTUAL
Versão Melhorada!
Você pode cria o seu próprio BLYNK SERVER. Lembrando que deves abastecer com ENERGY
Questões: suporte@smartcore.com.br
FONTES:
THANKS TO Khoi Hoang
https://blynk.io/en/getting-started
http://docs.blynk.cc/#widgets-displays-led
https://github.com/khoih-prog/BlynkEthernet_WM
https://en.wikipedia.org/wiki/Bluetooth_low_energy_beacon
http://docs.blynk.cc/#getting-started-getting-started-with-the-blynk-app
Sobre a SMARTCORE
THANKS TO Khoi Hoang
https://blynk.io/en/getting-started
http://docs.blynk.cc/#widgets-displays-led
https://github.com/khoih-prog/BlynkEthernet_WM
https://en.wikipedia.org/wiki/Bluetooth_low_energy_beacon
http://docs.blynk.cc/#getting-started-getting-started-with-the-blynk-app
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.
Mais detalhes em www.smartcore.com.br