我想用CO2-mini在Golang中测量二氧化碳浓度

概述

最近在课堂上有个推文引起了热议,推文中说学生在上课时睡着是因为通风不良。据说通风不良会导致二氧化碳浓度升高,让思维迟钝并感到困倦。随着天气变冷,通风不良的情况可能会增加。作为一名工程师,不希望在不知不觉中生产力下降。因此,我想要好好测量二氧化碳浓度的情况。

其实,我大约一年前就想做这件事,但一直失败了……不过,就在前几天,我终于设定了个人的截止日期,并勉强达成了LT演讲。这就是我的记录。

进行案例调查

这篇文章很有参考价值。
看起来在亚马逊上可以买到价格大约一万日元左右的CO2-mini,看起来很不错。

決定的要搜索 CO2-mini 值的库有 Ruby、Python、Perl、C、Node.js等等。
然而,好像没有看到 Golang 版本。
正好,我想制作一下。

图书馆选择

根据先前提到的文章,处理这个名为CO2-mini的设备时最好使用HIDAPI。

因为Golang中有一个简单易用的库https://github.com/zserge/hid可以满足此要求,我选择了它。

Go语言的简单HID驱动程序(纯Go,无依赖,无cgo)。

因为那份说明书看起来很不错。
我认为USB相关的东西需要各种语言的库,容易陷入困境。
希望通过使用Golang来解决这些问题。

完成的东西 (A completed thing)

這是這裡。
我基本上直接使用了圖書館的示例代碼和參考文章。

触动

我对结果感到惊讶,原本以为会变得很复杂,但事实上却出奇地简单。虽然之前从未进行过其他语言的迁移,但却很高兴最后结果令人满意。

在另一方面,我也有一些反省的地方。最初参考的那段ruby代码是这种感觉。

result = (0..7).map{|i| (0x100 + phase3[i] - ctmp[i]) & 0xff }

因为在Golang中直接使用0x100进行计算会引起错误,所以我进行了一些掩饰处理。

res[i] = (0xFF + b[i] - ctmp[i] + 0x01) & 0xFF

暂时试一试,虽然不完美但好像达到了完成的目标。

未来的计划

我正在编写将数据通知给Mackerel并将其绘制成图形的代码。
同时,我也考虑将数据通知给Google Home,希望能有一个好的体验。
对于通知到Google Home,有一个Golang版本的工具。
如果能够全部通过Golang完成,我觉得会很有趣。

广告
将在 10 秒后关闭
bannerAds