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法)