WiFi増設ブザー側ソース
WiFi増設側Server説明
スイッチが押されたときに、Clientから増設側のServerを呼び出して、警告音の回路を25秒間ONにします。(音楽ではなく、ただのブザーの場合は、5秒間ほどでもよいかもしれません。)
ブザーを複数設置する場合は、サーバーの固定IPアドレスを、それぞれ違うものに指定します。
チャイムの音色に凝らずに、工作を簡単に済ませたい場合は、5V用のブザーをGPIO16(右の下から3番目)端子につなぎます。
出力端子は、GPIO03や01(右の下2つ)ではうまく動きませんでした。
電圧は3Vしか流れませんが、一応はブザーが鳴ったのが分かるぐらいの音はします。この場合、12mA程度の電流が流れていました。
もっと好きな音を出そうとするなら、「高音質 TFカード Uディスク Mp3デコーダ モジュール デコーダボード 無損失デコード 増幅器」というやつを使います。
ただこのボードの場合、5V電源でなければ使えないので、3V用のリレーをかまして、音声を流す間だけ、WeMos D1ボード上に出ている5V端子から取った電流を流してやります。
ところがGPIO16端子から出てくる信号電流だけでは、ブザーは鳴らせても、3V用のリレーを動かすだけの力がないようですので、トランジスタを使って、リレーを動かせるように、GPIO16からの電流を増幅してやらなければなりません。
それをするのは結構面倒でしたが、このボードのお陰で、ともかく、我が家は朝ドラ「あまちゃん」のテーマソングの最初の部分を流すことができるようになりました。
無線LANで飛ばせて、結構大きな音がするので、2階は、真ん中の廊下に設置しておけば、2部屋とも来客が分かります。
プログラムの注意点は、サーバー側は、IPアドレスを固定にしておかないと、クライアントからの呼び出しアドレスが一定しないことです。他の機器で、絶対に使っていないアドレスを指定しておきましょう。
なお、このプログラムの改造ベースは、「スケッチ例>ESP8286WebServeri>HelloServer」です。
WiFi増設ブザー側ソースコード
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
//**************************************************
const char* ssid = "Your ID";
const char* password = "Your Password";
ESP8266WebServer server(80);
//警告音出力接続ピン
int BEEP_SOCKET = 16;
#define IPADDRESS IPAddress(192, 168, ***, ***)
#define BEEPTIME 25000 //1000分の1秒単位
//**************************************************
const int led = 13;
void handleRoot() {
// クライアントから呼び出しを受けた時の処理
// digitalWrite(led, 1);
server.send(200, "text/plain", "Beep on from Beep-server1");
// digitalWrite(led, 0);
on();
}
void handleNotFound(){
// digitalWrite(led, 1);
String message = "File Not Foundnn";
message += "URI: ";
message += server.uri();
message += "nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "nArguments: ";
message += server.args();
message += "n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "n"; }
server.send(404, "text/plain", message);
// digitalWrite(led, 0);
}
void setup(void){
pinMode(led, OUTPUT);
digitalWrite(led, 0);
pinMode(BEEP_SOCKET, OUTPUT);
digitalWrite(BEEP_SOCKET, LOW);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println(F(""));
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(F("."));
}
WiFi.config(IPADDRESS, WiFi.gatewayIP(), WiFi.subnetMask());
Serial.println(F(""));
Serial.print(F("Connected to "));
Serial.println(ssid);
Serial.print(F("IP address: "));
Serial.println(WiFi.localIP());
if (MDNS.begin("esp8266")) {
Serial.println(F("MDNS responder started"));
}
server.on("/", handleRoot);
server.on("/inline", [](){
server.send(200, "text/plain", "this works as well");
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println(F("HTTP server started"));
}
void on(){
Serial.println(F("BEEP!!"));
digitalWrite(BEEP_SOCKET, HIGH);
delay(BEEPTIME);
digitalWrite(BEEP_SOCKET, LOW);
}
void loop(void){
server.handleClient();
}
ケース
ケースは、100均の3個108円のタッパーを使いました。セリエで売っているクリアーボックス小を使う方が、きれいな仕上がりにはなると思います。
タッパーは、リレーの高さが入らないので、少々はみ出しますし、見た目は今一歩ですが、何も固定しなくともぴったりしていて、中で部品が全くごそごそしないので、私はこちらを使っています。
スピーカーは、ホットボンドで蓋に固定しました。
