參考資料:Control LED from web app using ESP8266 Serial WIFI module 強力推薦,單片機/Arduino 實現物聯的啓蒙教程,下文基本是對這篇教程的理解和翻譯html
開頭的話:如今物聯網平臺不少,相似Yeelink,樂爲物聯,Bylnk(爲microduino量身打造,更易上手),藉助它們提供的APP和接口能夠快速地實如今手機端接收遠程硬件信息。但別人的框架老是固定的,接口也是有限的,在樣式和功能上有必定侷限性,無法作到徹底知足需求的定製型APP。因此,我但願搭建本身的獨立平臺,實現遠程控制硬件,相似智能家居的設計,而後就找到這篇教程,理解運用就能夠達到本身的目的了。git
教程項目:使用ESP8266模塊和Arduino開發板在WIFI下經過網頁遠程控制LED開關github
所需器件:1. Arduino開發板 2.LED燈 3.麪包板 4.鏈接線 5.電腦web
具體步驟:編程
1、配置Arduino IDE環境json
2、配置HTML網頁程序(須要有一點網頁開發基礎)
原教程的網頁程序是用PHP+Apache配置的,若是熟悉這兩種工具使用的能夠訪問下面連接下載運行:Controling LED using ESP8266 HTML app(這個網頁應用的本質就是:在主頁面上放置兩個按鈕,點擊按鈕on,會經過js顯示一張燈亮的圖片,同時修改light.json中的數據爲{"light":"on"};點擊按鈕off,會經過js顯示一張燈滅的圖片,同時修改light.json中的數據爲{"light":"off"})。但對於我來講,重點在於掌握控制原理而不在於準備網頁程序,由於遠程控制的形式有不少種(網頁端、安卓應用、蘋果應用),不必爲了完成測試把每種應用都學一遍,因此我只在本身電腦上新建一個web project,例如工程名起爲wifiarduino,裏面放一個light.json文件,內容爲{"light":"off"},而後放到tomcat中發佈(須要修改端口號爲http協議默認端口號80),而後就能經過在瀏覽器端輸入http://localhost/wifiarduino/light.json查看到了。瀏覽器
3、實物連線tomcat
咱們不須要使用專門的固件燒寫工具,咱們能夠將移除了ATmega芯片的Arduino開發板作爲固件燒寫工具。以下圖所示,移除中間的芯片。
app
ESP8266 Arduino框架
給ESP8266供電:ESP8266模塊是由低電壓(3.3V DC)供電的,把ESP8266的VCC和CH_PD鏈接到Arduino的3.3V開發板上,在GPIO2和3.3V電源中間接一個1KΩ的電阻。
鏈接TX/RX引腳:TX/RX是 用於編程模塊,串口I/O以及調試。將ESP8266的TX與Arduino板上的TX,ESP8266的RX與Arduino上的RX對應鏈接起來。
將ESP8266設定爲FLASH(燒寫)模式:當GPIO0(上圖紫色線)接地線時,ESP8266是以bootloader模式(編程模式)啓動的,這也就是你能夠燒寫ESP8266(將Arduino上的代碼轉移到ESP8266上)的時候。在Arduino代碼加載完畢時,你將看到Arduino IDE底部提示「上傳結束」的信息,而後代碼就會開始運行了。
程序上傳結束後,將紫色線移除:當你不想將ESP8266一直設定爲燒寫模式時,將紫色線移除便可,程序將會一直在ESP8266上執行。
4、編寫Arduino代碼
原理:下面咱們將用到<ESP8266WiFi.h>以及<ArduinoJson.h>頭文件,實質上就是經過ESP去訪問咱們的light.json文件,若是json文件中light的值是on的話,就點亮LED;若是light的值是off的話,就關閉LED(你能夠在本地編輯json文件中light的值,來控制LED的開關)。下面是示例代碼:
#include <ESP8266WiFi.h> #include <ArduinoJson.h> const char* ssid = "mywifi"; //修改爲你可訪問的wifi名稱 const char* password = "mywifipassword"; // 修改爲wifi密碼 const char* host = "192.168.1.10"; // 你的網點域名或IP String path = "/wifiarduino/light.json"; // 文件路徑 const int pin = 2; void setup() { pinMode(pin, OUTPUT); pinMode(pin, HIGH); Serial.begin(115200); delay(10); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); int wifi_ctr = 0; while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); Serial.println("IP address: " + WiFi.localIP()); } void loop() { Serial.print("connecting to "); Serial.println(host); WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } client.print(String("GET ") + path + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: keep-alive\r\n\r\n"); delay(500); // wait for server to respond // read response String section="header"; while(client.available()){ String line = client.readStringUntil('\r'); // Serial.print(line); // we’ll parse the HTML body here if (section=="header") { // headers.. Serial.print("."); if (line=="\n") { // skips the empty space at the beginning section="json"; } } else if (section=="json") { // print the good stuff section="ignore"; String result = line.substring(1); // Parse JSON int size = result.length() + 1; char json[size]; result.toCharArray(json, size); StaticJsonBuffer<200> jsonBuffer; JsonObject& json_parsed = jsonBuffer.parseObject(json); if (!json_parsed.success()) { Serial.println("parseObject() failed"); return; } // Make the decision to turn off or on the LED if (strcmp(json_parsed["light"], "on") == 0) { digitalWrite(pin, HIGH); Serial.println("LED ON"); } else { digitalWrite(pin, LOW); Serial.println("led off"); } } } Serial.print("closing connection. "); }
5、最後須要作的事
咱們打開Arduino IDE中 工具->串口監視器,並將右下角的波特率設定爲115200,而後它將會顯示你是否連上了WiFi,若是你看到ESP8266上有紅燈亮起,且有藍燈閃爍時,說明你的無線模塊準備完畢。最後能夠移除RX/TX引腳連線,經過3.3V的鋰電池給ESP8266供電(以下圖所示)。感謝閱讀,祝編程愉快!