NINA B302 ATUALIZANDO DDNS (DuckDNS) - ENC28J60
O objetivo deste BLOG é apresentar uma ideia geral de como o NINA B302 pode atualizar um tabela DDNS.
DDNS
Por que precisamos dessa biblioteca DDNS_Generic ?
Muitos de nós estão usando o serviço DNS dinâmico porque os endereços IP dinâmicos são muito mais baratos do que endereços IP estáticos caros.
Endereços de IP dinâmicos apresentam um problema se quisermos fornecer um serviço a outros usuários na Internet, como um serviço da web, servidor local Blynk, etc. Como o endereço de IP pode mudar com frequência (devido a queda de energia / oscilação, ligar / desligado, problemas de DSL / fibra, etc.), os nomes de domínio correspondentes devem ser rapidamente mapeados novamente no DNS, para manter a acessibilidade usando um URL conhecido.
Muitos provedores oferecem serviço de DNS dinâmico comercial ou gratuito para este cenário. A reconfiguração automática geralmente é implementada no roteador ou computador do usuário, que executa o software para atualizar o serviço DDNS. A comunicação entre o equipamento do usuário e o provedor não é padronizada, embora alguns métodos padrão de atualização baseados na web tenham surgido com o tempo.
Esta biblioteca é criada para atualizar automaticamente seus domínios DDNS com o endereço IP dinâmico mais recente, usando uma das muitas placas / escudos disponíveis. Veja Placa suportada.
O tempo entre as verificações para atualizar o Serviço DDNS é configurável para corresponder ao seu caso de uso e é definido nos exemplos em 10 minutos.
O código DDNS_Generic é muito curto, pode ser imerso em seus Projetos e ser chamado no código loop ().
Atualmente, ele suporta DuckDNS, No-ip, DynDNS, Dynu, enom, all-inkl, selfhost.de, dyndns.it, strato, freemyip, fear.org. A expansão para suportar mais provedores de serviços DDNS é muito fácil e pode ser feita por você.
Esta biblioteca DDNS_Generic é baseada e modificada da Biblioteca EasyDDNS de Ayush Sharma para adicionar suporte a muitas placas e escudos além de ESP32 e ESP8266.
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
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.
ÓTIMA REFERENCIA PARA PINOS DO ARDUINO E PINOS (GPIOS) DO NINA B302
Consulte
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
// 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
Siga criteriosamente o Roteiro deste LINK
Código fonte define.h e NRF52_Ethernet_DuckDNS_Client.
#define USE_UIP_ETHERNET true
#define USE_CUSTOM_ETHERNET false
// Only one if the following to be true
#define USE_ETHERNET false
#define USE_ETHERNET2 false //true
#define USE_ETHERNET3 false //true
#define USE_ETHERNET_LARGE false
#define USE_ETHERNET_ESP8266 false //true
/****************************************************************************************************************************
nRF52_Ethernet_DuckDNS_Client.ino
For all Generic boards such as ESP8266, ESP32, SAM DUE, SAMD21/SAMD51, nRF52, STM32F/L/H/G/WB/MP1
with WiFiNINA, ESP8266/ESP32 WiFi, ESP8266-AT, W5x00, ENC28J60, built-in Ethernet LAN8742A
DDNS_Generic is a library to update DDNS IP address for DDNS services such as
duckdns, noip, dyndns, dynu, enom, all-inkl, selfhost.de, dyndns.it, strato, freemyip, afraid.org
Based on and modified from EasyDDNS https://github.com/ayushsharma82/EasyDDNS
Built by Khoi Hoang https://github.com/khoih-prog/DDNS_Generic
Licensed under MIT license
Version: 1.0.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 11/09/2020 Initial coding for Generic boards using many WiFi/Ethernet modules/shields.
*****************************************************************************************************************************/
#include "defines.h"
#if (ESP8266 || ESP32 || USE_WIFI_NINA || DDNS_USING_WIFI)
int status = WL_IDLE_STATUS; // the Wifi radio's status
#endif
void onUpdateCallback(const char* oldIP, const char* newIP)
{
Serial.print("DDNSGeneric - IP Change Detected: ");
Serial.println(newIP);
}
void setup()
{
Serial.begin(115200);
while (!Serial);
Serial.print("\nStart nRF52_Ethernet_DuckDNS_Client on " + String(BOARD_NAME));
Serial.println(" with " + String(SHIELD_TYPE));
// For other boards, to change if necessary
#if ( USE_ETHERNET || USE_ETHERNET_LARGE || USE_ETHERNET2 )
// Must use library patch for Ethernet, Ethernet2, EthernetLarge libraries
Ethernet.init (USE_THIS_SS_PIN);
#elif USE_ETHERNET3
// Use MAX_SOCK_NUM = 4 for 4K, 2 for 8K, 1 for 16K RX/TX buffer
#ifndef ETHERNET3_MAX_SOCK_NUM
#define ETHERNET3_MAX_SOCK_NUM 4
#endif
Ethernet.setCsPin (USE_THIS_SS_PIN);
Ethernet.init (ETHERNET3_MAX_SOCK_NUM);
#endif //( USE_ETHERNET || USE_ETHERNET2 || USE_ETHERNET3 || USE_ETHERNET_LARGE )
// start the ethernet connection and the server:
// Use DHCP dynamic IP and random mac
uint16_t index = millis() % NUMBER_OF_MAC;
// Use Static IP
//Ethernet.begin(mac[index], ip);
Ethernet.begin(mac[index]);
Serial.print(F("\nHTTP WebServer is @ IP : "));
Serial.println(Ethernet.localIP());
server.begin();
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("xxxxxx.duckdns.org", "94a6dc4f-2102-xxxxxx-88c8-5622d04597bd");
DDNSGeneric.onUpdate(onUpdateCallback);
}
void loop()
{
// Check for New Ip Every 10 mins.
DDNSGeneric.update(600000);
}
Compilação e Gravação
suporte@smartcore.com.br
Referências:
Referências:
Nenhum comentário:
Postar um comentário