1

我正在使用 esp32 开发一个项目,即测量传感器数据,将此数据保存到 sd 并将数据发布到网络(到谷歌云 IOT 核心)。数据的测量和保存已经非常好,但是我在发送到网络方面遇到了一些问题。

为了测量数据(最大频率应为 500 Hz),我使用了一个计时器,它定期测量数据并将测量数据发送到队列。一个单独的任务从队列中读取数据,然后将这些数据格式化保存到 sd 卡。到目前为止,一切都很好。

我正在使用 esp-idf 进行开发,因此实现了 Web 框架 esp-google-iot。连接到云的效果非常好,我已经能够接收命令(在第一种方法中,只是停止或开始测量的命令)。现在我尝试创建另一个队列,其中应该发布的数据被保存。然后我创建了一个延迟发布任务,它应该每秒将存储在队列中的所有数据发送到云端。不幸的是,我总是收到“内存不足”错误。

由于我认为这可能是由于数据量大而出现的,所以我删除了第二个队列,并且每秒发送一次“虚拟”消息。这非常有效。

有谁知道,如何处理这些数据量或有类似的问题?

可能我也采用了完全错误的方法......每次发布可能只发送一个以上的值,这样我就不必每秒发送 500 个请求?

任何帮助表示赞赏

4

1 回答 1

0

根据您在 IoT Core 上执行的操作,您可以在一个 JSON 字符串中发送整个队列,并使用 Cloud 函数解析 JSON 并将数据移动到 BigQuery。我认为这可能会解决您遇到的问题,尽管我建议只要您的设备读取数据就发布数据。

此外,您可能希望将您的发布间隔超过每秒,因为 StrawHat 指出发送 500 个请求/秒不是一个好主意,并且可能会导致 IoT Core 拒绝连接。

于 2020-07-23T17:13:24.563 回答