【问题标题】:Sending Sensor Data from Nodemcu ESP32 and Firebase从 Nodemcu ESP32 和 Firebase 发送传感器数据
【发布时间】:2020-05-24 14:18:53
【问题描述】:

我正在尝试将传感器数据从 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


    【解决方案1】:

    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))
    

    【讨论】:

    • 谢谢!!解决了它,但现在我有一个不同的问题,由于某种原因,它发送温度数据而不是湿度数据,知道为什么吗?新代码如下所示:
    【解决方案2】:

    这是由于某种原因不发送空气湿度数据的新代码,只有空气温度、土壤温度和湿度工作正常。

    #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);
    
    
    }
    
    

    【讨论】:

    • 这属于一个单独的问题。问题(和解决方案)将与原始问题完全不同。我看不出有什么明显的错误,所以最好在你进行一些额外的调查/研究之后。我建议您尝试打印出湿度数据并将硬编码的湿度值发送到 Firebase。这将有助于找出问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    相关资源
    最近更新 更多