聚丰项目 > 基于AB32VG1智能家居控制器
智能家居给人们的生活带来很多方便,尤其是年轻人更容易接受。随着天猫精灵生态的不断完善,智能家居也不断实用起来,不过不同的平台功能也略有差异,功能互补更能创造出更多更实际的应用。这里利用AB32VG1开发板将天猫精灵的语音控制和贝壳物联的定时功能结合起来实现鱼缸水泵和灯的控制。
jf_65551346
分享jf_65551346
团队成员
jf_65551346 工程师
硬件部分主要包括以下三部分:
(1)主控装置:AB32VG1开发板
(2)贝壳物联平台通信:ESP8266-12F
(3)语音控制装置:天猫精灵
(4)远程控制装置:智能手机
(5)显示装置:显示屏
1.AB32VG1开发板
(1)开发平台:RT-Thread Studio
(2)组态配置
比例阀主要是采用PWM电流驱动,采用闭环控制可以提高控制精度,所以组态配置中使能PWM信号和ADC0通道。此外,在PWM信号上叠加震颤能提高比例阀的动态响应,降低滞环,所以使能了硬件定时器timer。
从说明上看AB32VG1有专门用于连接ESP8266的软件包,但是实际应用中,却无法正常使用,即使下载官方例程也无法编译通过,实在不行,只能自己通过串口程序实现与ESP8266的通信。
(3)主要代码
①MESH网络控制命令
[19:21:14.092]发→◇41 54 2B 4D 45 53 48 31 00 08 F0 B1 00 0D 0A □ //读取 08 输出状态
[19:21:14.162]收←◆F0 00 07 00 08 01 01 01 00 00
[19:21:24.687]发→◇41 54 2B 4D 45 53 48 31 00 09 F0 B1 00 0D 0A □ //读取 09 输出状态
[19:21:25.006]收←◆F0 00 07 00 09 01 00 00 00 01
[19:21:58.619]发→◇41 54 2B 4D 45 53 48 31 00 07 F1 B1 01 0D 0A □ //读取 07 输人状态
[19:21:58.653]收←◆F0 01 07 00 07 01 01 01 01 01
[19:22:07.156]发→◇41 54 2B 4D 45 53 48 31 00 08 F1 B1 01 0D 0A □ //读取 08 输人状态
[19:22:07.209]收←◆F0 01 07 00 08 01 01 01 01 01
[19:22:13.610]发→◇41 54 2B 4D 45 53 48 31 00 09 F1 B1 01 0D 0A □ //读取 09 输人状态
[19:22:13.855]收←◆F0 01 07 00 09 01 01 01 01 01
[19:22:42.803]发→◇41 54 2B 4D 45 53 48 10 00 09 AA B1 E7 05 01 0D 0A □ //设置 09 的 05 脚 输出1状态
②贝壳物联控制命令解析
int main(void)
{
int8_t tims;
Key_Init();
uint8_t pin = rt_pin_get("PE.1");
thread_serial();
thread_serial1();
rt_pin_mode(pin, PIN_MODE_OUTPUT);
rt_kprintf("Hello, world\n");
hwtimer_sample(0,0);
noon=0;
char * str;
while (1)
{
/**/
rt_pin_write(pin, PIN_LOW);
rt_thread_mdelay(500);
rt_pin_write(pin, PIN_HIGH);
rt_thread_mdelay(500);
if(rec_ok==1) //收到命令
{
rec_ok=0;
str=strstr(rec_buf,"{\"M\":\"say\""); //命令指令
if(str!=NULL)
{
str=strstr(rec_buf,"play1"); //运行1
if(str!=NULL)
{
str1[10]={0x06};
str1[11]={0x01};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"play2"); //运行2
if(str!=NULL)
{
str1[10]={0x07};
str1[11]={0x01};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"play3"); //运行3
if(str!=NULL)
{
str1[10]={0x08};
str1[11]={0x01};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"play4"); //运行4
if(str!=NULL)
{
str1[10]={0x09};
str1[11]={0x01};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"play5"); //运行5
if(str!=NULL)
{
str1[10]={0x0A};
str1[11]={0x01};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"stop1"); //停止1
if(str!=NULL)
{
str1[10]={0x06};
str1[11]={0x00};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"stop2"); //停止2
if(str!=NULL)
{
str1[10]={0x07};
str1[11]={0x00};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"stop3"); //停止3
if(str!=NULL)
{
str1[10]={0x08};
str1[11]={0x00};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"stop4"); //停止4
if(str!=NULL)
{
str1[10]={0x09};
str1[11]={0x00};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"stop5"); //停止5
if(str!=NULL)
{
str1[10]={0x0A};
str1[11]={0x00};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
}
}
}