c++ - 如何在我使用的 arduino 库之一中修复构造函数中的转换错误
问题描述
我试图让两个 LoRa-esp32 相互通信,但我的“MASTER”需要将从“SLAVE”接收到的传感器上的读数发送到我的 MQTT 服务器(使用 io.adafruit)。而且由于某种原因,我无法将数据发送到 MQTT 服务器。我尝试了一切,但我不明白为什么会这样。
我阅读了函数的 .h 构造函数,但我似乎不明白这有什么问题。
这是我发布功能的代码:
if (! Text1.publish(msg)) {
Serial.println(F("Failed"));
} else {
Serial.println(F("OK!"));
}
这是对应的Adafruit_MQTT.h lib代码:
class Adafruit_MQTT_Publish {
public:
Adafruit_MQTT_Publish(Adafruit_MQTT *mqttserver, const char *feed, uint8_t qos = 0);
bool publish(const char *s);
bool publish(double f, uint8_t precision=2); // Precision controls the minimum number of digits after decimal.
// This might be ignored and a higher precision value sent.
bool publish(int32_t i);
bool publish(uint32_t i);
bool publish(uint8_t *b, uint16_t bLen);
private:
Adafruit_MQTT *mqtt;
const char *topic;
uint8_t qos;
};
这是我得到的错误:
大师:189:42:错误:初始化时无法将“字符串”转换为“常量字符*”
const char *msg = createJsonString();
退出状态 1 无法在初始化中将 'String' 转换为 'const char*'
编辑
如评论中要求将 Master:168 中的代码添加到 Master:202
void receive(){
//Tentamos ler o pacote
int packetSize = LoRa.parsePacket();
//Verificamos se o pacote tem o tamanho mínimo de caracteres que esperamos
if (packetSize > SETDATA.length()){
String received = "";
//Armazena os dados do pacote em uma string
for(int i=0; i<SETDATA.length(); i++){
received += (char) LoRa.read();
}
//Se o cabeçalho é o que esperamos
if(received.equals(SETDATA)){
//Fazemos a leitura dos dados
LoRa.readBytes((uint8_t*)&data, sizeof(data));
//Mostramos os dados no display
showData();
Serial.print("Publish message: ");
//Criamos o json que enviaremos para o server mqtt
const char *msg = createJsonString();
Serial.println(msg);
//Publicamos no tópico onde o servidor espera para receber
//e gerar o gráfico
//client.publish(TOPIC_NAME, msg.c_str());
//#define TOPIC_NAME "iot-2/evt/status/fmt/json"
if (! Text1.publish(msg)) {
Serial.println(F("Failed"));
} else {
Serial.println(F("OK!"));
}
}
}
}
解决方案
它确实看起来像类型不匹配。根据编译器错误,createJsonString() 返回一个字符串对象。在 C++ 中,这与字符数组不同。我建议您花点时间熟悉一下 std::string,将 msg 转换为建议的字符串对象(如 jxh)并使用 c_str() 函数来访问字符数组。
推荐阅读
- c# - 如何在 ASP.NET C# WebMethod 中评估 2 个字符串在 JQuery 中返回
- javascript - 在测试期间收到 ArgumentError,但在开发中没有,为什么?
- javafx - JavaFX:如何获取 TableView 中的所有行
- java - 如何按时间戳对对象的 ArrayList 进行排序并获取最后五个元素
- haskell - 我如何遍历一个 n 元素列表并在每个元素上应用一个函数
- python - 如何组合数据框的月和年列以形成时间序列数据
- google-chrome-extension - 在 Chrome 扩展中发出 AJAX POST 请求时的内容安全策略和 connect-src?
- apache-spark - 从pyspark中的数据框ArrayType列中获取前N个元素
- string - 将字符序列转换为字符串的最有效方法(Scala/JVM)
- python - python http服务器2路通信