利用ESP8266_01作一個遠程控制的智能插座

手頭有一塊ESP8266_01WIFI模塊,是前段時間在網上買arduino套件時送的,套件中還有一個單路繼電器,反正這些東西折騰完了之後也沒什麼用,就將網上的資料彙總了一下,作了一個遠程控制的智能排插,功能很是簡單,就是經過手機遠程控制排插通電或斷電。
先看下完成後的使用演示視頻
http://v.youku.com/v_show/id_XNDAxNTg5NzYwNA==.html?spm=a2ha1.12325017.uerCenter.5!3~5~5!2~5~DL~DD~A&firsttime=1html

OK,進入正題,先說下須要的材料:
一、ESP8266_01WIFI模塊一個
二、單路繼電器一個
三、1K電阻和和LED發光二極管各一枚。(用於指示通電或斷電)
四、Arduino UNO R3單片機一塊。
五、220v轉5v真流電源模塊一個(舊手機充電器就能夠)
六、排插一個。
七、麪包板一塊,導線若干。
八、無線路由器一個(須要知道密碼),還有就是一臺能上網的電腦,呵呵。
製做過程分爲三步,第一步在第三方平臺申請遠程控制的賬號、密碼及APIKEY,第二步要把程序寫到esp8266_01中,並進行測試;第三步進行組裝並實現控制。git

在開始以前,咱們有必須先簡單瞭解一下ESP8266的工做原理,或者說ESP8266在在手機控制電路通斷過程當中發揮什麼做用,咱們來看下面的這張圖:
利用ESP8266_01作一個遠程控制的智能插座
咱們在手機上發出通電或斷電指令後,相關指令會上傳到第三方平臺(通常是一個網站),第三方平臺按指令修改存儲的數據(通常是json格式的數據,如手機發發通電信號時,將變量a的值從0改成1,斷電時從1改爲0),ESP8266經過無線路由不停地查詢網站上指定這個數據的狀態,並按指定的格式將數據狀態返回EPS8266,ESP8266將接收到的數據進行格式解析後,通知繼電器執行通電或斷電的操做。
固然,網上還有許多ESP8266其它的工做方式,如將ESP8266做爲服務器,經過指令改變ESP8266的數據狀態來控制設備。但須要在路由器上設置端口映射,還須要外網透傳,對我來講難度有點大,呵呵。
好了,閒話說完,進入正題。我用的第三方平臺是醬菜創客(網絡還有許多相似的物聯網平臺,但我感受這個最簡單,適合初學)。首先須要在醬菜創客建立一個賬號。json

一、在醬菜創客上註冊、添加設備,安裝APP。

登陸www.jcckiot.com,註冊一個新用戶。
利用ESP8266_01作一個遠程控制的智能插座
按要求填寫用戶名,郵箱,密碼,提交後註冊郵箱會收到一個激活郵件,激活後再次登陸,進入用戶中心,會有一個重要的信息須要保存:就是下圖中的apikey,這個須要記下來,後面要用到。
利用ESP8266_01作一個遠程控制的智能插座
返回主頁後,就能夠添加設備了。
利用ESP8266_01作一個遠程控制的智能插座
隨便添加一個,如燈光照明,而後點擊添加新電燈開關,輸入設備名稱後點擊添加設備,就能在設備列表中看到咱們新添加的LED1了(固然也能夠用其它名字,如檯燈,電動車充電插座等等)。
利用ESP8266_01作一個遠程控制的智能插座api

點擊LED1下面的文字連接(不是圖標,是文字連接),就能看到LED1的sid和nid(咱們的是3和0),記下來,這個是設備的編號,咱們回頭要用到。
利用ESP8266_01作一個遠程控制的智能插座
醬菜創客還提供了一個APP,在首頁最下面,下載下來安裝到手機上。
利用ESP8266_01作一個遠程控制的智能插座
APP運行的界面和網頁同樣,第一次運行須要點擊右上角的頭像登陸,登陸後回到主界面,打開燈光照明,就能看到咱們在前面添加過的LED1了。固然如今還控制不了,還須要咱們把程序寫到ESP8266模塊上並鏈接有關線路。
利用ESP8266_01作一個遠程控制的智能插座
利用ESP8266_01作一個遠程控制的智能插座安全

利用ESP8266_01作一個遠程控制的智能插座

2 、把程序寫到ESP8266模塊上

網上對ESP8266程序寫入的教程大體有三種,1是下載別人作好的bin文件包,使用專用軟件燒錄到ESP8266,我查了下,資料比較多,貌似難度很大,俺就知難而退了;2是使用USB轉TTL工具進行寫入,俺手頭沒有這種高級貨;3是用Arduino UNO R3,利用Arduino IDE進行寫入,咱們就用這種方法。
打開Arduino IDE,默認的Arduino IDE是沒有ESP8266庫的,須要咱們本身添加上。
點擊Arduino IDE的文件-首選項,在附加開發板管理器網址中填入:http://arduino.esp8266.com/stable/package_esp8266com_index.json,而後肯定
利用ESP8266_01作一個遠程控制的智能插座
而後點擊工具-開發板XXXXXXXX-開發板管理器,在搜索框中輸入esp8266,而後回車,稍等一下子,就能在搜索結果中看到esp866 for esp8266 community的項目,點擊安裝。
利用ESP8266_01作一個遠程控制的智能插座
安裝須要一些時間,完成後重啓Arduino IDE,再看開發板管理器,就能看到esp866 for esp8266 community的狀態是安裝過的(installed)。
利用ESP8266_01作一個遠程控制的智能插座
這時候再打開工具-開發板XXXX,在開發板管理器下面,就能找到咱們的ESP8266 Module了,點擊選中它。
這時咱們打開工具,開發板XXXX就變成了Generic ESP8266 Module了,說明當前的開發板是ESP8266了。服務器

利用ESP8266_01作一個遠程控制的智能插座
在Generic ESP8266 Module下面還有許多選項,是配置參數的,由於ESP8266有許多配本,燒錄時的參數設置也不同,我用的是ESP8266_01,我用的參數是:Flash Mode:DIO/Upload Speed:115200/Flash Size:4M(1MSPIFFS),其它參數沒變。
OK,開發環境配置好了,咱們能夠鏈接上ESP8266進行上傳和燒錄了。
先看ESP8266_01接口說明:
利用ESP8266_01作一個遠程控制的智能插座網絡

將ESP8266_01接到Arduino UNO R3上。
須要說明的幾點:
I、VVC和CH_PD接3.3V,不能接5V。
II、RX接Arduino的RX,TX接Arduino的TX,有些資料說要反過來接,經證實不行。
III、GND接Arduino的GND,GPIO0在燒錄時接GND,但在運行時須要斷開。
IV、有的資料說燒錄時須要將Arduino的ATmega芯片(也就是最大最長的那塊)給拆下,俺試了下,不拆下也行。
V、最後一點,也是讓我折騰了好半天的一點:必定要用一個1K電阻將GPIO_2和3.3V鏈接上,這點是從其它資料中找到的,不接的話,燒錄了N次都失敗。
接線麪包板圖以下:
利用ESP8266_01作一個遠程控制的智能插座
鏈接好後,就能夠寫入程序燒錄了。ide

將如下代碼粘貼到Arduino IDE中,工具

/*
 * 經過醬菜創客控制繼電器
*/

#include <ESP8266WiFi.h>
WiFiClient client;
#define relay1 2 //運行時繼電器鏈接在8266的GPIO2上
const char *ssid     = "TP-LINK_123";//這裏是個人wifi,你使用時修改成你要鏈接無線路由的ssid
const char *password = "a1234567";//你的wifi密碼
const char *host = "www.jcckiot.com";//醬菜創客服務器IP,不要改
const int httpPort =8266;//端口號,不要改
String line ="";
int m=0; 
void setup() 
{  
  Serial.begin(115200);  
  delay(10);  
  pinMode(relay1,OUTPUT);  //設置relay1的工做模式爲輸出   
  Serial.println();  
  Serial.println();  
  Serial.print("Connecting to ");  
  Serial.println(ssid);     
  WiFi.begin(ssid, password);     
  while (WiFi.status() != WL_CONNECTED)//若是鏈接不能wifi,在0.5秒後再試 
  {    
    delay(500);    
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");//在串口監示器中顯示wifi鏈接成功
  Serial.println("IP address: ");  
  Serial.println(WiFi.localIP());  //顯示服務器的地址
  while (!client.connect(host, httpPort))//若是鏈接不上服務器,就提示鏈接失敗,0.5秒後再試 
  {    
    Serial.println("connection failed");
    //return;    
    delay(500);
  } 
  Serial.print("connecting to ");
  Serial.println(host);  
  client.write("mode=bind&apikey=XXXXXX&data={ck001000bind}\r\n");//綁定apikey,把XXXXXX修改爲你在醬菜創客上的apikey
  delay(10);
}
//int value = 0; 
void loop() 
{  
  while(client.available())
  {    
    String line = client.readStringUntil('\r');
    Serial.println(line);
    //valueread=line[47];
    //Serial.println(valueread);
    if(line[5]=='3' & line[8]=='0' & line[9]=='1')//3是你要控制的設備的 sid,0是nid,1表明是通電
//意思是若是指定的設備的狀態是1,就讓realy1設置爲高電平,即讓繼電器通電
    {      
      digitalWrite(relay1,HIGH);
      Serial.println("Relay on");
    }
    if(line[5]=='3' & line[8]=='0' & line[9]=='0') //3是你要控制的設備的 sid,0是nid,0表明是斷電
//意思是若是指定的設備的狀態是0,就讓realy1設置爲低電平,即讓繼電器斷電
    {
      digitalWrite(relay1,LOW);
      Serial.println("Relay off");
    }
  }
  String line ="";  
  m++;
  if(m%40==0)
  {
    client.write("mode=up&apikey=XXXXXX&data={ck003000life}\r\n");/把XXXXXX修改爲你本身的apikey
    m=0;
  }  
  delay(500);
}

程序很簡單,須要說明的地方我已經放到註釋裏了。我相信不須要再進行解釋了。
把Arduino接上電腦的USB口,這時ESP8266紅燈會亮。
點擊工具欄最左的驗證按鈕開始編譯,如無問題會提示編譯完成。
利用ESP8266_01作一個遠程控制的智能插座
而後點擊工具欄的上傳按鈕,開始編譯並上傳,上傳完成後會自動開始燒錄,燒錄時Arduino IDE的狀態欄會有紅色的點及燒錄進度的百分率。達到100%後,燒錄就完成了。
利用ESP8266_01作一個遠程控制的智能插座
這時拔掉GPIO_0(麪包板圖中的橙色的線),打開Arduino的串口監視器,就能夠看到EPS8266的運行狀況了。如出現「WiFi connected」和路由器給ESP8266的IP地址,就說明鏈接成功了,不然會出現「connection failed」,這時就須要再檢查下你代碼中路由器設置是否正確。
利用ESP8266_01作一個遠程控制的智能插座
到這裏,對ESP8266的燒錄已經完成了,若是你火燒眉毛的想試一下,能夠先接一個發光二極管,再加一個3.3V的電源(我用的是一節18650電池,檢測電壓是3.9V,也能正常運行)按以下方式接線:
利用ESP8266_01作一個遠程控制的智能插座
在手機打開醬菜創客的APP,進入燈光照明,找開咱們的LED1點擊一下,讓LED1處於ON的狀態,稍等一會,麪包板上的發光二極管是否是就亮了?而後再點,讓LED1處於OFF狀態,稍等發光二極管就滅了。
利用ESP8266_01作一個遠程控制的智能插座oop

利用ESP8266_01作一個遠程控制的智能插座
說明一下:個人手機要用來拍照,只能在電腦上用網站方式操做了,效果和用手機操做是同樣同樣的,呵呵。
三、線路鏈接和組裝
剩下的事情就簡單了,咱們要將esp8266_01和繼電器裝到排插裏,由於繼電器和ESP8266都要用DC電源,咱們還要一個220v交流轉5v直流的變壓器,就用一個拆掉外殼的手機充電頭,上面的usb接口還能夠用在插座上給手機充電,呵呵(其實ESP8266須要的是3.3v的電源,我沒找到,就湊合一下吧!)
把上面的東東接下圖接線。
利用ESP8266_01作一個遠程控制的智能插座

(不會作電路圖,只好用實物圖代替了,你們將就看吧......)
若是你們能找到3.3v的電源,最好也用上,那麼實物圖應該是下面這樣的:
利用ESP8266_01作一個遠程控制的智能插座

個人排插比較小,佔用了兩個插孔位置後,仍是很是緊促,安裝的實際以下圖(請原諒我蹩腳的焊工):
利用ESP8266_01作一個遠程控制的智能插座

最後爲了安全起見,我把前面兩個被佔用的孔用熱熔膠給封上了,免得哪天喝大了直接把手機插在火線上,那就抖大發了……
利用ESP8266_01作一個遠程控制的智能插座

個人電動自行車天天晚上都要在地下室充電,充的時間過短怕充不滿,充的時間太長又怕過充不安全。有了這個東東,我就不用天天晚上大半夜從六樓跑下來給電動車斷電了,從溫暖的被窩裏拿出手機,輕輕一按,一切搞定,嘻嘻……------------------------------全劇終-----------------------------

相關文章
相關標籤/搜索