0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用ESP模块构建自己的WiFi交换机以及如何控制任何设备

454398 来源:网络整理 作者:网络整理 2019-11-11 16:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:原理图:

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

步骤2:Ubidots设备和变量创建。

a。转到您的Ubidots帐户的“设备”部分,然后创建一个名为“ wifiswitch”的新设备。

b。在您的“ wifiswitch”设备内,创建一个名为“ light”的变量。

步骤3:Ubidots仪表盘和小部件创建。

一个。创建设备和变量后,我们可以创建仪表板和小部件以控制来自Web或移动仪表板的灯光。要创建新的仪表板,请按“数据》仪表板”。然后按加号图标,然后根据需要完成仪表板配置。

b。现在,创建一个控件小部件以设置与变量“ light”关联的灯泡的状态。要创建控件小部件,请选择页面右上方的加号图标。然后按“切换”作为窗口小部件类型,选择所需的变量进行控制,并根据需要完成窗口小部件的配置。

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库,请下载它。现在,单击Sketch –》 Include Library –》 Add .ZIP Library并选择Ubidots ESP8266 MQTT库。

如果上传正确,您将得到响应:“库已添加到库中。”

8。关闭并再次打开Arduino IDE。

步骤5:编程ESP8266:

设置好ESP8266之后,我们就可以开始从Ubidots发布数据和向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 “light” // 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] = {“light”}; // 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(“light”, 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(“light”, 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”以配置条件触发条件。

搜索“ Google助手”服务,然后单击它。

单击“说一个简单的短语”。

完成触发字段中包含您要用来控制灯光,响应和语言的短语,然后单击“创建触发”。

然后,单击“ + that”配置操作。

搜索“ Webhooks”操作服务。

单击“发出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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 交换机
    +关注

    关注

    23

    文章

    2930

    浏览量

    104806
  • WIFI
    +关注

    关注

    82

    文章

    5530

    浏览量

    214352
  • ESP模块
    +关注

    关注

    1

    文章

    3

    浏览量

    6949
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    IDT CPS - 16:一款高性能Serial RapidIO交换机的深度解析

    是一款面向串行RapidIO(sRIO)的交换机,其主要功能是在DSP、处理器、FPGA、其他交换机任何基于sRIO的设备之间路由和分配数据包。它还可用于串
    的头像 发表于 04-12 10:20 402次阅读

    SFP+光模块交换机四种搭配使用方式

    在企业网络部署、数据中心建设都离不开光模块交换机。光模块主要是用来将电信号与光信号进行转换,而交换机则是对光电信号起到转发作用。在众多光模块
    的头像 发表于 02-24 18:01 1701次阅读
    SFP+光<b class='flag-5'>模块</b>与<b class='flag-5'>交换机</b>四种搭配使用方式

    模块交换机:网络中的黄金搭档

    数字经济时代,数据传输效率与稳定性决定网络核心竞争力。光模块交换机作为网络核心硬件,形成“唇齿相依、协同共生”的紧密关联——光模块交换机突破传输限制的“延伸臂膀”,
    的头像 发表于 02-03 09:26 604次阅读

    交换机五种组网方式,彻底了解清楚

    不断的有朋友问到1000路监控点位用什么交换机合适?200路监控如何选择交换机?如何进行组网等?在选择交换机之前,我先要了解项目的组网框架,确实了组网框架,选择相关设备显得更加清楚。
    的头像 发表于 12-17 10:27 1131次阅读
    <b class='flag-5'>交换机</b>五种组网方式,彻底了解清楚

    Amphenol UbiSwitch Compact 11 Port Module:小身材大能量的以太网交换机模块

    Amphenol UbiSwitch Compact 11 Port Module:小身材大能量的以太网交换机模块 在电子设备的海洋中,以太网交换机
    的头像 发表于 12-10 15:05 657次阅读

    工业以太网交换机与商用交换机的技术差异与应用场景分析

    在当今的工业自动化和网络通信领域,交换机作为网络基础设施的核心组件,扮演着至关重要的角色。然而,市场上存在两种主要类型的交换机:工业交换机和普通交换机。本文将详细探讨这两种
    的头像 发表于 09-23 14:33 1054次阅读

    NDR交换机到NDR设备睿海光电光模块短距离连接方案

    NDR交换机到NDR设备睿海光电光模块短距离连接方案
    的头像 发表于 09-20 17:02 546次阅读
    NDR<b class='flag-5'>交换机</b>到NDR<b class='flag-5'>设备</b>睿海光电光<b class='flag-5'>模块</b>短距离连接方案

    ISM交换机使用RSTP协议组环网,环网内最多可以接入多少台交换机呢?

    ISM交换机使用RSTP协议组环网,环网内最多可以接入多少台交换机
    发表于 08-06 07:40

    Is交换机组成的环形网络中,当位于主控节点的Ism网管交换机故障后,为什么环网中其他交换机不受影响?

    当位于主控节点的交换机故障断掉,环网中其他交换机是如何保持正常运行的?或者说什么原理让环网其他交换机不受影响?
    发表于 08-06 06:46

    矿用本安型交换机和普通交换机的区别???

     在矿工老李的记忆里,那个闷热的下午始终挥之不去:监控画面突然中断,井下定位信号消失。当刺耳的警报划破矿区上空时,一切已太迟——1台普通交换机在瓦斯微渗环境中,因电路火花引发了连锁反应。这是血的教训
    的头像 发表于 07-31 12:06 811次阅读

    普通交换机和车载交换机的区别有哪些?怎么选?

    你可能知道 交换机 是一种网络设备,用于在计算机网络中连接多个设备(如计算机、服务器、打印机等),并实现这些设备之间的数据交换。但是不同场景
    的头像 发表于 07-09 15:53 776次阅读
    普通<b class='flag-5'>交换机</b>和车载<b class='flag-5'>交换机</b>的区别有哪些?怎么选?

    什么是工业级交换机?工业交换机作用有哪些?

    重中之重!!!     工业级交换机 是专为工业环境设计的 网络设备 ,主要作用是实现以太网设备的互联,扩大网络覆盖范围。与普通的商业交换机相比,工业级
    的头像 发表于 07-07 16:25 1617次阅读

    认识光模块以及模块交换机通信注意事项

    SFP代表小型可插拔光模块,也被称为mini-gbic(千兆接口转换器)。以太网SFP光模块只是一个小型的模块化收发器,插入到网络交换机或服务器上的SFP端口中。由于其小尺寸设计,SF
    的头像 发表于 06-20 13:42 2593次阅读
    认识光<b class='flag-5'>模块</b><b class='flag-5'>以及</b>光<b class='flag-5'>模块</b>与<b class='flag-5'>交换机</b>通信注意事项

    工业级交换机与企业级交换机:一字之差,天壤之别!

    在当今高度数字化的世界中, 交换机 作为网络通信的核心设备,其重要性不言而喻。然而,面对市场上琳琅满目的交换机产品,许多用户在工业级交换机与企业级
    的头像 发表于 05-29 09:51 1496次阅读
    工业级<b class='flag-5'>交换机</b>与企业级<b class='flag-5'>交换机</b>:一字之差,天壤之别!

    工业交换机与普通交换机的区别:为什么工厂网络宁贵不省?

    在工业4.0和智能制造的浪潮下,工厂的每一台设备、每一处传感器都成了网络中的“神经元”,而连接这些“神经元”的核心设备——工业交换机,却常被忽视。许多人会问:“工业交换机和普通
    的头像 发表于 05-23 17:14 1606次阅读