聚豐項(xiàng)目 > 基于A(yíng)B32VG1智能家居控制器
智能家居給人們的生活帶來(lái)很多方便,尤其是年輕人更容易接受。隨著天貓精靈生態(tài)的不斷完善,智能家居也不斷實(shí)用起來(lái),不過(guò)不同的平臺(tái)功能也略有差異,功能互補(bǔ)更能創(chuàng)造出更多更實(shí)際的應(yīng)用。這里利用AB32VG1開(kāi)發(fā)板將天貓精靈的語(yǔ)音控制和貝殼物聯(lián)的定時(shí)功能結(jié)合起來(lái)實(shí)現(xiàn)魚(yú)缸水泵和燈的控制。
jf_65551346
jf_65551346
團(tuán)隊(duì)成員
jf_65551346 工程師
硬件部分主要包括以下三部分:
(1)主控裝置:AB32VG1開(kāi)發(fā)板
(2)貝殼物聯(lián)平臺(tái)通信:ESP8266-12F
(3)語(yǔ)音控制裝置:天貓精靈
(4)遠(yuǎn)程控制裝置:智能手機(jī)
(5)顯示裝置:顯示屏
1.AB32VG1開(kāi)發(fā)板
(1)開(kāi)發(fā)平臺(tái):RT-Thread Studio
(2)組態(tài)配置
比例閥主要是采用PWM電流驅(qū)動(dòng),采用閉環(huán)控制可以提高控制精度,所以組態(tài)配置中使能PWM信號(hào)和ADC0通道。此外,在PWM信號(hào)上疊加震顫能提高比例閥的動(dòng)態(tài)響應(yīng),降低滯環(huán),所以使能了硬件定時(shí)器timer。
從說(shuō)明上看AB32VG1有專(zhuān)門(mén)用于連接ESP8266的軟件包,但是實(shí)際應(yīng)用中,卻無(wú)法正常使用,即使下載官方例程也無(wú)法編譯通過(guò),實(shí)在不行,只能自己通過(guò)串口程序?qū)崿F(xiàn)與ESP8266的通信。
(3)主要代碼
①MESH網(wǎng)絡(luò)控制命令
[19:21:14.092]發(fā)→◇41 54 2B 4D 45 53 48 31 00 08 F0 B1 00 0D 0A □ //讀取 08 輸出狀態(tài)
[19:21:14.162]收←◆F0 00 07 00 08 01 01 01 00 00
[19:21:24.687]發(fā)→◇41 54 2B 4D 45 53 48 31 00 09 F0 B1 00 0D 0A □ //讀取 09 輸出狀態(tài)
[19:21:25.006]收←◆F0 00 07 00 09 01 00 00 00 01
[19:21:58.619]發(fā)→◇41 54 2B 4D 45 53 48 31 00 07 F1 B1 01 0D 0A □ //讀取 07 輸人狀態(tài)
[19:21:58.653]收←◆F0 01 07 00 07 01 01 01 01 01
[19:22:07.156]發(fā)→◇41 54 2B 4D 45 53 48 31 00 08 F1 B1 01 0D 0A □ //讀取 08 輸人狀態(tài)
[19:22:07.209]收←◆F0 01 07 00 08 01 01 01 01 01
[19:22:13.610]發(fā)→◇41 54 2B 4D 45 53 48 31 00 09 F1 B1 01 0D 0A □ //讀取 09 輸人狀態(tài)
[19:22:13.855]收←◆F0 01 07 00 09 01 01 01 01 01
[19:22:42.803]發(fā)→◇41 54 2B 4D 45 53 48 10 00 09 AA B1 E7 05 01 0D 0A □ //設(shè)置 09 的 05 腳 輸出1狀態(tài)
??
②貝殼物聯(lián)控制命令解析
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"); //運(yùn)行1
if(str!=NULL)
{
str1[10]={0x06};
str1[11]={0x01};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"play2"); //運(yùn)行2
if(str!=NULL)
{
str1[10]={0x07};
str1[11]={0x01};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"play3"); //運(yùn)行3
if(str!=NULL)
{
str1[10]={0x08};
str1[11]={0x01};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"play4"); //運(yùn)行4
if(str!=NULL)
{
str1[10]={0x09};
str1[11]={0x01};
rt_device_write(serial1, 0, str1, (sizeof(str1) - 1));
}
str=strstr(rec_buf,"play5"); //運(yùn)行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));
}
}
}
}