Tp-Link のスマートプラグ『Tapo P105』をアプリや IFTTT といった外部サービスを用いずに、ESP8266 から直接操作してみます。
目次
以前、Tp-Link のスマートプラグ『Tapo P105』を外部のクラウドサービスに接続せずに RaspberryPi で直接操作する方法を説明しました。
今回は、ESP8266 を使って、スマートプラグ『Tapo P105』を操作してみたいと思います。
スマートフォンの『Tapo』アプリで『Tapo P105』のセットアップが済んでいるという前提で話を進めます。
RSA 1024bit 秘密鍵・公開鍵を作成
RSA 1024bit 秘密鍵・公開鍵のペアを作成します。どちらも PEM 形式で保存します。
以下は、OpenSSL コマンドで生成する場合のコマンド例です。Windows だとインストールされていないので、インストールするか、WSL で生成するかしてください。
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
ESP8266 のプログラム
ボードのバージョンと設定
ESP8266 Board のバージョンは『2.7.4』で確認しています。
参考に、Board の設定は以下のように設定しています。多分『SSL Support : All SSL ciphers (most compatible)』以外の設定項目は重要で無い気がします。
必要なライブラリをインストール・修正
Base64 by Arturo Guadalupi を使いました。ライブラリマネージャからインストールしてください。
また、ESP8266 では既存の Base64 ライブラリと競合するので少々手を加える必要があります。
ライブラリをインストールすると、 Arduino
フォルダ内の libraries
フォルダに、Base64
というフォルダができます。その中の src
フォルダには、Base64.cpp
と Base64.h
という2つのファイルがあると思います。
ここに、 agdl_Base64.h
というファイルを追加します。
そして、agdl_Base64.h
に次のように記述をしてください。
#include "Base64.h"
Arduino スケッチ
以下に Arduino スケッチをアップロードしています。
このスケッチをダウンロードしたら、何箇所か情報を入力する必要があります。
まず、WiFi の SSID とパスワードを書き入れてください。
// WiFi config
const char WIFI_SSID[] = "XXXXXXXXXXXXX";
const char WIFI_PASS[] = "xxxxxxxxxxxxx";
次に、事前に生成しておいた 1024bit RSA 秘密鍵・公開鍵の中身を書き入れます。
const char rsa_private_key[] = R"EOF(
-----BEGIN RSA PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END RSA PRIVATE KEY-----
)EOF";
const char rsa_public_key[] = R"EOF(
-----BEGIN PUBLIC KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
-----END PUBLIC KEY-----
)EOF";
最後に、Tp-Link アカウントのメールアドレス・パスワードと、『Tapo P105』の IPアドレス・MACアドレスを書き入れます。
MACアドレスは、XX-XX-XX-XX-XX-XX
というように -
で繋いで入れてください。
// Tapo P105 config
const char tapo_p105_email[] = "xxxxxxxxxxxxxxxx@yyyyy.zzz";
const char tapo_p105_password[] = "xxxxxxxxxxxxx";
const char tapo_p105_ip_address[] = "192.168.x.x";
const char tapo_p105_mac_address[] = "XX-XX-XX-XX-XX-XX";
以上のスケッチを ESP8266 に書き込んで実行すれば、恐らく期待通りに P105 が ON/OFF するようになると思います。
以前、ESP8266 を AWS IoT・Alexa Smart Home Skill と連携させる方法を解説しましたが、それと組み合わせれば、Tp-Link クラウドを用いずともスマートプラグ『Tapo P105』を Alexa で操作できるようになります。