sexta-feira, 15 de janeiro de 2021

CRIANDO UM ANDROID APP PARA ACESSO AO NINA B302 COM O APPINVENTOR

 CRIANDO UM ANDROID APP COM O APPINVENTOR PARA ACESSO AO NINA B302 - MÉTODO SUPER RÁPIDO


MÓDULOS NINA

O objetivo deste BLOG é demonstrar como é possível utilizar o APPINVENTOR para criar uma aplicação no Android (APP) (BLE CENTRAL) e fazer um SCAN nos dispositivos NINA (BLE PERIPHERAL). Foi utilizado o BREAKOUT U-BLOX NINA B302 para o teste, uma vez encontrando é realizada a conexão e controle de um LED.

APPINVENTOR tem agora uma nova e completa LIB para BLE.

O aplicação no U-BLOX NINA B302 foi desenvolvido em JAVASCRIPT - ESPRUINO.




O App Inventor é um software web criado pela universidade americana Massachusetts Institute of Technology (MIT) que permite desenvolver aplicativos Android usando um navegador da Web e um telefone ou emulador conectados.

NOTA DO AUTOR: EMULADOR NÃO ACEITA BLE

Você cria aplicativos selecionando componentes para o seu aplicativo e montando blocos que especificam como os componentes devem se comportar.

Toda criação do aplicativo é feita de forma visual, juntando peças com peças como se fosse um quebra-cabeça.

Seu aplicativo aparece no telefone à medida que você adiciona peças a ele, para que você possa testar seu projeto à medida que você cria.

Quando terminar o projeto, você pode empacotar tudo e produzir um aplicativo executável para instalar em outros celulares.


Configurando o Ambiente


  1. Você não precisa baixar nada para o seu computador;
  2. Em seu telefone ou tablet, abra a Google Play Store, encontre e instale o aplicativo MIT AI2 Companion. O aplicativo Companion é um aplicativo Android que permite testar os aplicativos que você constrói à medida que os cria.
  3. De volta ao navegador do seu computador (Chrome, Firefox ou Safari), abra o App Inventor acessando http://ai2.appinventor.mit.edu/. Crie um novo projeto.
  4. No menu superior, clique em ‘Connect’ e ‘Connect to Companion’. Um QR Code aparecerá, utilize o MIT AI2 Companion para ler o código.

Configuração Alternativa

Para usar o emulador ou conectar seu celular via USB, primeiro você precisa instalar o software do App Inventor em seu computador (isso não é necessário para a solução via WI-FI). Siga as instruções abaixo.
  1. Faça o download e instale o App Inventor de acordo com seu sistema operacional:
    1. Mac OS X: http://appinv.us/aisetup_mac
    2. Windows: http://appinv.us/aisetup_windows
    3. Linux: http://appinv.us/aisetup_linux_deb
  2. Inicie o aiStarter (somente Windows e Linux)
    Este programa é o auxiliar que permite que o navegador se comunique com o emulador ou cabo USB.Em um Mac, o aiStarter será iniciado automaticamente quando você efetuar o login em sua conta e ele será executado em segundo plano.No Windows, haverá atalhos para o aiStarter a partir da Área de Trabalho e do Menu Iniciar. Se você quiser usar o emulador com o App Inventor, você precisará iniciar manualmente o aiStarter no seu computador quando fizer login.No Linux, o aiStarter estará na pasta /usr/google/commands-for-Appinventor e você precisará inicia-lo manualmente. Você pode iniciá-lo a partir da linha de comando /usr/google/appinventor/commands-for-Appinventor/aiStarter &

APP INVENTOR E BLE

O App Inventor 2 é uma maneira bastante fácil de criar aplicativos para Android. Ele usa o sistema de programação Blockly em vez de texto e faz muito trabalho pesado para você. Embora inicialmente pareça simples, você pode criar alguns aplicativos surpreendentemente complexos. O AI2 está constantemente sendo desenvolvido e atualizado e uma das atualizações mais recentes é a nova extensão BLE. Há uma extensão do BLE há algum tempo, mas isso sempre foi experimental. A nova extensão espera substituir o antigo módulo por um novo sistema mais abrangente e estável. Observe que, no momento da redação deste artigo, a nova extensão do BLE ainda está na versão beta, mas em meus próprios testes eu achei que ela funcionava bem e era muito estável.

Para tirar o máximo proveito deste guia, você deve estar um pouco familiarizado com o App Inventor e como usar os blocos de programação. como tal, não falo sobre muitos detalhes sobre o App Inventor 2 e, se você quiser saber mais, comece com os tutoriais do App Inventor 2.

A nova extensão BLE faz parte do AI2 IOT (tudo parece estar indo muito) e detalhes sobre isso podem ser encontrados no site AI2 IOT. Para detalhes sobre a extensão real e os blocos, consulte a página Extensão BluetoothLE. A nova extensão do BLE pode ser baixada em http://iot.appinventor.mit.edu/assets/resources/edu.mit.appinventor.ble.aix. Esteja ciente de que a extensão, embora razoavelmente madura, ainda está em teste e algumas coisas podem mudar. Você pode baixar a versão que estou usando para os exemplos abaixo aqui. Observe que quando você salva um arquivo aia, as extensões são salvas com eles. Isso significa que você não precisa continuar importando as extensões toda vez que trabalha em um aplicativo.



Espruino é um intérprete de JavaScript para microcontroladores que torna o desenvolvimento de software embarcado rápido e fácil. O intérpretador Espruino é um firmware de código aberto que roda em uma variedade de microcontroladores diferentes.

O Espruino em si não é apenas o firmware ou hardware do interpretador - há também o IDE da Web, ferramentas de linha de comando, documentação, tutoriais e módulos que formam uma solução completa para desenvolvimento de software embarcado.
 
Grave o código HEX do JAVASCRIPT usando o utility J-FLASH LITE ou NRFGO STUDIO no NINA B302



Resete o NINA B302

Instale o ESPRUINO IDE (Native)

Instale o USB DONGLE CSR 4.0 (drivers)


Mas atenção!

Para o Windows 8.1 e posterior
O IDE é capaz de usar os drivers BLE do próprio Windows. A única configuração necessária é que você vá para as configurações de Bluetooth do seu sistema e clique em Conectar (Parear no Windows 10) no seu dispositivo NINA B302. Isso expõe ao sistema e garante que ele apareça no IDE da Web. Para o Windows anterior ao 8.1
Como as versões do Windows anteriores à 8.1 não suportam Web Bluetooth no sistema operacional, o noble (que o Espruino IDE usa) precisa acessar diretamente o adaptador BLE - portanto, é necessário garantir que o driver WinUSB seja carregado para ele (como oposição a um driver específico do fabricante). Baixe o Zadig e execute-o - é apenas um executável Vá para Opções -> Listar todos os dispositivos Escolha o seu adaptador BLE (o meu é CSR8510 A10) Certifique-se de que o WinUSB esteja definido como o driver Agora, quando você executar o IDE da Web nativo e clicar em "conectar" no canto superior esquerdo, deverá ver uma lista de dispositivos BLE conectáveis.



Execute o ESPRUINO IDE (Native)


Faça o SCAN para encontrar o NINA B302


Conecte ao NINA B302


Transfira o SCRIPT JAVASCRIPT abaixo 


No B302 transfira o seguinte código Javascript e execute

NRF.setServices({ "3e440001-f5bb-357d-719d-179272e4d4d9": { "3e440002-f5bb-357d-719d-179272e4d4d9": { value : [0], maxLen : 1, writable : true, onWrite : function(evt) { // verfica dado escrito na Characteristic, entao envia para LED if(evt.data[0]===0x00) D13.write(0); if(evt.data[0]===0x01) D13.write(1); } } } }, { uart : false }); // Change name to 'Flag' NRF.setAdvertising({}, {name:"Flag"});





Veja os serviços e características do BLE peripheral

SOBRE BLE (RESUMO)

Esta é uma breve introdução ao BLE e não chega perto de toda a história.

O BLE não é uma atualização para o Bluetooth Classic, é um sistema diferente com diferentes usos pretendidos. O BLE funciona de uma maneira muito diferente do Bluetooth anterior. O BLE foi projetado para aplicações de baixa energia e consegue isso usando pacotes de dados pequenos e pouco frequentes. Na verdade, ele não foi projetado para conexões contínuas e grandes quantidades de dados. Para isso, o Bluetooth Classic é uma escolha melhor. Em essência, o BLE atinge seu baixo consumo de energia por não estar conectado com muita frequência, ao contrário do Bluetooth Classic, que mantém uma conexão constante.

Existem duas maneiras pelas quais os dispositivos BLE podem se comunicar; Emissora + Observadora e Central + Periférica.

Com o Broadcaster + Observer, não há uma conexão padrão, o Broadcaster, geralmente algum tipo de sensor, envia sinais periódicos (pacotes de publicidade) que o Observer escuta. O radiodifusor normalmente não sabe se algo está escutando ou não.
O cenário Central + Periférico é mais parecido (mas não exatamente o mesmo) que a conexão clássica. Quando o dispositivo central (mestre) encontra um dispositivo periférico (escravo) ao qual deseja se conectar, inicia uma conexão e assume a função principal de gerenciar a conexão e os tempos.
Como o Bluetooth Classic pressupõe que você usará uma única conexão, a conexão será estabelecida por um tempo e não precisará ser particularmente rápida na conexão. O BLE, por outro lado, foi projetado para fazer muitas conexões de curto prazo e, portanto, foi projetado para conectar e desconectar muito rapidamente.

BLE é tudo sobre serviços e características. Um serviço é uma coleção de características relacionadas e uma característica é onde os dados estão. Em um dispositivo BLE típico, você pode ter um serviço que contém características relacionadas às propriedades dos módulos, como; o nome do fabricante, o nome do dispositivo, o ID do firmware e / ou o número da versão. Também pode ter um segundo serviço que agrupa as características que mantêm os dados reais. Podem ser coisas como temperatura, umidade, brilho. Isso significa que, para usar o BLE, você geralmente precisa conhecer as características que deseja usar (mais especificamente os UUIDs para as características).

Com o BLE, os valores dessas propriedades estão disponíveis o tempo todo. Se você quiser saber o nome do fabricante, leia a válvula na característica do nome do fabricante. Se você quiser saber a temperatura, leia o valor da característica de temperatura. Isso é muito diferente de como o Bluetooth clássico funciona. Com o Bluetooth clássico, você tem apenas um canal de comunicação e todos os dados são enviados por um canal.

Cada serviço e característica possui um identificador exclusivo chamado UUID. Este é basicamente um número de 24 bits.

APPINVENTOR APP

Atualize com a última versão do BLUETOOTH BLE AIX


Monte o seguinte projeto no APPINVENTOR


Transfira para o seu celular pelo seu método selecionado!

O autor utilizou QRCODE o qual deve ser capturado pelo APPINVENTOR UTILITY instalado no ANDROID.


Software no Peripheral

Basicamente cria uma característica associada ao LED, o qual se encontra na GPIO1. Quando a Central (APP) escreve nela, o valor é transferido para o LED


Software no Central

Basicamente faz um SCAN pelos BLE e se conecta ao Peripheral de nome Flag. Após conectado é enviado um byte para a característica associada ao LED.

"3e440001-f5bb-357d-719d-179272e4d4d9": { "3e440002-f5bb-357d-719d-179272e4d4d9": {




Questões: suporte@smartcore.com.br



Sobre a SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portfó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

segunda-feira, 6 de abril de 2020

WINDOWS 7 ACESSANDO NINA

CRIANDO UMA APLICAÇÃO EM NODEJS (WINDOWS 7) PARA ACESSAR OS 

MÓDULOS NINA

O objetivo deste BLOG é demonstrar como é possível utilizar o NODEJS para criar uma aplicação no WINDOWS 7 (ble não nativo) para fazer um SCAN nos dispositivos NINA que estejam fazendo advertising de dados. Foi utilizado o EVK-NINA-W para o teste o qual foi utilizado para ser o peripheral para SCAN e criado alguns serviços!


A Node.js BLE (Bluetooth Low Energy) central module.


O que é Node.js?

Node.js não é uma linguagem de programação. Você programa utilizando a linguagem JavaScript, a mesma usada há décadas no client-side das aplicações web. Javascript é uma linguagem de scripting interpretada, embora seu uso com Node.js guarde semelhanças com linguagens compiladas, uma vez que máquina virtual V8 (veja mais adiante) faz etapas de pré-compilação e otimização antes do código entrar em operação.

Node.js não é um framework Javascript. Ele está mais para uma plataforma de aplicação, na qual você escreve seus programas com Javascript que serão compilados, otimizados e interpretados pela máquina virtual V8. Essa VM é a mesma que o Google utiliza para executar Javascript no browser Chrome, e foi a partir dela que o criador do Node.js, Ryan Dahl, criou o projeto. O resultado desse processo híbrido é entregue como código de máquina server-side, tornando o Node.js muito eficiente na sua execução e consumo de recursos.

Node.js é uma tecnologia assíncrona que trabalha em uma única thread de execução. Por assíncrona entenda que cada requisição ao Node.js não bloqueia o processo do mesmo, atendendo a um volume absurdamente grande de requisições ao mesmo tempo mesmo sendo single thread.

Imagine que existe apenas um fluxo de execução (chamado de Event Loop). Quando chega uma requisição, ela entra nesse fluxo, a máquina virtual Javascript verifica o que tem de ser feito, delega a atividade (consultar dados no banco, por exemplo) e volta a atender novas requisições enquanto este processamento paralelo está acontecendo. Quando a atividade termina (já temos os dados retornados pelo banco), ela volta ao fluxo principal para ser devolvida ao requisitante.

Isso é diferente do funcionamento tradicional da maioria das linguagens de programação, que trabalham com o conceito de multi-threading, onde, para cada requisição recebida, cria-se uma nova thread para atender à mesma. Isso porque a maioria das linguagens tem comportamento bloqueante na thread em que estão, ou seja, se uma thread faz uma consulta pesada no banco de dados, a thread fica travada até essa consulta terminar.


Esse modelo de trabalho tradicional, com uma thread por requisição (multi-thread) é mais fácil de programar, mas mais oneroso para o hardware, consumindo muito mais recursos.

Requisitos para instalação para o Aplicativo BLE


  • INSTALE O VISUAL STUDIO COMMUNITY (custom, programming language: Visual C++) https://visualstudio.microsoft.com/pt-br/
  • INSTALE PYTHON 2.7 (habilite o PATH) (www.python.org)
  • INSTALE NODEJS (www.nodejs.org)
Tenha em mãos um destes BLE USB



  • ZADIG (http://zadig.akeo.ie/)

Baixe o Zadig e execute-o - é apenas um executável
Vá para Opções -> Listar todos os dispositivos
Escolha o seu adaptador BLE (o meu é CSR8510 A10)
Certifique-se de que o WinUSB esteja definido como o driver



  • BAIXE OS EXEMPLOS NOBLE EM C:\ QUE SE ENCONTRAM EM

Se você tem o GIT instalado no seu PC, pode usar
C:\git clone https://github.com/noble/noble
ou pegar o ZIP e descompactar em C:\




  • INSTALE OS PACOTES DO NODEJS



  • ENTRE EM EXEMPLOS E EXECUTE
C:\noble\examples>node advertisement-discovery.js


Agora marque o MAC do dispositivo CONNECTABLE seu, no caso, db:9c:ed:d2:a2:f7

E execute

C:\noble\examples>node peripheral-explorer.js db:9c:ed:d2:a2:f7


Veja os serviços e caracteristicas do BLE peripheral

SOBRE BLE (RESUMO)

Esta é uma breve introdução ao BLE e não chega perto de toda a história.

O BLE não é uma atualização para o Bluetooth Classic, é um sistema diferente com diferentes usos pretendidos. O BLE funciona de uma maneira muito diferente do Bluetooth anterior. O BLE foi projetado para aplicações de baixa energia e consegue isso usando pacotes de dados pequenos e pouco frequentes. Na verdade, ele não foi projetado para conexões contínuas e grandes quantidades de dados. Para isso, o Bluetooth Classic é uma escolha melhor. Em essência, o BLE atinge seu baixo consumo de energia por não estar conectado com muita frequência, ao contrário do Bluetooth Classic, que mantém uma conexão constante.

Existem duas maneiras pelas quais os dispositivos BLE podem se comunicar; Emissora + Observadora e Central + Periférica.

Com o Broadcaster + Observer, não há uma conexão padrão, o Broadcaster, geralmente algum tipo de sensor, envia sinais periódicos (pacotes de publicidade) que o Observer escuta. O radiodifusor normalmente não sabe se algo está escutando ou não.
O cenário Central + Periférico é mais parecido (mas não exatamente o mesmo) que a conexão clássica. Quando o dispositivo central (mestre) encontra um dispositivo periférico (escravo) ao qual deseja se conectar, inicia uma conexão e assume a função principal de gerenciar a conexão e os tempos.
Como o Bluetooth Classic pressupõe que você usará uma única conexão, a conexão será estabelecida por um tempo e não precisará ser particularmente rápida na conexão. O BLE, por outro lado, foi projetado para fazer muitas conexões de curto prazo e, portanto, foi projetado para conectar e desconectar muito rapidamente.

BLE é tudo sobre serviços e características. Um serviço é uma coleção de características relacionadas e uma característica é onde os dados estão. Em um dispositivo BLE típico, você pode ter um serviço que contém características relacionadas às propriedades dos módulos, como; o nome do fabricante, o nome do dispositivo, o ID do firmware e / ou o número da versão. Também pode ter um segundo serviço que agrupa as características que mantêm os dados reais. Podem ser coisas como temperatura, umidade, brilho. Isso significa que, para usar o BLE, você geralmente precisa conhecer as características que deseja usar (mais especificamente os UUIDs para as características).

Com o BLE, os valores dessas propriedades estão disponíveis o tempo todo. Se você quiser saber o nome do fabricante, leia a válvula na característica do nome do fabricante. Se você quiser saber a temperatura, leia o valor da característica de temperatura. Isso é muito diferente de como o Bluetooth clássico funciona. Com o Bluetooth clássico, você tem apenas um canal de comunicação e todos os dados são enviados por um canal.

Cada serviço e característica possui um identificador exclusivo chamado UUID. Este é basicamente um número de 24 bits.

PREPARANDO AMBIENTE PARA PROGRAMAR O NINA W102

Baixe e instale a última versão da IDE do Arduino

https://www.arduino.cc/en/Main/Software

Execute a IDE do Arduino e click em files-->preferences


e digite
https://dl.espressif.com/dl/package_esp32_index.json e click OK

Vá agora em Tools > Board > Boards Manager



Procure por "ESP32 by Espressif" e instale


Aguarde alguns minutos para instalação do SDK. 

Selecione em tools-->board o módulo u-blox NINA-W10 series



Crie um Sketch novo e copie o programa abaixo

Exemplo ble_server

/*
    Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleServer.cpp
    Ported to Arduino ESP32 by Evandro Copercini
    updates by chegewara
*/

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>

// See the following for generating UUIDs:
// https://www.uuidgenerator.net/

#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");

  BLEDevice::init("Long name works now");
  BLEServer *pServer = BLEDevice::createServer();
  BLEService *pService = pServer->createService(SERVICE_UUID);
  BLECharacteristic *pCharacteristic = pService->createCharacteristic(
                                         CHARACTERISTIC_UUID,
                                         BLECharacteristic::PROPERTY_READ |
                                         BLECharacteristic::PROPERTY_WRITE
                                       );

  pCharacteristic->setValue("Hello World says Neil");
  pService->start();
  // BLEAdvertising *pAdvertising = pServer->getAdvertising();  // this still is working for backward compatibility
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pAdvertising->setScanResponse(true);
  pAdvertising->setMinPreferred(0x06);  // functions that help with iPhone connections issue
  pAdvertising->setMinPreferred(0x12);
  BLEDevice::startAdvertising();
  Serial.println("Characteristic defined! Now you can read it in your phone!");
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(2000);
}
Atualize os BINS abaixo do Package ESP32

INSTALE AS BLE LIBS DE KOLBAN

Agora compile



Selecione a COM, pressione o botão BOOT e então RESET no EVK-NINA-W e transfira o programa




OBERVE OS ID

#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

Veja o SCAN encontrou o Serviço!



Mãos à obra, faça um exemplo para ler a Característica!

Veja os métodos aqui



BLE SCAN PC COM VISUAL C#

Projeto completo


Questões: suporte@smartcore.com.br

FONTES: 


https://www.youtube.com/watch?v=mL9B8wuEdms&app=desktop


Sobre a SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portfó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