IoT 回転灯プロジェクト 回転停止ボタンを押したらネットに停止命令を送る

パトパトパトパト♪
 パトロール ♪♪

と言うわけで今日も電子工作がんばるぞ!
今日は、先日、停止ボタンを追加しました。
でもね、停止はするけれども、ネットに確認しに行くとまた回転します。
それを、ネットの回転命令を停止させます。

はい、ちょっとだけの成長です。

ここで、停止の命令ですが、以下の感じです

service/revolvinglight/?light=0

はい、シンプルです。
想像通り、light=1で点灯ですw

実際に今回追加した部分を書いておきます。

  if(delays < 10000 ){
    // 
    if (digitalRead(SWITCH_PIN) == HIGH) {
      // ボタンを押したら通知を停止
      digitalWrite(LIGHT_PIN, LOW);
      // ライトオフリクエスト
      connectServer("/service/revolvinglight/?light=0");
      Serial.println("turn off");
      // 1ループ待つ
      delay(10000);
    }
    // スリープ
    delay(100);
    return;
  }

10秒間隔でwebアクセスしているのですが、その間に100ms単位のループです。
ボタンを押したら、先のパケットを投げます。
ついでに、通知も停止します。

そんなシナリオです。

2カ所も、ネットアクセスがあるので、リクエスト部分はconnectServerメソッドにまとめています。

ま、それだけです;;

次回は…
on / offってネットのフラグ部分をもうちょっとリアルな値にしたいと思います。

ではでは…

最新、ソース

#include <ESP8266WiFi.h>
#define LIGHT_PIN 13
#define SWITCH_PIN 14

const char* ssid     = "DIAN25";
const char* password = "DIANROUVENCE";
const char* host = "www.mmpp.org";
void setup() {
  Serial.begin(115200);
  // 回転灯の制御pinを出力にする。
  pinMode(LIGHT_PIN, OUTPUT);
  pinMode(SWITCH_PIN,INPUT) ;
  delay(10);
  
  // We start by connecting to a WiFi network
  Serial.println("\n");
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}
unsigned long runtime = 0;
void loop() {

  // 回転灯を点灯させるかの判断フラグ
  boolean turnOn = false;
  long delays = (millis() - runtime);
  if(delays < 10000 ){
    // 
    if (digitalRead(SWITCH_PIN) == HIGH) {
      // ボタンを押したら通知を停止
      digitalWrite(LIGHT_PIN, LOW);
      // ライトオフリクエスト
      connectServer("/service/revolvinglight/?light=0");
      Serial.println("turn off");
      // 1ループ待つ
      delay(10000);
    }
    // スリープ
    delay(100);
    return;
  }
  runtime = millis();
 // return;
  String text = connectServer("/service/revolvinglight/light");
  // Content-Type: text/plain
  String conent = (text.substring(text.lastIndexOf("Content-Type") + 24 + 2));
  if(conent.equals("1")){
    turnOn = true;
  }

  if(turnOn){
    // 点灯処理
  Serial.println("turn on");
    digitalWrite(LIGHT_PIN, HIGH);
  }else{
    // 点灯処理    
    Serial.println("turn off");
    digitalWrite(LIGHT_PIN, LOW);
  }

}
  String connectServer(String url){
    WiFiClient client;
    // Use WiFiClient class to create TCP connections
    if (!client.connect(host, 80)) {
      Serial.println("connection failed");
      return "";
    }
    
    
    Serial.print("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(">>> Client Timeout !");
        client.stop();
        return "";
      }
    }
    
    // Read all the lines of the reply from server and print them to Serial
    String text = "";
    while(client.available()){
      String line = client.readStringUntil('\r');
      text += line;
    }
    return text;    
  }

おまけ


かったこれ、外れを引いたのかな?
普通にmacに接続したら、電源供給はされますが、Serialに認識しません >。< LEDでLが点滅しているのがびみょうに気になります。