此版本的主要組件是一個簡單的繼電器板,可用于切換高達250V AC的電壓和10安培的最大電流:
用于高壓項目的簡單繼電器板。
它將由基于ESP8266的IoT開發板控制,該開發板與Arduino IDE完全兼容。或者,您也可以使用標準的Arduino和ESP8266(或類似的)分線板。
ESP8266。
你只有需要在這些設備之間建立兩個連接。其中一個是接地,另一個是用于切換繼電器的控制線,我選擇連接到開發板的D2(數字引腳2)。
繼電器和MCU需要連接到一個五伏電源,在我的情況下,用一個簡單的直流插孔完成。
除此之外,你還需要一個標準的電源插座,一個IEC插頭,最好是一個帶有接地的插頭。引腳和用于打開和關閉MCU的開關。此外,還需要一個外殼。我選擇使用標準灰色項目框:
使用標準灰色項目框來容納構建。
構建
構建此設備的過程非常簡單。首先在機箱中制作必要的剪切:
在項目框中進行必要的剪切。
創建它們后,你可以安裝組件。大多數組件都會卡入到位。我仍然決定添加熱膠來密封外殼,這樣灰塵就不會輕易進入:
使用膠水確保沒有任何動作,并使盒子不易受灰塵影響。
完成后,是時候連接這些組件和其他電子設備了。我在三根電源線的一側添加了電纜鞋并將它們連接到IEC連接器:
在三根電源線的一側添加電纜鞋并連接到IEC連接器。
可以交換相位和中性線(歐洲的棕色和藍色,美國的黑色/紅色和白色)。然而,地球連接必須在中間。我將相連接到電源插座并將中性線連接到繼電器的COM2端子,然后將繼電器的NO2(常開)端子連接到插座:
將相位連接到電源插座并將中性線連接到COM2端子在將繼電器的NO2(常開)端子連接到插座之前的繼電器。
然后我將必要的電纜添加到DC插頭。它們用于向微控制器和繼電器提供電壓。最后要做的是連接繼電器和MCU,如上所述。然后我將熱縮管添加到關鍵部分以防止短路并測試組件:
將必要的電纜添加到DC插頭。
一旦一切都適合,收起電纜并關閉外殼。
軟件
在MCU上運行的軟件將您連接到無線網絡,并像在Web服務器上一樣接受端口80上的客戶端請求。然后,您可以通過任何Web瀏覽器訪問該設備:
通過任何網絡瀏覽器訪問設備。
我不會討論詳細的代碼,以保持文章簡短。但是,我詳細記錄了源代碼,因此應該很容易理解。它可以在文章末尾找到。
結論
正如你所看到的,它是構建這樣的設備并不是非常困難。大部分工作都是由軟件完成的。雖然這是最基本的方法,但您可以添加傳感器,計時器和其他設備來自動控制連接的設備。此外,如果您計劃在無人看管的情況下使用此設備,我建議添加保險絲。
完整的項目代碼
#include
#define RELAY_PIN D2
const char* ssid = “YOUR_WIFI_NETWORK”;
const char* pass = “YOUR_NETWORKS_PASSWORD”;
WiFiServer server(80);
void setup()
{
Serial.begin(9600);
// You could add an EEPROM to store the last state if the device gets powered off.
// See: https://maker.pro/arduino/tutorial/how-to-permanently-store-data-on-your-arduino
//
// It‘s also possible to store the website and stylesheets/additional scripts on an SD
// card and display the files to a client when they connect.
// See: https://maker.pro/arduino/tutorial/how-to-use-an-sd-card-with-your-arduino
//
// However, this simple example will always start with the relay turned on and a very
// basic HTML page with two buttons.
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH);
// Connect to your local network
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
delay(250);
Serial.print(“Connected to network: ”);
Serial.println(ssid);
// Start the server
// A client will connect to this server to change the state of the relay
server.begin();
Serial.print(“Server started with address: ”);
Serial.print(“http://”);
Serial.print(WiFi.localIP());
Serial.println(“/”);
}
void loop()
{
// Check for incoming connections
WiFiClient client = server.available();
if (!client)
return;
// Wait for the client to send data
while(!client.available())
delay(5);
// Read the first line of the HTTP request
// which will contain something like
// METHOD /requested_url HTTP_VERSION
// for example:
// PUT /dev2?relay=1&state=on HTTP/1.1
// However, for the sake of simplicity this device will
// respond to GET requests so that they can be sent with
// any web browser. Requests to this device will look
// similar to this:
// GET /state=on HTTP/1.1
String request = client.readStringUntil(’ ‘);
client.flush();
int state = 0, error = 0;
// Check, whether the request contains “/state=”
if (request.indexOf(“state=”) != -1)
{
// HIGH and LOW are swapped in this program because my
// relay is turned on when its input pin is pulled LOW.
if(request.indexOf(“state=on”) != -1)
{
digitalWrite(RELAY_PIN, HIGH);
state = LOW;
}
else if (request.indexOf(“state=off”) != -1)
{
digitalWrite(RELAY_PIN, LOW);
state = HIGH;
}
else
{
error = 1;
Serial.print(“Unknown request: ”);
Serial.println(request);
}
}
// Return the response
// If no error occurred, send an HTML page with two buttons
// so that the device can be managed.
// Otherwise, send an error message
if(error == 0)
{
// Return a response header
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
// The HTTP response body is separated from the header by an empty line
// (actually a line containing , but this will work)
client.println(“”);
// Return the response body (an html page)
client.println(“”);
client.println(“”);
client.println(“”);
client.println(“”);
client.println(“”);
client.print(“The relay is turned ”);
client.print(state==HIGH?“on”:“off”);
client.println(“
”);
client.println(“Change state:”);
client.println(“Device on”);
client.println(“Device off”);
client.println(“”);
client.println(“”);
}
else
{
// Return a response header
client.println(“HTTP/1.1 400 Bad Request”);
client.println(“Content-Type: text/html”);
client.println(“”);
client.println(“”);
client.println(“Unknown request parameter supplied!
”);
client.println(“Back to main page”);
client.println(“”);
}
}
-
繼電器
+關注
關注
132文章
5334瀏覽量
148868 -
ESP8266
+關注
關注
50文章
962瀏覽量
44980
發布評論請先 登錄
相關推薦
評論