quinta-feira, 11 de novembro de 2021

U-BLOX NINA B302 (programado com VISUINO) acessando via WIFI (AIRLIFT) SERVIDOR HTTP (NODE-RED) VIA REMOT3.IT - VIA SOCKETS


O objetivo deste BLOG é mostrar um exemplo em VISUINO que permite o NINA B302 acessar via WIFI um servidor WEB (em seu PC) desenvolvido em NODE-RED. Utiliza o COPROCESSOR W102 (AIRLIFT), via 802.11. Para o servidor WEB (DASHBOARDS) ser acessado remotamente, será utilizado Remot3.it.

WIFI COPROCESSOR é baseado no NINA W102, o qual permite que você tenha acesso a INTERNET, via SPI.


COPROCESSOR PARA O NINA B302 - Suporta AIRLIFT (WIFININA)

Wi-Fi 802.11b/g/n
Dual-Mode Bluetooth v4.2
Poderoso suporte de CPU aberta para aplicativos personalizados
Tamanho pequeno e várias opções de antena
Pino compatível com outros módulos NINA
Certificação global
Módulo baseado no ESP32, com 2MB FLASH

POR QUE AIRLIFT ?

Ter o WiFi gerenciado por um chip separado significa que seu código é mais simples, você não precisa armazenar dados do soquete ou compilar e depurar uma biblioteca SSL. Com o AirLift, você pode enviar comandos básicos, mas poderosos baseados em socket, sobre SPI de 8MHz para transferência de dados de alta velocidade. O U-BLOX NINA W102 pode lidar com todo o trabalho pesado de conexão a uma rede WiFi e transferir dados de um site e usar a mais recente criptografia TLS/SSL (tem certificados radiculares pré-gravados).

NODE-RED

O Node-RED é uma ferramenta de programação baseada em fluxo, originalmente desenvolvida pela equipe de Serviços de Tecnologia Emergentes da IBM e agora parte da Fundação JS .

Programação Baseada em Fluxo

Inventado por J. Paul Morrison na década de 1970, a programação baseada em fluxo é uma maneira de descrever o comportamento de uma aplicação como uma rede de caixas pretas, ou “nós”, como são chamados no Node-RED. Cada nó tem um propósito bem definido; é dado alguns dados, faz algo com esses dados e depois passa esses dados. A rede é responsável pelo fluxo de dados entre os nós.

É um modelo que se presta muito bem a uma representação visual e o torna mais acessível a uma ampla gama de usuários. Se alguém pode dividir um problema em etapas discretas, ele pode analisar um fluxo e ter uma noção do que está fazendo; sem ter que entender as linhas individuais de código dentro de cada nó.


Instale NODE-RED em sua plataforma, pode ser RASPBERRY também


Bem-vindo ao remote.it!


Conecte e controle seus dispositivos de qualquer lugar do mundo, como se estivesse na sua rede local. Não é necessário enviar um técnico, corrigir problemas remotamente. Faça uma conexão única ou sempre fique conectado aos seus dispositivos. 

Nesta seção, mostraremos como instalar o remote.it em um dispositivo real e iniciar a conexão e o controle remotos com segurança.

MONTAGEM DO BREAKOUT COM  U-BLOX NINA B302 E U-BLOX NINA W102


Adquirimos então os seguintes componentes



Montado ficou assim

O esquema elétrico é este


Algumas características do Kit

-Botão de RESET;
-Botão de Modo BOOTLOADER (W102);
-Acesso às várias GPIOS.


VISUINO

Visuino é o mais recente software inovador da Mitov Software. Um ambiente de programação visual que permite programar suas placas Arduino. ... Os componentes encontrados no software Visuino representam seus componentes de hardware e você pode criar e projetar facilmente seus programas usando o recurso de arrastar e soltar.

Instalação do VISUINO 8.0.0.36

Baixe em  https://www.visuino.com/ e instale


Gravando bootloader BLE SENSE 32 no U-BLOX NINA B302


Use o gravador SEGGER JLINK para gravar o BREAKOUT com módulo U-BLOX 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


Abra J-FLASH lite e grave o bootloader para o U-BLOX NINA B302 (BLE SENSE 32)


O mesmo se encontra em 

C:\Users\Usuario\AppData\Local\Arduino15\packages\arduino\hardware\mbed\2.4.1\bootloaders\nano33ble

Com ele, você poderá transferir programas via USB (serial) (SAM-BA extended). 

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


Gravando "AIRLIFT" NO  U-BLOX NINA W102

Baixe o BIN 

Execute o ESP32 DOWLOAD TOOL ou ESPTOOL


Ligue os pino do U-BLOX NINA B302 nos pino do U-BLOX NINA W102 

 

BREAKOUT B302

 NRF52840

BREAKOUT W102

 ESP32

CS

IO36

P1.02

IO28

5

READY

IO25

P0.04

IO7

33

RESET

IO21

P1.12

RESET

RESET

SCK

IO1

P0.13

IO29

18

MOSI

IO35

P1.01

IO31

14

MISO

IO34

P1.08

IO1

23

GPIO0

IO27

P0.05

IO27

0

 

BREAKOUT B302

NRF52840

BREAKOUT W102

ESP32

TABELA DE CONEXÃO

NINA B302 W102
-MOSI IO35 IO31
-MISO IO34 IO1
-CLK IO1 IO29
-CS         IO36 IO28
-RST IO21 RST
-READY IO25 IO7
-GPIO0 IO27  IO27
TABELA SIMPLIFICADA


APLICAÇÃO VISUINO

Mandando dados ao NODE-RED via SOCKETS

Click no módulo AIRLIFT e coloque as credenciais do WIFI.


Click no módulo SOCKET para configurações de acesso a porta 5900 do NODE-RED


COMPILANDO


TRANSFERINDO PROGRAMA


{"api_key":"tPmAT5Ab3j7F9","sensor_name":"BME280","temperature":24.25,"humidity":49.54,"pressure":1005.14}

EXECUTANDO NODE-RED


INSTALAÇÃO DO REMOT3.IT

Instale DESKTOP Remot3 e crie sua conta.


No Remot3 (DESKTOP) você tem que compartilhar a WEB SERVER criada pelo NODE-RED, sendo a mesma na porta 1880

localhost:1880/ui




Adicione /ui (http://[host]:[port]/ui) para acessar DASHBOARDS


Projeto NODE-RED






Interface de Sensores (Dashboard) no servidor WEB sendo acessado localmente.


Interface de Sensores (Dashboard) no servidor WEB sendo acessado remotamente (Remot3)

Pacote Dashboard para NODE-RED


Projeto Node-Red server - Import

   [
    {
        "id": "5ddcb592.3a70dc",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": ""
    },
    {
        "id": "904d0ec6.732d3",
        "type": "json",
        "z": "5ddcb592.3a70dc",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": true,
        "x": 450,
        "y": 340,
        "wires": [
            [
                "8deb0cec.b657"
            ]
        ]
    },
    {
        "id": "f32e4a01.6f0ef8",
        "type": "ui_gauge",
        "z": "5ddcb592.3a70dc",
        "name": "",
        "group": "b5806088.39ff4",
        "order": 4,
        "width": 0,
        "height": 0,
        "gtype": "gage",
        "title": "Pressure",
        "label": "hPa",
        "format": "{{value}}",
        "min": 0,
        "max": "1200",
        "colors": [
            "#b366ff",
            "#8000ff",
            "#440088"
        ],
        "seg1": "",
        "seg2": "",
        "x": 880,
        "y": 600,
        "wires": []
    },
    {
        "id": "8e71a3f.85b6e6",
        "type": "ui_gauge",
        "z": "5ddcb592.3a70dc",
        "name": "",
        "group": "b5806088.39ff4",
        "order": 3,
        "width": 0,
        "height": 0,
        "gtype": "gage",
        "title": "Humidity",
        "label": "%",
        "format": "{{value}}",
        "min": 0,
        "max": "100",
        "colors": [
            "#0080ff",
            "#0062c4",
            "#002f5e"
        ],
        "seg1": "",
        "seg2": "",
        "x": 880,
        "y": 540,
        "wires": []
    },
    {
        "id": "fb783753.cabd68",
        "type": "ui_gauge",
        "z": "5ddcb592.3a70dc",
        "name": "",
        "group": "b5806088.39ff4",
        "order": 2,
        "width": 0,
        "height": 0,
        "gtype": "gage",
        "title": "Temperature",
        "label": "ºC",
        "format": "{{value}}",
        "min": 0,
        "max": "38",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "seg1": "",
        "seg2": "",
        "x": 890,
        "y": 480,
        "wires": []
    },
    {
        "id": "8deb0cec.b657",
        "type": "function",
        "z": "5ddcb592.3a70dc",
        "name": "JSON or URL Encoded",
        "func": "var msg0 = { payload: msg.payload.api_key };\nvar msg1 = { payload: msg.payload.sensor_name };\nvar msg2 = { payload: msg.payload.temperature };\nvar msg3 = { payload: msg.payload.humidity };\nvar msg4 = { payload: msg.payload.pressure };\n\nreturn [msg0, msg1, msg2, msg3, msg4];",
        "outputs": 5,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 630,
        "y": 340,
        "wires": [
            [
                "c342a60f7c73cf58"
            ],
            [
                "ecd86985.bf61c8"
            ],
            [
                "fb783753.cabd68"
            ],
            [
                "8e71a3f.85b6e6"
            ],
            [
                "f32e4a01.6f0ef8"
            ]
        ]
    },
    {
        "id": "c408bea1f623fc05",
        "type": "tcp in",
        "z": "5ddcb592.3a70dc",
        "name": "bme280",
        "server": "server",
        "host": "",
        "port": "5900",
        "datamode": "stream",
        "datatype": "utf8",
        "newline": "",
        "topic": "bme280",
        "base64": false,
        "x": 140,
        "y": 340,
        "wires": [
            [
                "1f5e199db05b7508"
            ]
        ]
    },
    {
        "id": "ecd86985.bf61c8",
        "type": "ui_text",
        "z": "5ddcb592.3a70dc",
        "group": "b5806088.39ff4",
        "order": 1,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "Sensor Name",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "className": "",
        "x": 900,
        "y": 420,
        "wires": []
    },
    {
        "id": "1f5e199db05b7508",
        "type": "function",
        "z": "5ddcb592.3a70dc",
        "name": "",
        "func": "if(msg.payload.trim()===\"\"){\n    return;\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 300,
        "y": 340,
        "wires": [
            [
                "904d0ec6.732d3"
            ]
        ]
    },
    {
        "id": "c342a60f7c73cf58",
        "type": "ui_text",
        "z": "5ddcb592.3a70dc",
        "group": "b5806088.39ff4",
        "order": 4,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "API_Key",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "className": "",
        "x": 890,
        "y": 360,
        "wires": []
    },
    {
        "id": "b5806088.39ff4",
        "type": "ui_group",
        "name": "SENSORS",
        "tab": "667c00e9.9ac12",
        "order": 1,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "667c00e9.9ac12",
        "type": "ui_tab",
        "name": "HTTP",
        "icon": "dashboard",
        "order": 1,
        "disabled": false,
        "hidden": false
    }
]

Remot3 APP







REMOT3.IT em ação


Unexpected end of JSON input in Json Node - General - Node-RED Forum (nodered.org)

Sobre a SMARTCORE

A SmartCore fornece módulos para comuniçã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 

Nenhum comentário:

Postar um comentário