M5NanoC6、WebServerでリレーのオン、オフ。




参考


↓クリック


https://logikara.blog/m5nanoc6-setting/


↑クリック


x 過去ログを見よ!!
x 3.0.7
x Arduino IDE
x Grove自作クロスケーブル
x ロジカラプログ様のプログラムを非営利、研究調査目的で引用しました。



修正箇所は、1か所


```c++

const char ssid[] = "自宅のWi-FiルーターのSSIDを設定";  // 接続先SSID
const char pass[] = "自宅のWi-Fiルーターのパスワードを設定"; // 接続先パスワード

```

![o_coq575.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/514d8ee0-8e1a-4f09-d6fe-9aa6e8fa76e2.jpeg)

![o_coq576.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ce35159c-8761-0b0d-8e0b-284e66c4136d.jpeg)

![o_coq577.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ebb3a8f5-456e-d9e6-332e-cca012954fc8.jpeg)




```c++


#include "Arduino.h"
#include <WiFi.h>       // Wi-Fi接続用
#include <WebServer.h>  // サーバー設定用
#include <ESPmDNS.h>    // ドメインネームでIPアドレス取得用

#define BLUE_LED_PIN 7  // 青色LED端子番号
#define BTN_PIN 9       // 本体ボタン端子番号
#define OUT_PIN 2       // 外部出力端子番号

// 変数宣言
bool state = false; // ボタン状態保持用

// Wi-Fiローカル接続先設定
const char ssid[] = "自宅のWi-FiルーターのSSIDを設定";  // 接続先SSID
const char pass[] = "自宅のWi-Fiルーターのパスワードを設定"; // 接続先パスワード
const char mdnsName[] = "nano1";  // mDNS Name（mdnsName.localで接続可能）

// サーバー設定ポート80で接続
WebServer server(80);

// htmlメイン画面データ　※R"この中の文字列は改行は無視され連続した文字列として扱われる"
char html[] = R"(
  <!DOCTYPE html>
  <html lang="jp">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>REMOTE-SWITCH</title>
    <style>
      body { display: flex; justify-content: center; height: 100vh; }
      .container { margin-top: 20px;text-align: center; }
      button { height:50px }
    </style>
  </head>
  <body>
    <div class="container">
      <h1>REMOTE-SWITCH</h1>
      <div>
        <button onclick="location.href='/get/btn_on'">　ON　</button>
        <button onclick="location.href='/get/btn_off'">　OFF　</button>
      </div>
    </div>
  </body>
  </html>
)";

/******************サーバーリクエスト時処理関数 ******************/
// ルートアクセス時の応答関数
void handleRoot() {
  server.send(200, "text/html", html);  //レスポンス200を返しhtml送信
}
// エラー（Webページが見つからない）時の応答関数
void handleNotFound() {
  server.send(404, "text/plain", "404 Not Found!");  //text送信
}
// ブラウザONボタン処理
void btnOn() {
  digitalWrite(BLUE_LED_PIN, HIGH); // 本体LED点灯
  digitalWrite(OUT_PIN, HIGH);      // 外部出力ON
  Serial.println("get:/get/btn_on");
  server.send(200, "text/html", html);  //レスポンス200を返しhtml送信
}
// ブラウザOFFボタン処理
void btnOff() {
  digitalWrite(BLUE_LED_PIN, LOW);  // 本体LED消灯
  digitalWrite(OUT_PIN, LOW);       // 外部出力OFF
  Serial.println("get:/get/btn_off");
  server.send(200, "text/html", html);  //レスポンス200を返しhtml送信
}

// 初期設定 ---------------------------------------------------
void setup() {
  Serial.begin(9600); // シリアル通信初期化(ArduinoIDEの「USB CDC On Boot:」設定は"Enable"にしておく)
  // Wi-Fi接続開始
  while (WiFi.localIP()[0] == 0) { // IPアドレスが取得されるまで繰り返し
    WiFi.begin(ssid, pass);        //ローカル Wi-Fi接続実行
    delay(3000); // 再接続待ち
  }

  // mDNS設定（mdnsName.localでアクセス）
  MDNS.begin(mdnsName);

  // 接続情報シリアル出力表示
  Serial.print("IP:");
  Serial.println(WiFi.localIP());       // IPアドレス（配列）表示
  Serial.printf("mDNS:%S\n", mdnsName); // mDNS名表示

  // サーバー設定
  server.on("/", handleRoot);         //ルートアクセス時の応答関数を設定
  server.onNotFound(handleNotFound);  //Webページが見つからない時の応答関数を設定
  server.on("/get/btn_on", btnOn);    //ボタンオン受信処理
  server.on("/get/btn_off", btnOff);  //ボタンオフ受信処理
  server.begin();                     //Webサーバー開始

  // 入力設定
  pinMode(BTN_PIN, INPUT_PULLUP);  // 本体ボタン

  // 出力設定
  pinMode(BLUE_LED_PIN, OUTPUT); // 本体LED青
  pinMode(OUT_PIN, OUTPUT);      // 外部出力
}

// メイン -----------------------------------------------------
void loop() {
  if (digitalRead(BTN_PIN) == LOW && state == false) { // 本体ボタンがON で stateがfalseなら
    digitalWrite(BLUE_LED_PIN, HIGH); // 本体LED点灯
    digitalWrite(OUT_PIN, HIGH);      // 外部出力ON
    state = true;   // stateをtrueへ
  }
  if (digitalRead(BTN_PIN) == HIGH && state == true) {  // 本体ボタンがOFFなら
    digitalWrite(BLUE_LED_PIN, LOW);  // 本体LED消灯
    digitalWrite(OUT_PIN, LOW);       // 外部出力OFF
    state = false;  // stateをfalseへ
  }
  server.handleClient();  //クライアントからのアクセス確認
  delay(100);             //遅延時間（ms）
}


```