Help us understand the problem. What is going on with this article?

golangでも二酸化炭素濃度をCO2-miniで測りたい

More than 1 year has passed since last update.

概要

少し前、授業で生徒が寝てしまうのは換気が不十分だからだというツイートが話題になりました。
換気が不十分だと二酸化炭素濃度が上がり、思考が鈍くなったり、眠気に襲われるそうです。
これからの寒い時期、換気も不十分になりやすいです。
気づかないうちに生産性が下がるのはエンジニアとして避けたいことです。
このため、いい感じに二酸化炭素濃度を測りたいと思いました。

実はこれをやろうとしたのは一年前くらいなのですが、挫折していました…。
ですが、つい先日なんとかLT発表という締切を自分に課してかろうじて達成できました。
そんな記録です。

先行事例の調査

こちらの方の記事が参考になりました。
どうやらAmazonで一万円ぐらいで買えるCO2-miniが良さそうです。

CO2-miniの値を取得するライブラリは ruby, python, perl, C, Node.js...
いろいろありました。
しかしながら、Golang版はどうやら見当たらない様子。
せっかくなら作りたいと思いました。

ライブラリ選定

先述の記事にある通り、このCO2-miniというデバイスを扱うにはHIDAPIを利用したほうが良いようです。

Golangでそれに該当する簡単に扱えるものとして
https://github.com/zserge/hid
を選択しました。選定の理由としては

Simple HID driver for Go (pure golang, no dependencies, no cgo)

という説明書きが良さそうだったからです。
USB周りは各言語様々なライブラリが必要だったりとハマりやすいと思います。
そういった点をGolangで解決できたらいいなという目論見もありました。

できあがったもの

こちらです。
ライブラリのサンプルコードと参考にした記事をほぼそのまま流用しています。

感想

出来上がったものが存外シンプルになって少し驚きました。
他の言語のものを移植したことはなかったのですが、ちゃんとできてよかったです。

一方でちょっと反省点もあります。
元の参考にさせていただいた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で通すということができれば面白いかなと思っています。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away