Google cloud platform 使用Esp32重用JWT错误的Google cloud MQTT

Google cloud platform 使用Esp32重用JWT错误的Google cloud MQTT,google-cloud-platform,google-cloud-functions,mqtt,esp32,Google Cloud Platform,Google Cloud Functions,Mqtt,Esp32,我试图用Arduino IDE和这个库从ESP32向谷歌云发送假温度数据。我在google iot core上创建了一个注册表和一个设备。在我这方面,我手动将csa证书放在ESP32上,并在“ciotc_config.h”中正确设置所有参数和私钥字符串。当我尝试连接时,我进入串行监视器,以下输出会自动重复: ho 0 tail 12 room 4 load:0x40080400,len:6352 entry 0x400806b8 Setup..... Starting wifi Connecti

我试图用Arduino IDE和这个库从ESP32向谷歌云发送假温度数据。我在google iot core上创建了一个注册表和一个设备。在我这方面,我手动将csa证书放在ESP32上,并在“ciotc_config.h”中正确设置所有参数和私钥字符串。当我尝试连接时,我进入串行监视器,以下输出会自动重复:

ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8
Setup.....
Starting wifi
Connecting to WiFi
Connected
Waiting on time sync...
Esp32 mqtt:

void setupWifi() {
Serial.println("Starting wifi");

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
Serial.println("Connected");
configTime(0, 0, ntp_primary, ntp_secondary);
Serial.println("Waiting on time sync...");
while (time(nullptr) < 1510644967) {
delay(10);
}
}

void connectWifi() {
Serial.print("checking wifi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
} 
void setupWifi(){
Serial.println(“启动wifi”);
WiFi.模式(WiFi_STA);
WiFi.begin(ssid,密码);
Serial.println(“连接到WiFi”);
while(WiFi.status()!=WL_已连接){
延迟(100);
}
Serial.println(“已连接”);
配置时间(0,0,ntp_主,ntp_次);
Serial.println(“等待时间同步…”);
while(时间(nullptr)<1510644967){
延迟(10);
}
}
void connectWifi(){
串行打印(“检查wifi…”);
while(WiFi.status()!=WL_已连接){
连续打印(“.”);
延迟(1000);
}
} 
我更改了main.cpp,只是因为我将不使用这些传感器:

unsigned long lastMillis = 0;

void loop() {
mqtt->loop();
delay(10);  // <- fixes some issues with WiFi stability

if (!mqttClient->connected()) {
connect();
}

if (millis() - lastMillis > 60000) {
Serial.println("Publishing value");
lastMillis = millis();
float temp = 33;
float hum = 50;
StaticJsonDocument<100> doc;
doc["temp"] = temp;
doc["humidity"] = hum;
serializeJson(doc, buffer);
//publishTelemetry(mqttClient, "/sensors", getDefaultSensor());
publishTelemetry( buffer);
}
}
unsigned long lastMillis=0;
void循环(){
mqtt->loop();
延迟(10);//已连接(){
connect();
}
如果(毫秒()-lastMillis>60000){
Serial.println(“出版价值”);
lastMillis=millis();
浮子温度=33;
浮子嗡嗡声=50;
静态文件;
单据[“临时”]=临时;
doc[“湿度”]=嗡嗡声;
序列化JSON(文档、缓冲区);
//发布遥测(mqttClient,“/sensors”,getDefaultSensor());
出版遥测(缓冲);
}
}
来自PUB的图像:
我想这只是一个调试信息。它可能在您编写JWT标记信息的行中


我写了一篇关于如何使用与您的代码非常相似的完整源代码将ESP32连接到Google Cloud IoT的教程,但没有重复该信息。您可以查看一下,然后重用代码。如果我能帮到你,请告诉我。

看来你从未成功连接过

在您的输出中,我看到
正在连接…
因此它在
mqttConnect()
调用中,但它从未输出
已连接因此它被困在while循环中,在那里调用
getJwt()


现在,为什么不输出mqtt错误可能意味着您的错误与其他内容相关,并且mqtt客户机完全正常,这就是为什么您没有看到任何其他输出。作为调试检查,我将
Serial.println(“fubar”)
放在
mqttConnect()
调用的
delay(1000)
上方,查看是否有其他输出,指向mqtt连接问题以外的其他连接错误。

嘿,伙计,我正在执行所有步骤,但我遇到了一个问题。他们要求从这里获得证书,我下载了它,但是有15+个证书,我应该获得哪一个?你可以添加根证书更新我的问题,在esp32 mqtt连接代码中,有2个连接到wifi,正如我在问题中插入的那样。这使得我的代码不断重复检查wifi,是否可以删除该部分?我想我已经让它工作了,我得到了作为响应发布的值,但我的图表没有发送我插入的值main@FrancescoAzzolaCould请大家看一下:我稍后会删除这个问题