繁体   English   中英

在 Arduino 上通过 MQTT 将 int 数组发布为字符串

[英]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 高效,可用于稳定的生产环境。
您可以添加的改进:

  • 从 int 数组大小中获取 for 循环的结束值
  • 使其适用于 0 和 1 以外的整数 - 使用辅助数组进行转换
    • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM