茱萸note

電子工作の備忘録と旅行の記録

Arduino ESP8266 IoT スマートプラグ マイコン 電子工作

ESP8266 で Tp-Link のスマートプラグ『Tapo P105』を直接操作する

投稿日:

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.cppBase64.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 で操作できるようになります。

-電子工作
-, , , , ,


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【ふざけるな Anaconda】Windows で Python 環境を整える

Anaconda なんか使わずに Windows に Python をインストールします。

LPC11U35を汎用ARMデバッガとして使う

秋月で売っているLPC11U35を汎用ARMデバッガとして使いたいと思います。

Alexa Smart Home Skill を実装して Alexa で ESP8266 を制御する【Alexa×Arduino その2】

AWS Lambda で Alexa Smart Home Skill を実装し、Alexa で ESP8266(Arduino)に接続した LED を操作できるようにします。

プロキシ設定が必要な学内LANに接続するときに役に立つスクリプト

プロキシ設定が必要な学内 or 社内LANに接続する際のプロキシ設定の切り替えをしやすくするスクリプトを用意します。

権限のない環境でvirtualenvを入れる

sudoが使えない、root権限のない環境でvirtualenvを入れます。