arduino用のonewireライブラリに含まれている例のコードを変更して、接続したonewireデバイスの数に関係なく、常にそれらを見つけて、デバイスIDと現在の温度を使用してMQTTに公開しようとしています。温度を公開してもらいましたが、16 進数のデバイス ID または ROM をトピックに追加するのに問題があります。
たとえば、このように表示したいのです。MQTT のトピックとメッセージは Char* である必要があることに注意してください (詳細はこちら: http://knolleary.net/arduino-client-for-mqtt/api/#publish1 )
トピック = 摂氏 例: 12.09
ペイロード (またはメッセージ) = \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);