把一个废柴插座转眼变身远程控制智能插座-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

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品