#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
#include "hardware/adc.h"
#include "lwip/apps/http_client.h"
// ========================================================
// Configurações Wi-Fi (simuladas no Wokwi)
// =========================================================
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define WIFI_COUNTRY CYW43_COUNTRY_BRAZIL
#define WIFI_CHANNEL 6
// ========================================================
// Configurações do Servidor (ThingSpeak)
// =========================================================
const int myChannelNumber = 123456; // Número do canal deve ser inteiro
const char* myApiKey = "ABC123XYZ456"; // Chave API
const char* server = "http://api.thingspeak.com/update";
// =========================================================
// Configuração do Sensor Analógico (Potenciômetro)
// ==========================================================
#define SENSOR_PIN 26 // GPIO26 (ADC0) para potenciômetro no Wokwi
#define ADC_RESOLUTION 12 // Resolução de 12 bits (0-4095)
// ============================================================
// Função para conectar ao Wi-Fi (simulada no Wokwi)
// ============================================================
bool connect_to_wifi() {
printf("Simulando conexão Wi-Fi...\n");
return true; // Sem verificação real no Wokwi
}
// =====================================================================
// Função para ler dados do Sensor (implementação para potenciômetro)
// =====================================================================
int read_sensor_data() {
adc_select_input(0); // Seleciona ADC0 (GPIO26)
uint16_t raw_value = adc_read();
// Simula diferentes medidas baseadas na posição do potenciômetro
return raw_value * 3300 / (1 << ADC_RESOLUTION); // Converte para mV (0-3300mV)
}
// ==================================================================
// Função para enviar dados ao servidor (simulada no Wokwi)
// ==================================================================
void send_to_thingspeak(int potencia, int hc, int hp) {
char url[256];
snprintf(url, sizeof(url), "%s?api_key=%s&field1=%d&field2=%d&field3=%d",
server, myApiKey, potencia, hc, hp);
printf("Envio para: %s\n", url);
}
// ================================================================
// Função principal
// ================================================================
int main() {
stdio_init_all();
sleep_ms(2000);
// Configuração do ADC para o potenciômetro
adc_init();
adc_gpio_init(SENSOR_PIN);
adc_select_input(0);
printf("Iniciando simulação no Wokwi...\n");
// Loop principal
while (true) {
// Lê dados do sensor
int potencia_ativa = read_sensor_data();
int consumo_fora_pico = read_sensor_data() / 33; // Simula valores menores
int consumo_horario_pico = read_sensor_data() / 50;
// Exibe os dados no console
printf("\n--- Leitura dos Dados ---\n");
printf("Potência Ativa: %d mV\n", potencia_ativa);
printf("Consumo fora de pico: %d kWh\n", consumo_fora_pico);
printf("Consumo horário de pico: %d kWh\n", consumo_horario_pico);
// Envia os dados simulados
send_to_thingspeak(potencia_ativa, consumo_fora_pico, consumo_horario_pico);
// Intervalo de atualização (5 segundos)
sleep_ms(5000);
}
return 0;
}