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; }おまけ
[amazonjs asin=”B01CZQANN0″ locale=”JP” title=”HiLetgo Mini USB Nano V3.0 ATmega328P CH340G 5V 16M マイクロコントローラーボード Arduinoと互換”]
かったこれ、外れを引いたのかな?
普通にmacに接続したら、電源供給はされますが、Serialに認識しません >。< LEDでLが点滅しているのがびみょうに気になります。