IoT, Internet Of Thing, ESP8266 透過互聯網開關一個燈泡


http://wp.me/ph3BR-1Sg

年多前首次嘗試玩樂應用, 開發很麻煩, IoT, Internet Of Thing, ESP8266 開始玩了 https://goo.gl/0dT4BB

時間過去了, 現在原廠的資訊公開比較多了.

大夥都鼓吹物聯網, 還在大搞工業4.0啥的, 到底沒事搞個手機APP做個智慧開關, 透過互聯網遙控家裡的冷氣燈泡之類的開開關關, 就是智慧家居或物聯網 (IoT) 了嗎?! 其實真心的不清楚, 不過也應該初略了解一下這種各方期盼的應用和利潤.

實驗就做個最簡單的, 透過互聯網遙控開關一個LED, 不是要用一個真正的一個燈泡. 以前有很多方案, 一般體積龐大, 而來需要複雜的外圍電路和零件, 比起近來的 IoT 專用的芯片, 基本像是真空管收音機和DSP收音機的對比一樣鮮明, 越是近代的科技產物, 功能越強體積越小.

這次實驗作法比較簡單, 抄來修改修改, 看看效果. 還是用之前買很貴的 ESP-01 的模組, 現在人民幣就幾塊錢一個.

h_ttps://youtu.be/7QwRXlBbf7Q

 

 

 

要再組一個玩玩.

neo_esp-01-web-server

先做好硬件, 以前的那個流落異鄉了. 電路圖就抄一下改一下,
1) 兩個按鈕開關,
2) 四個電阻,
3) 一個LED,
4) 一個不知道是不是盜版 IC 的 PL2303 USB-SERIAL 模組, 看之前的盜版IC和 DRIVER 安裝的要點, 另外要自行改變輸出3.3V電壓, I/O也要改3.3V, 不然WIN 10 會無法驅動, 也不行使用.

 

軟件,

下載及安裝 ARDUINO, 最新的是 1.8.1 版本, https://www.arduino.cc/en/main/software

設置 Arduino core for ESP8266 WiFi chip, 現在版本是 2.3.0, 編譯器源碼的最新軟體倉庫服務器網址, http://arduino.esp8266.com/stable/package_esp8266com_index.json

參考 https://github.com/esp8266/Arduino#installing-with-boards-manager,
[檔案] -> [偏好管理設定] -> [額外開發板管理員網址],  填入
http://arduino.esp8266.com/stable/package_esp8266com_index.json

[工具] -> [開發板管理員], 選取 esp8266, 更新並自動安裝完成後, 即可開始編譯 ESP8266 的軟件.

 

 

抄來的源碼, 修改了一些, 方便脫機使用, 只要一節鋰電池就可以. 上電啟動過程, led 會快閃一陣子, 表明正在進行連結 wifi router 以獲取固定ip, 源碼如下圖,

neo_conneting-wifi-router-fast-blinking

 

然後慢閃5下, 最後熄滅, 源碼如下圖,

neo_server-up-slow-blinking-5-times

 

當以上程序完成執行, 表示在這個小小芯片上面已經成功建立好了一個網路伺服器, 可以通過瀏覽器連上去, 點選並控制板子上的led的亮滅, 掃描網路地址列表的話, 會看到這個小小芯片伺服器的IP地址是 192.168.1.188. 這樣基本就是IoT最簡單的入門, 學成了.

neo_img_7430

 

因為都是東抄西湊抄襲來的源碼然後修改的, 難免有疏漏, 不過一定可以做成的. 比較重點的是需要因應不同的WIFI ROUTER 設定個別實驗的源碼, 因為每家每戶都有不同的WIFI名字,IP和密碼, 設定的地方在源碼的位置如下圖,

neo_wifi-ip-setting

 

因為實驗用途, 所以選固定IP, 不然每次開機和WIFI連結數量變化可能會讓IP每次變換, 用網頁連結就麻煩了. 測試網頁的效果.

neo_esp8266-web-server-running

 

電路圖就這樣

neo_esp8266-web-server-schematic

 

 

完整的源碼


//REF : https://create.arduino.cc/projecthub/ROBINTHOMAS/esp8266-esp-01-webserver-7248ca
//2017-02-19, test done, xiaolaba
// ESP-01 module
// gpio0 connect to GND, power up, ESP8266 is then in flash mode
// burn code to ESP-01 module

#include <ESP8266WiFi.h>

const char* ssid = "your wifi name";//change and type your WIFI ssid
const char* password = "your wifi password";//change and type your password

IPAddress ip(192, 168, 1, 188);  //Node static IP
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 1, 1);

int onbroadledPin = 1; // GPIO1 of ESP-01, connect to onboard blue LED
int ledPin = 2; // GPIO2 of ESP8266, ESP-01
WiFiServer server(80);

void led_on (){
digitalWrite(ledPin, LOW);
digitalWrite(onbroadledPin, LOW);
}

void led_off (){
digitalWrite(ledPin, HIGH);
digitalWrite(onbroadledPin, HIGH);
}

void setup() {
Serial.begin(115200);
delay(10);

// diable gpio1, no use onboard blue LED
//  PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_GPIO1); //use pin as GPIO1 instead of UART TXD
//  pinMode(onbroadledPin, OUTPUT);

pinMode(ledPin, OUTPUT);
//digitalWrite(ledPin, LOW);
led_off();

// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

// Static IP Setup Info Here...
WiFi.config(ip, gateway, subnet);
//WiFi.config(ip, dns, gateway, subnet); //If you need Internet Access You should Add DNS also..

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
led_on(); //fast LED blinking loop, until WIFI is connected
delay(50);
Serial.print(".");
led_off();
delay(50);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
delay(500);

// Start the server
server.begin();
Serial.println("Server started");

// slow blinking 5 times, indicate ESP-01 server is started
for (int i= 0; i<5; i++) {
led_on();
delay(300);
led_off();
delay(300);
}


// Print the IP address
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");

}

void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}

// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}

// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();

// Match the request

int value = LOW;
if (request.indexOf("/LED=ON") != -1) {
//digitalWrite(ledPin, HIGH);
led_on();
value = HIGH;
}
if (request.indexOf("/LED=OFF") != -1){
//digitalWrite(ledPin, LOW);
led_off();
value = LOW;
}

// Set ledPin according to the request
//digitalWrite(ledPin, value);


// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); //  do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");

if(value == HIGH) {
client.print("LED is OFF");
client.println("<br><br>");
client.println("Click <a href=\"/LED=OFF\">here</a> to turn ON LED on pin 2. hello xiaolaba. ESP8266 web server<br>");
} else {
client.print("LED is ON");
client.println("<br><br>");
client.println("Click <a href=\"/LED=ON\">here</a> to turn OFF LED on pin 2. hello xiaolab. ESP8266 web server<br>");

}
client.println("</html>");

delay(1);
Serial.println("Client disonnected");
Serial.println("");

}

 

 

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s