[英]Publish array of int as string over MQTT on Arduino
作为新手,这让我疯狂了几个小时:
我有:
int relayStates[] = {0,0,1,1,0,1,0,0};
稍后在我的代码中,我想使用 PubSubClient MQTT 将状态发布为 char[] 为:
00110100
client.publish(topic,<here char[]>);
我尝试了我能想到的所有转换,但没有任何效果。 有人可以帮助我吗?
最好的问候,奥斯卡
让我们以手动方式来学习如何从 int arrays 构建字符串 定义一个足够大的全局 char 数组:
char textToSend [9] = {'\0'}; // takes 8 chars and a terminator
在这里,我们从relayStates[]
复制并“转换”为 char (适用于所有个位数)
textToSend [0] = '\0'; // we reset the char array
for(int i = 0; i < 8; i++) {
if (relayStates[i] == 0) textToSend [i] = '0'; // SINGLE quote as it is a char
if (relayStates[i] == 1) textToSend [i] = '1'; // SINGLE quote as it is a char
}
textToSend [8] = '\0'; // we terminate the char array
client.publish(topic, textToSend); // we transfer the array content to MQTT
这种方法是透明的,memory 高效,可用于稳定的生产环境。
您可以添加的改进:
char numBuffer [9] = {'\0'}; // takes 8 chars and a terminator for converting ints
itoa(relayStates[i], numBuffer,10); // converts an int to a base 10 dec char array
strcat(textToSend, numBuffer);
抱歉,这个话题的问题迟到了。 我尝试了发布整数数组(0和1除外)的解决方案。 但是数组中只写入了一个 int。
for (int i = 0; i <= 2; i++) {
for (int j = 0; j <= 2; j++) {
digitalWrite(adressPins[j], bitRead(i, j));
delayMicroseconds(50);
}
feuchteRoh[i] = analogRead(33);
}
for (int i = 0; i <= 2; i++) {
trockenheit[i] = map(feuchteRoh[i], rohTief, rohHoch, 0, 100);
}
for (int i = 0; i <= 2; i++) {
feuchtigkeit[i] = 100 - trockenheit[i];
Serial.println(feuchtigkeit[i]);
}
for (int i = 0; i <= 2; i++) {
itoa(feuchtigkeit[i], numBuffer, 10);
}
Serial.println(numBuffer);
msg[0] = '\0';
strcat(msg, numBuffer);
msg[10] = '\0';
client.publish("ESP32/ Test", msg);
变量的名称是德语,我希望这不是问题。
感谢您的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.