• 沒有找到結果。

Arduino Wi-Fi_ESP8266網頁控制LED

N/A
N/A
Protected

Academic year: 2021

Share "Arduino Wi-Fi_ESP8266網頁控制LED"

Copied!
4
0
0

加載中.... (立即查看全文)

全文

(1)

1

Arduino Wi-Fi(ESP8266) 入 門 應 用 <網 頁 控 制 LED>

ESP8266 和 樹 莓 派 3 均 可 透 過 Wi-Fi 控 制 I/O,這 是 物 聯 網 基 本 要 求 ,但 要 留 意 電 腦 和 裝 置 的 IP 需 要 在 同 一 子 網 域 , 這 樣 才 可 以 用 電 腦 網 頁 遠 端 控 制 I/O, 所 以 在 實 際 應 用 上 , 除 非 你 有 申 請 固 定 IP 位 置 方 能 真 正 做 物 聯 網 的 遠 端 監 控 , 所 以 建 議 利 用 手 機 當 作 基 地 台 。

亦 可 使 用 ThingSpeak 專業物聯網的平台網站,網址是 https://thingspeak.com,可以利用這個物聯網 平台先行開發。而聯發科 Linkit One 有提供專用網站,只要登入個人帳號即可透過網頁或手機遠端監控, 但其缺點是價格偏高,且輸出信號較弱,那是因為要像手機一樣省電。

ESP8266 優 點 是 內 建 Wi-Fi 晶 片,體 積 與 耗 電 量 都 很 小,使 用 方 式 同 Arduino,有 7 個 GPIO 可 以 控 制 , 對 於 簡 單 的 遠 端 監 控 應 是 足 夠 , 每 隻 GPIO 可 以 接 繼 電 器 控 制 家 電 , 或 是 連 接 各 式 感 測 器 傳 回 雲 端 以 便 判 斷。https://espressif.com/zh-hans/products/hardware/esp8266ex/overview

安裝使用方式如下:

1. 按『檔案→偏好設定』,URLs 輸入http://arduino.esp8266.com/stable/package_esp8266com_index.json,

按『好』,若沒看到該畫面是因為 Arduino 版本太舊,應立即更新最新版本,其實聯發科 Linkit One

也是要透過這種方式額外安裝相關驅動程式,因為預設清單並沒有最新的板子。

2. 按『工具→板子→Boards Manager...板子管理員』,拉到最下面,點選最後面的 ESP8266…,選擇最

(2)

2

3. 板子 Generic ESP8266 Module,當選擇正確,當接上電路板序列埠才可看到 COM?(GPIO4、5 印相反) 4. 若要讓 ESP8266 模組進入燒錄模式,不像 UNO 板可以直接燒錄,因為內部結構關係,若要進入 燒錄模式須同時按下 S1 鍵與 S2 鍵,心裡默數 123 ,超過 0.5 秒後先放開 S2 鍵,再默數 123 後 放開 S1 鍵,藍色燈熄滅,這樣才能進行燒錄, 實際燒錄時藍燈閃爍,剛開始會覺得麻煩,但習 慣就好。當完成燒錄後,若要恢復正常執行模式, 只要再按一下S2 鍵(右下)即可。

//瀏覽器輸入 http://server_ip/LED1on可以控制 LED1 點亮,http://server_ip/LED1off可以控制 LED1 熄滅

//========== 整體宣告部分 ============

#include <ESP8266WiFi.h> //掛載 ESP8266WiFi.h 標頭檔

const char* ssid = "chenlung88"; //crSSID 改為您所使用 WiFi 的 ssid

const char* password = "8642****"; //請將 yourPWD 改為您所使用 WiFi 的 password WiFiServer server(80); //建構 WiFi 伺服器,使用 Port 80

#define LED1 2 //定義 LED1 或繼電器連接在 GPIO2 #define LED2 4 //定義 LED2 或繼電器連接在 GPIO4 #define LED3 13 //定義 LED3 或繼電器連接在 GPIO13 #define BZ 16 //蜂鳴器連接在 GPIO16

#define ON 1 //定義繼電器之 ON(低態動作) #define OFF 0 //定義繼電器之 OFF(低態動作) //========== 初始設定部分 ============ void setup() { //設定繼電器接腳 pinMode(5, OUTPUT); digitalWrite(5, LOW); pinMode(12, OUTPUT); digitalWrite(12, LOW); pinMode(14, OUTPUT); digitalWrite(14, LOW);

(3)

3 pinMode(LED1, OUTPUT); //設定 LED1 為輸出接腳 digitalWrite(LED1, OFF); //設定 LED1 之初始狀態 pinMode(LED2, OUTPUT); //設定 LED2 為輸出接腳 digitalWrite(LED2, OFF); //設定 LED2 之初始狀態 pinMode(LED3, OUTPUT); //設定 LED3 為輸出接腳 digitalWrite(LED3, OFF); //設定 LED3 之初始狀態 //設定串列埠 Serial.begin(115200); //啟用串列埠(連接序列埠監控視窗) delay(10); //稍候 10ms Serial.println(); //換行 Serial.println(); //換行 Serial.print("Connecting to "); Serial.println(ssid); //顯示 SSID //ESP8266 模組連接 WiFi WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) { delay(500); //待連接 WiFi

Serial.print("."); }

Serial.println(); //換行

Serial.println("WiFi connected"); //顯示已連上 WiFi //啟動伺服器 server.begin(); Serial.println("Server started"); //顯示已啟動伺服器 //在序列埠監控視窗裡顯示 ESP8266 之 IP Serial.println(WiFi.localIP()); } //========== 主程式部分 ============ void loop() { //檢查是否有客戶端(client)連接

WiFiClient client = server.available();

if (!client) return; //若沒有客戶端連接則返回 //若有客戶端連接

Serial.println("new client"); //在序列埠監控視窗裡顯示有客戶端連接 while(!client.available()) delay(1); //等待客戶端傳入資料

//讀取客戶端傳入之需求列

String req = client.readStringUntil('\r');

Serial.println(req); //在序列埠監控視窗裡顯示客戶端需求 client.flush(); //放棄已寫入到客戶端,但尚未讀取的資料 //處理需求

int val;

String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n"; if (req.indexOf("/LED1on") != -1)

{ digitalWrite(LED1, ON); //開啟 LED1 beep(1);

(4)

4 s += "<html>\r\nLED1 is ON </html>\n";

client.print(s); //在客戶端顯示訊息 }

else if (req.indexOf("/LED1off") != -1) { digitalWrite(LED1, OFF); //關閉 LED1 beep(1);

s += "<html>\r\nLED1 is OFF </html>\n"; client.print(s); //在客戶端顯示訊息 }

else if (req.indexOf("/LED2on") != -1)

{ digitalWrite(LED2, ON); //開啟 LED2 beep(1);

s += "<html>\r\nLED2 is ON </html>\n"; client.print(s); //在客戶端顯示訊息 }

else if (req.indexOf("/LED2off") != -1) { digitalWrite(LED2, OFF); //關閉 LED2 beep(1);

s += "<html>\r\nLED2 is OFF </html>\n"; client.print(s); //在客戶端顯示訊息 }

else if (req.indexOf("/LED3on") != -1)

{ digitalWrite(LED3, ON); //開啟 LED3 beep(1);

s += "<html>\r\nLED3 is ON </html>\n"; client.print(s); //在客戶端顯示訊息 }

else if (req.indexOf("/LED3off") != -1) { digitalWrite(LED3, OFF); //關閉 LED3 beep(1); s += "<html>\r\nLED3 is OFF </html>\n"; client.print(s); //在客戶端顯示訊息 } else { Serial.println("invalid request"); //在序列埠監控視窗裡顯示不正確需求 client.stop(); //停止客戶端連接 return; //返回 } client.flush(); //放棄已寫入到客戶端,但尚未讀取的資料 delay(1); //稍候 1ms Serial.println("Client disconnected"); //在序列埠監控視窗裡客戶端斷線 } //====== beep() ========== void beep(int x) { for(int i=0;i<x;i++) { tone(BZ,1000);delay(100); noTone(BZ);delay(100); } }

參考文獻

相關文件

5/8 主持人簽 署的同意書版本為 2.0 版、日期為 4/28。但 5/15 協同指 持人代簽的為 1.2 版、日期為 3/18。到底哪一份為最新

整體網站之規劃與設計設,包括網站企畫,網頁版面美工設計,網頁版面

手機會使用 eclipse 開發一套 Android 系統配合 arduino 三軸的 APP,其功能會 有連接 arduino 藍芽模組的按鈕,按下按鈕,將可與 arduino

新加坡於 2001 年頒布新綱要,數學教材從統一版本開放至六種版本,本研究據 以考察的國小數學教科書是 2003 年 Times Media 出版國小一至五年級 My Pals are here!Maths

(一)本中心進行微軟公司校園授權軟體 CA 簽約,微軟已將台灣通用之制式合約由 CA 3.4 版變更為 3.5 版;其中將原來的 office pro 更改為 office pro for Windows,即新版

結 果發現這個新解跟greedy choice一樣好(也是一個 最佳解) 或者發現這個新解更好(矛盾, 所以最佳解

結 果發現這個新解跟 greedy choice 一樣好 ( 也是一個 最佳解 ) 或者發現這個新解更好 ( 矛盾 , 所以最佳 解裡面不可能沒有 greedy choice)... 證明

結 果發現這個新解跟greedy choice一樣好 (也是一個 最佳解) 或者發現這個新解更好 (矛盾, 所以最佳解 裡面不可能沒有greedy