ESP8266獨立運作

ESP8266屬於SoC,內建一個32位元的處理器,比Arduino(8位元)的執行效能好上不少,

這邊實作,不透過Arduino,讓ESP8266來獨立運作。值得注意的是,ESP8266是屬於3.3V下工作的模組,

對於某些5V的感測器,液晶顯示,需要透過位準轉換模組,避免ESP8266不穩定。

優點是,佈線簡單,網路連線較Arduino+ESP8266穩定不少

缺點是,ESP8266對於感測器的支援度沒有Arduino那麼廣

請考量使用場合再選擇搭配方式。

想要把寫好的程式碼刷入ESP8266內,如同更新AT韌體一樣

主要有兩種接法:

1.透過USB UART轉接器(CP2102、PL2303系列、CH340G)

網友們分享,直接透過轉接器上的3.3V電源,有上傳失敗的疑慮,(供電電流不足所致)

建議3.3V電源用麵包板電源模組搭配18650兩顆串聯(8.4~7.4V)降壓至3.3V,另外,轉接器與麵包板的GND要接一起共地,否則也會上傳失敗。

2.把Arduino UNO上的晶片 ATMEGA328P-PU 挖起來,再上傳

但是說真的,晶片拆拆拔拔的對針腳也不是很好,

還是乖乖去買一個USB UART轉換就好

[刷程式流程]

1.先到Arduino IDE 的 檔案-->偏好設定-->額外的開發板管理員 輸入以下網址

http://arduino.esp8266.com/stable/package_esp8266com_index.json

2.點選工具-->開發板管理員

3.找到esp8266並安裝

4.上傳前選 Generic ESP8266 Module

ESP8266 WiFi 函式庫的函式列表:

最基本的程式碼,如同下方紫色字體部分

此程式碼使ESP8266連上家用Wifi AP ,不具伺服器的功能

#include <ESP8266WiFi.h>

void setup() {

Serial.begin(115200);

WiFi.begin("WiFi網路SSID", "密碼");

/*

* 若要指定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);

}

Serial.println("");

Serial.println("IP address: ");

Serial.print(WiFi.localIP());

Serial.println("WiFi status:");

WiFi.printDiag(Serial);

}

void loop() {

}

連上AP之後,我們可以架設網站伺服器

以下的程式碼中可以觀察出來,

server.on( ); 這個函式處理伺服器的網頁,例如根目錄 / 或 /index.html

語法格式是 server.on("目錄",指定運作的自訂函數);

也就是說,每個伺服器網頁的頁面都要指定一個自訂函數,(ps.伺服器可以設定數個網頁)

像根目錄 / 指定運作 rootRouter(); 這個自訂函數(ps.自訂函數名稱可以自己更改)

而rootRouter(); 中,再用server.send(代碼 , "網頁形式" , "html語法"); 這個函示送出html網頁

我們可以把我們想要寫的 html,透過字串的方式放進這個函式裡面。

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

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

const char ssid[] = "你的WiFi網路SSID";

const char pass[] = "你的WiFi密碼";

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

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

void rootRouter() {

server.send(200, "text/html", "Hello from <b>ESP8266</b>!"); //網頁的html 在此(紅色字體可做修改)

}

void setup() {

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位址

server.on("/index.html", rootRouter); // 處理首頁連結請求的事件

server.on("/", rootRouter);

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

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

});

server.begin();

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

}

void loop() {

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

}

上面的實作,伺服器回應一個最簡單的網頁

網站伺服器可以有幾種功能:

1.使用者連線請求遠端伺服器回傳資料(最簡易的伺服器)

PS.「連上伺服器」這個操作本身就是請伺服器回應資料,

例如連接上http://tw.yahoo.com 就是請yahoo伺服器傳回首頁的頁面資料,

上述簡易伺服器頁面則是相同的功能。

ESP8266 或 Arduino 此時可當作簡易型電腦(伺服器)

當使用者連線至ESP8266時,可以回傳某個我們設定好的頁面。

在這個頁面裡面,我們可以顯示感測器(例如溫濕度計、PM2.5感測器)的即時監測數值

詳見1.溫濕度站

也可以加上超連結,但是ESP8266也好、Arduino也好執行效能不高,不太適合在頁面上放太多資料

2.使用者連上伺服器的動作頁面(GET法),伺服器回應一些動作

3.使用者連上伺服器的操作頁面,伺服器回應一些動作(POST法)