基于stm32的智能家居远程控制系统

项目描述:实现用手机app远程控制,四个房间灯光全开全开,单个灯光的控制,开关门,空调温度模式风速的调节,新设备的添加。

项目方案:整个系统采用zigbee组网,需要搭建一个网关(控制中心)实现与手机app的通信。

网关:网关由主控f103,wifi模块和zigbee模块组成,通过wifi模块接收手机app的指令再通过zigbee模块发送给电器,或者将电器发送的数据反馈给手机app。

zigbee模块接收发送数据通过串口控制,zigbee选择广播模式,别的配置使用默认即可。

 WiFi模块下载MQTT固件,使用AT指令连接EMQX服务器。

1、深度复位:            AT+RESTORE
2、STA模式:             AT+CWMODE=1
3、连接路路由器:         AT+CWJAP="wifiname","password"
4、配置MQTT用户属性:     AT+MQTTUSERCFG=0,1,"ESP8266asdfg","esp8266&X","ba68",0,0,""
5、连接指定 MQTT broker: AT+MQTTCONN=0,"34.214.82.240",1883,0
6、查询MQTT连接状态:     AT+MQTTCONN?
7、订阅emq数据:          AT+MQTTSUB=0,"emq",1
8、发布ESP8266数据ON:    AT+MQTTPUB=0,"ESP8266","LED ON",1,0
9、发布ESP8266数据OFF:   AT+MQTTPUB=0,"ESP8266","LED OFF",1,0

EMQX是免费开源的一个服务器,可能会看到b站或者CSDN上很多连接阿里云的教程,使用这个服务器的主要原因是app端连接阿里云服务器或别的服务器比较麻烦而且没有没有找到合适的教程。可以根据需求选择服务器。

MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧,开放,简单,规范,易于实现。MQTT从诞生之初就是专为低带宽,高延迟或不可靠的网络而设计的。

灯光:LED加光敏传感器。光敏传感器最好买四针的,AO口通过AD采集获取光强再通过PWM调节灯光亮度。

空调:模式显示用oled显示,风速通过pwm改变直流电机转速模拟。

门锁:使用舵机模拟。

新设备添加:当新设备(比如窗帘)上电或复位时,会通过zigbee发送数据0xff(这个数据是自己定义的多少都没关系),网关接收到该信息会向app发出请求,app端出现弹窗,用户选择完后会给该设备分配指令,该设备将接收到的第一个指令作为自己的指令。

                                                        

手机app与网关之间的通信:手机app和网关连接的同一服务器,app订阅网关发布的主题,网关订阅app发布的主题就可以实现通信了。由于传输的数据较多,避免混乱,建议使用JSON数据格式通讯。如{"name":"taoeyhuang","age":18},使用键值对的方式。keil中有解析JSON格式的包,调用API就可以对数据进行解析。

zigbee组网:Zigbee模块调节为广播模式之后,各个模块之间就可以接收到彼此的消息了。为了方便代码管理,定义了自己的数据帧格式。

1房间号:当房间号为全零时,实现对所有区域的某一用电器的控制。当房间号数据为001时,表示客厅,010表示主卧,011表示次卧,100表示厨房。

2家居电器标识:用来标识是哪种家居电器,当该三位数据为001时表示灯光,010表示空调,011表示门锁,100到111表示外加设备。

3家居电器状态标识:不同的家居电器状态的种类不一样,如灯光只有开关状态,空调有制冷制热等多种状态。我们用该三位来标识。当数据位为001时表示灯光门锁和空调的开关状态,010表示空调的六种模式控制,011表示空调的温度设定。

4家居电器的数量:一个房间内可能有多个同样类型的家居电器,该位用来标识一个房间同种的家居电器。例如一个房间有四个灯光分别标识为00,01,10,11。

5家居电器状态对应的具体控制:当家居电器状态标识位为010时,为空调的模式控制,同时当该数据位为001时表示制冷,010表示制热,011表示通风,100表示低风,101表示中风,110表示高风。当家居电器状态标识位为011时,为空调的温度设定,此时,该四位数据表示调节的温度。0000为16℃,1111为32℃。

6开关状态:0表示关,1表示开。

代码实现:

#ifndef _DATA_H_
#define _DATA_H_

typedef struct 
{
	unsigned short int on_off:1;
	unsigned short int state_control:4;
	unsigned short int appliance_num:2;
	unsigned short int mode:3;
	unsigned short int appliance_id:3;
	unsigned short int room_id:3;
}Data;	

typedef  union
{
	unsigned short int all;
	Data data;
}AllData;

typedef enum 
{
	ALLROOM,
	LIVING_ROOM,
	MASTER_BEDROOM,
	GUEST_BEDROOM,
	KITCHEN
}ROOM_ID;

typedef enum 
{
	ALL_APPLIANCE,
	LED,
	AIR_CONDITIONER,
	LOCK,
	PERIPHERAL
}APPLIANCE_ID;

typedef enum 
{
	ALL_STATE,
	OPEN_CLOSE,
	MODE_CONTROL,
	TEMPERATURE,
	WIND_SPEED
}MODE;

typedef enum 
{
	ONE,
	TWO,
	THREE,
	FOUR
}APPLIANCE_NUM;

typedef enum
{
	COLD=1,
	HOOT,
	WIND,
	LOW_SPEED,
	MID_SPEED,
	HIGN_SPEED
}STATE_CONTROL;

typedef enum
{
	CLOSE,
	OPEN	
}ON_OFF;


#endif

 当然这只是给大家提供了一种思路。没有统一的标准也是目前智能家居的一个痛点。

 手机app是使用Android  Studio开发的,界面设计也不是很难,app连接服务器b站也有教程。

 硬件搭建实物图      

app登录及控制界面

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值