从Nodemcu ESP32和Firebase发送传感器数据

问题描述 投票:0回答:2

我正在尝试将传感器数据从nodemcu ESP32发送到firebase。使用下面显示的基本示例时,它运行良好,并且在查看传感器数据而不将其发送到Firebase时也可以正常工作。https://github.com/mobizt/Firebase-ESP32/tree/master/examples/Basic

但是,当我尝试稍微编辑代码并发送传感器的数据时,出现错误,请提供帮助,代码和错误。

#include <WiFi.h>
#include <FirebaseESP32.h>
#include "DHT.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include "WiFi.h"


#define DHTPIN 27     // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define FIREBASE_HOST "trial-2c3ea.firebaseio.com"
#define FIREBASE_AUTH "Eu706797Vy2zOEDp3Bc9e4T9GZVAVwTyoxshl9Am"
#define WIFI_SSID "saadon 1"
#define WIFI_PASSWORD "0547258525"


//Define FirebaseESP32 data object
FirebaseData firebaseData;

FirebaseJson json;
DHT dht(DHTPIN, DHTTYPE);
const int oneWireBus = 2;   
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
const int Analog_channel_pin= 15;
double Soil_Moisture = 0;
double Soil_Moisture_analog = 0;
String path = "/Test";

void printResult(FirebaseData &data);

void setup()
{

  Serial.begin(115200);
  sensors.begin();
  dht.begin();
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");

  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();



  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.reconnectWiFi(true);



}

void loop() {
    float h = dht.readHumidity();
  float t = dht.readTemperature();
  sensors.requestTemperatures(); 
  float temperatureC = sensors.getTempCByIndex(0);
  Soil_Moisture_analog = analogRead(Analog_channel_pin);
  Soil_Moisture = (0.00531*exp(0.29*(Soil_Moisture_analog*0.006+1.0265)))*100;

      if (Firebase.setFloat(firebaseData, path + "/Air Temp" + t))
    {
      Serial.println("PASSED");
      printResult(firebaseData);
      Serial.println();
    }
    else
    {
      Serial.println("FAILED");
      Serial.println("REASON: " + firebaseData.errorReason());
      Serial.println();
    }

  if (Firebase.setFloat(firebaseData, path + "/Air Humidity" + h))
    {
      Serial.println("PASSED");
      printResult(firebaseData);
      Serial.println();
    }
    else
    {
      Serial.println("FAILED");
      Serial.println("REASON: " + firebaseData.errorReason());
      Serial.println();
    }

    if (Firebase.setFloat(firebaseData, path + "/Soil Temperature" + temperatureC))
    {
      Serial.println("PASSED");
      printResult(firebaseData);
    }
    else
    {
      Serial.println("FAILED");
      Serial.println("REASON: " + firebaseData.errorReason());
      Serial.println();
    }

    if (Firebase.setFloat(firebaseData, path + "/Soil Moisture" + Soil_Moisture))
    {
      Serial.println("PASSED");
      printResult(firebaseData);
      Serial.println();
    }
    else
    {
      Serial.println("FAILED");
      Serial.println("REASON: " + firebaseData.errorReason());
      Serial.println();
    }
  delay(5000);
}

错误:

firebasecode:74:65:错误:没有匹配的函数来调用'FirebaseESP32 :: setFloat(FirebaseData&,StringSumHelper&)'

arduino-esp8266
2个回答
0
投票

setFloat方法采用三个参数:

  bool setFloat(FirebaseData &dataObj, const String &path, float floatValue);

来自https://github.com/mobizt/Firebase-ESP32/blob/master/src/FirebaseESP32.h#L1084

因此,路径和值是单独的参数。将呼叫更改为setFloat,如下所示:

      if (Firebase.setFloat(firebaseData, path + "/Air Temp", t))

0
投票

这是新代码,出于某种原因,它不发送空气湿度数据,仅发送空气温度,土壤温度和湿度正常。

#include <WiFi.h>
#include <FirebaseESP32.h>
#include "DHT.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include "WiFi.h"


#define DHTPIN 27     // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define FIREBASE_HOST "trial-2c3ea.firebaseio.com"
#define FIREBASE_AUTH "Eu706797Vy2zOEDp3Bc9e4T9GZVAVwTyoxshl9Am"
#define WIFI_SSID "saadon 1"
#define WIFI_PASSWORD "0547258525"

FirebaseData firebaseData;

FirebaseJson json;

void printResult(FirebaseData &data);
//Define FirebaseESP32 data object




DHT dht(DHTPIN, DHTTYPE);
const int oneWireBus = 2;   
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
const int Analog_channel_pin= 32;
double Soil_Moisture = 0;
double Soil_Moisture_analog = 0;
String path = "/Test";


void setup()
{

  Serial.begin(115200);
  sensors.begin();
  dht.begin();
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");

  while (WiFi.status() != WL_CONNECTED)
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.reconnectWiFi(true);


}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  sensors.requestTemperatures(); 
  float temperatureC = sensors.getTempCByIndex(0);
  Soil_Moisture_analog = analogRead(Analog_channel_pin);
  Soil_Moisture = (0.00531*exp(0.29*(Soil_Moisture_analog*0.006+1.0265)))*100;

    Firebase.setFloat(firebaseData, path + "/Air Humidity", h);
    Firebase.setFloat(firebaseData, path + "/Air Temp", t);
    Firebase.setFloat(firebaseData, path + "/Soil Temperature", temperatureC);
    Firebase.setFloat(firebaseData, path + "/Soil Moisture", Soil_Moisture);
 delay(5000);


}

© www.soinside.com 2019 - 2024. All rights reserved.