sexta-feira, 20 de agosto de 2021

U-BLOX NINA B302 - ACESSE EM QUALQUER PARTE DO MUNDO VIA OPENWRT

U-BLOX NINA B302
ACESSE EM QUALQUER PARTE DO MUNDO

O objetivo deste BLOG é demonstrar como é possível acessar o NINA B302 (já conectado à INTERNET via WIFININA - W102) em qualquer parte do mundo via Remo3.it.

No NINA B302 estará rodando um WEBSERVER na porta 80. Este acesso será possível através de um módulo baseado no OPENWRT, conectado na mesma rede, no qual é instalado um aplicativo da empresa REMOT3.IT, basta apontar para a Porta/Serviço do NINA B302 e pronto, acessar de qualquer lugar.

Remote.it facilita o acesso a serviços e dispositivos na nuvem e no campo.

WIFININA  W102 - COPROCESSOR PARA O NINA B302

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

Veja BLOG

Colocando comandos AT no NINA W-10X (SERIAL) e WIFININA (SPI): ACESSO À WIFININA VIA ARDUINO NINA W102 (nina-w102-at-commands.blogspot.com)

Utilize a programação clássica com Sockets do Arduino!



Módulo OpenWRT rodando pacote REMOT3.IT

OpenWrt (do roteador sem fio aberto) é um projeto de código aberto para sistemas operacionais embarcados baseados no Linux, usado principalmente em dispositivos embarcados para rotear o tráfego de rede.

O OpenWrt é configurado usando uma interface de linha de comando (ash shell) ou uma interface web (LuCI). Existem cerca de 3500 pacotes de software opcionais disponíveis para instalação através do sistema de gerenciamento de pacotes opkg.

O OpenWrt pode ser executado em vários tipos de dispositivos, incluindo roteadores CPE, gateways residenciais, smartphones, computadores de bolso (por exemplo, Ben NanoNote). Também é possível executar o OpenWrt em computadores pessoais e laptops, que são mais comumente baseados na arquitetura x86.

No LINK SMART 7688 foi colocado a última versão do OpenWRT do repositório, atualizado via TFTP durante BOOT.


NINA B302

MONTAGEM

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);
-Plugável no PROTOBOARD;
-Acesso às várias GPIOS.

Pequena 


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



Ó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

Ligue os pino do NINA B302 no NINA W102 (com WIFININA GRAVADO)

 

BREAKOUT B3

 

BREAKOUT W1

 

CS

IO1

P0.13

IO28

5

READY

IO2

P0.14

IO7

33

RESET

IO21

P1.12

RESET

RESET

SCK

IO45

P0.07

IO29

18

MOSI

IO3

P0.15

IO31

14

MISO

IO8

P1.00

IO1

23

GPIO0

IO4

P0.16

IO27

0

 

 

 

 

 




INSTALE LIB WIFI GENERIC - EXEMPLOS QUE USAM W102 COPROCESSOR

Thanks to Khoi Hoang to help to port WIFININA GENERIC to NINA B302

https://github.com/khoih-prog/WiFiNINA_Generic


Compile o programa WifiWebServer 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!

Abra a serial



COMO ACESSAR ESTA PÁGINA REMOTAMENTE ?



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.

Aqui estão os passos de maneira resumida, apenas com dicas, maiores detalhes, visite o site do
REMOT3.IT


Neste exemplo, usaremos o mini roteador LINKIT SMART 7688.  O procedimento deve ser semelhante para outros dispositivos baseados em OpenWrt também.

Conecte a porta WAN do roteador a uma conexão ativa de internet usando um cabo CAT-5.  A conexão com a internet pode ser a tomada RJ-45 no modem do cabo ou uma porta LAN no roteador existente, se acontecer de você já estar usando um roteador diferente.

Conecte seu PC à porta LAN ethernet do LINKIT SMART 7688 (Roteador) ou conecte-se sem fio.

  • Crie uma conta remote.it
  • No console, execute os seguintes comandos:

wget https://downloads.remote.it/openwrt/latest/remoteit.ipk

opkg update

opkg install ./remoteit.ipk


Se seguir as instruções acima falhar, você pode não ter o suporte SSL ativado para wget.  Você pode ver o erro mostrado abaixo ou algo semelhante.

root@device:~# wget https://downloads.remote.it/openwrt/latest/remoteit.ipk
wget: Suporte SSL não disponível, por favor instale um dos pacotes libustream-.*[ssl|tls], bem como os pacotes ca-bundle e ca-certificates.
Se isso acontecer, recomendamos que você use o comando curl em vez disso.  Isso também exigirá que o suporte ssl seja instalado.

Código de reclamação
Quando o instalador remoto for concluído, ele exibirá um curto código de reclamação alfanumérico que você precisará inserir no aplicativo Desktop.

  • Depois de instalar o Remoteit Desktop, abra o aplicativo e faça login em sua conta. Certifique-se de que está na guia "Dispositivos" e clique no "+" no canto superior direito do painel esquerdo:

Uma caixa de diálogo aparecerá onde você deve colar o código de registro (reclamação) que você copiou no final da etapa anterior.

Depois de digitar o código de registro, clique no botão azul "Registrar". Após 5 a 10 segundos, você deve ver uma notificação de que o registro foi bem sucedido e você deve ver o novo dispositivo em sua lista de Dispositivos online.

OpenWrt como device, podes utilizá-lo para se conectar aos serviços
  • Cadastrando SERVIÇOS (vínculo no NINA B302)

 NINA B302 - Porta 80 e o IP
(Será necessário executar o Software do NINA B302 para descobrir o IP)


  • Acesse NINA B302 via DESKTOP ou VIA APP
Local


Via Portal Remot3.it


click Agora em WebProtocol - nina b302
  
Copie e Cole no seu BROWSER

Sucesso!

U-BLOX NINA B302

Dúvidas:
suporte@smartcore.com.br

Referências:

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 

sábado, 14 de agosto de 2021

U-BLOX NINA B302 e WIFI - ARDUINO - W106 AT COMMANDS - ACESSADO DE QUALQUER PARTE DO MUNDO

 U-BLOX NINA B302 e WIFI - ARDUINO - W106 AT COMMANDS - ACESSADO DE QUALQUER PARTE DO MUNDO

O objetivo deste BLOG é demonstrar como é possível acessar o NINA B302 (em uma rede LAN) de qualquer parte do mundo. 

O exemplo programará o ROUTER para que direcione os acessos via WAN para a LAN, onde está o NINA B302 rodando uma aplicação WEB SERVER.

O exemplo também atualizará a tabela de DNS (DUCKDNS.ORG) para que sempre tenha o acesso ao IP PÚBLICO de sua máquina e então o IP LOCAL onde está o seu NINA B302.

Veja a vantagem:

Muitos de nós estão encaminhando manualmente a porta no dispositivo de gateway da Internet (IGD, roteador) para fornecer acesso aos serviços da Web locais da Internet.

Esta biblioteca fornece a maneira mais fácil de encaminhar automaticamente a porta usando o Simple Service Discovery Protocol (SSDP).

O SSDP fornece um mecanismo pelo qual clientes de rede, com pouca ou nenhuma configuração estática, podem descobrir serviços de rede. O SSDP consegue isso fornecendo suporte de descoberta multicast, bem como notificação baseada em servidor e roteamento de descoberta.

O SSDP é usado para anúncio e descoberta de serviços de rede e informações de presença. Ele realiza a tarefa sem assistência de mecanismos de configuração baseados em servidor, como protocolo de configuração dinâmica de hosts (DHCP) ou sistema de nomes de domínio (DNS), e sem configuração estática especial de um host de rede. O SSDP é a base do protocolo de descoberta de Universal Plug and Play (UPnP) e destina-se ao uso em ambientes residenciais ou de pequenos escritórios.

Esta biblioteca UPnP_Generic é criada para atualizar automaticamente seus IGDs com as informações de encaminhamento de porta solicitadas, usando uma das muitas placas / blindagens disponíveis. Consulte Placas atualmente suportadas.

O tempo entre as verificações para atualizar os mapeamentos de porta UPnP é configurável para corresponder ao seu caso de uso e é definido nos exemplos em 10 minutos. O LEASE_DURATION também é configurável e padrão para 10 horas (36000s). O nome do servidor virtual também pode ser especificado no esboço e é mostrado no IGD, por exemplo, NRF52-W5X00.


O objetivo deste BLOG é mostrar um exemplo em ARDUINO que permite o NINA B302 se transformar num webserver WIFI, utilizando o W102 (COMANDOS AT) COMO COPROCESSOR WIFI 802.11.

Utilize a programação clássica com Sockets do Arduino! Compilei a última versão dos comandos AT disponível. 

u-BLOX NINA W106

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 4MB FLASH

COPROCESSOR PARA O NINA B302

MONTAGEM

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/106);
-Plugável no PROTOBOARD;
-Acesso às várias GPIOS.

Pequena 


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


ÓTIMA REFERÊNCIA 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

Ligue os pino do NINA B302 no NINA W106

 

BREAKOUT B302

BREAKOUT W106

TXD

IO23

TXD

IO22
RXD

IO22

RXD

IO23
GND
GND



INSTALE LIB AT WEBSERVER - EXEMPLOS QUE USAM AT COMMANDS (ESPRESSIF)


Thanks to Khoi Hoang to help to port AT to NINA B302 and UPnP


Mude as credenciais no programa NRF52_SimpleServer e compile e pressione o botão para gravar

char ssid[] = "Andreia Oi Miguel 2.4G"; // your network SSID (name) char pass[] = "xxxxxxxxxx"; // your network password e descomente // Uncomment to use ESP32-AT commands #define USE_ESP32_AT true


Como podem observar, o programa será transferido!

Abra a serial


Abra o IP com seu BROWSER  preferido via DUCKDNS ou localmente (LAN)

DUCKDNS

#include <Adafruit_TinyUSB.h> // for Serial /**************************************************************************************************************************** nRF52_SimpleServer.ino For all Generic boards such as ESP8266, ESP32, WT32_ETH01, SAMD21/SAMD51, nRF52, STM32F/L/H/G/WB/MP1,Teensy with WiFiNINA, ESP8266/ESP32 WiFi, ESP8266/ESP32-AT, W5x00, ENC28J60, Native Ethernet shields DDNS_Generic is a library to automatically add port mappings to router using UPnP SSDP (Simple Service Discovery Protocol) in order to provide access to the local Web Services from the Internet. Based on and modified from Ofek Pearl's TinyUPnP Library (https://github.com/ofekp/TinyUPnP) Built by Khoi Hoang https://github.com/khoih-prog/UPnP_Generic Licensed under GPL-3.0 license Version: 3.3.0 Version Modified By Date Comments ------- ----------- ---------- ----------- 3.1.4 K Hoang 23/09/2020 Initial coding for Generic boards using many WiFi/Ethernet modules/shields. 3.1.5 K Hoang 28/09/2020 Fix issue with nRF52 and STM32F/L/H/G/WB/MP1 using ESP8266/ESP32-AT 3.2.0 K Hoang 11/06/2021 Add support to RP2040-based boards using ESP-AT, WiFiNINA, W5x00 / ENC28J60 3.3.0 K Hoang 16/07/2021 Add support to WT32_ETH01 (ESP32 + LAN8720) *****************************************************************************************************************************/ /* Note: This example includes the library EasyDDNS. You'll have to add this package using your Arduino Library Manager. The purpose of this package is to publish your dynamic IP to a DDNS service that will allocate a human readable address to your current IP. If you do not need that, you can remove this dependency. */ #include "defines.h" #define UPNP_USING_ETHERNET false #define UPNP_USING_WIFI true #include <UPnP_Generic.h> #define LISTEN_PORT 7052 #define LEASE_DURATION 36000 // seconds #define FRIENDLY_NAME "NRF52-WIFI-ESPAT" // this name will appear in your router port forwarding section UPnP* uPnP; ESP8266_AT_WebServer *server; #if defined(LED_BLUE) #define LED_PIN LED_BLUE // BLUE_LED on nRF52840 Feather Express, Itsy-Bitsy #else #define LED_PIN 3 // RED LED #endif const int led = LED_PIN; int status = WL_IDLE_STATUS; // the Wifi radio's status void onUpdateCallback(const char* oldIP, const char* newIP) { Serial.print(F("DDNSGeneric - IP Change Detected: oldIP = ")); Serial.print(oldIP); Serial.print(F(", newIP = ")); Serial.println(newIP); } void handleRoot() { #define BUFFER_SIZE 400 digitalWrite(led, 1); char temp[BUFFER_SIZE]; int sec = millis() / 1000; int min = sec / 60; int hr = min / 60; int day = hr / 24; hr = hr % 24; snprintf(temp, BUFFER_SIZE - 1, "<html>\ <head>\ <meta http-equiv='refresh' content='5'/>\ <title>%s</title>\ <style>\ body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\ </style>\ </head>\ <body>\ <h1>Hello from %s</h1>\ <h3>running UPnP_Generic & DDNS_Generic</h3>\ <h3>on %s</h3>\ <p>Uptime: %d d %02d:%02d:%02d</p>\ </body>\ </html>", BOARD_NAME, BOARD_NAME, SHIELD_TYPE, day, hr, min % 60, sec % 60); server->send(200, F("text/html"), temp); digitalWrite(led, 0); } void handleNotFound() { digitalWrite(led, 1); String message = F("File Not Found\n\n"); message += F("URI: "); message += server->uri(); message += F("\nMethod: "); message += (server->method() == HTTP_GET) ? F("GET") : F("POST"); message += F("\nArguments: "); message += server->args(); message += F("\n"); for (uint8_t i = 0; i < server->args(); i++) { message += " " + server->argName(i) + ": " + server->arg(i) + "\n"; } server->send(404, F("text/plain"), message); digitalWrite(led, 0); } void setup(void) { pinMode(led, OUTPUT); digitalWrite(led, 0); Serial.begin(115200); while (!Serial); Serial.print("\nStart nRF52_SimpleServer on "); Serial.print(BOARD_NAME); Serial.print(" using "); Serial.println(SHIELD_TYPE); Serial.println(UPNP_GENERIC_VERSION); // initialize serial for ESP module EspSerial.begin(115200); // initialize ESP module WiFi.init(&EspSerial); Serial.println(F("WiFi shield init done")); // check for the presence of the shield if (WiFi.status() == WL_NO_SHIELD) { Serial.println(F("WiFi shield not present")); // don't continue while (true); } Serial.print(F("Connecting to ")); Serial.println(ssid); WiFi.begin(ssid, pass); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(F(".")); } Serial.println(); IPAddress localIP = WiFi.localIP(); Serial.print(F("IP address: ")); Serial.println(localIP); //Serial.print(F("Gateway IP : ")); //Serial.println(WiFi.gatewayIP()); //////////////// DDNSGeneric.service("duckdns"); // Enter your DDNS Service Name - "duckdns" / "noip" /* For DDNS Providers where you get a token: DDNSGeneric.client("domain", "token"); For DDNS Providers where you get username and password: ( Leave the password field empty "" if not required ) DDNSGeneric.client("domain", "username", "password"); */ DDNSGeneric.client("xxxxxxxxx.duckdns.org", "xxa6dc4f-xxxx-xxxx-xxxx-5622dx4597bd"); DDNSGeneric.onUpdate(onUpdateCallback); //////////////// uPnP = new UPnP(30000); // -1 means blocking, preferably, use a timeout value (ms) if (uPnP) { uPnP->addPortMappingConfig(localIP, LISTEN_PORT, RULE_PROTOCOL_TCP, LEASE_DURATION, FRIENDLY_NAME); bool portMappingAdded = false; #define RETRY_TIMES 4 int retries = 0; while (!portMappingAdded && (retries < RETRY_TIMES)) { Serial.println("Add Port Forwarding, Try # " + String(++retries)); int result = uPnP->commitPortMappings(); portMappingAdded = ( (result == PORT_MAP_SUCCESS) || (result == ALREADY_MAPPED) ); //Serial.println("commitPortMappings result =" + String(result)); if (!portMappingAdded) { // for debugging, you can see this in your router too under forwarding or UPnP //uPnP->printAllPortMappings(); //Serial.println(F("This was printed because adding the required port mapping failed")); if (retries < RETRY_TIMES) delay(10000); // 10 seconds before trying again } } uPnP->printAllPortMappings(); Serial.println(F("\nUPnP done")); } server = new ESP8266_AT_WebServer(LISTEN_PORT); if (server) { server->on(F("/"), handleRoot); server->on(F("/inline"), []() { server->send(200, F("text/plain"), F("This works as well")); }); server->onNotFound(handleNotFound); server->begin(); Serial.print(F("HTTP WiFi_ESPAT_WebServer is @ IP : ")); Serial.print(localIP); Serial.print(F(", port = ")); Serial.println(LISTEN_PORT); } } void loop(void) { DDNSGeneric.update(555000); uPnP->updatePortMappings(600000); // 10 minutes if (server) server->handleClient(); }
https://www.u-blox.com/en/docs/UBX-17056481
https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_%28UBX-17052099%29.pdf

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 

U-BLOX NINA W106 SENDO PROGRAMADO COM .NET nanoFramework - Amazon ALEXA - Mandando Temperatura e Umidade

U-BLOX NINA W106 SENDO PROGRAMADO COM .NET nanoFramework - Amazon ALEXA  Mandando Temperatura e Umidade para Assistente Alexa falar Testado ...