中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

家政服務(wù) 技術(shù)支持 東莞網(wǎng)站建設(shè)真正的免費建站在這里

家政服務(wù) 技術(shù)支持 東莞網(wǎng)站建設(shè),真正的免費建站在這里,wordpress 加載陌生,泉州最好的網(wǎng)站建設(shè)公司目錄 一、智能家居項目框架設(shè)計草圖 二、框架代碼文件工程建立 三、添加聲音識別模塊的串口讀取功能 一、智能家居項目框架設(shè)計草圖 代碼思路講解: 1、一個指令工廠,一個控制工廠,實際上就是通過鏈表鏈起來的數(shù)據(jù)。具體怎么鏈接起來&…

目錄

一、智能家居項目框架設(shè)計草圖

二、框架代碼文件工程建立

三、添加聲音識別模塊的串口讀取功能


一、智能家居項目框架設(shè)計草圖

?代碼思路講解:

1、一個指令工廠,一個控制工廠,實際上就是通過鏈表鏈起來的數(shù)據(jù)。具體怎么鏈接起來,就是基于簡單工廠模式的類與對象的概念,上一篇文章有學(xué)習(xí)記錄。
2、主函數(shù)語音指令程序和tcp指令程序各起一個線程,然后通過指令名字找到對應(yīng)的控制程序,實現(xiàn)對應(yīng)的模塊的功能。

二、框架代碼文件工程建立

1、在桌面新建一個項目文件夾smartHose,然后在文件夾中創(chuàng)建如下文件:

2、把上述的所有文件,都加載到Source lnsight工具中,如下圖代表加載完畢

3、創(chuàng)建inputCommand.h頭文件

//面向指令工廠的頭文件
#include <wiringPi.h>
#include <stdlib.h>struct InputCommander{char commandName[128];             //名字char command[32];                  //指令int (*Init)(char *name,char *ipAdress,char *port);  //操作函數(shù) int (*getCommand)(char *cmd);      //獲取數(shù)據(jù)函數(shù)char log[1024];                    //log日志獲取struct InputCommander *next;
};

4、創(chuàng)建contrlDevices.h頭文件

//設(shè)備頭文件
#include <wiringPi.h>struct Devices{char deviceName[128]; //名字int status;           //狀態(tài)int pinNum;           //引腳int (*open)(int pinNum);        //打開int (*close)(int pinNum);       //關(guān)閉int (*deviceInit)(int pinNum);  //設(shè)備初始化int (*readStatus)();  //火災(zāi)int (*changeStatus)(int status);struct Devices *next;
};struct Devices* addBathroomLightToDeviceLink(struct Devices *phead);
struct Devices* addUpstairLightToDeviceLink(struct Devices *phead);
struct Devices* addLivingRoomLightToDeviceLink(struct Devices *phead);
struct Devices* addRestaurantLightToDeviceLink(struct Devices *phead);
struct Devices* addFireToDeviceLink(struct Devices *phead);

5、創(chuàng)建bathroomLight.c文件

//浴室的燈
#include "contrlDevices.h"
#include<stdlib.h>int bathroomLightOpen(int pinNum){digitalWrite(pinNum,LOW);
}
int bathroomLightClose(int pinNum){digitalWrite(pinNum,HIGH);
}
int bathroomLightCloseInit(int pinNum){pinMode(pinNum,OUTPUT);digitalWrite(pinNum,HIGH);
}
int bathroomLightCloseStatus(int status){}
struct Devices bathroomLight={.deviceName = "bathroomLight",.pinNum = 26,.open = bathroomLightOpen,.close = bathroomLightClose,.deviceInit = bathroomLightCloseInit,.changeStatus = bathroomLightCloseStatus};
struct Devices* addBathroomLightToDeviceLink(struct Devices *phead){if(phead == NULL){	return &bathroomLight;}else{bathroomLight.next = phead;phead = &bathroomLight;}
};

6、創(chuàng)建livingroomLight.c文件

#include "contrlDevices.h"
#include<stdlib.h>int livingroomLightOpen(int pinNum){digitalWrite(pinNum,LOW);
}
int livingroomLightClose(int pinNum){digitalWrite(pinNum,HIGH);
}
int livingroomLightCloseInit(int pinNum){pinMode(pinNum,OUTPUT);digitalWrite(pinNum,HIGH);
}
int livingroomLightCloseStatus(int status){}
struct Devices livingroomLight={.deviceName = "livingroomLight",.pinNum = 27,.open = livingroomLightOpen,.close = livingroomLightClose,.deviceInit = livingroomLightCloseInit,.changeStatus = livingroomLightCloseStatus};
struct Devices* addLivingRoomLightToDeviceLink(struct Devices *phead){if(phead == NULL){	return &livingroomLight;}else{livingroomLight.next = phead;phead = &livingroomLight;}
};

7、創(chuàng)建restaurantLight.c文件

#include "contrlDevices.h"
#include<stdlib.h>int restaurantLightOpen(int pinNum){digitalWrite(pinNum,LOW);
}
int restaurantLightClose(int pinNum){digitalWrite(pinNum,HIGH);
}
int restaurantLightCloseInit(int pinNum){pinMode(pinNum,OUTPUT);digitalWrite(pinNum,HIGH);
}
int restaurantLightCloseStatus(int status){}
struct Devices restaurantLight={.deviceName = "restaurantLight",.pinNum = 28,.open = restaurantLightOpen,.close = restaurantLightClose,.deviceInit = restaurantLightCloseInit,.changeStatus = restaurantLightCloseStatus
};
struct Devices* addRestaurantLightToDeviceLink(struct Devices *phead){if(phead == NULL){	return &restaurantLight;}else{restaurantLight.next = phead;phead = &restaurantLight;}
};

8、創(chuàng)建upstairLight.c文件

//二樓燈
#include "contrlDevices.h"
#include<stdlib.h>int upstairLightOpen(int pinNum){digitalWrite(pinNum,LOW);
}
int upstairLightClose(int pinNum){digitalWrite(pinNum,HIGH);
}
int upstairLightCloseInit(int pinNum){pinMode(pinNum,OUTPUT);digitalWrite(pinNum,HIGH);
}
int upstairLightCloseStatus(int status){}
struct Devices upstairLight={.deviceName = "upstairLight",.pinNum = 29,.open = upstairLightOpen,.close = upstairLightClose,.deviceInit = upstairLightCloseInit,.changeStatus = upstairLightCloseStatus
};
struct Devices* addUpstairLightToDeviceLink(struct Devices *phead){if(phead == NULL){	return &upstairLight;}else{upstairLight.next = phead;phead = &upstairLight;}
};

9、創(chuàng)建fire.c文件

//火災(zāi)報警
#include "contrlDevices.h"
#include<stdlib.h>int fireIfOrNotInit(int pinNum){pinMode(pinNum,INPUT);digitalWrite(pinNum,HIGH);
}
int fireStatusRead(int pinNum){return digitalRead(pinNum);
}
struct Devices fireIfOrNot={.deviceName = "fireIfOrNot",.pinNum = 25,.deviceInit = fireIfOrNotInit,.readStatus = fireStatusRead};
struct Devices* addFireToDeviceLink(struct Devices *phead){if(phead == NULL){	return &fireIfOrNot;}else{fireIfOrNot.next = phead;phead = &fireIfOrNot;}
};

10、創(chuàng)建mainPro.c主函數(shù)文件

#include <stdio.h>
#include "contrlDevices.h"
#include <string.h>
#include "inputCommand.h"struct Devices* findDeviceByName(char* name,struct Devices* phead){struct Devices *tmp = phead;if(phead == NULL){return NULL;}else{while(tmp != NULL){if(strcmp(tmp->deviceName,name) == 0){return tmp;}tmp = tmp->next;}return NULL;}
};int main(){char name [128];struct Devices *tmp = NULL;if(-1 == wiringPiSetup()){return -1;}struct Devices *pdeviceHead = NULL;pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);pdeviceHead = addUpstairLightToDeviceLink(pdeviceHead);pdeviceHead = addLivingRoomLightToDeviceLink(pdeviceHead);pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);pdeviceHead = addFireToDeviceLink(pdeviceHead);while(1){printf("Input:\n");scanf("%s",name);tmp = findDeviceByName(name,pdeviceHead);if(tmp != NULL){tmp->deviceInit(tmp->pinNum);tmp->open(tmp->pinNum);}}//1、指令工廠初始化//2、設(shè)備控制工廠初始化//3、線程池建立//3.1、語音線程//3.2、socket線程//3.3、攝像頭線程//3.4、火災(zāi)線程
}

把上述的代碼傳到樹莓派的終端,用FileZilla傳即可,然后執(zhí)行結(jié)果:

gcc mainPro.c upstairLight.c bathroomLight.c livingroomLight.c restaurantLight.c -lwiringPi -o test1

效果演示:(雖然沒有裝到實際的智能家居里,但是小燈亮了,說明程序是可以正常用的🤭)

三、添加聲音識別模塊的串口讀取功能

這里主要通過主控芯片樹莓派的串口跟語音模塊連接。
樹莓派的T接語音模塊的R
樹莓派的R接語音模塊的T
然后就是供電

我們先把語音模塊的代碼整合到指令鏈表當(dāng)中去:
1.語音控制設(shè)備voiceContrl.c

#include "inputCommand.h"
#include <stdlib.h>
#include <wiringPi.h>
#include <stdio.h>
#include <wiringSerial.h>
#include <unistd.h>//串口int voiceInit(struct InputCommander *voicer,char *ipAdress,char *port){ //聲音初始化int fd;if((fd = serialOpen(voicer->deviceName,9600)) == -1){  //初始化串口,波特率9600exit(-1);}voicer->fd = fd;return fd;
} 
int voiceGetCommand(struct InputCommander *voicer){int nread = 0;nread = (voicer->fd,voicer->command,sizeof(voicer->command));if(nread == 0){printf("usart for voice read over time\n");}else{return nread;}
}
struct InputCommander voiceContrl = {.commandName = "voice", .deviceName = "dev/ttyAMA0",.command = {'\0'},.Init = voiceInit,.getCommand = voiceGetCommand,.log = {'\0'},.next = NULL,};
struct InputCommander* addvoiceContrlToInputCommandLink(struct InputCommander *phead){if(phead == NULL){return &voiceContrl;}else{voiceContrl.next = phead;phead = &voiceContrl;}
};

2.控制設(shè)備的頭文件inputCommand.h

//面向指令工廠的頭文件
#include <wiringPi.h>
#include <stdlib.h>struct InputCommander{char commandName[128];  //聲音的名字char command[32];       char deviceName[128];   //串口的名字int (*Init)(struct InputCommander *voicer,char *ipAdress,char *port); int (*getCommand)(struct InputCommander *voicer);char log[1024];int fd;struct InputCommander *next;};
struct InputCommander* addvoiceContrlToInputCommandLink(struct InputCommander *phead);

3.在mainPro.c主函數(shù)中添加語音模塊的函數(shù)

#include <stdio.h>
#include "contrlDevices.h"
#include <string.h>
#include "inputCommand.h"struct Devices* findDeviceByName(char* name,struct Devices* phead){struct Devices *tmp = phead;if(phead == NULL){return NULL;}else{while(tmp != NULL){if(strcmp(tmp->deviceName,name) == 0){return tmp;}tmp = tmp->next;}return NULL;}
};
int main(){char name [128];struct Devices *tmp = NULL;if(-1 == wiringPiSetup()){return -1;}struct Devices        *pdeviceHead = NULL;   //設(shè)備工廠struct InputCommander *pCommandHead = NULL;  //指令工廠pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);pdeviceHead = addUpstairLightToDeviceLink(pdeviceHead);pdeviceHead = addLivingRoomLightToDeviceLink(pdeviceHead);pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);pdeviceHead = addFireToDeviceLink(pdeviceHead);  //火災(zāi)pCommandHead = addvoiceContrlToInputCommandLink(pCommandHead); //串口while(1){printf("Input:\n");scanf("%s",name);tmp = findDeviceByName(name,pdeviceHead);if(tmp != NULL){tmp->deviceInit(tmp->pinNum);tmp->open(tmp->pinNum);}}
}

4.把上述的代碼傳到樹莓派的終端,用FileZilla傳即可,然后執(zhí)行結(jié)果:

gcc mainPro.c upstairLight.c bathroomLight.c fire.c livingroomLight.c restaurantLight.c voiceContrl.c -lwiringPi -o test1

http://www.risenshineclean.com/news/33099.html

相關(guān)文章:

  • b2c商城網(wǎng)站百度平臺電話
  • java做網(wǎng)站開發(fā)書seo綜合查詢 站長工具
  • 用凡科做網(wǎng)站的費用百度競價推廣運營
  • 數(shù)據(jù)庫支持的網(wǎng)站怎么做北京疫情最新情況
  • 金壇做網(wǎng)站鏈接交易網(wǎng)
  • 淘寶放單網(wǎng)站怎么做推客平臺
  • 如何做網(wǎng)站seo優(yōu)化惠州seo報價
  • 哪些網(wǎng)站可以做外部錨文本seo營銷推廣全程實例
  • 莆田 做網(wǎng)站的公司騰訊企點是干嘛的
  • 網(wǎng)站平臺搭建要多少錢seo發(fā)帖論壇
  • 東莞企業(yè)網(wǎng)站推廣哪里好網(wǎng)絡(luò)游戲推廣員的真實經(jīng)歷
  • 免費空間asp網(wǎng)站知名品牌營銷策略
  • 怎么用手機自己做網(wǎng)站巨量引擎廣告投放平臺登錄入口
  • 一個做搞笑類視頻的網(wǎng)站取名seo工具下載
  • 做競價網(wǎng)站訪問突然變少淮北seo
  • 中山網(wǎng)站設(shè)計制作免費發(fā)廣告的網(wǎng)站大全
  • 備案網(wǎng)站內(nèi)容怎么寫信息流推廣渠道
  • 推廣網(wǎng)站排行榜網(wǎng)站推廣和網(wǎng)站優(yōu)化
  • 網(wǎng)絡(luò)營銷具體推廣方案seo查詢網(wǎng)站
  • 電子商務(wù)網(wǎng)站建設(shè)個人總結(jié)推廣學(xué)院seo教程
  • 網(wǎng)站工商備案查詢2020年關(guān)鍵詞排名
  • 如何做一個網(wǎng)頁布局如何快速優(yōu)化網(wǎng)站排名
  • 做熟食的網(wǎng)站美食網(wǎng)站東莞最新消息今天
  • 有哪些學(xué)做衣服的網(wǎng)站網(wǎng)站推廣如何引流
  • 淘寶網(wǎng)站建設(shè)協(xié)議谷歌瀏覽器下載手機版安卓官網(wǎng)
  • 昭陽區(qū)住房和城鄉(xiāng)建設(shè)管理局網(wǎng)站重慶關(guān)鍵詞seo排名
  • 京東網(wǎng)上商城投訴電話天津seo托管
  • 網(wǎng)站開發(fā)地圖板塊浮動青島谷歌優(yōu)化
  • 旅游網(wǎng)站制作百度云網(wǎng)站搜索排名優(yōu)化軟件
  • 定制網(wǎng)站建設(shè)報價單網(wǎng)址導(dǎo)航下載到桌面