当前位置: 首页 > 知识库问答 >
问题:

使用InfluxdbV2将ESP32数据写入Influxdb。h给出空错误

张森
2023-03-14

我一天的大部分时间都在工作,让电容式土壤传感器通过我的ESP32 DEVKITV1与我的Pi服务器上的IMOXDB设置进行通信。我已经成功地让我的设置读取传感器并连接到我家的WIFI,但我还没能让它与我的IMOXDB对话。

我正在使用库来处理由davidgs分叉的https://github.com/davidgs/ESP8266_Influx_DB_V2.这是我的第一个ESP32项目,自从15年前大学以来,我还没有接触过C......

我的设置:

  • 硬件:ESP32 DEVKIT(ESP32-WROOM-32)
  • 软件:Arduino IDE 1.8.13,LinuxMint 19.3 with Kernel 5.4.0-39-通用
  • 服务器=Raspberry PI 4,使用8086和8083端口,通过Portainer将infxdb安装到Docker。

我的ESP32代码:

#include "WiFi.h"
#include "InfluxDbV2.h"

//Setup variables and definitions

//definitions for WIFI
#define WIFI_SSID "redacted"
#define WIFI_PASS "redacted"

int status = WL_IDLE_STATUS;//initial status for setup start

#define INFLUXDB_HOST "192.168.1.220"//pi_server static ip
#define INFLUXDB_PORT 8086//port for influxdb on pi_server

InfluxdbV2 influx(INFLUXDB_HOST, INFLUXDB_PORT);

float asoilmoist=analogRead(34);//variable holding moisture reading for sensor 1
#define uS_TO_S_FACTOR 1000000ULL  /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP 600         /* Time ESP32 will go to sleep (in seconds) */

void setup()
{
  Serial.begin(115200); //Serial Print Deactivated if not needed
  delay(10);

    //Connect to WIFI   
    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(WIFI_SSID);

    status = WiFi.begin(WIFI_SSID, WIFI_PASS);
    WiFi.setSleep(false);//to protect from it going to sleep 
    
  //While it's connecting, print a .
  while (status != WL_CONNECTED) {
    Serial.print(".");
    delay(100);
    status = WiFi.begin(WIFI_SSID, WIFI_PASS);
  }
  //Success message once connected to wifi
  Serial.println("WiFi Connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  //influxdb setups
  influx.setOrg("default");
  influx.setBucket("db_soil_moisture");
  influx.setToken();

  //Success message
  Serial.println("Setup complete");

}
void loop()
{

   Serial.println((String)"Sensor 1 Soil Mosture:="+asoilmoist); //Debug Only

  //Setup data to be written to db
  InfluxDataV2 measurement ("Soil_Moisture");
  measurement.addTag("Sensor", "1");
  measurement.addValue("Value", asoilmoist);
  
  //Write the data to table
  influx.write(measurement);
  delay(5000); //wait for it to write if slow
 
   esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); //Go to Sleep for Time X 
   Serial.println((String)"Going to sleep "+TIME_TO_SLEEP); //for debugging
   esp_deep_sleep_start();
        
}
     

我目前所犯的错误是:

Arduino: 1.8.13 (Linux), Board: "DOIT ESP32 DEVKIT V1, 80MHz, 921600, None"

/home/nathan/Arduino/test_soil_moisture_V2/test_soil_moisture_V2.ino: In function 'void setup()':
test_soil_moisture_V2:50:19: error: no matching function for call to 'InfluxdbV2::setToken()'
   influx.setToken();
                   ^
In file included from /home/nathan/Arduino/test_soil_moisture_V2/test_soil_moisture_V2.ino:3:0:
/home/nathan/Arduino/libraries/ESP8266_Influx_DB_V2/InfluxDbV2.h:28:8: note: candidate: void InfluxdbV2::setToken(String)
   void setToken(String token);
        ^
/home/nathan/Arduino/libraries/ESP8266_Influx_DB_V2/InfluxDbV2.h:28:8: note:   candidate expects 1 argument, 0 provided

exit status 1
no matching function for call to 'InfluxdbV2::setToken()'

我试图用NULL、()、“”和假字符串设置令牌。似乎什么都不管用。我已经潜入了第二次世界大战。cpp,XDBV2。h、 和InfluxDataV2。h文件试图解决这个问题,但我没有成功。

我希望有人能帮我指引正确的方向。

共有1个答案

左丘源
2023-03-14

@谢谢你的回复。我将行设置为inflow。setToken(“SomeFakeToken”)并删除了错误candidate expects 1参数,0提供了,但它仍然无法正确编译。

然后我注意到行'null'没有声明在这个范围if(_token==null||_token.length()

这是我整个周末都在处理的同一个错误。然后我想起了阅读C如何要求NULL和js如何使用null。我更新了IMOXDbV2.cpp并将null更改为NULL,它终于编译了!

谢谢你的帮助!

 类似资料:
  • 我正在尝试从我创建的一个简单的联系人表单中插入数据。我正在使用phpMyAdmin 下面是PHP(出于安全考虑,我删除了define语句,但我可以毫无问题地建立到数据库的链接。) 当有人点击论坛上的submit按钮后,代码就会运行,据我所知,这是正常工作的。 该错误发生在php代码的末尾。正在输出“SLQ Insert Statement FAILD”,但未发布mysql错误。 我的数据库/表的设

  • 我正在尝试使用Databricks的spark-csv2.10依赖关系将一个数据帧写入到HDFS的*.csv文件。依赖关系似乎可以正常工作,因为我可以将.csv文件读入数据帧。但是当我执行写操作时,我会得到以下错误。将头写入文件后会出现异常。 当我将查询更改为时,write工作很好。 有谁能帮我一下吗? 编辑:根据Chandan的请求,这里是的结果

  • 问题内容: 这段代码曾经很好(在某种意义上,编译器没有抱怨): 从Swift 5.0开始,这会产生警告: 警告:不建议使用“ withUnsafeBytes”:请改用 我试着用所提出的方法,但我似乎无法缠斗到这最终需要。 如何以不推荐的方式编写此函数? 问题答案: 诀窍是使用函数: 尽管此功能适用于Swift 5.0,但显然存在一些问题。参见相关论坛讨论。

  • 显然它无法解码数据。有什么想法吗?

  • 我有一个名为df的数据库数据帧。我想将它作为csv文件写入S3存储桶。我有S3存储桶名称和其他凭据。我检查了这里给出的在线留档https://docs.databricks.com/spark/latest/data-sources/aws/amazon-s3.html#mount-aws-s3它说使用以下命令 但我有的是数据帧,而不是文件。怎么才能实现?