把一个废柴插座转眼变身远程控制智能插座-Arduino-MQTT-Onenet-8266

2024-02-12 21:59

本文主要是介绍把一个废柴插座转眼变身远程控制智能插座-Arduino-MQTT-Onenet-8266,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

该项目主要基于Arduino D1 mini(wemos)模块和MQTT协议和移动Onenet物联网云平台实现远程控制

1、选插座一定要选择这种花里胡哨,内部空间大的,这样便于后期改造

2、线路改造,可以看到进来两根线一根线经过开关,结构简单粗暴,便于改造
在这里插入图片描述

3、寻找合适的安装位置,我这里放了两个3.3V的一路继电器,和一个Arduino D1 MINI这种某宝一大堆,(本来准备把那个四路遥控器也安装上去,但是无奈这个信号输出是5V的所以不能用,用三极管改造一上午居然还给我搞坏了,气死直接丢垃圾桶)
在这里插入图片描述
在这里插入图片描述
图中画圈区域就是改造区域,选用这个接线板的好处就是板载自带5V电源,所以就不需要自己再接220VAC转5V模块了,直接上电测出5V电源连接到Arduino上的5V个GND即可,完成本项目所需的电源供应。因为没用到四路遥控模块所以这里连线非常简单,就是继电器信号线连接到D1和D2上即可。

4、打上热熔胶,固定住元器件,(注意:热熔胶在高温下是导电的,如果你的插座比较好或者后期要用到大功率电器上,那么尽量别用热熔胶,选用其它胶水比如502这种),编写程序,烧写代码,把螺丝拧上即可。
5、测试——效果完美,达到预期效果
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
代码:在这里插入代码片
由于部分代码涉及隐私信息已用XXXXX代替,写程序的时候注意修改即可
/*
Name: smartchazuo.ino
Created: 2019/12/2 17:26:00
Author: 60480
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
#include <Ticker.h>
#include <PubSubClient.h>
#define DebugSerial Serial

#define JDQ1Pin D1
#define JDQ2Pin D2
#define BZLED D4 //D1mini是D4
ESP8266WiFiMulti WiFiMulti;
Ticker ticker1;
WiFiClient espClient;
PubSubClient PSClient(espClient);
const char* mqtt_server = “183.230.40.39”;
const char* DeviceID = “xxxxxx”;//设备ID
const char* ProductID = “xxxxxx”;//产品ID
const char* AuthInfo = “xxxxxx”;//鉴权信息
long lastMsg = 0;
char msg[100];
char tmp[100];
char d[3];
void setup() {
DebugSerial.begin(115200);
PSClient.setServer(mqtt_server, 6002);
PSClient.setCallback(callback);
WiFi.mode(WIFI_STA);
WiFiMulti.addAP("********", "**************");//WIFI账号密码
pinMode(BZLED, OUTPUT);
pinMode(JDQ1Pin, OUTPUT);
pinMode(JDQ2Pin, OUTPUT);
setup_wifi();
ticker1.attach(5, pubtoOnenet);//每隔发送数据到MQTT平台
}
void loop() {
if (!PSClient.connected()) {
reconnect();
}
PSClient.loop();
}
//WIFI相关
void setup_wifi() {
unsigned long startTime = millis();
while (WiFiMulti.run() != WL_CONNECTED && millis() - startTime < 10000) {
digitalWrite(BZLED, HIGH);
delay(50);
digitalWrite(BZLED, LOW);
delay(50);
}
digitalWrite(BZLED, LOW);
}
void wificonncheck() {
// 检查连接状态
if (WiFi.status() == WL_CONNECTED)
{ //如果WiFi连接成功
digitalWrite(BZLED, LOW);
}
else
{ //WiFi连接不成功
digitalWrite(BZLED, HIGH);
setup_wifi();
}
}
//MQTT相关
void callback(char
topic, byte
payload, unsigned int length) {
if (payload[0] == ‘1’) {
if (payload[1] == ‘1’) {
digitalWrite(JDQ1Pin, LOW);
}
else
{
digitalWrite(JDQ1Pin, HIGH);
}
}
else if(payload[0]==‘2’)
{
if (payload[1] == ‘1’) {
digitalWrite(JDQ2Pin, LOW);
}
else
{
digitalWrite(JDQ2Pin, HIGH);
}
}
}
void pubtoOnenet() {
wificonncheck();//WIFI状态检测

snprintf(tmp, sizeof(tmp), "{\"JDQ1State\":1%d,\"JDQ2State\":2%d}", !digitalRead(JDQ1Pin),!digitalRead(JDQ2Pin));
uint16_t streamLen = strlen(tmp);
d[0] = '\x03';
d[1] = (streamLen >> 8);
d[2] = (streamLen & 0xFF);
snprintf(msg, sizeof(msg), "%c%c%c%s", d[0], d[1], d[2], tmp);
PSClient.publish("$dp", (uint8_t*)msg, streamLen + 3, false); //上传onenet云的语句

}
void reconnect() {
while (!PSClient.connected()) {
Serial.print(“Attempting MQTT connection…”);
// Attempt to connect

	if (PSClient.connect("xxxxxx", "xxxxxx", "xxxxxx")) {//设备ID;产品ID;鉴权信息Serial.println("connected");PSClient.subscribe("inTopic");}else {Serial.print("failed, 重连中...");Serial.print(PSClient.state());Serial.println(" try again in 5 seconds");// Wait 5 seconds before retryingdelay(5000);}
}

}

这篇关于把一个废柴插座转眼变身远程控制智能插座-Arduino-MQTT-Onenet-8266的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703711

相关文章

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth