智能插座的制作(esp01,繼電器,arduino)
前言:
現在小學信息技術的教材中已經出現了物聯網的內容,比如泰山版小學信息技術教材第六冊第二單元第一課就是用手機控制智能插座。就起了自己動手制作一個的心思,通過到網上瀏覽制作智能插座的文章後,有了基本思路,通過網購配件、編程上傳、動手焊接組裝等環節,制作了一個很粗糙但夠實用開放的智能插座,本文主要就是從申請帳號、編寫程序,上傳到控制板,動手焊接組裝三個方面介紹一下整個過程。
一、所需配件。註:
二、申請帳號,編寫arduino程序。
要遠程控制esp01模塊驅動繼電器工作,有很多物聯網平臺都能做到。如機智雲、ONENET、醬菜物聯等等。考慮到智能插座所需功能比較單一,為方便操作,所以作者選用了醬菜物聯做為智能插座的平臺。
1、申請帳號:打開網址http://www.jcckiot.com/,註冊一個帳號,記下自己的apikey。(用的時候到用戶中心裏找也可以)
創建應用:在首頁選擇插座,輸入插座的名字,記下sid和nid。(待會程序中要用)
2、編寫arduino程序,並上傳到控制器。
(1)安裝所需庫文件。
打開arduino ide程序,依次點擊文件-首選項,找到下圖中標記的文件夾位置,如本機的地址是C:\Users\Administrator\AppData\Local\Arduino15。這時需要下載
arduino的esp8266的支持庫文件,如果直接聯網下載的話,速度極慢(估計10個小時以上)。但網絡上有達人們共享了下載好的文件,我轉存到我的百度網盤裏,有需要的可以到
這時在arduion的IDE中,打開工具-開發板XXXX,在開發板管理器下面,就能找到我們的ESP8266 Module了,點擊選中它。這時我們打開工具,開發板XXXX就變成了Generic ESP8266 Module了,說明當前的開發板是ESP8266了。根據下圖進行適當的設置。
(2)連接esp8266模塊和USB-TTl.
連接方法:(1)ESP8266模塊的5(VCC)、7(CH—PD)兩根針同TTL的3v3相連。(2)模塊的1(GND)、3(GPIO0)號針同TTL的GND相連。(3)模塊的4號針(RXD)同TTL的TXD相連,8號針(TXD)同TTL的RXD相連。 註意:因為有兩根針接一根針的情況,可以考慮加一塊面包板,或直接將模塊的5、7號針短接,1、3號針短接後再連TTL,建議使用面包板。
(3)打開arduinoIDE,輸入下列程序:
/* * 通過醬菜創客控ESP32操作繼電器。 */ #include <ESP8266WiFi.h> WiFiClient client; #define relay1 0 //運行時繼電器連接在8266的GPIO0上,這裏要註意,網上大部分文章,這裏都設置的是2號。 const char *ssid = "hx";//這裏是我手機開的熱點,你使用時修改為你要連接無線路由的ssid const char *password = "12345678";//你的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的工作模式為輸出 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED)//如果連接不能wifi,在0.5秒後再試 { delay(500); } while (!client.connect(host, httpPort))//如果連接不上服務器,就提示連接失敗,0.5秒後再試 { delay(500); } client.write("mode=bind&apikey=XXXXXX&data={ck001000bind}\r\n");//綁定apikey,把XXXXXX修改成你在醬菜創客上的apikey delay(10); } void loop() { while(client.available()) { String line = client.readStringUntil(‘\r‘); if(line[5]==‘3‘ & line[8]==‘0‘ & line[9]==‘1‘)//3是你要控制的設備的 sid,0是nid,1代表是通電 //意思是如果指定的設備的狀態是1,就讓realy1設置為低電平,即讓繼電器通電 { digitalWrite(relay1,LOW); } if(line[5]==‘3‘ & line[8]==‘0‘ & line[9]==‘0‘) //3是你要控制的設備的 sid,0是nid,0代表是斷電,意思是如果指定的設備的狀態是0,就讓realy1設置為高電平,即讓繼電器斷電 { digitalWrite(relay1,HIGH); } } String line =""; m++; if(m%40==0) { client.write("mode=up&apikey=XXXXXX&data={ck003000life}\r\n");//把XXXXXX修改成你自己的apikey m=0; } delay(500); }
代碼中要註意兩點:一是用哪個口來控制繼電器,因為網上大部分程序中都寫的是用GPIO2來控制,我也沒考慮,也是這麽寫的,但最後不成功,無法控制繼電器,最後仔細看說明書,才發現人家寫得很清楚。
這種類型的搭配,是需要使用GPIO0來進行控制的。另一個,網上教程中大都寫高電平觸發繼電器,但通過看說明書發現,這個繼電器是需要用GPIO0口用低電平來觸發的。(汗一個,想當然是不行的,不要怕費事,一定要仔細看說明書)
(4)上傳程序到ESP01模塊。
將USB-TTL和ESP01模塊連接完成後,將USB-TTL插到計算機上,這時,會自動識別出一個串口,如COM3、COM7等,記住這個串口號,在工具中選擇相應的端口號。
然後點擊工具欄的上傳按鈕,開始編譯並上傳,上傳完成後會自動開始燒錄,大約1分鐘後,就會提示上傳成功了。
三、組裝硬件
1、將esp01模塊,插到繼電器上。
2、改造插座。
將插座前邊的開關、指示類全部去除,整平,可以考慮用一張舊會員卡用固態膠粘到插座前邊,做底盤。
3、焊接、連線。
不太會畫線路圖,直接上實物圖吧。
連接步驟:
(1)開關穩壓模塊:將220V的市電焊接到模塊的IN端上,同時在輸出端上各焊一段電線(3CM左右),接到繼電器的VCC、GND端。。
(2)繼電器:將NO端接到插座的火線上。把COM端接到220V市電的火線上。(直接焊到開關穩壓模塊的輸入端就可以)。
(3)插座,把零線直接接到220V市電的零線上。(直接焊到開關穩壓模塊的輸入端就可以)。
四、幾點需註意的問題:
1、這種方案實際上是將ESP01當做MCU來用,不是SOC方案。
2、方案中的繼電器是與ESP01配套使用的,好處是通過繼電器給模塊供電,線路比較簡單,缺點是增加了造價。還有一個問題,因為是將ESP01模塊直接插到了繼電器上,所以浪費了模塊的一個GPIO口。
3、關於直流5V電源的事,這個不一定買,可以拆一個舊充電器。
4、本文中的例程僅能用於醬菜物聯,其它的物聯平臺,需要刷寫固件。
5、USB-TTL轉接口不是必須的,如果手裏有arduion UNO或NANO的板子,也可以用。具體連接方法可以百度。
6、利用ESP01制作智能插座的方法很多,本文也僅是一種個人觀點,不一定是最合適的。
7、在制作過程中,參考了網上多位大神的作品,在此表示感謝。
智能插座的制作(esp01,繼電器,arduino)