Pular para o conteúdo principal

Questão de Programação — Conceitos básicos de programação — FUNDATEC 2024

ProgramaçãoConceitos básicos de programação
Código
qg164388
Banca
FUNDATEC
Órgão
IF Sul - MG
Ano
2024
Nível
Superior
Cargo
Professor do Ensino Básico, técnico e Tecnológico: MCH-02 - Informática
Analise o código abaixo, que foi escrito em um ambiente Arduino, e cujo objetivo é a conexão com uma rede WiFi:Imagem associada para resolução da questãoA linha 9 contém um erro sintático. Qual das alternativas abaixo corresponde à correção desse erro?
  1. AWiFi.begin(ssid, password);
  2. BWiFi.disconnect(ssid);
  3. CWiFi.config(ssid, password);
  4. DWiFi.begin();
  5. EWiFi.getSocket(password);
Revelar gabarito e comentário

GabaritoA — WiFi.begin(ssid, password);

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Arduino: conexão WiFi e a sintaxe do método WiFi.begin()

Gabarito: letra A. O erro sintático na linha 9 do código é resolvido chamando o método WiFi.begin(ssid, password), que é a forma correta de iniciar a conexão com uma rede WiFi na biblioteca padrão do Arduino. As demais alternativas usam métodos que não existem ou que não recebem os parâmetros adequados para essa finalidade.

O ambiente Arduino, apesar de ser programado em uma variação de C/C++, possui uma biblioteca própria para comunicação WiFi, geralmente a WiFi.h (ou ESP8266WiFi.h / WiFi.h no ESP32). Essa biblioteca expõe a classe WiFi, que contém métodos estáticos para gerenciar a conexão. O método central é o begin(), que aceita diferentes assinaturas dependendo do modo de operação (station, access point, etc.).

No modo mais comum, o de conectar o dispositivo a uma rede existente (modo station), a chamada correta é WiFi.begin(ssid, password), onde ssid é o nome da rede (String ou const char) e password é a senha (String ou const char). Essa chamada inicia o processo de associação à rede. É importante notar que o método begin() não bloqueia a execução até a conexão ser estabelecida; ele apenas inicia o processo, e o programador deve verificar o status com WiFi.status() em um loop.

A banca explora aqui um erro sintático comum: o uso de um método inexistente ou com parâmetros incorretos. O candidato que conhece a API da biblioteca WiFi do Arduino identifica imediatamente que WiFi.begin(ssid, password) é a forma correta. Vamos analisar cada alternativa para entender o erro específico de cada uma.

A pegadinha central é que a banca mistura métodos que existem na biblioteca (como disconnect() e config()) com outros que não existem (getSocket()), e também usa assinaturas incorretas para os métodos existentes. O candidato que decora a sintaxe exata do begin() resolve a questão sem hesitar.

WiFi.begin()
  • 1Modo station (conectar a rede)
    • begin(ssid, password)
    • begin() sem args (não usa as variáveis)
  • 2Modo AP (access point)
    • begin() sem args
  • 3Métodos que não conectam
    • disconnect() — encerra conexão
    • config() — define IP/gateway/subnet
    • getSocket() — não existe na API
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

Esta é a correção exata do erro. O método WiFi.begin(ssid, password) é a forma canônica de iniciar a conexão WiFi no modo station. Ele recebe dois parâmetros: o SSID (nome da rede) e a senha. Essa chamada é a que está faltando na linha 9 do código, que provavelmente continha algo como WiFi.begin(ssid) ou WiFi.begin(password) — ou seja, faltava um dos argumentos ou a ordem estava errada. A alternativa A corrige exatamente isso, fornecendo os dois argumentos na ordem correta.

Alternativa B — ❌ Incorreta

O método WiFi.disconnect() existe na biblioteca, mas ele não recebe parâmetros como ssid. A função de disconnect() é encerrar a conexão WiFi atual, não iniciar uma nova. A assinatura correta é WiFi.disconnect() (sem argumentos) ou, em algumas versões, WiFi.disconnect(wifioff) onde wifioff é um booleano opcional. Passar ssid como argumento é um erro sintático e semântico: o método não espera esse parâmetro e a intenção (conectar) é oposta à função do método (desconectar).

Alternativa C — ❌ Incorreta

O método WiFi.config() existe na biblioteca, mas sua finalidade é diferente. Ele é usado para configurar o IP local, gateway e máscara de sub-rede antes de chamar begin(). A assinatura típica é WiFi.config(local_ip, gateway, subnet), e não WiFi.config(ssid, password). Passar o SSID e a senha para config() é um erro: esses parâmetros não são esperados e a configuração de IP não estabelece conexão com a rede. A confusão aqui é entre configurar a interface de rede e conectar-se a uma rede.

Alternativa D — ❌ Incorreta

WiFi.begin() sem argumentos é uma chamada válida em alguns contextos, mas não para conectar a uma rede com SSID e senha. Essa forma é usada para iniciar o WiFi em modo Access Point (AP) ou para reconectar usando configurações salvas em memória (como no ESP8266 com WiFi.begin() que tenta reconectar à última rede). No entanto, no código da questão, o objetivo é conectar a uma rede específica, e as variáveis ssid e password estão disponíveis. Chamar begin() sem argumentos não usaria essas variáveis, portanto não atende ao objetivo do código. A alternativa A é mais completa e correta para o cenário descrito.

Alternativa E — ❌ Incorreta

O método WiFi.getSocket() não existe na biblioteca WiFi padrão do Arduino. Não há uma função pública com esse nome na classe WiFi. A confusão pode ser com métodos de socket de outras bibliotecas (como WiFiClient), mas não é o caso aqui. Além disso, passar password como argumento não faz sentido, pois o método não existe e, mesmo que existisse, não seria para iniciar uma conexão. Essa alternativa é um distrator puro, inventando um método que não faz parte da API.

Gabarito: letra A

Link permanente: /questoes/qg164388