会長ロブロスと申す。会長ではありませぬが平にご容赦を。
※本名称は日本の偉大な巨匠に尊敬の念を込めおります。
今回のIoT記事は、球磨川Fallenから引き継いで、
「IoTを利用して、遠く離れた部屋の電気がついているのか消えているのか知りたい」
でござる。気になる方はこちらで以前の記事を読めるのでござる。
I:Internet
このことを知った悪友戊生呑から次のような相談をされたのじゃ。
「最近離れの物置の電気が勝手についているような気がするのよ いちいち見に行くのも面倒じゃからどうにかならんかのぅ・・・」と。
そこで離れを見て考えたのが、「離れの物置にセンサーを据え付け、明るくなったら通知があればよくないか」と考え作ったのじゃ。その際に戊生呑から使わないスマホを「ロブロスこれ使うか」と渡され、本文で書く仕組みを作ることに至ったのじゃよ。
材料
Raspberry Pi Zero WH(以降ラズパイ)を1つ | USBケーブル(OTG対応)を1つ |
MCP3208を1つ | CDSセルを1つ |
ジャンパーワイヤー12本 | 抵抗器(10kΩ)を1つ |
他に今回用意したのが下に書いた物じゃ
・スマホを1台
・ラズパイ用電源1つ
・英語を見て嫌にならぬ気持ち,最後まで諦めぬ心
作り方
最初にスマホの設定から行うのじゃ。
スマホに次のソフトをインストールするのでござる.。
「Blynk + ESP8286Loader」
これをしないとラズパイからの情報を受け取った結果が表示できない為、絶対必須でござる。
ここで一つBlynkというアプリについて簡単に説明をさせていただくぞ。
Blynkアプリをスマホにインストールして諸々の設定を行うことによって、センサーの情報がインターネットを経由し、動作の結果をスマホに表示してくれるのじゃ。今回はスマホ画面にラズパイで仕込みを行ったセンサー値の結果が表示されるのじゃ。
詳しく知りたいと思ふ者がいれば「Blynk 使い方」で検索するとよろしかろう。
ラズパイ側の準備
回路図を示したく思ふ。実際に繋いだ配線は下のようになったでござる。
ボード側 | 対応するラズパイ側GPIOピン番号 |
+(電源部) | 1 |
GND | 6 |
MCP3208側 | 対応するラズパイ側GPIOピン番号 |
Vdd | 1 |
Vref | 1 |
AGND | 1 |
CLK | 23 |
Dout | 21 |
Din | 19 |
/CS/SHDN | 24 |
DGND | 1 |
CH0 | 6 |
そして肝心なプログラムじゃがその前に必要なライブラリを用意するのだぞ。
pi@raspberrypi:~ $ sudo apt install wiringpi
pi@raspberrypi:~ $ git clone https://github.com/blynkkk/blynk-library.git
pi@raspberrypi:~ $ cd blynk-library/linux
pi@raspberrypi:~/blynk-library/linux $ make clean all target=raspberry
それなりに時間がかかるからお茶と饅頭を楽しみつつ気長に待つのじゃ。
プログラム
肝心の内容は下に書いておるぞ。
# -*- coding: utf-8 -*- #!/usr/bin/python import BlynkLib #大文字小文字で間違えぬ事じゃ 間違えると大層面倒なことになるぞ import sys import spidev import RPi.GPIO as GPIO from time import sleep BLYNK_AUTH = '自身で取得したプロジェクトの認証キーを入力するのじゃ' V_REF = 3.29476 CHN = 0 blynk = BlynkLib.Blynk(BLYNK_AUTH) spi = spidev.SpiDev() spi.open(0, 0) spi.max_speed_hz = 1000000 def get_voltage(): dout = spi.xfer2([((0b1000+CHN)>>2)+0b100,((0b1000+CHN)&0b0011)<<6,0]) bit12 = ((dout[1]&0b1111) << 8) + dout[2] volts = round((bit12 * V_REF) / float(4095),4) return volts try: while True: volts = get_voltage() if volts < 2: #Cdsセルに光が当たった時の抵抗値変化を見てるのじゃ #暗いと判断しておるのでスマホにその合図を送っておる blynk.virtual_write(0, 0) else: #明るいと判断しておるのでスマホにその合図を送っておる blynk.virtual_write(0, 255) sleep(60)#今回は1分毎に確認をしておるぞ except KeyboardInterrupt: pass finally: spi.close() GPIO.cleanup()
最後に上が透明な箱に入れて、電源コードを繋ぐ穴をあけて電源を給電し、設置して終了じゃよ。これで戊生呑の手元のスマホで部屋の電気がついているかどうか確認が出来るわけじゃ。
写真は密閉ケースに入れておるが、これは電源供給の方法の違いだけじゃよ。
(戊生呑は直接電源供給、此方はモバイルバッテリーを使用しておるぞ)
結局の所、原因は飼い猫のニャデムのいたずらじゃったそうな。。。某に聞かれても存ぜぬよ。
費用とかどうなんじゃと?野暮なことを聞くでないっ!!