向Google Cloud IOT核心发送大数据量

时间:2020-06-10 23:50:00

标签: google-cloud-iot esp-idf

我正在用esp32开发一个项目,该项目测量传感器数据,将此数据保存到sd,并将数据发布到Web(到Google Cloud IOT核心)。 数据的测量和保存已经很好地工作了,但是我面临一些有关发送到网络的问题。

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

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

由于我认为这可能是由于数据量大而出现的,因此我删除了第二个队列,并每秒发送一次“ dummy”消息​​。效果很好。

有人知道如何处理这些数据量或遇到类似问题吗?

可能我也在使用完全错误的方法....可能每个发布发送多个值,这样我就不必每秒发送500个请求了?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

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

另外,您可能希望将发布间隔扩大到每秒一次,因为StrawHat指出发送每秒500个请求不是一个好主意,并且可能导致IoT Core拒绝连接。