如图所示,本文主要依靠迪文液晶屏优秀的UI功能,在常规黑白色桌面信息牌的基础上,设计一款智能桌面助理,除了能够信息显示之外,还能拓展功能,例如智能电源、温湿度监测、语音遥控、家庭电器开关无线遥控功能。如上,显示与充电插座采用分体设计,通过连接线连接在一起,更容易DIY使用。 设计资料:(注:dgus工程分辨率为800*480)
拍了段视频,发现论坛上传不了,就发百度云吧。视频中,液晶屏用的4.3寸电阻屏,定位和天气预报要通过迪文云获得,也不知道为啥,星期显示,首页好好地,第二页字符显示就乱了,可能是我屏少了什么文件。 优势: 1.价格优势。液晶屏可以直接在迪文的温控器的基础上进行开发。 2.功能优势。 设计的产品很适合在书桌使用,相比传统的显示牌,用迪文屏的UI功能,界面的显示效果非常好,同时自带的OS系统,也允许我们拓展丰富的外设,即具有了智能家居的特点,配合设计的86盒开关,可以轻易地实现家庭电器开关的的无线控制与语音遥控。 设计有2串18650锂电池作为备用电源,当停电时采用电池供电,正常时220V交流电也会为电池充电。
一.智能桌面信息牌功能设计-人机界面 1.云端、多信息显示、备忘录功能 利用迪文屏的强大的UI功能以及迪文云,对时间、日期、天气预报、温湿度、插座定时通断、语音信号的处理等(实际上,论坛里有朋友分享的电子相册、日历等功能都可以应用到,这里不再赘述) 2.智能电源插座 通过迪文屏的I/O口,依据用户设定的时间数据,智能地对220V的电源插座实现远程、定时控制 3.温湿度监测 采用性能优越的SHT31温湿度模块,该模块采用IIC通信,传感器最大工作范围-40-125℃,0-100%RH,精度为2%RH和0.3℃。
4.无线遥控+语音遥控 SU03T除了串口可以向T5L发送数据,也可以直接通过自带的I/O口输出电平信号。 鉴于拓展外设的目的,这里采用了SU-03T离线语音模块作为无线模块的控制器,即语音模块在收到用户的语音指令时,除了向液晶屏发送数据,也会直接控制灵T3A模块控制家庭电器开关,以减少液晶屏的压力。
5.86型无线开关 在这里采用蜂鸟无线的灵R1模块,可以对应输出灵T3A的控制指令,采用单火线取零方式,直接驱动继电器控制电气。
一:电路原理图
(1)两串锂电池5V充电电路(支持Type-C充电) (2)系统电源电路 (3)传感器电路-在这里,我只使用了四路无线开关,但是通过组合开关的方式,可以得到最多15路无线开关
为了降低个人的开发成本,在这里直接使用迪文的温控器方案,只需要将接近传感器替换成温湿度传感器,将PIO4-PIO7四个端口直接引入继电器
二、主要程序(迪文温控器已经给出的程序不再做罗列)1.使用IIC指令加载温湿度传感器
在这里,使用IIC通过如下程序段即可读取温湿度。 unsigned char a=0; IIC_Start(); delay_ms(5); IIC_Send_Byte(SHT3X_ADRESS_B<<1|write); while(IIC_Wait_Ack()); BUF_Th=IIC_Read_Byte(1); BUF_Tl=IIC_Read_Byte(1); a=IIC_Read_Byte(1); // BUF_Rh=IIC_Read_Byte(1); BUF_Rl=IIC_Read_Byte(1); IIC_Stop(); delay_ms(5);}
BUF_Th、BUF_Tl、BUF_Rh、BUF_Rl分别为温度与湿度数据的高低八位数据,做一次数据转换即可得到我们能用的参数
T=((unsigned long)175*(BUF_Th*256+BUF_Tl))/65535-45; //摄氏度
RH=((unsigned long)100*(BUF_Rh*256+BUF_Rl))/65535;
2.串口2
迪文的温控器已经引出了串口2和PIO4-PIO7,我们这里使用串口2作为语音数据的收发端口。SU-03T允许个人用户对串口数据格式进行设置,同时可以特定条件下出发I/O口(关于语音模块详细的资料,可以邮箱私聊我获取)。为了与迪文保持一致,语音模块的指令数据也配置成5A A5 82/83 XXXX....的格式。
如下,为串口2的收发函数
void UART2_SendStr(u8 *pstr,u8 strlen)%通过液晶屏手动控制电气开关的通断
{
if((NULL == pstr)||(0 == strlen))
{
return;
}
while(strlen--)
{
UART2_Sendbyte(*pstr);
pstr++;
}
}
void UART2_ISR_PC(void) interrupt 4 %使用语音控制时,将语音数据发送给液晶屏,电气开关的通断由语音模块的I/O口直接实现。
{
u8 res=0;
EA=0;
if(RI0==1)
{
res=SBUF0;
Uart2_Rx[uart2_rx_count]=res;
uart2_rx_count++;
RI0=0;
Uart2RxCt = 5;
Uart2_TTL_Status = 12;
}
if(TI0==1)
{
TI0=0;
uart2_busy=0;
}
EA=1;
}
3.I/O口,用于驱动继电器,控制指令来源于液晶屏触控与定时通断
sbit LED1 = P1^1;
sbit LED2 = P1^3;
sbit LED3 = P1^2;
sbit LED4 = P1^4;
void io_init()
{
P1MDOUT |= 0x1E; //初始化P1.1 P1.2 P1.3 P1.4为输出
}
void I_O_scan(void)
{
read_dgus_vp(AC_power1_ADDR,(u8*)&AC_power1,1);
if ( (AC_power1==1)
LED1 =1;
else
{
LED1 =0;
LED1_STOP =1;
}
read_dgus_vp(AC_power2_ADDR,(u8*)&AC_power2,1);
if ( (AC_power2==1)
LED2 =1;
else
{
LED2 =0;
LED2_STOP =1;
}
read_dgus_vp(AC_power3_ADDR,(u8*)&AC_power3,1);
if ( (AC_power3==1)
LED3 =1;
else
{
LED3=0;
LED3_STOP =1;
}
read_dgus_vp(AC_power4_ADDR,(u8*)&AC_power4,1);
if ( (AC_power4==1)
LED4 =1;
else
{
LED4 =0;
LED4_STOP =1;
}
}
4.DGUS显示温湿度数据,数据可以通过软件模拟IIC获得 void Display_DATA(void)
{
// read_dgus_vp(TEMP_DISPLAY,(u8*)&Temperature_old,1);
if (Temperature_SHT3X!=Temperature_Old)
{
Temper_Display_Val=Temperature_SHT3X/10;
Temper_Display_Val_Dec=Temperature_SHT3X%10;
write_dgus_vp(TEMP_DISPLAY_ADDR,(u8*)&Temper_Display_Val,1); write_dgus_vp(TEMP_DISPLAY_DEC_ADDR,(u8*)&Temper_Display_Val_Dec,1);
Temperature_Old=Temperature_SHT3X;
}
//read_dgus_vp(RE_DISPLAY_ADDR,(u8*)&RE_old,1);
if ( RE_SHT3X!=RE_old)
{
RE_Display_Val=RE_SHT3X/10;
RE_Display_Val_Dec=RE_SHT3X%10;
write_dgus_vp(RE_DISPLAY_ADDR,(u8*)&RE_Display_Val,1);
write_dgus_vp(RE_DISPLAY_DEC_ADDR,(u8*)&RE_Display_Val_Dec,1);
RE_old=RE_SHT3X;
}
}
|