sexta-feira, 23 de outubro de 2020

U-BLOX NINA B302 TIMEZONE - WIZNET 5100

  U-BLOX NINA B302  TIMEZONE - WIZNET 5100


O objetivo deste BLOG é demonstrar como é possível utilizar o ARDUINO para programar o módulo U-BLOX NINA B302. Foi utilizado o BREAKOUT para o teste. No exemplo, iremos acessar um servidor NTP e atualizar a hora de um  DS3231 (RTC TXCO) e mostrar via serial a hora dos dois.



DS3231

O Real Time Clock (RTC) DS3231 é um relógio de tempo real de alta precisão e baixo consumo de energia. Em sua placa vem embutido um sensor de temperatura e um cristal oscilador para melhorar sua exatidão.

NTP

O NTP é um protocolo para sincronização dos relógios dos computadores baseado no protocolo UDP sob a porta 123. É utilizado para sincronização do relógio de um conjunto de computadores e dispositivos em redes de dados com latência variável. O NTP permite manter o relógio de um computador sincronizado com a hora sempre certa e com grande exatidão. Foi originalmente idealizado por David L. Mills da Universidade do Delaware e ainda hoje é mantido por ele e por uma equipe de voluntários. O NTP foi utilizado pela primeira vez antes de 1985, sendo ainda hoje muito popular e um dos mais antigos protocolos da Internet.

TIME ZONE (LIBRARY)

A biblioteca Timezone_Generic foi projetada para funcionar em conjunto com a biblioteca Arduino Time, que também deve ser instalada em seu sistema. Esta documentação pressupõe alguma familiaridade com a biblioteca Time.

O objetivo principal da biblioteca Timezone_Generic é converter o Tempo Universal Coordenado (UTC) para o horário local correto, seja horário de verão (também conhecido como horário de verão, DST) ou horário padrão. A fonte de tempo pode ser um receptor GPS, um servidor NTP ou um Real-Time Clock (RTC) definido como UTC. Mas se um RTC de hardware ou outra fonte de tempo está presente é irrelevante, uma vez que a biblioteca de tempo pode funcionar como um software RTC sem hardware adicional (embora sua precisão dependa da precisão do relógio do sistema do microcontrolador).

A biblioteca Timezone_Generic implementa dois objetos para facilitar as conversões de fuso horário:

Um objeto TimeChangeRule descreve quando a hora local muda para o horário de verão (horário de verão) ou para o horário padrão de um determinado local.

Um objeto Timezone usa TimeChangeRules para realizar conversões e funções relacionadas. Ele também pode gravar suas TimeChangeRules ou lê-las de EEPROM / DueFlashStorage / FlashStorage / LittleFS / SPIFFS. Vários fusos horários podem ser representados definindo vários objetos de fuso horário.

Os exemplos demonstrarão como obter a hora UTC do servidor NTP e, em seguida, atualizar o DS3231 RTC para garantir que a hora esteja perfeitamente correta.
Você também pode modificar os exemplos para ler o NTP e atualizar o RTC uma vez a cada período pré-determinado para garantir a precisão do RTC.

Esta biblioteca Timezone_Generic é baseada e modificada da Biblioteca Timezone de Jack Christensen para adicionar funções e suporte a muitas placas e shields, sendo recentemente portada para o NINA B112/B302.

WIZNET W5500

O chip W5500 é um controlador Ethernet integrado TCP/IP com fio que permite uma conexão mais fácil com a Internet para sistemas embarcados usando SPI (Interface Periférica Serial).


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


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.




Conexão com NINA B302 e WIZNET

static const uint8_t SS   = (10);----> CS  (W5500)
static const uint8_t MOSI = PIN_SPI_MOSI; ----> SI (W5500)
static const uint8_t MISO = PIN_SPI_MISO;----> SO (W5500)
static const uint8_t SCK  = PIN_SPI_SCK;----> SCK      (W5500)

#define PIN_SPI_MISO         (24)    //24 original   IO8
#define PIN_SPI_MOSI         (25)    //25 original   IO3
#define PIN_SPI_SCK          (26)    //26 original    IO45

IO2 = CS


// 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



ACRESCENTANDO DS3231


Como os pinos I2C padrão do arquivo Variant estavam ocupados para permitir o NINA B302 acessar WIFI (via WIFININA), tive que muda-los para IO28 e IO29 do BREAKOUT.

Lembre-se, I2C será necessário para acessar o DS3231

#define PIN_WIRE_SDA (6) //(22) #define PIN_WIRE_SCL (7) //(23) 9, // D6 is P0.09 10, // D7 is P0.10


COMPILANDO O EXEMPLO E GRAVANDO

Instale 
Siga criteriosamente o Roteiro das dependências! Não esqueça que vamos utilizar também a LIB para ETHERNET

Abra o exemplo, atenção aos DEFINES

//#define USE_UIP_ETHERNET true #define USE_UIP_ETHERNET false // Only one of the following to be true #define USE_ETHERNET true #define USE_ETHERNET2 false #define USE_ETHERNET3 false #define USE_ETHERNET_LARGE false #define USE_ETHERNET_ESP8266 false #define USE_ETHERNET_ENC false #define USE_CUSTOM_ETHERNET false

RTC_ETHERNET



EXECUTANDO


REMOVENDO DS3231 E COLOCANDO NOVAMENTE



THANKS TO Khoi Hoang

Questões: suporte@smartcore.com.br

FONTES: 

https://www.arduino.cc
https://pt.wikipedia.org/wiki/Network_Time_Protocol
https://www.filipeflop.com/produto/real-time-clock-rtc-ds3231/
https://breakout-all-nina.blogspot.com/2019/07/breakout-para-nina-b1b4.html

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

U-BLOX NINA B302 TIMEZONE - ENC28J60

 U-BLOX NINA B302  TIMEZONE - ENC28J60


O objetivo deste BLOG é demonstrar como é possível utilizar o ARDUINO para programar o módulo U-BLOX NINA B302. Foi utilizado o BREAKOUT para o teste. No exemplo, iremos acessar um servidor NTP e atualizar a hora de um  DS3231 (RTC TXCO) e mostrar via serial a hora dos dois.



DS3231

O Real Time Clock (RTC) DS3231 é um relógio de tempo real de alta precisão e baixo consumo de energia. Em sua placa vem embutido um sensor de temperatura e um cristal oscilador para melhorar sua exatidão.

NTP

O NTP é um protocolo para sincronização dos relógios dos computadores baseado no protocolo UDP sob a porta 123. É utilizado para sincronização do relógio de um conjunto de computadores e dispositivos em redes de dados com latência variável. O NTP permite manter o relógio de um computador sincronizado com a hora sempre certa e com grande exatidão. Foi originalmente idealizado por David L. Mills da Universidade do Delaware e ainda hoje é mantido por ele e por uma equipe de voluntários. O NTP foi utilizado pela primeira vez antes de 1985, sendo ainda hoje muito popular e um dos mais antigos protocolos da Internet.

TIME ZONE (LIBRARY)

A biblioteca Timezone_Generic foi projetada para funcionar em conjunto com a biblioteca Arduino Time, que também deve ser instalada em seu sistema. Esta documentação pressupõe alguma familiaridade com a biblioteca Time.

O objetivo principal da biblioteca Timezone_Generic é converter o Tempo Universal Coordenado (UTC) para o horário local correto, seja horário de verão (também conhecido como horário de verão, DST) ou horário padrão. A fonte de tempo pode ser um receptor GPS, um servidor NTP ou um Real-Time Clock (RTC) definido como UTC. Mas se um RTC de hardware ou outra fonte de tempo está presente é irrelevante, uma vez que a biblioteca de tempo pode funcionar como um software RTC sem hardware adicional (embora sua precisão dependa da precisão do relógio do sistema do microcontrolador).

A biblioteca Timezone_Generic implementa dois objetos para facilitar as conversões de fuso horário:

Um objeto TimeChangeRule descreve quando a hora local muda para o horário de verão (horário de verão) ou para o horário padrão de um determinado local.

Um objeto Timezone usa TimeChangeRules para realizar conversões e funções relacionadas. Ele também pode gravar suas TimeChangeRules ou lê-las de EEPROM / DueFlashStorage / FlashStorage / LittleFS / SPIFFS. Vários fusos horários podem ser representados definindo vários objetos de fuso horário.

Os exemplos demonstrarão como obter a hora UTC do servidor NTP e, em seguida, atualizar o DS3231 RTC para garantir que a hora esteja perfeitamente correta.
Você também pode modificar os exemplos para ler o NTP e atualizar o RTC uma vez a cada período pré-determinado para garantir a precisão do RTC.

Esta biblioteca Timezone_Generic é baseada e modificada da Biblioteca Timezone de Jack Christensen para adicionar funções e suporte a muitas placas e shields, sendo recentemente portada para o NINA B112/B302.

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.

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


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.




Conexão com NINA B302 e ENC28j60

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   IO8
#define PIN_SPI_MOSI         (25)    //25 original   IO3
#define PIN_SPI_SCK          (26)    //26 original    IO45

IO2 = CS


// 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

ACRESCENTANDO DS3231


Como os pinos I2C padrão do arquivo Variant estavam ocupados para permitir o NINA B302 acessar WIFI (via WIFININA), tive que muda-los para IO28 e IO29 do BREAKOUT.

Lembre-se, I2C será necessário para acessar o DS3231

#define PIN_WIRE_SDA (6) //(22) #define PIN_WIRE_SCL (7) //(23) 9, // D6 is P0.09 10, // D7 is P0.10


COMPILANDO O EXEMPLO E GRAVANDO

Instale 
Siga criteriosamente o Roteiro das dependências! Não esqueça que vamos utilizar também a LIB para UIPETHERNET

Abra o exemplo, atenção aos DEFINES

//#define USE_UIP_ETHERNET true #define USE_UIP_ETHERNET true // Only one of the following to be true #define USE_ETHERNET false #define USE_ETHERNET2 false #define USE_ETHERNET3 false #define USE_ETHERNET_LARGE false #define USE_ETHERNET_ESP8266 false #define USE_ETHERNET_ENC true #define USE_CUSTOM_ETHERNET false

RTC_ETHERNET




EXECUTANDO



REMOVENDO DS3231 E COLOCANDO NOVAMENTE



THANKS TO Khoi Hoang

Questões: suporte@smartcore.com.br

FONTES: 

https://www.arduino.cc
https://pt.wikipedia.org/wiki/Network_Time_Protocol
https://www.filipeflop.com/produto/real-time-clock-rtc-ds3231/
https://breakout-all-nina.blogspot.com/2019/07/breakout-para-nina-b1b4.html

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