【かんたん注意喚起システム(CO2)】ラズパイとPython を使って手軽にIoT化・見える化!

本サイト、記事にはプロモーションを含む場合があります。

IoT/Web/プログラミング
スポンサーリンク
  • 今話題のCO2の注意喚起システムのプログラミングに挑戦したい!
  • サクッと自分でセンサを使ってIoTを作ってみたい!

IoTがブームになっており、いたるところでプログラミング人気がでています。特に今はコロナの影響もありCO2の注意喚起システムが話題を集めています。お金はかけられないけど、自分で簡単なシステムが作れたらいいなあと思っている人も多いはず。

この記事では、USBで接続できるCO2センサ、ラズパイおよびPythonを使ってIoTの簡単システムの方法を解説していきます。この記事を読むことで、初心者でも簡単にCO2センサを使ったIoTシステムをつくることことができます。

書籍やネット情報だけではたどり着けない内容まで掲載しています。初心者でも順に作業を追えば自分でIoT化を実現することできます。

【IoTとPythonに触れる!】構造設計者がラズパイでプログラミングに挑戦!

スポンサーリンク

今回使用する準備物(Python含む)

今回使用するモノは次の通りです。プログラミング言語は「Python」を使っています。

  • ラズパイ
  • CO2センサ
  • キーボード
  • マウス
  • microSDカード

それぞれの準備物について詳しく説明していきます。

ラズパイ

初心者の方にオススメキットを選びました。ポイントしては次の通りです。

  • OSがプリインストール。
  • CPUなどに放熱フィンがある。
  • ON/OFF付電源アダプタ付である。
  • モニタ用の専用ケーブルがついている。

ほかにもラズパイの種類はあります。もっと詳しくラズパイについて知りたい方は下記の記事に詳しく記載しています。

【IoTとPythonに触れる!】構造設計者がラズパイでプログラミングに挑戦!

Python

Pythonとは、1991年にオランダのグイド・ヴァン・ロッサムが開発した言語です。読みやすく、かつ効率がよいコードをできる限り簡単に書けるように目指された言語であり、次の特徴があります。

  • いくつも手法を用意せず、方法が1つだけ。
  • シンプルで比較的に覚えることが少ない。
  • 1行で多くの処理を記述できる。
  • 標準ライブラリが豊富。
  • Python向けの応用モジュールも豊富。
  • AI、機械学習に取り組みやすい。
  • Webへのアクセスなどがしやすい。
Ruizi54(たっちん)
Ruizi54(たっちん)

比較的、プログラミングを直感的に読むことができるので、Pythonはプログラミングに触れていない方にもオススメだよ。

CO2センサ(CO2-mini)

CO2測定範囲0~3,000ppm
分解能1ppm (0~1,000ppm)
10ppm(1,001~3,000ppm)
LED設定緑:< 800 ppm
黄:800 ~ 1200 ppm
赤:> 1200 ppm
使用環境温度0~50℃
測定温度範囲0~50℃
電源USBから供給 (5V、300mA)

Ruizi54(たっちん)
Ruizi54(たっちん)

自動キャリブレーションでCO2と温度測定できます。USB接続で挿すだけですぐに使用できます。その上、(株)村田製作所でも使用されているので安全・安心のシステムです。

CO2-miniはUSBに挿すだけ使用でき、さらに測定精度も高いので大変安心して使用できます。

キーボード&マウス

キーボードとマウスは、現在持っているもので十分問題ありません。

購入したいという人向けにワイヤレスマウス付きキーボードを載せておきます。現在はワイヤレスマウス・キーボードが中心です。ラズパイ4はでもワイヤレスマウス・キーボードは使えます。

Ruizi54(たっちん)
Ruizi54(たっちん)

私もワイヤレスキーボード・マウスを使っているよ。その方がUSBのポートを1つ使わずに済むからね!

モバイルバッテリー

ラズパイ4を通常使用するには5V・3Aのアダプタコンセントプラグが必要です。その場合、コンセントから少し離れて作業ができません。

そこに登場するのが、モバイルバッテリーです。「Anker PowerCore Fusion 5000」は5V・3Aの出力を出してくれるので、ラズパイにも使用できます。

Ruizi54(たっちん)
Ruizi54(たっちん)

スマホであれば5V・3Aも必要ないよ。しかも3Aという大きな電流を出力できるモバイルバッテリーは少し特殊だから入手性も若干悪い。ネットなどで見つけたときにぜひ買っておこう!

モバイルバッテリーがあると好きなところでラズパイを使って水の測定ができます。スマホ充電にも使えるので1台は持っておいて損はありません。

CO2注意喚起システムのプログラミングに挑戦!

ではCO2の測定していきます。大まかな流れは次の通りです。

  1. ラズパイの初期設定(OSインストール状態からスタート)
  2. GitHubでco2-monitorのプログラムをインストール
  3. GoogleCloudPlatformの無料登録
  4. googlespredsheetに保存

動きとしては、フロー図に詳細を記載しますが、大きくは次の通りです。

  1. ターミナルに実行コマンドを打ち込んで測定開始。
  2. CO2濃度と温度を測定。
  3. 測定された値をクラウド(Googleスプレッドシート)にリアルタイム保存。
  4. 「ctr+c」コマンドでプログラムすべてを終了。
Ruizi54(たっちん)
Ruizi54(たっちん)

OSインストール済みだと思うけど、さらにボタンなどのを動かすためのモジュールをインストールする必要があるよ。最初は少しめんどくさいけど、一度やれば後は何もする必要がないから、はじめだけ辛抱してね。

ラズパイ初期設定

パッケージマネージャの更新を行い、OSの最新バージョンを行います。

今回はOSにすでにインストールされているモジュール・ライブラリで動作が可能です。ここでは、システムにインストールされているモジュールやライブラリの更新だけ行っておきます。

sudo apt update -y

Ruizi54(たっちん)
Ruizi54(たっちん)

アップデートしなくても作成できると思うよ。でも出来り限り最新のばーしょんのものを使おう!

VNC Viewerについて

VNC Viewerのインストール

ネットワーク経由で、ラズパイの操作を別のPCから操作するための無料ソフトをインストールします。無料ソフトは「VNC Viewer」というソフトです。(VNC=Virtual Network Computing)

ラズパイ側にはソフトが入っているので、インストールはPC側だけです。

Ruizi54(たっちん)
Ruizi54(たっちん)

同一Wifi以外に異なるWifiでも使用可能なので、外から家にあるラズパイを操作することが可能です。

VNC Viewwerのサイトに入ります。以下のところからサイトに入ることができます。

画像に alt 属性が指定されていません。ファイル名: image-217-800x479.jpg

Windows OSの場合、そのままDownload VNC Viewerをクリックします。

実際にVNC Viewerをインストールします。

SSHの設定

SSHとは?

SSH(Secure Shell)は、ネットワークを介して別のコンピューターやネットワーク機器などを操作するための方法。SSHを使用すると、認証部分を含めてすべての通信が暗号化されるため、第三者に簡単には解読できなくなります。

sshの番号を変えておく。

$ sudo nano /etc/ssh/sshd_config

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.

#Port 22 → ここを22以外に変更
#AddressFamily any

VNC Viewerの設定

ラズパイをパソコンから遠隔操作する手順は次の通りです。

今回は、同じWiFi環境で使う場合の設定を行います。

また、サインインは同じメールアドレスでの登録をPC側とラズパイ側でしておく必要があります。

  1. ラズパイ側のIPアドレスのメモ、およびVNCを起動する。
  2. パソコン側のIPアドレスを起動し、IPアドレスとパスワード(ラズパイで設定しているパスワード)を入力します。

ラズパイ側のはIPアドレスをメモします。

PC側の設定です。

IPアドレスを打ち込んで「Enter」を押します。

「OK」をクリック後、以下の通りPC側でラズパイを確認できればVNC Viewerの接続は完了です。

異なるWiFiでもVNC Viewerの接続はできます。あまり使用することはありませんが、ラズパイとスマホなどで接続もできますので、一度チャレンジしてください。

GitHubでco2-monitorのプログラムをインストール

CO2-miniセンサをラズパイで動かすpython用のプログラム言語は、GitHubで無料でダウンロードできます。

Ruizi54(たっちん)
Ruizi54(たっちん)

GitHubではプログラムファイルを保存・公開ができます。最近は複数人でプロジェクトを行うときに良く使用されるよ!

以下の内容をラズパイのターミナルに打ち込んだ後、「Enter」を押してください。

git clone https://github.com/t24kc/co2-monitor.git

ファイルの中身は愚次の通りです。

最終的に使うファイルは、「handler.py」になります。

日本人の方が作成したプログラム言語が無料でとれる!

そのあとにpythonライブラリーをインストールしてください。全部で3つあります。

gspread
pythonでgoogle spread sheetを操作することができるライブラリ。
oauth2client
Google Cloud Platformで発行する承認情報を操作できるライブラリ。
schedule
一定間隔(数分・数時間・数日おき)で同じ作業を実行できるライブラリ。

sudo pip3 install -r requirements.txt

Ruizi54(たっちん)
Ruizi54(たっちん)

インストール後、「pip3 list」を押して、3つのライブラリがインストールできているか確かめてください。

Google Cloud Platformの無料登録

事前にgoogleのアカウント登録をしておいてください(無料)。

手順は次の通りです。

  • GoogleCloudPlatformのプロジェクトを作成。
  • googlespredsheetのAPIを有効にする。
  • 認証情報を登録し有効にする。

図で順に解説していきます。

Google Cloud Platformのサイトへ入ると「コンソール」をクリック

「無料で開始」は押さないこと。

  • 国:日本
  • 利用規約:2つともチェックを入れる

「プロジェクトの選択」をクリックします。

新しいプロジェクトをクリックします。

次の項目を記載します。

  • 好きなプロジェクト名
  • 場所:組織なし

作ったプロジェクト名選びます。

認証情報の登録を行っていきます。

鍵を作成していきます。

Ruizi54(たっちん)
Ruizi54(たっちん)

パソコンでダウンロードしたjson拡張子ファイルは「key.json」ファイル名に修正した後、ラズパイに保存しましょう!

保存先は、GitHubでダウンロードしたプログラミングファイルと同じ場所に保存しよう!

Google Cloud Platformの無料登録はここで終了です。

Google Cloud Platformの認証を完了させておくことで、google spred sheetと連携できるようになります

google spred sheetに保存

googlw spred sheetの設定を行っていきます。手順は次の通りです。

  • gmaiをあらかじめ登録しておく。
  • googlespredsheetにgmailを登録する。
  • googlespredsheetを新しく立ち上げる。
  • ファイル名を記載する。
  • GoogleCloudPlatformで発行されたメールアドレスをgooglespredsheetに共有させる。
  • あらかじめ登録したgmailに「アドレス不明」のメールが来ているか、確認する。
Ruizi54(たっちん)
Ruizi54(たっちん)

問題なく、google spred sheetの設定ができていれば、登録しているgmailに「アドレス不明」というメールが届くよ!メールが来ない場合は、設定がうまくいっていない可能性があるから、もう一度やってみてね!

プログラムの実行と中身について

プログラミングの流れは次の通りです。

「handler.py」はダウンロードした状態ではCO2しか保存されないようになっています。よって、気温も保存できるように少し、プログラミングを変更します。

from datetime import datetime
from time import sleep
from lib.spread_sheet import SpreadSheet
from sensor.CO2MINI import CO2MINI
import argparse
import schedule
DEFAULT_COLUMNS = ["Time", "CO2(ppm)", "TMP(℃)"]  #追加1/3:"TMP(℃)"をつける
DEFAULT_SERVICE_ACCOUNT_PATH = "./key.json"
DEFAULT_INTERVAL_SECONDS = 5
class Scheduler:
    def __init__(self, args):
        self._co2mini_sensor = CO2MINI()
        self._spread_sheet_client = SpreadSheet(
            args.key_path, args.spread_sheet_id
        )
        if not self._spread_sheet_client.get_label_value("A1"):
            self._spread_sheet_client.append_row(DEFAULT_COLUMNS)
    def monitoring_job(self):
        current_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        self._co2mini_sensor.read_data()
        co2 = self._co2mini_sensor.get_co2()
        TEMP = self._co2mini_sensor.get_temperature()
        values = [
            current_datetime,
            round(co2, 1),   #追加2/3:「,」をつける
            round(TEMP, 1)  #追加3/3:round(TEMP, 1)をつける
        ]
        print(values)
        self._spread_sheet_client.append_row(values)
def main():
    parser = argparse.ArgumentParser(description="CO2 Sensor Script")
    parser.add_argument(
        "-s",
        "--spread-sheet-id",
        type=str,
        required=True,
    )
    parser.add_argument(
        "-k",
        "--key-path",
        type=str,
        default=DEFAULT_SERVICE_ACCOUNT_PATH,
        help="set service account key path (default {})".format(DEFAULT_SERVICE_ACCOUNT_PATH),
    )
    parser.add_argument(
        "-i",
        "--interval",
        type=int,
        #default=DEFAULT_INTERVAL_SECONDS,
        default=DEFAULT_INTERVAL_SECONDS,
        help="set script interval seconds (default {} seconds)".format(DEFAULT_INTERVAL_SECONDS),
    )
    args = parser.parse_args()
    scheduler = Scheduler(args)
    schedule.every(args.interval).seconds.do(
        scheduler.monitoring_job
    )
    while True:
        schedule.run_pending()
        sleep(1)
if __name__ == "__main__":
    main()

プログラミングの変更が終わった後、ターミナルから許可を行います。ターミナルには次の内容を打ち込みます。

sudo python3 handler.py -i 5 -s {ここにはgoogle spred sheetのシートIDを貼り付ける}

はgoogle spred sheetのシートIDは、「~d/********/edit・・・」の間がシートIDになります。

日付、時間、CO2、気温が動き出せば問題ありません。

Ruizi54(たっちん)
Ruizi54(たっちん)

プログラムの「-i」や「-s」は独自で考えている内容だよ!「-i 5」で5秒ごとに表示出力をしている。「-s」は書き込むGoogle Spred SheeのシートIDを指定しているよ!

プログラミングにエラーが生じる場合は、以下の内容をやってみてください。

USBの読み取りエラー
キーボード、マウス、CO2-miniセンサがUSBに刺さっている場合、いったんすべて取り外してください、その後、CO2-miniセンサから挿し直してください。
プログラムファイルの場保存場所エラー
「lib(フォルダ)」、「Sensor(フォルダ)」「handler.py」、「README.md」、「requirements.txt」のフォルダ・ファイルをラズパイの「pi」フォルダ直下にコピーしてください。

完成状態と動き

プログラムを実行すると、CO2-miniセンサで読み取ったCO2濃度と気温のデータをGoogle Spred Sheetにリアルタイムに保存されます。

Ruizi54(たっちん)
Ruizi54(たっちん)

Googleスプレッドシートにリアルタイムに保存されるので、いちいちラズパイを直接見なくても時間による変化が簡単にわかるね!まさにIoTだね!

ビルにはなりますが、厚生労働省が「冬場における換気の悪い密閉空間を改善するための換気」ついての資料をまとめられています。ここに記載されている基準は次の通りです。

温度17℃~28℃
CO2濃度換気基準1,000ppm以下
湿度40%~70%

CO2濃度の基準の目安としては、1つは1,000ppmであることがわかります

CO2-miniセンサを使えれば、電子回路設計の必要もなく、ラズパイやパソコンの簡単な設定だけで簡単にIoTが実現できます。

最後に:USBタイプのセンサを使って簡単にIoTを学ぼう!

今回はCO2濃度と気温をクラウドにリアルタイムに保存するシステムを作ってみました。そのメリットとデメリットは次の通りです。

メリット
デメリット
  • USB接続なので、簡単。
  • 数万円でIoTを実体験できる。
  • Googleのサービスが無料で使えてクラウド化ができるので、大変便利。
  • 回路設計を学ぶことができない。
  • Pythonの学びが少ない。
  • セキュリティに少し不安がある。
Ruizi54(たっちん)
Ruizi54(たっちん)

簡単にクラウド化をはじめたいなら、USB対応のセンサは便利だよ!

今回のまとめです。

  • Pythonとラズパイを使うことで簡単にIoTを実現できる。
  • Googleが展開しているサービスを使うと無料で簡単にクラウド化を実現できる。
  • USBタイプのセンサを使うことで、電子回路を回避できるので取り組みやすい。

ぜひ、自分でドンドンチャレンジをしてIoTを習得してください。

また、構造設計者がプログラミングを学んだ方が良いオススメ理由と勉強法を解説しています。興味があれば、ぜひ読んでみてください。