我正在尝试修改 arduino 的 onewire 库中包含的示例中的代码,这样无论我插入了多少个 onewire 设备,它总能找到它们并使用设备 ID 和当前温度将其发布到 MQTT。我已经得到它来发布温度,但是无法将十六进制的设备 ID 或 ROM 添加到我的主题中。
因此,例如,我希望它看起来像这样。注意 MQTT 的主题和消息必须是 Char*(更多信息:http: //knolleary.net/arduino-client-for-mqtt/api/#publish1)
主题 = 摄氏度,例如 12.09
有效载荷(或 msg)= \home[ROM]\temperature\current 例如。\home\2894AA6220025\温度\电流
(只是您在没有我添加的情况下运行代码时通常得到的输出示例,这是串行输出!!注意我要使用的 ROM 和摄氏度)
已将我的完整代码放在这里,它只是对包含的 onewire 示例的修改,添加了 pubsub MQTT 部分。
(从第 155 行开始)https://gist.github.com/matbor/5931466
//publish the temp now to mqtt topic
String strTopic = "/house/285A9282300F1/temperature/current"; // need to replace the 285A9282300F1 with the ROM ID on each LOOP!
char charMsg[10];
String strMsg = dtostrf(celsius, 4, 2, charMsg); //convert celsius to char
char charTopic[strTopic.length() + 1];
//char charMsg[strMsg.length() + 1];
strTopic.toCharArray(charTopic, sizeof(charTopic));
strMsg.toCharArray(charMsg, sizeof(charMsg));
client.publish(charTopic,charMsg);