我跟随微软的文章尝试使用事件集线器中的事件数据。
我有一个esp32每10秒发送一条遥测消息到Azure IOT集线器,IOT集线器会将消息路由到事件中心,消息放在那里让我从控制台应用程序中检索。
ESP32上的代码如下所示
float temperature = (float)random(0, 50);
float humidity = (float)random(0, 1000) / 10;
snprintf(messagePayload, MESSAGE_MAX_LEN, messageData, DEVICE_ID, messageCount++, temperature, humidity);
//// Below are the important part, I tried sending messagePayload, or a simple hello word string.
EVENT_INSTANCE *message = Esp32MQTTClient_Event_Generate(/*"HelloWorld"*/ messagePayload, MESSAGE);
Esp32MQTTClient_Event_AddProp(message, "temperatureAlert", "true");
Esp32MQTTClient_SendEventInstance(message);上面的过程对我来说似乎很好,因为我可以看到数据被传输到Azure的IOT中心。
但是当我复制官方教程中的代码来使用控制台应用程序中的遥测数据时。
实际的问题就会发生。
Console.WriteLine("\tReceived event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray()));
是的,我得到了一些字符串,这些字符串看起来有点像我刚刚从Esp32发送的数据。
但我为什么要:
"body":"eyJkZXZpY2VJZCI6ImVzcDMyIiwgIm1lc3NhZ2VJZCI6MSwgIlRlbXBlcmF0dXJlIjoxOS4wMDAwMDAsICJIdW1pZGl0eSI6MzAuNzk5OTk5fQ=="}
而不是
"body":"{\"deviceId\":\"esp32\", \"messageId\":8, \"Temperature\":3.000000, \"Humidity\":21.500000}"
数据似乎被搅乱了,它实际上反映了我从Esp32发送的数据,例如:
"body":"SGVsbG8=""body":"SGVsbG9Xb3JsZA=="我尝试过的事情:
1.更改所发送的数据字符串,从而发现加扰数据反映了实际数据。
2.尝试使用控制台应用程序将数据发送到事件中心并检索它(就像官方文档一样),我可以完美地获得我发送的数据,但我最终需要从我的Esp32中正确发送数据。
我对每件事都很陌生,请给我一些提示,关键词,基本上任何东西都会有帮助。
此外,请随时指出这篇文章中的任何错误,我认为我可能误解了很多术语,或者我没有正确地提出问题。
我将尝试用一些延迟来回复任何评论。(我每天都很安静,很忙,我住在UTC+8时区,所以我可能在睡觉。)
谢谢你提前提供帮助!
发布于 2022-01-16 18:23:41
您要返回的数据是Base64编码的。您所需要做的就是解码这些数据,然后您将看到实际的字符串数据。
你会做这样的事情:
var text = System.Text.Encoding.UTF8.GetText(System.ConvertFromBase64String("base64-encoded-string"));https://stackoverflow.com/questions/70732851
复制相似问题