WiFiスイッチ側増設ソース

WiFi増設チャイムスイッチ側Client説明

 私は、家に元々ついていたチャイムに増設する形で、ブザーを設置しました。
 私の使っているチャイムEC730は、スイッチの端子にいつも1Vほどの電流が流れていて、ボタンを押したときだけ一瞬0Vに近くなります。
 Wemos D1のA0とGND端子にこのスイッチ端子からの電流を並列で受け取って、アナログリードで電圧測定をします。
 A0端子への入力はそのまま受け取っても支障はないのかもしれませんが、あまり電流を流したくはないので、適当な抵抗を挟んでおきました。
 それで、スイッチが押されたときに、増設側のServerを呼び出して、回路をONにします。

 電源はDCACコンバーターから取り、Wemos D1はタッパーに入れて、コンバーターごとチャイムの裏の壁に隠しました。
 100V電源は、元のチャイムに来ていた線を、コンセントを付けて二股にしてつないでいます。壁裏で塵が積もることによる自然発火が怖いので、コンセントの差し込み部分は、ビニールテープでしっかりふさいでおきました。
 なお、このプログラムの改造ベースは、「スケッチ例>ESP8286WiFi>WiFiClient」です。

 WiFiは、スイッチの方に接続するClient側は、IPアドレスを自動取得にして、子機になるServer側は、固定IPアドレスになるプログラムにします。

WiFiのアクセスポイントを用意

 私の母の家のように、インターネット接続がないような家でも、無線LANのアクセスポイントを置きさえすれば、家庭内では無線通信ができるので、このチャイムも使用できます。
 ただ、このアクセスポイントの設定が、一筋縄ではいかず、とっても面倒くさいですが。

WiFi増設チャイムスイッチ側ソースコード

/*
  *  チャイムスイッチから無線送信用  元
  *  元付けチャイム機器への増設用
  *  送信元では警告を鳴らさない
  */
#include  <ESP8266WiFi.h>
//*****************************************************
const  char*  ssid      =  "Your  ID";
const  char*  password  =  "Your  Password";

#define  ANALOG_SWITCH_SOCKET  A0

//  接続サーバーの数ホストアドレスを指定
const  char*  host1  =  "192.168.***.***";
const  char*  host2  =  "192.168.***.***";
//*****************************************************

static  int  switch1=  0;  

//  デバッグ設定
#define  DEBUG  //  有効にするとシリアル出力が有効になります。
#ifdef  DEBUG
  #define  Serialbegin  Serial.begin
#else
  #define  Serialbegin
#endif

void  setup()  {
  pinMode(ANALOG_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  vt  =  -2;
  int  sensorValue  =  analogRead(ANALOG_SWITCH_SOCKET);
  //  delay(500);
  //  Convert  the  analog  reading  (which  goes  from  0  -  1023)  to  a  voltage  (0  -  3.2V):
  float  voltage  =  sensorValue  *  (  3.2  /  1023.0);
  if(voltage>=0.5){
    v1  =  3;
    switch1=0;
  }else{
    v1  =  0;
    switch1=1;
  }
  if(v1  !=  vt){
    Serial.print(F("Voltage="));
    Serial.println(voltage);
    vt  =  v1;
      if(switch1==1){
        on();
      }
  }
}

void  on(){
  //  接続サーバーの数  送信する
  //*****************************
  send_server(host1);
  send_server(host2);
  //*****************************
}

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.1rn"  +
                "Host:  "  +  host  +  "rn"  +  
                "Connection:  closernrn");
  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();
}
タイトルとURLをコピーしました