7.控制一個開關

本程式碼針對目前市售的ESP8266物聯網控制模組撰寫,

「esp-01 繼電器」的圖片搜尋結果

開關端為Relay的 NC 與 COM

(萬一ESP8266沒有正常工作,還是可以當一般插頭使用)

程式碼下載:點我

實體圖:

控制介面

連線方法:

同網域下,在瀏覽器網址列輸入ESP8266被分配到的IP即可進入控制介面

Arduino CODE

#include <ESP8266WiFi.h> // 提供Wi-Fi功能的程式庫

#include <ESP8266WebServer.h> // 提供網站伺服器功能的程式庫

#include <ESP8266mDNS.h>

#include "index.h"

const byte LED_PIN2 = 2;

const byte LED_PIN0 = 0;

const char ssid[] = "SSID";

const char pass[] = "Password";

ESP8266WebServer server(80); // 宣告網站伺服器物件與埠號

// 定義處理首頁請求的自訂函式

void rootRouter() {

server.send (200, "text/html", PAGE_INDEX );

}

void setup() {

pinMode(LED_PIN2, OUTPUT);

pinMode(LED_PIN0, OUTPUT);

Serial.begin(115200);

WiFi.begin(ssid, pass);

/*

* 若要指定IP位址,請自行在此加入WiFi.config()敘述。

WiFi.config(IPAddress(192,168,1,50), // IP位址

IPAddress(192,168,1,1), // 閘道(gateway)位址

IPAddress(255,255,255,0)); // 網路遮罩(netmask)

*/

while (WiFi.status() != WL_CONNECTED) {

delay(500); // 等待WiFi連線

Serial.print(".");

}

Serial.println("");

Serial.print("WiFi connected, IP: ");

Serial.println(WiFi.localIP()); // 顯示ESP8266裝置的IP位址

if (!MDNS.begin("tomorrows")) {

Serial.println("Error setting up MDNS responder!");

while(1) {

delay(1000);

}

}

Serial.println("mDNS responder started");

server.on ( "/", rootRouter);

server.on ( "/index.html", rootRouter);

server.on ("/sw0", []() {

String state = server.arg("led0");

if (state == "ON") {

digitalWrite(LED_PIN0, LOW);

} else if (state == "OFF") {

digitalWrite(LED_PIN0, HIGH);

}

});

digitalWrite(LED_PIN2, HIGH);

server.onNotFound([](){ // 處理「找不到指定路徑」的事件

server.send(404, "text/plain", "File NOT found!");

});

server.begin();

Serial.println("HTTP server started.");

MDNS.setInstanceName("tomorrows' ESP8266");

MDNS.addService("http", "tcp", 80);

}

void loop() {

server.handleClient(); // 處理用戶連線

}

index.h

const char PAGE_INDEX[] PROGMEM = R"=====(

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>ESP8266物聯網</title>

<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css">

<style type="text/css">

body {

font-family: "微軟正黑體", "黑體-繁", sans-serif;

}

</style>

</head>

<body>

<h1>燈光控制器</h1>

插頭開關:

<div id="LED_SW0">

<input type="radio" id="LED0_ON" class="SW0" value="ON" name="SW0"><label for="LED0_ON"> 開 </label>

<input type="radio" id="LED0_OFF" class="SW0" checked="checked" value="OFF" name="SW0"><label for="LED0_OFF"> 關 </label>

</div>

<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script>

<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>

<script>

$(function() {

$( "#LED_SW0" ).buttonset();

$(".SW0").change(function(evt) {

var state = $(this).val();

$.post("/sw0", {led0:state});

});



});

</script>

</body>

</html>

)=====";