聚豐項目 > 基于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));
}
}
}
}