步驟1:原理圖:
您可以使用PCBGoGo制造PCB。/p》
步驟2:Ubidots設(shè)備和變量創(chuàng)建。
a。轉(zhuǎn)到您的Ubidots帳戶的“設(shè)備”部分,然后創(chuàng)建一個名為“ wifiswitch”的新設(shè)備。
b。在您的“ wifiswitch”設(shè)備內(nèi),創(chuàng)建一個名為“ light”的變量。
步驟3:Ubidots儀表盤和小部件創(chuàng)建。
一個。創(chuàng)建設(shè)備和變量后,我們可以創(chuàng)建儀表板和小部件以控制來自Web或移動儀表板的燈光。要創(chuàng)建新的儀表板,請按“數(shù)據(jù)》儀表板”。然后按加號圖標,然后根據(jù)需要完成儀表板配置。
b。現(xiàn)在,創(chuàng)建一個控件小部件以設(shè)置與變量“ light”關(guān)聯(lián)的燈泡的狀態(tài)。要創(chuàng)建控件小部件,請選擇頁面右上方的加號圖標。然后按“切換”作為窗口小部件類型,選擇所需的變量進行控制,并根據(jù)需要完成窗口小部件的配置。
c。然后即可開始編程和測試項目。
步驟4:使用Arduino IDE進行編程。
1。如果尚未完成,請下載Arduino IDE。
1a上。打開Arduino IDE,然后選擇文件-》首選項
1b。將以下網(wǎng)址添加到“其他董事會經(jīng)理網(wǎng)址”字段中。您可以使用逗號分隔多個URL。
http://arduino.esp8266.com/stable/package_esp8266.。.
2。在Boards Manager中打開并安裝ESP8266板:工具-》 Board-》 Boards Manager
2a。您可以通過在搜索欄中鍵入“ ESP8266”來輕松找到該板。
3。現(xiàn)在,從工具-》板菜單中選擇通用ESP8266板
4。定義或仔細檢查設(shè)備正在與之通信的PC的端口。轉(zhuǎn)到工具-》端口:-》選擇端口。
4b。通過轉(zhuǎn)到工具-》上傳速度-》 115200
5,確保您的IDE上傳速度為115200。如果尚未下載UbidotsESPMQTT庫,請下載它。現(xiàn)在,單擊Sketch –》 Include Library –》 Add .ZIP Library并選擇Ubidots ESP8266 MQTT庫。
如果上傳正確,您將得到響應(yīng):“庫已添加到庫中。”
8。關(guān)閉并再次打開Arduino IDE。
步驟5:編程ESP8266:
設(shè)置好ESP8266之后,我們就可以開始從Ubidots發(fā)布數(shù)據(jù)和向Ubidots訂購數(shù)據(jù),以控制Wifi開關(guān)。
1.將以下代碼復制并粘貼到Arduino IDE中。不要忘記自定義Wi-Fi SSID和密碼以及您的Ubidots令牌。
2。在此處下載代碼:
/****************************************
* Libraries
****************************************/
#include “UbidotsESPMQTT.h”
/****************************************
* Define constants
****************************************/
#define TOKEN “。..。..。..。..。..。..。..。..。..” // Your Ubidots TOKEN
#define WIFINAME “。..。..。..” //Your SSID
#define WIFIPASS “。..。..。..” // Your Wifi Pass
#define DEVICE_LABEL “wifiswitch” // Name of the device
#define VARIABLE_LABEL1 “l(fā)ight” // Name of the Ubidots variable
const int ERROR_VALUE = 65535; // Error value
const uint8_t NUMBER_OF_VARIABLES = 2; // Cantidad de variables a las que el programa se va a suscribir
char * variable_labels[NUMBER_OF_VARIABLES] = {“l(fā)ight”}; // Variables names
#define luz 0
#define boton 2
int seguro=0;
int ledState = LOW; // the current state of the output pin
int buttonState; // the current reading from the input pin
int lastButtonState = HIGH; // the previous reading from the input pin
int reading;
unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
unsigned long debounceDelay = 50;
float estadoluz; // Variable to be used in the code
float value; // Variable to store input data
uint8_t variable; // To use with the switch case
Ubidots ubiClient(TOKEN);
WiFiClient client;
/****************************************
* Auxiliar functions
****************************************/
void callback(char* topic, byte* payload, unsigned int length) {
char* variable_label = (char *) malloc(sizeof(char) * 30);
get_variable_label_topic(topic, variable_label);
value = btof(payload, length);
set_state(variable_label);
execute_cases();
free(variable_label);
/////////////////Light////////////////////
digitalWrite(luz, estadoluz);
/////////////////Light////////////////////
}
// Parse topic to extract the variable label which changed value
void get_variable_label_topic(char * topic, char * variable_label) {
Serial.print(“topic:”);
Serial.println(topic);
sprintf(variable_label, “”);
for (int i = 0; i 《 NUMBER_OF_VARIABLES; i++) {
char * result_lv = strstr(topic, variable_labels[i]);
if (result_lv != NULL) {
uint8_t len = strlen(result_lv);
char result[100];
uint8_t i = 0;
for (i = 0; i 《 len - 3; i++) {
result[i] = result_lv[i];
}
result[i] = ‘’;
Serial.print(“Label is: ”);
Serial.println(result);
sprintf(variable_label, “%s”, result);
break;
}
}
}
// cast from an array of chars to float value.
float btof(byte * payload, unsigned int length) {
char * demo = (char *) malloc(sizeof(char) * 10);
for (int i = 0; i 《 length; i++) {
demo[i] = payload[i];
}
float value = atof(demo);
free(demo);
return value;
}
// State machine to use switch case
void set_state(char* variable_label) {
variable = 0;
for (uint8_t i = 0; i 《 NUMBER_OF_VARIABLES; i++) {
if (strcmp(variable_label, variable_labels[i]) == 0) {
break;
}
variable++;
}
if (variable 》= NUMBER_OF_VARIABLES) variable = ERROR_VALUE; // Not valid
}
// Function with switch case to determine which variable changed and assigned the value accordingly to the code variable
void execute_cases() {
switch (variable) {
case 0:
estadoluz = value;
Serial.print(“Luz: ”);
Serial.println(estadoluz);
Serial.println();
break;
case ERROR_VALUE:
Serial.println(“error”);
Serial.println();
break;
default:
Serial.println(“default”);
Serial.println();
}
}
/****************************************
* Funcion principal
****************************************/
void setup() {
// put your setup code here, to run once:
pinMode(luz, OUTPUT);
pinMode(boton, INPUT);
ubiClient.ubidotsSetBroker(“industrial.api.ubidots.com”); // Sets the broker properly for the business account
ubiClient.setDebug(true); // Pass a true or false bool value to activate debug messages
Serial.begin(115200);
ubiClient.wifiConnection(WIFINAME, WIFIPASS);
ubiClient.begin(callback);
if(!ubiClient.connected()){
ubiClient.reconnect();
}
char* deviceStatus = getUbidotsDevice(DEVICE_LABEL);
if (strcmp(deviceStatus, “404”) == 0) {
ubiClient.add(“l(fā)ight”, 0); //Insert your variable Labels and the value to be sent
ubiClient.ubidotsPublish(DEVICE_LABEL);
ubiClient.loop();
}
ubiClient.ubidotsSubscribe(DEVICE_LABEL,VARIABLE_LABEL1); //Insert the Device and Variable‘s Labels
Serial.println(variable_labels[1]);
}
void loop() {
// put your main code here, to run repeatedly:
if(!ubiClient.connected()){
ubiClient.reconnect();
ubiClient.ubidotsSubscribe(DEVICE_LABEL,VARIABLE_LABEL1); //Insert the Device and Variable’s Labels
}
ubiClient.loop();
Read();
Debounce();
// save the reading. Next time through the loop, it‘ll be the lastButtonState:
lastButtonState = reading;
}
void Read(){
// read the state of the switch into a local variable:
reading = digitalRead(boton);
if (reading != lastButtonState) {
// reset the debouncing timer
lastDebounceTime = millis();
}
}
void Debounce(){
if ((millis() - lastDebounceTime) 》 debounceDelay) {
// whatever the reading is at, it’s been there for longer than the debounce
// delay, so take it as the actual current state:
// if the button state has changed:
if (reading != buttonState) {
buttonState = reading;
Toggle();
}
}
}
void Toggle(){
// only toggle the LED if the new button state is LOW
if (buttonState == LOW) {
ledState = !ledState;
// set the LED:
digitalWrite(luz, ledState);
ubiClient.add(“l(fā)ight”, ledState); //Insert your variable Labels and the value to be sent
ubiClient.ubidotsPublish(DEVICE_LABEL);
}
}
char* getUbidotsDevice(char* deviceLabel) {
char* data = (char *) malloc(sizeof(char) * 700);
char* response = (char *) malloc(sizeof(char) * 400);
sprintf(data, “GET /api/v1.6/devices/%s/”, deviceLabel);
sprintf(data, “%s HTTP/1.1 ”, data);
sprintf(data, “%sHost: industrial.api.ubidots.com User-Agent:wifiswitch/1.0 ”, data);
sprintf(data, “%sX-Auth-Token: %s Connection: close ”, data, TOKEN);
char* data1 = data;
free(data);
if (client.connect(“industrial.api.ubidots.com”, 80)) {
client.println(data1);
}
else {
free(data);
return “e”;
}
int timeout = 0;
while(!client.available() && timeout 《 5000) {
timeout++;
if (timeout 》= 4999){
free(data);
return “e”;
}
delay(1);
}
int i = 0;
while (client.available()) {
response[i++] = (char)client.read();
if (i 》= 399){
break;
}
}
char * pch;
char * statusCode;
int j = 0;
pch = strtok (response, “ ”);
while (pch != NULL) {
if (j == 1 ) {
statusCode = pch;
}
pch = strtok (NULL, “ ”);
j++;
}
free(response);
return statusCode;
}
步驟6:使用Google助手配置語音命令:
要使用Google Home控制您的“ WiFi交換機”,首先我們需要配置一個稱為IFTTT的中介平臺,將我們的Switch與Google Assistant配對。要正確配置,請按照以下步驟操作。
如果您沒有帳戶,請注冊。
單擊“我的小程序”。
然后,單擊“ New Applet”。
單擊“ + this”以配置條件觸發(fā)條件。
搜索“ Google助手”服務(wù),然后單擊它。
單擊“說一個簡單的短語”。
完成觸發(fā)字段中包含您要用來控制燈光,響應(yīng)和語言的短語,然后單擊“創(chuàng)建觸發(fā)”。
然后,單擊“ + that”配置操作。
搜索“ Webhooks”操作服務(wù)。
單擊“發(fā)出Web請求”
完整的操作字段:
URL ----》 http://things.ubidots.com/api/v1.6/devices/wifisw 。..成為您的Ubidots令牌)
方法----》 POST
內(nèi)容類型----》 application/json
正文----》要打開 {“燈光”:1} ,請關(guān)閉 {“輕”:0}
11。最后,單擊“完成”。
注意:重復所有操作,以正確的Body語句設(shè)置“關(guān)閉燈光”小程序。
步驟7:測試會話:
由于圖中所示,將模塊正確連接到交流電
Line ---》 L
Neutral ---》 N
Light Line‘---》 B
在接線端子SW中添加您喜歡的瞬時按鈕。
識別電源線,中性線和輕型電纜:
進行連接并放置按鈕,擰緊螺釘并進行測試
如果您是視覺學習者,請查看以下視頻教程。您可以找到我精心構(gòu)建的用于構(gòu)建此項目的所有步驟:
步驟8:摘要:
在本指南中,我們剛剛學習了如何建立一個可以通過語音,手機應(yīng)用程序或PC進行Internet控制的WiFi開關(guān),讓您控制臥室或其他任何地方的燈泡。該設(shè)備基于ESP8266 WiFi模塊工作,該模塊是一個很小的模塊,可讓項目輕松上線。而且該設(shè)備可用于控制許多不同的設(shè)備,例如風扇,電機,窗簾,燈,LED燈條等。
責任編輯:wv
-
交換機
+關(guān)注
關(guān)注
21文章
2624瀏覽量
99273 -
WIFI
+關(guān)注
關(guān)注
81文章
5289瀏覽量
203309 -
ESP模塊
+關(guān)注
關(guān)注
1文章
3瀏覽量
6789
發(fā)布評論請先 登錄
相關(guān)推薦
評論