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

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

3天內不再提示

如何使用ESP模塊構建自己的WiFi交換機以及如何控制任何設備

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-11 16:20 ? 次閱讀

步驟1:原理圖:

您可以使用PCBGoGo制造PCB。/p》

步驟2:Ubidots設備和變量創(chuàng)建。

a。轉到您的Ubidots帳戶的“設備”部分,然后創(chuàng)建一個名為“ wifiswitch”的新設備。

b。在您的“ wifiswitch”設備內,創(chuàng)建一個名為“ light”的變量。

步驟3:Ubidots儀表盤和小部件創(chuàng)建。

一個。創(chuàng)建設備和變量后,我們可以創(chuàng)建儀表板和小部件以控制來自Web或移動儀表板的燈光。要創(chuàng)建新的儀表板,請按“數據》儀表板”。然后按加號圖標,然后根據需要完成儀表板配置。

b。現在,創(chuàng)建一個控件小部件以設置與變量“ light”關聯(lián)的燈泡的狀態(tài)。要創(chuàng)建控件小部件,請選擇頁面右上方的加號圖標。然后按“切換”作為窗口小部件類型,選擇所需的變量進行控制,并根據需要完成窗口小部件的配置。

c。然后即可開始編程和測試項目。

步驟4:使用Arduino IDE進行編程。

1。如果尚未完成,請下載Arduino IDE。

1a上。打開Arduino IDE,然后選擇文件-》首選項

1b。將以下網址添加到“其他董事會經理網址”字段中。您可以使用逗號分隔多個URL。

http://arduino.esp8266.com/stable/package_esp8266.。.

2。在Boards Manager中打開并安裝ESP8266板:工具-》 Board-》 Boards Manager

2a。您可以通過在搜索欄中鍵入“ ESP8266”來輕松找到該板。

3。現在,從工具-》板菜單中選擇通用ESP8266板

4。定義或仔細檢查設備正在與之通信的PC的端口。轉到工具-》端口:-》選擇端口。

4b。通過轉到工具-》上傳速度-》 115200

5,確保您的IDE上傳速度為115200。如果尚未下載UbidotsESPMQTT庫,請下載它?,F在,單擊Sketch –》 Include Library –》 Add .ZIP Library并選擇Ubidots ESP8266 MQTT庫。

如果上傳正確,您將得到響應:“庫已添加到庫中。”

8。關閉并再次打開Arduino IDE。

步驟5:編程ESP8266:

設置好ESP8266之后,我們就可以開始從Ubidots發(fā)布數據和向Ubidots訂購數據,以控制Wifi開關。

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助手”服務,然后單擊它。

單擊“說一個簡單的短語”。

完成觸發(fā)字段中包含您要用來控制燈光,響應和語言的短語,然后單擊“創(chuàng)建觸發(fā)”。

然后,單擊“ + that”配置操作。

搜索“ Webhooks”操作服務。

單擊“發(fā)出Web請求”

完整的操作字段:

URL ----》 http://things.ubidots.com/api/v1.6/devices/wifisw 。..成為您的Ubidots令牌)

方法----》 POST

內容類型----》 application/json

正文----》要打開 {“燈光”:1} ,請關閉 {“輕”:0}

11。最后,單擊“完成”。

注意:重復所有操作,以正確的Body語句設置“關閉燈光”小程序。

步驟7:測試會話:

由于圖中所示,將模塊正確連接到交流電

Line ---》 L

Neutral ---》 N

Light Line‘---》 B

接線端子SW中添加您喜歡的瞬時按鈕。

識別電源線,中性線和輕型電纜:

進行連接并放置按鈕,擰緊螺釘并進行測試

如果您是視覺學習者,請查看以下視頻教程。您可以找到我精心構建的用于構建此項目的所有步驟:

步驟8:摘要:

在本指南中,我們剛剛學習了如何建立一個可以通過語音,手機應用程序或PC進行Internet控制的WiFi開關,讓您控制臥室或其他任何地方的燈泡。該設備基于ESP8266 WiFi模塊工作,該模塊是一個很小的模塊,可讓項目輕松上線。而且該設備可用于控制許多不同的設備,例如風扇,電機,窗簾,燈,LED燈條等。

責任編輯:wv

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

    關注

    20

    文章

    2602

    瀏覽量

    98903
  • WIFI
    +關注

    關注

    81

    文章

    5272

    瀏覽量

    202819
  • ESP模塊
    +關注

    關注

    1

    文章

    3

    瀏覽量

    6785
收藏 人收藏

    評論

    相關推薦

    如何將ESP用作Internet交換機

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

    交換機怎么配置IP地址

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

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

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

    光纖交換機和網絡交換機的區(qū)別在哪

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

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

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

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

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

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

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

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

    的 MAC 地址進行數據的無沖突傳輸,提高了網絡傳輸的效率和穩(wěn)定性。本文將詳細介紹交換機的作用、功能以及基本配置。 一、交換機的作用與功能 數據的轉發(fā)與交換
    的頭像 發(fā)表于 02-04 09:17 ?1.4w次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

    到底什么是交換機?交換機接口大揭秘

    交換機是一種用于電(光)信號轉發(fā)的網絡設備,可以為接入交換機的任意兩個網絡節(jié)點提供獨享的電信號通路。
    的頭像 發(fā)表于 11-06 09:33 ?1334次閱讀