Я получил этот школьный проект и написал этот простой код, связанный с листом Google. Дело в том, что один датчик дает мне правильные показания, а другой показывает только «0».
Сам датчик работает, с проводкой все в порядке и она хорошо откалибрована. Я уже использовал только часть кода ph, чтобы просмотреть показания, и это действительно сработало, показывая разные значения выше 0
#include
#include
#include "time.h"
#include
#include
#include
#include
#define WIFI_SSID "Sample"
#define WIFI_PASSWORD "Sample123"
#define PROJECT_ID "SampleIDLOL"
#define CLIENT_EMAIL "SampleMailLOL"
const char PRIVATE_KEY[] PROGMEM = "SampleKeyLOL";
const char spreadsheetId[] = "SampleIDLOL";
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;
void tokenStatusCallback(TokenInfo info);
int phpin = 4;
int tempPin = 5;
int redPin = 18;
int greenPin = 19;
int bluePin = 21;
int buzzer = 13;
float calibrationFactor = 3.5;
float offset = 0.0
OneWire oneWireObjeto(tempPin);
DallasTemperature sensorDS18B20(&oneWireObjeto);
const char* ntpServer = "pool.ntp.org";
unsigned long epochTime;
unsigned long getTime() {
time_t now;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
//Serial.println("Failed to obtain time");
return(0);
}
time(&now);
return now;
}
void setup() {
pinMode(phpin,INPUT);
pinMode(tempPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
Serial.println();
Serial.println();
configTime(-18000, 0, ntpServer);
GSheet.printf("ESP Google Sheet Client v%s\n\n", ESP_GOOGLE_SHEET_CLIENT_VERSION);
WiFi.setAutoReconnect(true);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
GSheet.setTokenCallback(tokenStatusCallback);
GSheet.setPrerefreshSeconds(10 * 60);
GSheet.begin(CLIENT_EMAIL, PROJECT_ID, PRIVATE_KEY);
sensorDS18B20.begin();
}
void loop() {
sensorDS18B20.requestTemperatures();
float temperature = (sensorDS18B20.getTempCByIndex(0));
int rawValue = analogRead(phpin);
float voltage = (rawValue * 5.0) / 10230.;
float phValue = (voltage * calibrationFactor) + offset;
bool ready = GSheet.ready();
if (ready && millis() - lastTime > timerDelay) {
lastTime = millis();
FirebaseJson response;
Serial.println("\nAppend spreadsheet values...");
Serial.println("----------------------------");
FirebaseJson valueRange;
epochTime = getTime();
valueRange.add("majorDimension", "COLUMNS");
valueRange.set("values/[0]/[0]", epochTime);
valueRange.set("values/[1]/[0]", phValue);
valueRange.set("values/[2]/[0]", temperature);
bool success = GSheet.values.append(&response /* returned response */, spreadsheetId /* spreadsheet Id to append */, "A3" /* range to append */, &valueRange /* data range to append */);
if (success) {
response.toString(Serial, true);
valueRange.clear();
}
else {
Serial.println(GSheet.errorReason());
}
Serial.println();
Serial.println(ESP.getFreeHeap());
}
if (phValue >= 7) {
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, HIGH);
digitalWrite(buzzer, HIGH);
}
if (phValue >= 3 && phValue < 7) {
digitalWrite(redPin, LOW);
digitalWrite(greenPin,LOW);
digitalWrite(bluePin, LOW);
}
if (phValue >= 0 && phValue < 3) {
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
}
if (phValue > 6.5) {
digitalWrite(buzzer, HIGH);
}
}
void tokenStatusCallback(TokenInfo info) {
if (info.status == token_status_error) {
GSheet.printf("Token info: type = %s, status = %s\n", GSheet.getTokenType(info).c_str(), GSheet.getTokenStatus(info).c_str());
GSheet.printf("Token error: %s\n", GSheet.getTokenError(info).c_str());
}
else {
GSheet.printf("Token info: type = %s, status = %s\n", GSheet.getTokenType(info).c_str(), GSheet.getTokenStatus(info).c_str());
}
}
Код для листа Google работает хорошо, показания других датчиков хорошо отображаются вместе с эпохальным временем.
Показания ph всегда показывают «0», не только в Google лист, но и в последовательном мониторе, если я его включу.
Редактировать: каким-то образом это был компонент Wi-Fi, лол. Хотя замена контакта датчика решила проблему
Я получил этот школьный проект и написал этот простой код, связанный с листом Google. Дело в том, что один датчик дает мне правильные показания, а другой показывает только «0». Сам датчик работает, с проводкой все в порядке и она хорошо откалибрована. Я уже использовал только часть кода ph, чтобы просмотреть показания, и это действительно сработало, показывая разные значения выше 0 [code]#include #include #include "time.h" #include #include #include #include
bool success = GSheet.values.append(&response /* returned response */, spreadsheetId /* spreadsheet Id to append */, "A3" /* range to append */, &valueRange /* data range to append */); if (success) { response.toString(Serial, true); valueRange.clear(); } else { Serial.println(GSheet.errorReason()); } Serial.println(); Serial.println(ESP.getFreeHeap()); }
void tokenStatusCallback(TokenInfo info) { if (info.status == token_status_error) { GSheet.printf("Token info: type = %s, status = %s\n", GSheet.getTokenType(info).c_str(), GSheet.getTokenStatus(info).c_str()); GSheet.printf("Token error: %s\n", GSheet.getTokenError(info).c_str()); } else { GSheet.printf("Token info: type = %s, status = %s\n", GSheet.getTokenType(info).c_str(), GSheet.getTokenStatus(info).c_str()); } } [/code] Код для листа Google работает хорошо, показания других датчиков хорошо отображаются вместе с эпохальным временем. Показания ph всегда показывают «0», не только в Google лист, но и в последовательном мониторе, если я его включу. Редактировать: каким-то образом это был компонент Wi-Fi, лол. Хотя замена контакта датчика решила проблему