前のチュートリアルでは、MQTTプロトコルについて説明し、GPIOをローカルで制御するためにRaspberryPiにローカルMQTTサーバーをインストールしました。ただし、ローカルMQTTサーバーの欠点は、世界中のどこからでもGPIOを制御できず、ローカルでのみサービスを提供することです。ただし、このMQTTサーバーが一部のクラウドでホストされている場合は、RaspberryPiに接続されているすべてのアプライアンスをグローバルに制御できます。
ここで、このチュートリアルでは、Adafruit IOをMQTTブローカーとして使用して、Raspberry PiGPIOに接続されたACアプライアンスを制御します。他のIoT制御のホームオートメーションチュートリアルも確認してください。
- ESP8266とAndroidアプリを使用したIOTベースの音声制御ホームオートメーション
- Arduinoを使用したスマートフォン制御のホームオートメーション
- PICマイクロコントローラーとAdafruitIOを使用したIoTベースのWeb制御ホームオートメーション
- RaspberryPiを使用したIoTベースのWeb制御ホームオートメーション
- DIY ArduinoWi-Fiシールドを使用したGoogleアシスタントベースの音声制御ホームオートメーション
必要なコンポーネント
- RaspbianStretchがインストールされたRaspberryPi。
- リレーモジュール
- バルブ
- ジャンパー線
ここでは、SSHを使用してラップトップ上のRaspberryPiにアクセスします。ラップトップでVNCまたはリモートデスクトップ接続を使用するか、Raspberrypiをモニターに接続できます。モニターなしでヘッドレスでRaspberryPiをセットアップする方法の詳細については、こちらをご覧ください。
回路図
MQTTクラウドとRaspberryPiを備えたこのIoT制御家電の回路図はシンプルです。RaspberryPiのGPIOピン35にリレーモジュールを備えた電球を接続するだけです。
RaspberryPiへのMQTTクラウドライブラリのインストール
ここでは、AdafruitIOプラットフォームがMQTTブローカーとしてRaspberryPiで使用されています。我々が使用してきたようにAdafruit IOの私達の前のチュートリアルでプラットフォームを何度も同様に、我々はラズベリーパイでそれを使用することができます。
Adafruit IOプラットフォームでアカウントを作成し、フィードを作成するだけです。フィードの作成方法とAdafruitダッシュボードのカスタマイズ方法がわからない場合は、リンクをたどってください。
ダッシュボードを作成したら、Raspberry Piにいくつかのライブラリをインストールして、MQTTを開始します。
1.まず、次のコマンドを発行してPiとPythonを更新します
sudo apt-get update sudo apt-get upgrade sudo pip3 install --upgrade setuptools
2.次に、以下のコマンドを使用してRpi.gpioおよびAdafruitblinkライブラリをインストールします
sudo pip3 install RPI.GPIO sudo pip3 install adafruit-blinka
3.以下のコマンドを使用してAdafruitIOライブラリをインストールします
sudo pip3 install adafruit-io
4.以下のコマンドを使用して、githubからadafruitの例のクローンを作成します
git clone https://github.com/adafruit/Adafruit_IO_Python.git
5.次に、ターミナルに次のコマンドを入力して、examplesフォルダーに移動します。
cd Adafruit_IO_Python / examples / basics
現在のディレクトリがわからない場合は、pwdを実行して確認できます 。
6.このフォルダー内のすべての例について、ADAFRUIT_IO_KEY および ADAFRUIT_IO_USERNAMEを設定する必要があります 。これらはAdafruitダッシュボードにあります。以下に示すように
Adafruit IOダッシュボードのボタンを切り替えると、Piのターミナルに次のように表示されます。
7.次に、 nano エディターを使用してsubscribe.pyファイルを開きます。次のコマンドを入力して開きます
sudo nano subscribe.py
ダッシュボードからGPIOを制御するには、このプログラムを変更する必要があります。
MQTTでRaspberryPiGPIOを制御するためのコーディングの説明
まず、GPIOピンとAdafruitMQTTクライアントを使用するために必要なすべてのライブラリをインポートします。
RPi.GPIOをGPIOとして インポート Adafruit_IOからsysをインポートimportMQTTClient
ここで、GPIOモードを設定し、LEDピン番号を定義して出力として設定します。
GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) ledPin = 12 GPIO.setup(ledPin、GPIO.OUT)
次に、ダッシュボードの作成中に見つけたAIOキーとユーザー名を設定する必要があります。
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
ライトのオンとオフを切り替えるために指定したフィード名を入力します。ここでは 「光」です。
FEED_ID = 'ライト'
ここで、イベントが発生したときに呼び出される関数を定義します。したがって、 client.subscribe(FEED_ID) を使用してフィードをサブスクライブします。
defconnected (client):client.subscribe(FEED_ID)print( 'フィードデータを待機しています…')
フィードをサブスクライブした後、新しい値を確認して ペイロード 変数に格納する必要があります。このメッセージに対して関数が呼び出されます。したがって、ペイロード変数に「1」がある場合は常に、LEDピンをHIGHにし、「0」の場合はLOWにします。
def message(client、feed_id、payload): print( 'Feed {0} receive new value:{1}'.format(feed_id、payload)) if payload == 1: GPIO.output(ledPin、GPIO.HIGH) else : GPIO.output(ledPin、GPIO.LOW)
次に、MQTTクライアントを作成してAdafruit IOプラットフォームに接続し、メッセージを送受信します。
client = MQTTClient(ADAFRUIT_IO_USERNAME、ADAFRUIT_IO_KEY) client.on_connect =接続 済みclient.on_disconnect =切断済み
また、コードの適切なインデントに注意してください。そうしないと、エラーが表示されます。完全なPythonコードは、チュートリアルの最後にあります。
最後に、ctrl + xを使用してプログラムを保存し、Enterキーを押します。ここで、メッセージをサブスクライブするためにスクリプトを実行する必要があります。したがって、ターミナルでpython subscribe.pyと入力し、Enterキーを押します。
python subscribe.py
以下のスナップショットに示すように、 「フィードデータを待機し ています… 」というメッセージが表示されます。
ここで、リレーモジュールがRaspberry PiのGPIOピンに接続されていることを確認してから、AdafruitIOダッシュボードに移動して光の供給を変更します。バルブは、「1」を受信し、以下に示すように「0」を受信したときにオフにされるときにオンにしなければなりません。
このように、Raspberry PiとMQTTクラウドを使用して、世界中のどこからでもアプライアンスを制御できます。