segunda-feira, 15 de setembro de 2025

EX07 - Arduino Finder Opta - Comunicação Ethernet

Os dispositivos Opta (todas as variantes) contam com um transceptor de camada física (PHY) Ethernet 10BASE-T/100BASE-TX de baixo consumo de energia integrado. O transceptor atende aos padrões IEEE 802.3 e 802.3u e suporta comunicação com um MAC Ethernet por meio de uma interface RMII padrão. O transceptor Ethernet é acessível através do conector RJ45 integrado.
O Arduino Mbed OS Opta Boards núcleo possui uma biblioteca integrada que permite usar o transceptor Ethernet PHY integrado imediatamente: a Ethernet biblioteca . Vamos usar um código de exemplo que demonstra alguns dos recursos do transceptor.
O esboço abaixo permite que um dispositivo Opta se conecte à internet por meio de uma conexão Ethernet. Uma vez conectado, ele realiza uma GET solicitação ao ip-api.com serviço para obter detalhes sobre o endereço IP do dispositivo. Em seguida, ele analisa o objeto JSON recebido usando a Arduino_JSON biblioteca para extrair os principais detalhes do IP: endereço IP, cidade, região e país. Esses dados são então impressos no Monitor Serial do Arduino IDE.
/**
Web Client (Ethernet version)
Name: opta_ethernet_web_client.ino
Purpose: This sketch connects an Opta device to ip-api.com via Ethernet
and fetches IP details for the device.
@author: Prof. Sinésio Gomes
@version 2.0 10/10/25
*/
// Include the necessary libraries.
#include <Ethernet.h>
#include <Arduino_JSON.h>
// Server address for ip-api.com.
const char* server = "ip-api.com";
// API endpoint path to get IP details in JSON format.
String path = "/json/";
// Static IP configuration for the Opta device.
IPAddress ip(10, 130, 22, 84);
// Ethernet client instance for the communication.
EthernetClient client;
// JSON variable to store and process the fetched data.
JSONVar doc;
// Variable to ensure we fetch data only once.
bool dataFetched = false;
void setup() {
// Begin serial communication at a baud rate of 115200.
Serial.begin(115200);
// Wait for the serial port to connect,
// This is necessary for boards that have native USB.
while (!Serial);
// Attempt to start Ethernet connection via DHCP,
// If DHCP failed, print a diagnostic message.
if (Ethernet.begin() == 0) {
Serial.println("- Failed to configure Ethernet using DHCP!");
// Try to configure Ethernet with the predefined static IP address.
Ethernet.begin(ip);
}
delay(2000);
}
void loop() {
// Ensure we haven't fetched data already,
// ensure the Ethernet link is active,
// establish a connection to the server,
// compose and send the HTTP GET request.
if (!dataFetched) {
if (Ethernet.linkStatus() == LinkON) {
if (client.connect(server, 80)) {
client.print("GET ");
client.print(path);
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
// Wait and skip the HTTP headers to get to the JSON data.
char endOfHeaders[] = "\r\n\r\n";
client.find(endOfHeaders);
// Read and parse the JSON response.
String payload = client.readString();
doc = JSON.parse(payload);
// Check if the parsing was successful.
if (JSON.typeof(doc) == "undefined") {
Serial.println("- Parsing failed!");
return;
}
// Extract and print the IP details.
Serial.println("*** IP Details:");
Serial.print("- IP Address: ");
Serial.println((const char*)doc["query"]);
Serial.print("- City: ");
Serial.println((const char*)doc["city"]);
Serial.print("- Region: ");
Serial.println((const char*)doc["regionName"]);
Serial.print("- Country: ");
Serial.println((const char*)doc["country"]);
Serial.println("");
// Mark data as fetched.
dataFetched = true;
}
// Close the client connection once done.
client.stop();
} else {
Serial.println("- Ethernet link disconnected!");
}
}
}
O esboço inclui as bibliotecas Ethernet e Arduino_JSON, essenciais para a funcionalidade de manipulação de Ethernet e JSON. Na setup() função, a comunicação serial é iniciada para depuração e saída. Em vez de DHCP, a conexão Ethernet usa um endereço IP estático pre definido.
Após a conexão Ethernet ser estabelecida, o esboço se conecta ao ip-api.com serviço, utilizando o protocolo HTTP. Especificamente, uma solicitação é criada para recuperar detalhes sobre o endereço IP do dispositivo, incluindo sua cidade, região e país. Se a conexão com o servidor falhar, o esboço emitirá uma mensagem de erro para o Monitor Serial do Arduino IDE para solução de problemas. HTTP GET
Dentro da loop()função, uma solicitação é enviada ao serviço uma vez. O esboço então aguarda e ignora os cabeçalhos HTTP da resposta, analisando o seguinte payload JSON. HTTP GETip-api.com
Detalhes importantes do IP, como endereço IP, cidade, região e país, são extraídos e exibidos no Monitor Serial do IDE usando os dados analisados. Se o link Ethernet for desconectado, uma mensagem correspondente será exibida no Monitor Serial. Caso a análise do JSON falhe, uma mensagem de erro será exibida no Monitor Serial do IDE, solicitando que o sketch saia da iteração atual da loop() função imediatamente.
Você deverá ver a seguinte saída no Monitor Serial do Arduino IDE.

Aplicação 07: Arduino Finder Opta -  Comunicação Ethernet .
Nome: Opta_ethernet_web_client.ino .
Objetivo: Este esboço conecta um dispositivo Opta a ip-api.com via Ethernet e busca os detalhes de IP do dispositivo.
© Direitos de autor. 2025: Gomes; Sinésio Raimundo. Última atualização: 10/10/2025

Nenhum comentário:

Postar um comentário