第2回:IoTデバイスとセンサーの準備
今回は、IoTデバイスの基本構成についての説明と、実際にIoTデバイスのマイコン上でセンサーデータを取得できるようなるまでを書いていきます。
全体の構成
全体の構成は下の図の通りです。
センサーで冷蔵庫内の明るさのデータを取得し、その結果をAWSへ送信。
クラウド上で可視化できるようにデータを処理して、WEBで確認したり、条件によってメールやSNSに自動通知する仕組みを作ります。

今回作る部分
今回は「センサーで明るさを検知」する部分の準備をしていきます。

機器の構成
今回使用するIoTデバイスとセンサーは以下の通りです。
- IoTデバイス:Raspberry pico W
- センサー:TSL2591
検証中の機器接続は簡易的にブレッドボードで行うことにします。
最終的にはユニバーサル基盤にはんだ付けして、小型ケースに収めるつもりです。
機材
IoTデバイス:Raspberry Pi Pico W
Raspberry Piのマイコンボード版
Raspberry Pi Pico Wは、Raspberry Piシリーズの中でも超小型&低消費電力なマイコンボードです。
特にIoT向けに設計されており、Wi-Fiが搭載されているのが大きな特徴です。
センサーとの相性が良く、インターネットへの接続が簡単
I²C、SPI、UARTといった通信プロトコルをサポートしており、さまざまなセンサーと簡単に接続できます。
例えば、環境センサー(温湿度・気圧)、照度センサー、加速度センサーなどと組み合わせて、データを取得できます。
Wi-Fi機能を標準搭載しているため、Pico W単体でインターネットに接続できるのが大きな特徴です。
また、低消費電力なのでバッテリー駆動にも向いているので、利用用途が広がります。
Pythonコードで開発できるので、初心者にも扱いやすい
MicroPythonを公式サポートしており、Pythonのシンプルなコードでマイコンを制御できます。
例えば、センサーからデータを取得するコードは、たった数行で書けます。
C言語に比べて学習コストが低く、初心者でも扱いやすいことも特徴の1つです。
USB経由で簡単にプログラムを書き込めるので、開発のハードルが低いのも特徴です。
PCに接続するとUSBストレージとして認識され、そこにスクリプトをコピーするだけで動作します。
Raspberry Piシリーズに比べてOSが不要な分、シンプルな用途に特化しています。
扱いやすくて低コスト、IoT試作や学習に最適
センサーとの相性が良く、Wi-Fi対応でIoT向け、MicroPythonで手軽に開発できる扱いやすいマイコンボードです。
しかも2,000円前後と低コストなので、今回のようなサンプル構成や試作、学習にも適しています。
センサー:TSL2591
特徴
TSL2591は、高感度なデジタル光センサーです。
I²Cインターフェースを備え、小型かつ低消費電力で組み込み用途に適しているため、
IoTデバイスとの相性が非常に良いです。
ドライバが豊富で、Raspberry PiやArduinoなど多くのプラットフォームで簡単に動作します。
赤外線と可視光の分離測定が可能で、照度の変動に強く、高い信頼性をもっています。
暗所から直射日光まで幅広く対応していて、環境光センサーとしてIoT、スマート農業、屋外モニタリングにも広く利用されています。
今回の実験的な構成にはオーバースペックではありますが、
1,000円前後で入手できるので、こちらのセンサーを使用することとしました。
I2C(アイ・スクエアド・シー)とは?
先ほどの機器の説明の中に出てきた「I2C」について、用語の説明をしておきたいと思います。
I²Cは電子機器同士をつなぐ通信規格
I²C(アイ・スクエアド・シー)は、電子機器同士をつなぐための通信規格の一つです。
特にセンサーやディスプレイなど、小型デバイスの制御によく使われます。
2本の信号線(SCLとSDA)だけで複数の機器を接続でき、配線がシンプルなのが特徴です。
I²Cでは、一つのマスター(制御側)が、複数のスレーブ(周辺機器)とやり取りします。
例えば、Raspberry PiなどのIoTデバイスを使って、光センサーや温度センサーと通信できるということです。
省配線&低コストというメリットが大きく、IoTや組み込み開発で広く用いられてます。
センサーの準備
TSL2591センサーは下の写真ような形をしています。
2cm×3cmくらいの小さな基盤です。

基盤の下のほうに、6つの穴があります。
スルーホールといわるこの穴が、電源の供給や他の機器との通信を行うためのインターフェースです。
ピンヘッダーの取り付け
基盤の状態では、この後のRaspberry Piとの接続ができません。
スルーホールに「ピンヘッダー」といわれる接続端子を取り付けておきます。

これで、ピンヘッダーの「足」をボードに差し込むことで、電源供給や通信ができるようなりました。
ブレッドボードでTSL2591とRaspberry Piを接続
ブレッドボード
ブレッドボード(Breadboard)は、電子回路をハンダ付けなしで素早く試作できる基板だ。
電線や電子部品を挿し込むだけで回路を組めるので、電子工作やIoT開発の入門に最適なツールとなっています。
センサーとRaspberry Piの接続
ブレッドボードにTSL2591とRaspberry Pico Wのピンを差し込みます。

ジャンパーワイヤといわれるコードでTSL2591とRaspberry Pico Wをつなぎます。

接続は以下の通り
それぞれのピンを接続しました。
Raspberry Pico W GPIO_0 → TSL2591 SDA
Raspberry Pico W GPIO_1 → TSL2591 SCL
Raspberry Pico W pin36(3V) → TSL2591 VIN
Raspberry Pico W pin33(GND) → TSL2591 GND
Raspberry Pi Pico Wの初期設定
初期設定① Raspberry Pi Pico Wにmicropythonをインストール
Raspberry Pi Pico Wはマイクロコンピュータですが、そのままではプログラムを実行できません。
最初に、プログラムソフトをインストールするとこらから始めます。
1)公式ページから「MicroPython UF2 file」をダウンロード
https://www.raspberrypi.com/documentation/microcontrollers/micropython.html

Pico Wのリンクをクリックすると、UF2 fileのダウンロードが始まります。
2) Raspberry Pi Pico Wにインストール
Raspberry Pi Pico Wの本体にある「BOOTSEL」ボタンを押しながらUSBでPCに接続します。
下の写真の矢印のところにある、基盤にBOOTSELと書かれている白い小さなボタンです。
BOOTSEL
接続と同時にPC上にフォルダが表示されます。

このフォルダに先ほどダウンロードした「UF2 file」をドラッグアンドドロップで配置します。
配置すると、Raspberry Pi Pico Wが自動で再起動されます。
これでmicropythonのインストールは完了です。
UF2ファイルとは?
UF2はUSB Flashing Format 2の略称で、micropythonを使って主にマイクロコンピュータ向けのファームウェア更新に使われる特殊なバイナリファイル形式のことを指します。
最大の特徴はドラッグ&ドロップで簡単に書き込める点で、今回のRaspberry Pi Pico Wのようなマイクロコンピュータのファームウェアに適しています。
開発環境:パソコンにThonnyをインストール
Thonny は、初心者向けに設計された Python専用の開発環境(IDE) です。
特に Raspberry Pi Pico や MicroPython の開発に最適で、Pythonのコードを書いてすぐに実行できます。
※補足:IDE
IDE(統合開発環境) とは、プログラミングを効率的に行うためのツールがひとまとめになったソフトウェアのことです。
通常、エディタ・デバッガ・実行環境 などが統合されており、プログラムの作成から実行・デバッグまでをスムーズに行えます。
1)Thonny公式ページからインストーラーをダウンロード
https://thonny.org/
今回、私のPCはWindows11なので、Windows用のexeを使用します。

2)ダウンロードしたexeを実行してインストール
画面の指示に従って、インストールを進めます。



インストールをクリックすると、インストールが実行されます。
Thonnyを起動
インストールができたら、Raspberry Pi Pico WをUSBでPCに接続した状態でThonnyを起動します。
起動するとこのようなウィンドウが表示されます。

画面下段の「シェル」のところに、「Raspberry Pi Pico W with RP2040」と表示されています。

これで、Raspberry Pi Pico W上でmicropythonコードを実行したり、デバッグすることができるようなりました。
Raspberry Pi Pico WからTSL2591の照度データを取得
Raspberry Pi Pico Wでプログラム実行ができるようになりましたので、今度はRaspberry Pi Pico Wとセンサーの通信ができるように準備を進めます。
Raspberry Pi Pico WとTSL2591センサーはブレッドボード上で配線できていますので、プログラムがうまく動けば、センサーデータをThonnyの画面上に表示できるはずです。
TSL2591接続用ライブラリの設定
プログラムがセンサーと通信をして、データを受信したり操作の命令をするためには、専用のライブラリが必要です。
今回使用するTSL2591センサーのライブラリは、githubに公開されていますので、こちらを使用することにします。
https://github.com/Baelcorvus/TSL2591-Micropython-I2C-Library-for-pico
実際は、このライブラリに行きつくまでにかなりの試行錯誤を繰り返しました。
micropythonやRaspberry piは、多くの方がナレッジを公開してくれていることも、ツールとしてのメリットと言えます。
pythonコードを書いて、照度を表示
TSL2591ライブラリをRaspberry Pi Pico Wに配置して、照度表示用のサンプルコードを作成しました。
ひとまず、Thonnyの画面上にセンサーで取得したデータを表示させるだけのコードです。
1秒ごとに再取得して繰り返し画面に表示することで、明るさが変化したときに値も変化するか確認できるようにしました。

micropythoには、組み込み開発用の標準ライブラリが豊富に用意されています。
このコードでも、I2CとPinライブラリを使用していますが、これらのライブラリは最初にインストールしたmicorpytohonのUF2ファイルに含まれています。
I2CライブラリはプログラムがI2C形式の通信を行うためのライブラリ、PinライブラリはRaspberry Pi Pico WのGPIOピンを認識するためのライブラリです。
これらは別途ライブラリファイルを用意する必要はなく、そのままimportすることで使用できます。
このようにライブラリが豊富であるということも、micropythonが広く普及している理由の一つです。
Thonny画面にはこのように表示されました。

センサーで取得したデータ内容の説明
今回の「冷蔵明るさ検知IoT」では単純に「明るさ」の変化だけがわかればよいのですが、せっかく高性能のセンサーを使っているので、取得できるデータを細かく出力してみました。
各項目の意味
1. Lux: 照度(Lux)を示します。
人間の目が感じる明るさを基準に補正された値です。
環境光の強さを示し、値が大きいほど明るいことを意味します。
2. Infrared: 赤外線(IR)センサーが検出した光の強度を示します。
目に見えない赤外線(IR)成分のみを測定しています。
3. Visible: 可視光の強度を示します。
目に見える光(可視光)成分のみの測定値です。
4. Full Spectrum: 全光スペクトラムラム(可視光+赤外線) の測定値です。
センサーが受け取る全ての光を合計した値になります。
テスト用pythonコードで取得できた値を検証
上記の各項目の意味をもとに検証してみます。

TSL2591 sensor initialized successfully! →micropythonがセンサーへの接続に成功
Lux: 198.0465 → 照度
Infrared: 757 →赤外線(IR)
Visible: 49612450 →可視光の強度
Full Spectrum: 49613207 →全光スペクトラム
それぞれの値を表示しています。
しばらくはほぼ同じ値で推移しています。

ここで、センサーを手で覆って暗くしてみました。

Lux(照度)の値が、185.7281から7.454976に下がっているのがわかります。
Visible(可視光)の値も、45,155,883から4,128,854と10分の1になり、FullSpectrum(全光スペクトラム)もほぼ10分の1に下がりました。
これで、実際の明るさをセンサーが検知して、その値をmirocpythoを使ってRaspberry Pi Pico Wが取得できていることが検証できました。
次回は・・・
今回はIoTデバイスの準備として、Raspberry Pi Pico Wでセンサーデータを取得できるところまでを行いました。
次回は、このデータをAWS IoTへmqtt送信する仕組みを構築します。

現在、MQTTをmicropythoで実現するところを検証中です。
ここからがIoT技術の中心部分といえますので、次回の記事もぜひご覧ください。