Leitura dos sensores flex e comunicação entre dois esp32 via esp now

Estou tendo problema com a leitura dos sensores flex quando faço a comunicação entre dois esp32 via esp now. A comunicação é feita sem problema, mas os sensores flex não fazem a leitura dos valores, todos valores aparecem igual a 0. Todas as conexões estão bem feitas.

#include <esp_now.h>
#include <WiFi.h>

#define NUM_SENSORS 5
int sensorPins[NUM_SENSORS] = {4, 13, 14, 25, 26};

typedef struct struct_message {
int sensorValues[NUM_SENSORS];
} struct_message;

struct_message sensorData;

// Substitua pelo endereço MAC correto do receptor
uint8_t broadcastAddress[] = {0x10, 0x06, 0x1c, 0x81, 0x15, 0x64};

void onSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("\r\nStatus da mensagem: ");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Enviado com sucesso" : "Falha no envio");
}

void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA); // Configura o ESP32 como estação Wi-Fi

Serial.print("Endereço MAC do Transmissor: ");
Serial.println(WiFi.macAddress());

// Configuração dos pinos dos sensores como entradas analógicas
for (int i = 0; i < NUM_SENSORS; i++) {
    pinMode(sensorPins[i], INPUT);
}

// Inicialização do ESP-NOW
if (esp_now_init() != ESP_OK) {
    Serial.println("Erro ao inicializar ESP-NOW");
    return;
}

// Registro da função de callback para envio
esp_now_register_send_cb(onSent);

// Configuração do peer para envio dos dados
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;

if (esp_now_add_peer(&peerInfo) != ESP_OK) {
    Serial.println("Erro ao adicionar peer");
    return;
}

}

void loop() {
// Leitura dos valores dos sensores
for (int i = 0; i < NUM_SENSORS; i++) {
sensorData.sensorValues[i] = analogRead(sensorPins[i]);
}

// Imprimir os valores dos sensores para verificação no Serial Monitor
Serial.print("Valores dos sensores: ");
for (int i = 0; i < NUM_SENSORS; i++) {
    Serial.print(sensorData.sensorValues[i]);
    Serial.print(" ");
}
Serial.println();

// Envio dos dados via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&sensorData, sizeof(sensorData));

if (result == ESP_OK) {
    Serial.println("Dados enviados com sucesso");
} else {
    Serial.print("Erro ao enviar dados: ");
    Serial.println(result);
}

delay(500);  // Aguarda um curto período antes de repetir o loop

}

Olá! Bem vindo ao Forum.

Aparentemente eu não vejo nenhum problema com seu código.
Como os sensores estão ligados no ESP32?
Você conseguiu ligar um deles e obter resultados consistentes?

Os sensores estão ligados correctamente, nos pinos analógicos do esp32, o que está acontecer é o seguinte: quanto removo a função "WiFi.mode(WIFI_STA);" Os sensores começam a fazer leitura normalmente, quando coloco de novo, deixam de fazer a leitura.

Troque os seus sensores para os pinos que estão ligados ao ADC1(GPIO36, GPIO37, GPIO38, GPIO39, GPIO32, GPIO33, GPIO34 e GPIO35).

O ADC2 também é usado pelo wi-fi, impedindo o uso da leitura analógica nos pinos GPIO4, GPIO0, GPIO2, GPIO15, GPIO13, GPIO12, GPIO14, GPIO27, GPIO25 e GPIO26 ao mesmo tempo em que se usa o wi-fi.

Muito obrigado pela tua ajuda, funcionou.

1 Like

Fico feliz!
Marque o post #4 como solução para o tópico. Isso facilita que outras pessoas com o mesmo problema encontrem rapidamente a solução.
Divirta-se! :upside_down_face:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.