精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用ESP模塊構(gòu)建自己的WiFi交換機以及如何控制任何設(shè)備

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-11 16:20 ? 次閱讀

步驟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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 交換機
    +關(guān)注

    關(guān)注

    21

    文章

    2624

    瀏覽量

    99273
  • WIFI
    +關(guān)注

    關(guān)注

    81

    文章

    5289

    瀏覽量

    203309
  • ESP模塊
    +關(guān)注

    關(guān)注

    1

    文章

    3

    瀏覽量

    6789
收藏 人收藏

    評論

    相關(guān)推薦

    交換機的工作原理是什么?3類交換機故障詳解

    )的工作原理交換機和網(wǎng)橋一樣,是工作在鏈路層的聯(lián)網(wǎng)設(shè)備,它的各個端口都具有橋接功能,每個端口可以連接一個LAN或一臺高性能網(wǎng)站或服務(wù)器,能夠通過自學習來了解每個端口的設(shè)備連接情況。所有端口由專用處理器進行
    的頭像 發(fā)表于 11-05 10:12 ?134次閱讀

    如何將ESP用作Internet交換機

    有一個 esp 代碼可以在 NAT 路由器中轉(zhuǎn)換它。有沒有辦法將 AP 和 STA 接口僅用作兩個交換機端口?我想使用路由器的dhcp服務(wù)器,所有設(shè)備都必須連接到同一個子網(wǎng)上。
    發(fā)表于 07-10 07:24

    交換機怎么配置IP地址

      在構(gòu)建和管理網(wǎng)絡(luò)架構(gòu)中,交換機作為核心設(shè)備之一,其IP地址的配置是確保網(wǎng)絡(luò)正常運行的重要步驟。正確配置交換機的IP地址,可以使得網(wǎng)絡(luò)設(shè)備
    的頭像 發(fā)表于 06-06 11:16 ?1.1w次閱讀

    廣域網(wǎng)交換機與局域網(wǎng)交換機的區(qū)別

      在構(gòu)建和管理網(wǎng)絡(luò)架構(gòu)時,交換機作為核心設(shè)備,其選擇和配置直接影響到網(wǎng)絡(luò)的性能、可靠性和安全性。廣域網(wǎng)交換機和局域網(wǎng)交換機作為兩種不同類型
    的頭像 發(fā)表于 06-06 11:07 ?954次閱讀

    光纖交換機和網(wǎng)絡(luò)交換機的區(qū)別在哪

    光纖交換機和網(wǎng)絡(luò)交換機是兩種不同類型的網(wǎng)絡(luò)設(shè)備,它們在數(shù)據(jù)傳輸介質(zhì)、傳輸速率、應(yīng)用場景以及設(shè)計上有所區(qū)別。
    的頭像 發(fā)表于 05-28 15:16 ?2045次閱讀

    帶光口的交換機和插光模塊交換機有什么區(qū)別?

    帶光口的交換機和插光模塊交換機在功能上有一定的相似性,但它們在設(shè)計、用途和性能方面存在一些關(guān)鍵的區(qū)別。
    的頭像 發(fā)表于 05-28 14:59 ?2099次閱讀

    POE交換機是什么?POE交換機的特點

    ,還能為此類設(shè)備提供直流電的技術(shù)。這種交換機包含網(wǎng)絡(luò)交換機和PoE供電兩個功能,是PoE供電系統(tǒng)中比較常見的供電設(shè)備。 POE交換機端口支持
    的頭像 發(fā)表于 04-17 14:48 ?1631次閱讀

    什么是交換機堆疊?有哪些設(shè)備可以堆疊?如何建立堆疊?

    。 在交換機堆疊中,有兩種常見的連接方式:物理堆疊和邏輯堆疊。物理堆疊是通過專用的堆疊模塊和堆疊線纜將多個交換機直接連接在一起。邏輯堆疊是通過軟件來實現(xiàn),將多個獨立的交換機虛擬成一個邏
    的頭像 發(fā)表于 02-04 11:21 ?1670次閱讀

    交換機的作用與功能 交換機的基本配置

    的 MAC 地址進行數(shù)據(jù)的無沖突傳輸,提高了網(wǎng)絡(luò)傳輸?shù)男屎头€(wěn)定性。本文將詳細介紹交換機的作用、功能以及基本配置。 一、交換機的作用與功能 數(shù)據(jù)的轉(zhuǎn)發(fā)與交換
    的頭像 發(fā)表于 02-04 09:17 ?1.6w次閱讀

    匯聚交換機和核心交換機區(qū)別

    交換機的區(qū)別。 一、定義和作用 匯聚交換機:匯聚交換機是部署在網(wǎng)絡(luò)邊緣的設(shè)備,主要用于連接用戶設(shè)備(例如電腦、服務(wù)器、IP電話等)與核心
    的頭像 發(fā)表于 01-22 14:32 ?4129次閱讀

    管理型交換機 vs. 非管理型交換機

    構(gòu)建復雜的網(wǎng)絡(luò)中,選擇適當?shù)?b class='flag-5'>交換機類型很重要。管理型交換機作為智能網(wǎng)絡(luò)的掌舵者,與非管理型交換機相比,為網(wǎng)絡(luò)管理提供了更多的靈活性和可控性。本文將深入了解管理型和非管理型
    的頭像 發(fā)表于 12-25 17:59 ?1222次閱讀
    管理型<b class='flag-5'>交換機</b> vs. 非管理型<b class='flag-5'>交換機</b>

    交換機堆疊是什么意思?交換機堆疊的作用

    模塊和堆疊電纜進行連接。可堆疊的交換機性能指標中有一個“最大可堆疊數(shù)”的參數(shù),它是指一個堆疊單元中所能堆疊的最大交換機數(shù),代表一個堆疊單元中所能提供的最大端口密度。 交換機堆疊的作用主
    的頭像 發(fā)表于 12-15 17:39 ?3176次閱讀

    工業(yè)交換機的組網(wǎng)方式有哪些?

    工業(yè)交換機也稱作工業(yè)以太網(wǎng)交換機,即應(yīng)用于工業(yè)控制領(lǐng)域的以太網(wǎng)交換機設(shè)備,由于采用的網(wǎng)絡(luò)標準,其開放性好、應(yīng)用廣泛以及價格低廉、使用的是透明
    的頭像 發(fā)表于 12-15 15:42 ?505次閱讀

    核心交換機和普通交換機的區(qū)別?

    的區(qū)別,并探討它們在網(wǎng)絡(luò)架構(gòu)中的不同作用。 首先,核心交換機是網(wǎng)絡(luò)中的主干設(shè)備,負責連接整個網(wǎng)絡(luò)的各個子網(wǎng)和不同的網(wǎng)絡(luò)節(jié)點。它通常具有更高的速度和處理能力,以保障整個網(wǎng)絡(luò)的高性能和高可用性。普通交換機則是用于連接終端
    的頭像 發(fā)表于 12-07 14:39 ?1666次閱讀

    網(wǎng)管型交換機是什么?網(wǎng)管型交換機和非網(wǎng)管型交換機的區(qū)別

    網(wǎng)管型交換機是一種網(wǎng)絡(luò)設(shè)備,其任務(wù)是使所有的網(wǎng)絡(luò)資源處于良好的狀態(tài)。這類交換機產(chǎn)品提供了基于終端控制口(Console)、基于Web頁面以及
    的頭像 發(fā)表于 12-04 16:57 ?2183次閱讀