简易制作智能插座WIFI版--硬件篇
一、前言
最近在网上看到了某家智能插座的结构,大概是下面图片的样子,感觉也不是很复杂,于是自己也想做一个。
由于不会画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版--硬件篇相关推荐
- 智能烧水壶(WIFI版)01——硬件设计篇
一.概述 烧可饮用热水应该是大部分人生活中必不可少的一部分,但往往会发生想喝的时候来不及烧,烧完之后长时间未饮用,水变凉的尴尬情况.这时候如果拥有一款智能恒温烧水壶,可远程控制,支持保温模式还可支持预 ...
- 智能烧水壶(WIFI版)04——TS02N触摸按键驱动篇
前言 本文主要内容是实现烧水壶的触摸按键驱动,触摸按键芯片选用TS02N. 一.智能烧水壶按键功能设定 智能烧水壶的按键功能设定如下,实现功能之前,我们首先要实现按键采集芯片的驱动. 功能 说明 煮沸 ...
- 电脑基础知识精选(硬件篇)
电脑基础知识精选(硬件篇) 电脑基础知识 一.处理器 CPU 二.内存 RAM 三 .硬盘 Disk 四.显卡 GPU 五.主板 Motherboard 六.电源和显示器 七.选配电脑常见问答 八.如 ...
- 魔镜连接本地mysql_打造属于你的树莓派“魔镜”—硬件篇
简介 树莓派魔镜,一面神奇的镜子.第一次接触的时候,首先是被震撼到了,然后就感觉好惊奇.一面看起来普通的镜子,竟然能显示时间/天气/日历/甚至与你进行语音交互,还有人脸识别?!...仿佛置身于科幻电影 ...
- Android 6.0 动态权限实战(一)------ Nexus7二代(WIFI版)4.4升级6.0-附带纯净刷机ROM福利!
最近一直忙于一个百万+客户的app客户端与Android4.4定制车机和车载的系统订单,都好久没有更新博客了, 今天一上来就 给大家发一个福利!哈哈,不要谢我,请叫我雷锋!这个博客我将分1-3篇来介绍 ...
- 十分钟开发物联网:智能加湿器(Wifi版)
智能加湿器设备集成了温湿度传感器.加湿器控制单元.以及Wifi传输模块,ShineBlink万能核心板采集温湿度传感器数据,并将它们上传至机智云,然后我们就可以在远程通过手机App或者Web网页端来访 ...
- Drone-Mercury 从零开始的四轴无人机制作(二)- 硬件与PCB
Drone-Mercury 从零开始的四轴无人机制作(二)- 硬件与PCB 该项目目前还是正在进行的一个状态,Github中提供了现在最新的进度.如果对您有帮助,请点个星星支持一下! Github地址 ...
- 十分钟开发物联网:烟雾感应监测(Wifi版)
智能烟感应监测实现对烟雾的实时监测,并将监测数据通过Wifi上传至机智云,当烟雾量大到一定程度时,同时会向机智云发送一个报警信号.用户也可以用App远程查看本地的烟雾传感数据以及报警状态. 视频教程及 ...
- 机智云赛博坦零代码App开发(Wifi版)
前言 利用机智云提供的赛博坦App开发平台,即使不懂云和App开发,也可以在不用写任何代码的情况下,轻松制作一款拥有专属UI页面的App远程对硬件的访问. 这里我们以一个简单案例<手机App远程 ...
最新文章
- DDR和DDR2的区别
- Linux 安装 TigerVNC
- Erlang(起个中文名:易浪)不能错过的盛宴
- Windows 2008远程桌面多用户登陆的配置方法 - z
- Linux下CMake简明教程(六)动态库和静态库的编译控制
- Linux LXR 网站
- Docker介绍与安装使用(一)
- 进程的切换和系统的一般执行过程
- Linux系统编程之进程间通信
- 8086CPU中14个寄存器的详解
- 程序员的自我修养(收藏)
- pandas(综合测试)
- A Primer on Memory Consistency and Cache Coherence—第五章 Relaxed Memory Model
- < abbr >标签 缩写
- Zbrush学习笔记
- Allegro可供产品包含L、XL和GXL三个级别
- 程序员实习过程中应该掌握的问问题技巧
- 招募法师盗贼开箱游戏java,魔兽世界怀旧服玩家怒问盗贼可免费开箱子,要水却要礼貌或收金?...
- backup exec oracle agent无法验证数据库凭证,通过Backup Exec实施Oracle灾难恢复数据库 -电脑资料...
- [清华集训D1T1][Bzoj 3811][思维+线性基]玛里苟斯