NPK Sensor and wifi connection

Hello! My name is Camila and I am making a project where I have measure pH and conductivity of a cell culture using a NPK Sensor.
I have manage to make the sensor work with a OLED screen, but now I can't connect a ESP8266 wifi modulus that sends the information measured by the sensor to the Thingspeak platform.
I've tried some codes but can't make it work yet.
Please help me finish this code for the project :smiling_face_with_tear:

// Bibliotecas
#include <SoftwareSerial.h> // Comunicaci贸n entre sensor y placa arduino
#include <Wire.h> // Comunicaci贸n I2C con la pantalla OLED
#include <Adafruit_GFX.h> // Control pantalla
#include <Adafruit_SSD1306.h> // Control pantalla
#include <ThingSpeak.h> 

// Constantes y objetos
#define SCREEN_WIDTH 128  // Ancho pantalla, en pixeles
#define SCREEN_HEIGHT 64  // Alto pantalla, en pixeles
#define OLED_RESET -1     // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Pines
#define RE 8
#define DE 7
#define DI 3
#define RO 2

// Variables
const byte inquiry_frame[] = { 0x01, 0x03, 0x00, 0x00, 0x00, 0x07, 0x04, 0x08 };
byte values[19];
SoftwareSerial mod(2, 3);
// SoftwareSerial esp8266(11,13); 

// Inicializaci贸n pantalla OLED
void setup() {
  // esp8266.begin (4800);
  Serial.begin(4800);
  mod.begin(4800);
  pinMode(RE, OUTPUT);
  pinMode(DE, OUTPUT);
  // Serial.println("ESP8266 Setup test - use AT coomands");

  // Inicializar la pantalla OLED con I2C address 0x3C (128x64)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
  delay(500);  // Pausa breve para permitir que el display se inicialice

  // Limpiar el display para asegurarse de que no haya contenido previo
  display.clearDisplay();

  // Configurar posici贸n, tama帽o y color del texto
  display.setTextSize(1);
  display.setTextColor(WHITE);

  // Calcular la posici贸n en x para centrar horizontalmente el texto "RubiscoLab"
  String rubiscoText = "RubiscoLab";
  int xPositionRubisco = (128 - (rubiscoText.length() * 6)) / 2; 
  display.setCursor(xPositionRubisco, 10);  // Ajuste la posici贸n vertical para el espacio entre l铆neas
  display.println(rubiscoText);

  // Calcular la posici贸n en x para centrar horizontalmente el texto "Biotechnology"
  String biotechText = "Biotechnology";
  int xPositionBiotech = (128 - (biotechText.length() * 6)) / 2;
  display.setCursor(xPositionBiotech, 20);  // Ajuste la posici贸n vertical para el espacio entre l铆neas
  display.println(biotechText);

  // Configurar posici贸n para "Inicializando" y mostrarlo un poco m谩s abajo
  display.setCursor(25, 45);  // Ajustado a una posici贸n vertical m谩s baja
  display.print("Inicializando");

  // Actualizar el display para mostrar los cambios
  display.display();

  // Pausa de 3 segundos antes de continuar
  delay(3000);
}

void loop() {

  float val1, val2;
  val1 = ph();
  delay(250);
  val2 = ce();
  delay(250);

  if (false) {
  Serial.print("pH: ");
  Serial.print(val1);
  Serial.println();
  Serial.print("CE: ");
  Serial.print(val2);
  Serial.println(" mS/cm");
  Serial.println();
  }
  delay(1000);
  

  display.clearDisplay();

  display.setTextSize(2);
  
  // Mostrar el valor de pH
  display.setCursor(0, 10); // Ajuste vertical para centrar
  display.print("pH: ");
  display.print(val1);
 
  // Mostrar el valor de CE
  display.setCursor(0, 40); // Ajuste vertical para centrar
  display.print("CE: ");
  display.print(val2);
  display.setTextSize(1);
  display.print(" mS/cm");

  display.display();

}

float ph() {
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(10);

  if (mod.write(inquiry_frame, sizeof(inquiry_frame)) == 8) {
    digitalWrite(DE, LOW);
    digitalWrite(RE, LOW);
    for (byte i = 0; i < 19; i++) {
      //Serial.print(mod.read(),HEX);
      values[i] = mod.read();
      //Serial.print(values[i], HEX);
    }
    Serial.println();
  }

  return (float(values[9] << 8 | values[10])) / 10.00;
}

float ce() {
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(10);

  if (mod.write(inquiry_frame, sizeof(inquiry_frame)) == 8) {
    digitalWrite(DE, LOW);
    digitalWrite(RE, LOW);
    for (byte i = 0; i < 19; i++) {
      //Serial.print(mod.read(),HEX);
      values[i] = mod.read();
      //Serial.print(values[i], HEX);
    }
    Serial.println();
  }

  return (float(values[7] << 8 | values[8])) / 1000.00;
}

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