WiFiスイッチ側新設ソース

WiFi新設チャイムスイッチ側Client説明
これは、玄関のスイッチを使って、arduinoだけでチャイムを動かすための設定です。
おおよそは、既設機器への増設と同じですが、スイッチが押された時の読み取り方法が違うほか、音楽回路が加わります。音楽回路の説明については、後述に譲ります。
今のやり方では、子機のServerに個別に通信をしているので、最後の接続機器のチャイムが鳴りだすまでに、かなりなタイムラグがあります。
今の私の技術力では、これは如何ともしがたいところです。
スイッチが押された時の読み取り
増設では、analogReadでスイッチの電圧を読み取りましたが、新規設置ならarduinoから3Vをスイッチに向かって流して、その値を直接読み取ればよいので、digitalReadが使えます。
ただこのデジタル入力端子は、GPIO0やGPIO2では、コードをつないでいると、プログラムの書き込み時にエラーが出ました。警告音も、スイッチの如何にかかわらず、鳴りっぱなしになります。
基盤の表面にWiFiと書いてあるので、おそらく無線通信用に使っているのでしょうね。
GPIO12、GPIO0やGPIO15のあたりなら使えます。全部のデジタル端子を調べたわけではないので、他の端子でも使える所はあると思います。プログラムの書き込みができないとか、他にももしエラーが出るなら、その端子がほかの用途と干渉している可能性があります。
私は回路の組みやすさから、GPIO15を使いました。
スイッチにはプルダウン
3V端子からスイッチに行き、帰ってきたコードをGPIO15につなぎます。
スイッチが押されていないときの電圧を一定にさせるために、GPIO15から1KΩの抵抗経由でGNDにつないでプルダウンします。
アラーム電源
アラームの電源は、GPIO16から+がでます。ブザーぐらいなら、これとGNDとに接続するだけで鳴りますが、リレーを使うなど、もっと大きな電流が必要な場合には、音楽回路の説明のように、トランジスタで信号を増幅する必要があります。
WiFiのアクセスポイントを用意
私の母の家のように、インターネット接続がないような家でも、無線LANのアクセスポイントを置きさえすれば、家庭内では無線通信ができるので、このチャイムも使用できます。
ただ、このアクセスポイントの設定が、一筋縄ではいかず、とっても面倒くさいですが。
WiFi新設チャイムスイッチ側ソースコード
/* * チャイムスイッチに直付けして * 他の機器はつながずに * 無線送信用 元 * 発信元でもチャイムを鳴らす */ #include <ESP8266WiFi.h> //***************************************************** const char* ssid = "Your ID"; const char* password = "Your Password"; // 接続サーバーの数ホストアドレスを指定 const char* host1 = "192.168.***.***"; const char* host2 = "192.168.***.***"; #define DIGITAL_SWITCH_SOCKET 15 //警告音出力接続ピン int BEEP_SOCKET = 16; #define BEEPTIME 5000 //1000分の1秒単位 //***************************************************** static int switch1= 0; // デバッグ設定 #define DEBUG // 有効にするとシリアル出力が有効になります。 #ifdef DEBUG #define Serialbegin Serial.begin #else #define Serialbegin #endif void setup() { pinMode(BEEP_SOCKET,OUTPUT); pinMode(DIGITAL_SWITCH_SOCKET,INPUT); Serialbegin(115200); delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print(F("Connecting to ")); Serial.println(ssid); /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default, would try to act as both a client and an access-point and could cause network-issues with your other WiFi-devices on your WiFi-network. */ WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(F(".")); } Serial.println(F("")); Serial.println(F("WiFi connected")); Serial.println(F("IP address: ")); Serial.println(WiFi.localIP()); } void voltagehantei(){ int v1; static int switcht = -2; int sensorValue = digitalRead(DIGITAL_SWITCH_SOCKET); if(sensorValue==LOW){ switch1=0; }else{ switch1=1; } // Serial.println(sensorValue); if(switch1 != switcht){ switcht = switch1; if(switch1==1){ Serial.println("ON"); on(); } } } void on(){ Serial.println(F("BEEP!!")); digitalWrite(BEEP_SOCKET, HIGH); // 接続サーバーの数 送信する //***************************** send_server(host1); // send_server(host2); //***************************** delay(BEEPTIME); digitalWrite(BEEP_SOCKET, LOW); } void send_server(const char* host){ int value = 0; ++value; Serial.println(F("On")); Serial.print(F("connecting to ")); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println(F("connection failed")); return; } // We now create a URI for the request String url ="/"; Serial.print(F("Requesting URL: ")); Serial.println(url); // This will send the request to the server client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); unsigned long timeout = millis(); while (client.available() == 0) { if (millis() - timeout > 5000) { Serial.println(F(">>> Client Timeout !")); client.stop(); return; } } // Read all the lines of the reply from server and print them to Serial int i=1; while (client.available()) { String line = client.readStringUntil('\r'); if(i==6){ // 6行目にテキスト内容が表示される Serial.println(line); } ++i; } Serial.println(""); Serial.println(F("closing connection")); } void loop() { voltagehantei(); }