上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
開発/SwitchBotのボットもどきの作成
のソース
資料室
開発
/
SwitchBotのボットもどきの作成
のソース
[
差分
|
バックアップ
|
リロード
]
[ ]
差分
を表示
開発/SwitchBotのボットもどきの作成
へ行く。
* SwitchBotのボットもどきの作成 [#x5e89055] 家のアパートのリビングの照明スイッチは古い2個口のスイッチ &worried; これでON/OFFしているのが,これまた古い電球型蛍光灯。~ IoTということでちょっと便利になるように[[SwitchBotのボット>https://www.switchbot.jp/pages/switchbot-bot]]を使って[[Echo Dot>https://amzn.to/3MvgsW5]]や[[Google Home Mini>https://store.google.com/jp/product/google_nest_mini?hl=ja&pli=1]]を使ってON/OFFさせてみたいと思ったのだが,[[SwitchBotのボットを購入>https://amzn.to/3e0psW9]]する前にとりあえず同様な機能の物を,ありあわせの物で自作してみることにした。~ ** もどき作成に使用した物 [#u2dabefb] - [[WeMOS D1>/開発/WeMos D1]]~ 数年前に500円ぐらいで購入した激安のHiLetGo製[[WeMos D1互換ボード>https://amzn.to/3Rnozo7]]((HiLetGO製のボードは現在は販売されていない。こちらは似たようなボード))があったので使ってみた。このボードには無線LAN機能があるので,Networkに接続できる。~ [[WeMOS D1 Mini>https://amzn.to/3UUpHmk]]だともっと小さいボードなので小型に作成するには良いかも。~ - Tower Pro SG92R マイクロサーボモーター~ Amazonで[[Tower Pro製 SG92R ラジコン用の小型サーボモーター>https://amzn.to/3SLp3Wg]]を500円ぐらいで購入した。~ これを使ってアクチュエーターでスイッチをON/OFF出来るかもしれない。~ - 12VのACアダプター~ ころがっていたACアダプター。WeMos D1互換ボード用の電源として使用した。~ ** ハードウェアの作成 [#u8ada48c] 以下のように,WeMos D1互換ボードとマイクロサーボモーターSG92Rとを1m程度のワイヤーで接続した。~ WeMOS D1 SG92R ServoMotor D6 ---------- 黄色 +5V ---------- 赤色 GND ---------- 茶色 ** 壁のスイッチにマイクロサーボモーターを貼り付ける [#qba0abf6] &ref(microservomotor.png,,40%); マイクロサーボモーターを壁のスイッチの近くに両面テープで固定した。~ スイッチは右側を押すとONに左側を押すとOFFになるので,アクチュエーターをだいたい真ん中ぐらいにして貼り付けた。~ うまく動作するのに,貼り付ける位置が微妙に影響する。少しでもずれるとスイッチを押せない &worried; WeMos D1互換ボードとACアダプターは床に置いてある。~ しかし,ださいなぁ ;) ** ソフトウェアの作成 [#c54545bd] WeMos D1互換ボードに書き込むソフトウェアは,[[Arduino IDE>/開発/WeMos D1#nff0b1a9]]で作成した。~ PCとWeMos D1互換ボードをUSBで接続し,直接作成したプログラムを書き込める。~ *** Arduino IDE用のライブラリのインストール [#yd3fe158] - WeMOS D1ハードウェアパッケージ~ [[WeMOS D1ハードウェアパッケージをArduino IDEにインストールする>/開発/WeMos D1#l51e57d4]]。~ - [[FauxmoESP>https://github.com/vintlabs/fauxmoESP/]]ライブラリ~ [[ESP8266>https://ja.wikipedia.org/wiki/ESP8266]]や[[ESP32>https://ja.wikipedia.org/wiki/ESP32]]のボードで[[Philips Hue ライト>https://www.philips-hue.com/ja-jp/]]をローカルデバイスとしてエミュレートして,Alexaデバイスと連携出来るようにするライブラリ。~ [[ここ>https://github.com/vintlabs/fauxmoESP/archive/refs/heads/master.zip]]からzipファイルをダウンロードして,Arduino IDEでzipファイルからインストールした。~ Arduino IDEのライブラリマネージャーでfauxmoESPを指定してもインストールできる。~ - [[ESPAsyncTCP>https://github.com/me-no-dev/ESPAsyncTCP/]]ライブラリ~ ESP8266でFauxmoESPライブラリを使う場合は,ESPAsyncTCPライブラリが必要。~ [[ここ>https://github.com/me-no-dev/ESPAsyncTCP/archive/refs/heads/master.zip]]からzipファイルをダウンロードして,Arduino IDEでzipファイルからインストールした。~ ESP32を使用したボードを使う場合は,[[ここ>https://github.com/me-no-dev/AsyncTCP/archive/master.zip]]から[[AsyncTCP>https://github.com/me-no-dev/AsyncTCP/]]ライブラリのzipファイルをダウンロードして,Arduino IDEでzipファイルからインストールする。~ 第3世代Echo DotのようなAlexaデバイスと連携する場合は,WEBポートに80番を使用する必要がある。~ またESP8266の場合,Arduino IDEの設定でLwIPを"v1.4 Higher Bandwidth"に設定する。~ *** プログラム [#fd72b460] 以下のプログラムを作成した。~ 標準ライブラリのServoライブラリを使ってサーボモーターを動かしている。~ write(angle) でangleに角度を指定するとその角度に動く。~ Alexaデバイスから使えるように[[FauxmoESP>https://github.com/vintlabs/fauxmoESP/]]ライブラリを使用している :) ~ ''botswitch.ino'' #code(c,nonumber){{ // botswitch.ino // SwitchBotもどき // WeMOS D1にMicro Servoを使ってスイッチをON/OFFさせる // WeMOS D1 SG92R ServoMotor // D6 ---------- 黄色 // +5V ---------- 赤色 // GND ---------- 茶色 #include <Arduino.h> #ifdef ESP32 #include <WiFi.h> #else #include <ESP8266WiFi.h> #endif #include "fauxmoESP.h" #include <Servo.h> Servo myservo; // Servoオブジェクト int servoIni = 90; // 通常時角度 int servoOn = 140; // On角度 int servoOff = 40; // Off角度 int servoState = 0; int flag = 0; // WLAN接続の設定 #include "wifisetting.h" fauxmoESP fauxmo; // fauxmoESPオブジェクト #define SERIAL_BAUDRATE 115200 // Baurate=115200 #define ID "スイッチ" // AlexaデバイスID const int ledPin = D5; // onboard LEDポート const int motorPin = D6; // ServoMotor用出力ポート // WLAN設定 void wifiSetup() { WiFi.mode(WIFI_STA); // 無線LANをインフラストラクチャモードにする Serial.printf("[WIFI] Connecting to %s ", WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASS); // WLANに接続 // 接続出来るまで待つ while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(100); } Serial.println(); Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str()); // 接続出来た! } void setup() { Serial.begin(SERIAL_BAUDRATE); // init シリアルポート Serial.println(); Serial.println(); // init onboard LED pinMode(ledPin, OUTPUT); delay(10); digitalWrite(ledPin, HIGH); wifiSetup(); // init WLAN fauxmo.createServer(true); // webserverの起動 fauxmo.setPort(80); // TCP=80にする(第3世代Alexa) fauxmo.enable(true); // fauxmo起動 fauxmo.addDevice(ID); // AlexaデバイスIDを追加 // AlexaからのCallback関数 // device_idとdevice_nameがAlexaアクションによりセットされる // StateにON=1/OFF=0,valueに値2-255(例:「ライトを50%にして」=128)がセットされる // 出来るだけ早くこのcallback関数を抜けるようにする fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) { Serial.printf("[MAIN] Device #%d (%s) state: %s value: %d\n", device_id, device_name, state ? "ON" : "OFF", value); if (strcmp(device_name, ID) == 0) { // デバイス名の確認 if (state) { flag = 1; // ON } else { flag = 2; // OFF } } }); } void loop() { fauxmo.handle(); // fauxmoESPは非同期TCP serverなのでUDP packetをpollする if (flag == 1) { lightOn(); flag = 0; } else if (flag == 2) { lightOff(); flag = 0; } } // スイッチをONする void lightOn() { digitalWrite(ledPin, LOW); // LED on // Onアクション myservo.attach(motorPin); delay(1000); myservo.write(servoOn); delay(1000); myservo.write(servoIni); delay(1000); myservo.detach(); Serial.print("Switch on ...\n"); // シリアル出力 digitalWrite(ledPin, HIGH); // LED off } // スイッチをOFFする void lightOff() { digitalWrite(ledPin, LOW); // LED on // Offアクション myservo.attach(motorPin); delay(1000); myservo.write(servoOff); delay(1000); myservo.write(servoIni); delay(1000); myservo.detach(); Serial.print("Switch off ...\n"); // シリアル出力 digitalWrite(ledPin, HIGH); // LED off } }} ''wifisetting.h''~ #code(c,nonumber){{ #define WIFI_SSID "WiFiアクセスポイントのSSID" #define WIFI_PASS "そのパスワード" }} Arduino IDEからWeMOS D1ボードにコンパイルして書き込んだ。~ * Echo Dotとの連携 [#wd3cda64] Android端末のAlexaアプリを起動して,以下のようにしてデバイスを追加した。~ - デバイスをクリック~ - 右上の+ボタンをクリック~ - デバイスを追加をクルック~ - その他をクリック~ - デバイスを検出をクリック~ しばらくすると作成したスイッチという名前のデバイス(電球タイプ)が検出された。~ それにしてもAlexaデバイスはローカルデバイスを直接アクセスできるのが素晴らしいなぁ :) ** Echo Dotで操作してみる [#faf06fc9] 「アレクサ,スイッチオン」と言うと,マイクロサーボモーターが少し回って壁のスイッチをONした。~ 「アレクサ,スイッチオフ」と言うと,マイクロサーボモーターが少し逆に回って壁のスイッチをOFFした。~ スイッチじゃ味気ないんで,「電気つけて/消して」とか「ライトつけて/消して」とかの定形アクションを作成した。~ これで,[[SwitchBotのボット>https://www.switchbot.jp/pages/switchbot-bot]]のような事が出来るようになった。~ 確かに声で操作するのは便利だ。 * 課題 [#qa78f6c0] - 2個のスイッチに対応する~ マイクロサーボモーターを2個使えばいいのだが,1個でなんとかならないかな。~ - 固定方法がなんとかならないか~ 両面テープでマイクロサーボモーターを貼り付けているだけなんで,うまくスイッチが押せなくなってしまうことがある。 - Google Home Miniで使えるようにする~ WEBからON/OFF出来るAPIを用意して,IFTTT(Google Assistant)を使ってWEB APIをアクセスすればいいのかも。~ 09/01/2022からGoogle AssistantとIFTTTの連携の仕様が変更になり,数値や文字等のパラメーターをIFTTTに渡せなくなってしまった ;( リモコン等の用途にIFTTTは役立たずになってしまった。 - [[SwitchBot ボットを購入>https://amzn.to/3VfQlZp]]する~ やれることは同じなんで,どうしようかな。
開発/SwitchBotのボットもどきの作成 のバックアップソース(No. All)
現: 2022-10-01 (土) 11:41:15
yuji
Deleted an attach file: microservomotor.png at 2022-10-01 (土) 11:44:32
Counter: 444, today: 1, yesterday: 1
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
» 関連ページ
» Wikiソース
» 編集履歴
» バックアップ一覧
» 添付ファイル一覧
フォーラム
お問い合わせ