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
// 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;
}