标题:
关于单片机智能家居组网 提出一个结构
[打印本页]
作者:
涛涛啊
时间:
2019-9-3 10:30
标题:
关于单片机智能家居组网 提出一个结构
前几天逛那个宝看到一个433模块,就买回来研究,经过测试,范围在200米以内(测试地点在公司宿舍 ,附近有很多干扰源),数据传输没有问题,然后之前闲着的时候做了一个小玩意,手机app通过手机蓝牙(可以用8266做wiif,公司宿舍没有WiFi就用了蓝牙),控制rgb彩灯,读取温度(18b20),光敏,电路中增加了人体检测,红外开关(类似循迹小车那种 ),还有一个语音识别,播报的模块,用来进行控制交互。
单片机使用15单片机,使用eerom保存温度上下限,实现rgb彩灯的呼吸灯,打算在此基础增加433模块,然后进行一个范围组网,上面说的这个为主机,可以放在有WiFi的地方,然后从机使用433模块与主机进行通讯,手机app通过蓝牙/wiif控制主机,主机在进行从机的控制,有兴趣的可以聊下,现在主机程序已经完成,从机程序简单,打算过几天去打几个板子,有兴趣的可以找我qq150-61-75-1-15
另外附上主机的程序电路下次附上
单片机源程序如下:
#include"stdio.h" //c语言 自带函数 (printf 函数)
#include"DS18b20.h" //温度检测函数头文件
#include"uart.h" //串口头文件
#include"mode.h" //运算符函数
#include"new.h" //eeerom头文件/
#include"adc.h"
#include"pwm.h"
#include<intrins.h> //左移右移函数
#include<string.h> //字符操作函数
#define u8 unsigned char
//串口接收数据缓存数组
extern xdata u8 uart1_shou[uatr];//串口1 接收的数据
extern xdata u8 uart2_shou[uatr];//串口2 接受的数据
extern xdata u8 uart3_shou[uatr];//串口1 接收的数据
extern xdata u8 uart4_shou[uatr];//串口2 接受的数据
extern int mode1;
extern int mode2;
extern int mode3;
extern int mode4;
//温度读取 变量
uint temp1=0; // 18b202温度数据
bit run_18b20=1;//温度报警启动标志位 1启动报警
bit shou_18b20=1;//测试 只发送一次报警
unsigned char ds_18b20num[]={"D00.0"}; //用来保存温度
unsigned char ds_18b20H[]={"D30.5"}; //语音报警上限
unsigned char ds_18b20L[]={"D20.5"}; //语音报警下限
extern unsigned char ADC_nume[7];//光敏数据保存
bit ET0_run=0;
bit cbs=0;//超声波检测 检测人体
//函数声明
void key();//按键控制函数
void ds18b20_num();///温度读取转换成字符函数
void eerom();//eerom上电初始化函数
void main(void)
{
//串口初始化
io_init();//io引脚初始化
Uart1Init();//串口1 初始化
Uart2Init();//串口2 初始化
Uart3Init();//串口3 初始化
Uart4Init();//串口4 初始化
Timer0Init();
eerom();//EEROM操作函数
pwminit();//pwm控制rgb彩灯初始化
PWM_NUM(0,0,0);//RGB彩灯关闭
delay_ms(2000);//延时1秒钟 防止电脑上位机反应不过来
while(1)
{
UART_1();//蓝牙接口 以及上位机通讯使用
UART_2();//语音模块播报使用
UART_3();//备用 可以外接串口
UART_4();
ds18b20_num();//温度读取转换成字符数据
ADC_shou();//检测光敏数据
key();//板载按钮控制
}
}
void ds18b20_num()
{
int wendu_h;//标志位 检测温度是否超过上限
int wendu_l;//标志位 检测温度是否低于下限
ET0 = 0;
tmpchange(); //读取温度
temp1=ds_tmp(); //温度赋值
ET0 = ET0_run;
ds_18b20num[0]='D';
ds_18b20num[1]=(temp1/100)+48; //将温度转换成字符型
ds_18b20num[2]=(temp1/10%10)+48;
ds_18b20num[4]=(temp1%10)+48;
//检测温度值是否大于低于设定的上限下限
wendu_h=strcmp(ds_18b20num,ds_18b20H);
wendu_l=strcmp(ds_18b20num,ds_18b20L);
if(wendu_h>0&&run_18b20&&shou_18b20)//温度大于报警值
{
shou_18b20=0;
UART(2,"play,245,$");//温度上限报警
UART(1,"温度上限报警,当前温度为 ");
shou_18b20=0;
UART(1,ds_18b20num);
UART1_SendLR() ;
UART(1,"温度上限为 ");
UART(1,ds_18b20H);
UART1_SendLR() ;
UART(1,"温度下限为 ");
UART(1,ds_18b20L);
UART1_SendLR() ;
UART(2,"play,070,$");//语音播报 温度上限报警
}
else if(wendu_l<0&&run_18b20&&shou_18b20)//温度低于下限
{
shou_18b20=0;
UART(2,"play,246,$");//温度下限报警
UART(1,"温度下限报警,当前温度为 ");
UART(1,ds_18b20num);
UART1_SendLR() ;
UART(1,"温度上限为 ");
UART(1,ds_18b20H);
UART1_SendLR() ;
UART(1,"温度下限为 ");
UART(1,ds_18b20L);
UART1_SendLR() ;
UART(2,"play,069,$");//语音播报 温度下限报警
}
if(wendu_l>0&&wendu_h<0)//温度在中间 未发生报警值
{
shou_18b20=1;
}
}
void key()//板载按键操作函数
{
if(P24==0)//设置是否为语音唤醒模式
{
if(P55)
{
UART_shouq(2,"PasswordTrigger,1,$","设置成功",2000);
UART(1,"已设置为口令触发\r\n");
}
else
{
UART_shouq(2,"PasswordTrigger,0,$","设置成功",2000);
UART(1,"已取消口令触发\r\n");
}
P55=~P55;
}
if(P25==0)//按键测试程序 按下按键 返回串口接收的数据 并且取反led指示灯
{
UART(1,"A");
UART(1,ADC_nume);
UART1_SendLR();
while(!P25);
}
if(P26==0)//按键测试程序 按下按键 返回串口接收的数据 并且取反led指示灯
{
MOR_DS18B20(0,1);
while(!P26);
}
if(P50==0)
{
LED=~LED;
while(!P50);
}
}
void eerom()
{
unsigned char eerom_shou; //
eerom_shou = IapReadByte(IAP_ADDRESS);//读取一个字节 判断是否为D
if(eerom_shou!='D') //不是D说明 第一次上电 进行数据的初始化
{
IapEraseSector(IAP_ADDRESS);//删除扇区数据 将数据全部写为ff
IapWrite_n(IAP_ADDRESS,ds_18b20H,5);
IapWrite_n(IAP_ADDRESS1,ds_18b20L,5);
}
else//不为D说明不是第一次上电 则读取eerom的数据 进行覆盖
{
IapRead_n(IAP_ADDRESS,ds_18b20H,5);
IapRead_n(IAP_ADDRESS1,ds_18b20L,5);
}
}
复制代码
所有资料51hei提供下载:
断电保存版本.rar
(296.85 KB, 下载次数: 26)
2019-9-3 10:30 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
张先生mrlzw
时间:
2020-12-27 22:04
支持共享!点赞
作者:
嘉雨加
时间:
2021-1-18 21:59
感兴趣 ,资源一起来探讨
作者:
isyido
时间:
2021-7-27 12:30
蓝牙加WIFI应该就能解决所有问题了吧,手机端可以方便链接不需要其它硬件。433感觉又复杂了。
作者:
Martinku
时间:
2022-11-8 08:13
433可以像蓝牙一样通讯传输数据吗,没接触过433的模块,只知道一些遥控用。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1