一、前言

最近在网上看到了某家智能插座的结构,大概是下面图片的样子,感觉也不是很复杂,于是自己也想做一个。

由于不会画PCB,只能找模块草草地设计一个,原理图如下:
OK,可以开始在某宝上选择对应的模块了。

二、准备环境

(一)、硬件环境:
1. WIFI继电器模块(含wifi模块)
2. AC转DC模块(220V转5V)
3. 普通插座

(二) 软件环境:
1. arduino IDE
2. 必要的库:
(1) arduino json库:https://www.ardu-badge.com/ArduinoJson/6.10.1
(2) arduino mqtt库:https://github.com/knolleary/pubsubclient

三、实施步骤

第一步: 把插座拆开,准确来说下面这个是插头转换器

如果选的这种,拆开可能是最难的一步了,虽然背部有螺丝孔,楼主拿到的不是十字,也不是一字,孔径很长,最后用的工具切开插座盖板,比较丑就不上图了。。

第二步: 接线

按照上面的原理图接好线后,样子大概如下:

这是体育老师教的焊接

第三步: 烧录代码

代码比较简单,先连接wifi、mqtt服务器,订阅指定的消息后轮循判断wifi,服务器连接是否断开并重连(封装在库里),按照json格式解析接收到消息,向GPIO0 发送对应的高/低电平信号控制插座通/断电,具体代码如下:

#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include "EspMQTTClient.h"
#define Pin 0
/*******************STA模式**********************/
//设置STA网络参数,静态IP(按照自己的网段填写)
IPAddress staticIP(192, 168, 43, 199); //本地静态IP
IPAddress gateway(192, 168, 43, 1); //本地网关
IPAddress subnet(255, 255, 255, 0); //本地子网掩码//设置STA连接热点
const char *ssid = "meizu";  //填写自己的WiFi名
const char *password =  "ljd1234567";  //填写自己的WiFi密码/*****************MQTT服务器*******************/
const char *MQTTBroker = "j8home.cn";  //可以更换为其他开源的MQTT服务器
const int brokerPort = 1883;
const char *MQTTUsername = "admin";    //不限制,可以是任意用户名
const char *MQTTPassword = "admin";    //不限制,可以是任意密码
const char *ClientName = "TestClient";    //不限制,可以是任意客户端名
const char *subTopic = "v1/devices/me/relay1";    WiFiClient Client;
bool first_set = false;EspMQTTClient client(ssid,  //wifi ssidpassword,  //wifi passwdMQTTBroker,  // MQTT Broker server ipMQTTUsername,   // Can be omitted if not neededMQTTPassword,   // Can be omitted if not neededClientName,     // Client name that uniquely identify your devicebrokerPort     // The MQTT port, default to 1883.
);int status = WL_IDLE_STATUS;   //保存wifi状态
char recv_data[1024];   //存入服务器下发的数据void connect_wifi(); //wifi初始化
void analy_recv_data(char *msg, int len);  //解析服务器数据void setup() {Serial.begin(115200);         //波特率为9600 pinMode(Pin, OUTPUT);   //初始化控制引脚connect_wifi();          // 连接WiFifirst_set = true;client.enableDebuggingMessages(); // Enable debugging messages sent to serial output
}void loop() {status = WiFi.status();    //获取wifi状态if ( status != WL_CONNECTED) {connect_wifi();}client.loop();
}/****************************MQTT订阅函数
****************************/
void onConnectionEstablished()
{//订阅消息client.subscribe(subTopic, [](const String & payload) {char cArr[payload.length() + 1];payload.toCharArray(cArr, payload.length() + 1);analy_recv_data(cArr);});//发布消息client.executeDelayed(5 * 1000, []() {client.publish("mytopic/test", "This is a message sent 5 seconds later");});
}/****************************WIFI软串口通信初始化函数
****************************/
void connect_wifi()
{WiFi.begin(ssid, password);if(!first_set)WiFi.config(staticIP, gateway, subnet);Serial.print("Is connecting routing,please wait");while (WiFi.status() != WL_CONNECTED) //等待连接路由{delay(500);Serial.print(". ");}Serial.println("");Serial.println("WiFi connected!");Serial.print("IP address: ");Serial.println(WiFi.localIP());
}/*****************************分析tcp数据
****************************/
void analy_recv_data(char *msg) {StaticJsonDocument<200> doc;DeserializationError error = deserializeJson(doc, msg);// 判断是否解析成功if (error) {Serial.print(F("deserializeJson() failed: "));Serial.println(error.c_str());return;}//开始获得每个对象char id = doc["id"];char  status = doc["status"];char data[2];data[0] = id;data[1] = status;for (int data_i = 0; data_i < 2; data_i++) {Serial.write(data[data_i]);  //向串口发送读取的每个字节}if (id == 1) {if (status == 1) {digitalWrite(Pin, HIGH);//开delay(200);} else if (status == 0) {digitalWrite(Pin, LOW);//开delay(200);}}
}

下一篇:https://blog.csdn.net/qq_34472145/article/details/94572774

简易制作智能插座WIFI版--硬件篇相关推荐

  1. 智能烧水壶(WIFI版)01——硬件设计篇

    一.概述 烧可饮用热水应该是大部分人生活中必不可少的一部分,但往往会发生想喝的时候来不及烧,烧完之后长时间未饮用,水变凉的尴尬情况.这时候如果拥有一款智能恒温烧水壶,可远程控制,支持保温模式还可支持预 ...

  2. 智能烧水壶(WIFI版)04——TS02N触摸按键驱动篇

    前言 本文主要内容是实现烧水壶的触摸按键驱动,触摸按键芯片选用TS02N. 一.智能烧水壶按键功能设定 智能烧水壶的按键功能设定如下,实现功能之前,我们首先要实现按键采集芯片的驱动. 功能 说明 煮沸 ...

  3. 电脑基础知识精选(硬件篇)

    电脑基础知识精选(硬件篇) 电脑基础知识 一.处理器 CPU 二.内存 RAM 三 .硬盘 Disk 四.显卡 GPU 五.主板 Motherboard 六.电源和显示器 七.选配电脑常见问答 八.如 ...

  4. 魔镜连接本地mysql_打造属于你的树莓派“魔镜”—硬件篇

    简介 树莓派魔镜,一面神奇的镜子.第一次接触的时候,首先是被震撼到了,然后就感觉好惊奇.一面看起来普通的镜子,竟然能显示时间/天气/日历/甚至与你进行语音交互,还有人脸识别?!...仿佛置身于科幻电影 ...

  5. Android 6.0 动态权限实战(一)------ Nexus7二代(WIFI版)4.4升级6.0-附带纯净刷机ROM福利!

    最近一直忙于一个百万+客户的app客户端与Android4.4定制车机和车载的系统订单,都好久没有更新博客了, 今天一上来就 给大家发一个福利!哈哈,不要谢我,请叫我雷锋!这个博客我将分1-3篇来介绍 ...

  6. 十分钟开发物联网:智能加湿器(Wifi版)

    智能加湿器设备集成了温湿度传感器.加湿器控制单元.以及Wifi传输模块,ShineBlink万能核心板采集温湿度传感器数据,并将它们上传至机智云,然后我们就可以在远程通过手机App或者Web网页端来访 ...

  7. Drone-Mercury 从零开始的四轴无人机制作(二)- 硬件与PCB

    Drone-Mercury 从零开始的四轴无人机制作(二)- 硬件与PCB 该项目目前还是正在进行的一个状态,Github中提供了现在最新的进度.如果对您有帮助,请点个星星支持一下! Github地址 ...

  8. 十分钟开发物联网:烟雾感应监测(Wifi版)

    智能烟感应监测实现对烟雾的实时监测,并将监测数据通过Wifi上传至机智云,当烟雾量大到一定程度时,同时会向机智云发送一个报警信号.用户也可以用App远程查看本地的烟雾传感数据以及报警状态. 视频教程及 ...

  9. 机智云赛博坦零代码App开发(Wifi版)

    前言 利用机智云提供的赛博坦App开发平台,即使不懂云和App开发,也可以在不用写任何代码的情况下,轻松制作一款拥有专属UI页面的App远程对硬件的访问. 这里我们以一个简单案例<手机App远程 ...

最新文章

  1. DDR和DDR2的区别
  2. Linux 安装 TigerVNC
  3. Erlang(起个中文名:易浪)不能错过的盛宴
  4. Windows 2008远程桌面多用户登陆的配置方法 - z
  5. Linux下CMake简明教程(六)动态库和静态库的编译控制
  6. Linux LXR 网站
  7. Docker介绍与安装使用(一)
  8. 进程的切换和系统的一般执行过程
  9. Linux系统编程之进程间通信
  10. 8086CPU中14个寄存器的详解
  11. 程序员的自我修养(收藏)
  12. pandas(综合测试)
  13. A Primer on Memory Consistency and Cache Coherence—第五章 Relaxed Memory Model
  14. < abbr >标签 缩写
  15. Zbrush学习笔记
  16. Allegro可供产品包含L、XL和GXL三个级别
  17. 程序员实习过程中应该掌握的问问题技巧
  18. 招募法师盗贼开箱游戏java,魔兽世界怀旧服玩家怒问盗贼可免费开箱子,要水却要礼貌或收金?...
  19. backup exec oracle agent无法验证数据库凭证,通过Backup Exec实施Oracle灾难恢复数据库 -电脑资料...
  20. [清华集训D1T1][Bzoj 3811][思维+线性基]玛里苟斯

热门文章

  1. python怎么加油_使用 Python 为你的油箱加油
  2. 关于尔雅平台通识课《创业创新执行力》的考试方法与考试须知
  3. MySQL数据库性能优化(享学课堂听课笔记)
  4. 信用评分卡 (part 5 of 7)
  5. 如何用大学生身份申请GitHub学生包,免费使用github copilot
  6. Java中将字符串用空格分割成字符串数组的split方法
  7. Composer私有仓库建设与开发入门
  8. 熔断器-hystrix使用
  9. 【转】【2020】ACM在线模版(强烈推荐~)
  10. Linux安装Microsoft Windows Fonts微软字体库