上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
開発/SwitchBotのボットもどきの作成
をテンプレートにして作成
資料室
開発/SwitchBotのボットもどきの作成 をテンプレートにして作成
[
差分
|
バックアップ
|
リロード
]
[ ]
開始行:
* SwitchBotのボットもどきの作成
家のアパートのリビングの照明スイッチは古い2個口のスイッチ...
IoTということでちょっと便利になるように[[SwitchBotのボッ...
** もどき作成に使用した物
- [[WeMOS D1>/開発/WeMos D1]]~
数年前に500円ぐらいで購入した激安のHiLetGo製[[WeMos D1互...
[[WeMOS D1 Mini>https://amzn.to/3UUpHmk]]だともっと小さい...
- Tower Pro SG92R マイクロサーボモーター~
Amazonで[[Tower Pro製 SG92R ラジコン用の小型サーボモータ...
これを使ってアクチュエーターでスイッチをON/OFF出来るかも...
- 12VのACアダプター~
ころがっていたACアダプター。WeMos D1互換ボード用の電源と...
** ハードウェアの作成
以下のように,WeMos D1互換ボードとマイクロサーボモーターS...
WeMOS D1 SG92R ServoMotor
D6 ---------- 黄色
+5V ---------- 赤色
GND ---------- 茶色
** 壁のスイッチにマイクロサーボモーターを貼り付ける
&ref(microservomotor.png,,40%); マイクロサーボモーターを...
スイッチは右側を押すとONに左側を押すとOFFになるので,アク...
うまく動作するのに,貼り付ける位置が微妙に影響する。少し...
WeMos D1互換ボードとACアダプターは床に置いてある。~
しかし,ださいなぁ ;)
** ソフトウェアの作成
WeMos D1互換ボードに書き込むソフトウェアは,[[Arduino IDE...
PCとWeMos D1互換ボードをUSBで接続し,直接作成したプログラ...
*** Arduino IDE用のライブラリのインストール
- WeMOS D1ハードウェアパッケージ~
[[WeMOS D1ハードウェアパッケージをArduino IDEにインストー...
- [[FauxmoESP>https://github.com/vintlabs/fauxmoESP/]]ラ...
[[ESP8266>https://ja.wikipedia.org/wiki/ESP8266]]や[[ESP3...
[[ここ>https://github.com/vintlabs/fauxmoESP/archive/refs...
Arduino IDEのライブラリマネージャーでfauxmoESPを指定して...
- [[ESPAsyncTCP>https://github.com/me-no-dev/ESPAsyncTCP/...
ESP8266でFauxmoESPライブラリを使う場合は,ESPAsyncTCPライ...
[[ここ>https://github.com/me-no-dev/ESPAsyncTCP/archive/r...
ESP32を使用したボードを使う場合は,[[ここ>https://github....
第3世代Echo DotのようなAlexaデバイスと連携する場合は,WEB...
またESP8266の場合,Arduino IDEの設定でLwIPを"v1.4 Higher ...
*** プログラム
以下のプログラムを作成した。~
標準ライブラリのServoライブラリを使ってサーボモーターを動...
write(angle) でangleに角度を指定するとその角度に動く。~
Alexaデバイスから使えるように[[FauxmoESP>https://github.c...
''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 addr...
}
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にする(...
fauxmo.enable(true); // fauxmo起動
fauxmo.addDevice(ID); // AlexaデバイスI...
// AlexaからのCallback関数
// device_idとdevice_nameがAlexaアクションによりセッ...
// StateにON=1/OFF=0,valueに値2-255(例:「ライトを5...
// 出来るだけ早くこのcallback関数を抜けるようにする
fauxmo.onSetState([](unsigned char device_id, const c...
Serial.printf("[MAIN] Device #%d (%s) state: %s v...
if (strcmp(device_name, ID) == 0) { // デバイ...
if (state) {
flag = 1; // ON
} else {
flag = 2; // OFF
}
}
});
}
void loop() {
fauxmo.handle(); // fauxmoESPは非...
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との連携
Android端末のAlexaアプリを起動して,以下のようにしてデバ...
- デバイスをクリック~
- 右上の+ボタンをクリック~
- デバイスを追加をクルック~
- その他をクリック~
- デバイスを検出をクリック~
しばらくすると作成したスイッチという名前のデバイス(電球...
それにしてもAlexaデバイスはローカルデバイスを直接アクセス...
** Echo Dotで操作してみる
「アレクサ,スイッチオン」と言うと,マイクロサーボモータ...
「アレクサ,スイッチオフ」と言うと,マイクロサーボモータ...
スイッチじゃ味気ないんで,「電気つけて/消して」とか「ライ...
これで,[[SwitchBotのボット>https://www.switchbot.jp/page...
確かに声で操作するのは便利だ。
* 課題
- 2個のスイッチに対応する~
マイクロサーボモーターを2個使えばいいのだが,1個でなんと...
- 固定方法がなんとかならないか~
両面テープでマイクロサーボモーターを貼り付けているだけな...
- Google Home Miniで使えるようにする~
WEBからON/OFF出来るAPIを用意して,IFTTT(Google Assistant...
09/01/2022からGoogle AssistantとIFTTTの連携の仕様が変更に...
- [[SwitchBot ボットを購入>https://amzn.to/3VfQlZp]]する~
やれることは同じなんで,どうしようかな。
終了行:
* SwitchBotのボットもどきの作成
家のアパートのリビングの照明スイッチは古い2個口のスイッチ...
IoTということでちょっと便利になるように[[SwitchBotのボッ...
** もどき作成に使用した物
- [[WeMOS D1>/開発/WeMos D1]]~
数年前に500円ぐらいで購入した激安のHiLetGo製[[WeMos D1互...
[[WeMOS D1 Mini>https://amzn.to/3UUpHmk]]だともっと小さい...
- Tower Pro SG92R マイクロサーボモーター~
Amazonで[[Tower Pro製 SG92R ラジコン用の小型サーボモータ...
これを使ってアクチュエーターでスイッチをON/OFF出来るかも...
- 12VのACアダプター~
ころがっていたACアダプター。WeMos D1互換ボード用の電源と...
** ハードウェアの作成
以下のように,WeMos D1互換ボードとマイクロサーボモーターS...
WeMOS D1 SG92R ServoMotor
D6 ---------- 黄色
+5V ---------- 赤色
GND ---------- 茶色
** 壁のスイッチにマイクロサーボモーターを貼り付ける
&ref(microservomotor.png,,40%); マイクロサーボモーターを...
スイッチは右側を押すとONに左側を押すとOFFになるので,アク...
うまく動作するのに,貼り付ける位置が微妙に影響する。少し...
WeMos D1互換ボードとACアダプターは床に置いてある。~
しかし,ださいなぁ ;)
** ソフトウェアの作成
WeMos D1互換ボードに書き込むソフトウェアは,[[Arduino IDE...
PCとWeMos D1互換ボードをUSBで接続し,直接作成したプログラ...
*** Arduino IDE用のライブラリのインストール
- WeMOS D1ハードウェアパッケージ~
[[WeMOS D1ハードウェアパッケージをArduino IDEにインストー...
- [[FauxmoESP>https://github.com/vintlabs/fauxmoESP/]]ラ...
[[ESP8266>https://ja.wikipedia.org/wiki/ESP8266]]や[[ESP3...
[[ここ>https://github.com/vintlabs/fauxmoESP/archive/refs...
Arduino IDEのライブラリマネージャーでfauxmoESPを指定して...
- [[ESPAsyncTCP>https://github.com/me-no-dev/ESPAsyncTCP/...
ESP8266でFauxmoESPライブラリを使う場合は,ESPAsyncTCPライ...
[[ここ>https://github.com/me-no-dev/ESPAsyncTCP/archive/r...
ESP32を使用したボードを使う場合は,[[ここ>https://github....
第3世代Echo DotのようなAlexaデバイスと連携する場合は,WEB...
またESP8266の場合,Arduino IDEの設定でLwIPを"v1.4 Higher ...
*** プログラム
以下のプログラムを作成した。~
標準ライブラリのServoライブラリを使ってサーボモーターを動...
write(angle) でangleに角度を指定するとその角度に動く。~
Alexaデバイスから使えるように[[FauxmoESP>https://github.c...
''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 addr...
}
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にする(...
fauxmo.enable(true); // fauxmo起動
fauxmo.addDevice(ID); // AlexaデバイスI...
// AlexaからのCallback関数
// device_idとdevice_nameがAlexaアクションによりセッ...
// StateにON=1/OFF=0,valueに値2-255(例:「ライトを5...
// 出来るだけ早くこのcallback関数を抜けるようにする
fauxmo.onSetState([](unsigned char device_id, const c...
Serial.printf("[MAIN] Device #%d (%s) state: %s v...
if (strcmp(device_name, ID) == 0) { // デバイ...
if (state) {
flag = 1; // ON
} else {
flag = 2; // OFF
}
}
});
}
void loop() {
fauxmo.handle(); // fauxmoESPは非...
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との連携
Android端末のAlexaアプリを起動して,以下のようにしてデバ...
- デバイスをクリック~
- 右上の+ボタンをクリック~
- デバイスを追加をクルック~
- その他をクリック~
- デバイスを検出をクリック~
しばらくすると作成したスイッチという名前のデバイス(電球...
それにしてもAlexaデバイスはローカルデバイスを直接アクセス...
** Echo Dotで操作してみる
「アレクサ,スイッチオン」と言うと,マイクロサーボモータ...
「アレクサ,スイッチオフ」と言うと,マイクロサーボモータ...
スイッチじゃ味気ないんで,「電気つけて/消して」とか「ライ...
これで,[[SwitchBotのボット>https://www.switchbot.jp/page...
確かに声で操作するのは便利だ。
* 課題
- 2個のスイッチに対応する~
マイクロサーボモーターを2個使えばいいのだが,1個でなんと...
- 固定方法がなんとかならないか~
両面テープでマイクロサーボモーターを貼り付けているだけな...
- Google Home Miniで使えるようにする~
WEBからON/OFF出来るAPIを用意して,IFTTT(Google Assistant...
09/01/2022からGoogle AssistantとIFTTTの連携の仕様が変更に...
- [[SwitchBot ボットを購入>https://amzn.to/3VfQlZp]]する~
やれることは同じなんで,どうしようかな。
ページ名:
Counter: 0, today: 0, yesterday: 0
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
フォーラム
お問い合わせ