ADS1115 com ESP32

Sou iniciante nesse forum.Tenho um bom conhecimento em eletrônica, mas não em programação e nesse contexto estou tentando implementar um código que me possibilite enviar um sinal analógico que entra por um ADS1115 e que está conectado a um ESP32 e envie esse sinal para uma dashboard na plataforma iot cloud. Consegui estruturar um código que comunicou perfeitamente com a plataforma mas sem o ADS1115, só com o ESP32.A minha dúvida está nas linhas de código que integre o ADS1115 com o ESP 32 de forma a haver uma interação precisa entre a variação do sinal analógico em campo e o valor lido na dashboard . Qualquer informação de fontes de pequisa , direcionamento de código, para essa aplicação me ajudaria muito no sentido de encontrar a resposta que preciso. Obrigado

Olá! Parece que você está tentando integrar um ADS1115 com um ESP32 para enviar um sinal analógico para uma dashboard na plataforma IoT Cloud. Posso ajudá-lo com isso.

Aqui está um exemplo de código que você pode usar como ponto de partida para sua implementação. Este código utiliza a biblioteca Adafruit_ADS1X15 para se comunicar com o ADS1115 e a biblioteca WiFiClient para enviar dados para a plataforma IoT Cloud.

Certifique-se de instalar as bibliotecas necessárias antes de usar o código. Você pode fazer isso usando o Gerenciador de Bibliotecas na IDE do Arduino.

#include <Wire.h>
#include <Adafruit_ADS1015.h>
#include <WiFi.h>
#include <WiFiClient.h>

// Credenciais da rede WiFi
const char* ssid = "NOME_DA_REDE";
const char* password = "SENHA_DA_REDE";

// Credenciais da plataforma IoT Cloud
const char* iotServer = "NOME_DO_SERVIDOR";
const int iotPort = 1883;
const char* iotUsername = "NOME_DE_USUARIO";
const char* iotPassword = "SENHA_DE_USUARIO";

// Configurações do ADS1115
Adafruit_ADS1115 ads;

// Inicialização da conexão WiFi
WiFiClient wifiClient;

void setup() {
  // Inicialização da comunicação serial
  Serial.begin(115200);

  // Conexão WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Conectando ao WiFi...");
  }
  Serial.println("Conectado ao WiFi!");

  // Inicialização do ADS1115
  ads.begin();
}

void loop() {
  // Leitura do valor analógico
  int16_t adc0 = ads.readADC_SingleEnded(0);

  // Envio dos dados para a plataforma IoT Cloud
  if (wifiClient.connect(iotServer, iotPort)) {
    String payload = "ADC0: " + String(adc0);

    wifiClient.println("POST /api/data HTTP/1.1");
    wifiClient.println("Host: " + String(iotServer));
    wifiClient.println("Authorization: Basic " + String(iotUsername) + ":" + String(iotPassword));
    wifiClient.println("Content-Type: application/json");
    wifiClient.print("Content-Length: ");
    wifiClient.println(payload.length());
    wifiClient.println();
    wifiClient.println(payload);
    wifiClient.println();
    wifiClient.stop();
  } else {
    Serial.println("Falha na conexão com o servidor IoT");
  }

  delay(1000); // Aguarda 1 segundo antes de ler novamente o valor analógico
}
Certifique-se de substituir as seguintes informações no código com suas próprias configurações:

ssid: Nome da sua rede Wi-Fi.
password: Senha da sua rede Wi-Fi.
iotServer: Nome do servidor da plataforma IoT Cloud.
iotUsername: Nome de usuário da sua conta na plataforma IoT Cloud.
iotPassword: Senha da sua conta na plataforma IoT Cloud.

Ok...vou analisar o matrial enviado e fazer os teste...muitissimo obrigado pela colaboraçao...

consegui o que pretendia. Restou apenas algumas dúvidas referentes a funcionamento do código.

1- O ADS 1115, faz um contagem binária de o a 65535 na conversão AD. Conforme mudo o fundo de escala da dashboard, esse valor muda. Como posso proceder para saber o valor exato( binário) a ser inserido no código conforme meu fundo de escala?
2- fazendo um comparativo entre os dois códigos, vc poderia fazer um comentário quanto a estrutura que montei.
3-Para obter valores quebrados, no caso, com uma casa decimal, como posso definir uma linha de código que faça isso?

Segue código que consegui estruturar:

#include <Wire.h>
#include "thingProperties.h"
//#define temperatura 33
#include <Adafruit_ADS1X15.h>
int leitura_temp = 0;

Adafruit_ADS1115 ads;
void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500); 
   // Defined in thingProperties.h
  initProperties();
  ads.begin();
  Serial.println("Getting single-ended readings from AIN0..3");
  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
 
  // The ADC input range (or gain) can be changed via the following
  // functions, but be careful never to exceed VDD +0.3V max, or to
  // exceed the upper and lower limits if you adjust the input range!
  // Setting these values incorrectly may destroy your ADC!
  //                                                                ADS1015  ADS1115
  //                                                                -------  -------
  ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
  
  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
 */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}

void loop() {
  ArduinoCloud.update();
  int16_t adc0 = ads.readADC_SingleEnded(0);
  leitura_temp = map(adc0, 0,16558, 0, 60);
  temp = leitura_temp;
  
  float volts0;
 
  adc0 = ads.readADC_SingleEnded(0);
  
  volts0 = ads.computeVolts(adc0);
  
  Serial.println("-----------------------------------------------------------");
  Serial.print("AIN0: "); Serial.print(adc0); Serial.print("  "); Serial.print(volts0); Serial.println("V");
  
  delay(1000);
}

  



mais uma vez , obrigado pela ajuda:

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