智能家居项目开发准备工作
智能家居功能細(xì)節(jié)拆分:
控制端支持語音設(shè)備的輸入(用到之前所學(xué)習(xí)的LD3320語音識別模塊)或者是socket客戶端(這個客戶端可以是ftp項(xiàng)目的客戶端也可以是Android的app),主控芯片是樹莓派,既接收語音模塊的控制指令還可以接收來自客戶端網(wǎng)絡(luò)TCP的指令,然后樹莓派編寫程序時,會編寫兩個線程(一個用于語音模塊串口線程、一個用于客戶端線程),然后樹莓派會通過IO的高低電平來控制繼電器進(jìn)而控制不同房間的燈的亮滅。同樣是通過IO口的輸入功能來檢測火焰?zhèn)鞲衅麟娖降母叩团袛噙M(jìn)而驅(qū)動蜂鳴器是否發(fā)出警報(bào)。還有就是攝像頭模塊(用于視頻監(jiān)控和人臉識別),然后還會用到WemosD1(因?yàn)樵趯?shí)際開發(fā)時,樹莓派只有一個串口),為了學(xué)習(xí)更多的知識,我們采用433M射頻模塊(基于串口通信)控制窗簾和泳池?zé)?#xff0c;使用紅外模塊(基于串口通信)控制電風(fēng)扇、電視、空調(diào)等紅外設(shè)備,這就需要兩個串口了就需要使用第三方設(shè)備來增加樹莓派的串口,進(jìn)而實(shí)現(xiàn)相應(yīng)的功能。編碼模式采用:普通編碼模式和內(nèi)核設(shè)計(jì)模式,采用內(nèi)核設(shè)計(jì)模式設(shè)計(jì)整個項(xiàng)目。
智能家居代碼機(jī)構(gòu)——簡單工廠模式:
-
什么是設(shè)計(jì)模式?
百度百科解釋: 軟件設(shè)計(jì)模式(Design pattern),又稱設(shè)計(jì)模式,是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。
總的來說: 就是代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),能夠讓代碼穩(wěn)定,拓展性更強(qiáng),一系列編程的思想,代碼容易被他人理解,保證代碼可靠性,程序的重用性。設(shè)計(jì)模式有23種,要慢慢的積累,使用設(shè)計(jì)模式會增強(qiáng)代碼的穩(wěn)定性,在代碼里面添加某些功能不會將代碼其他部分的功能破壞掉。 -
算法: 算法不是設(shè)計(jì)模式,因?yàn)樗惴ㄖ铝τ诮鉀Q問題而非設(shè)計(jì)問題,設(shè)計(jì)模式通常描述了一組相互緊密作用的類與對象。
C語言面向?qū)ο笠腩惡蛯ο蟮母拍?#xff1a;
- 類: 類是一種用戶定義的引用數(shù)據(jù)類型,也稱類類型。(在C語言中和結(jié)構(gòu)體差不多)
- 對象: 對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數(shù)據(jù)類型。它們的關(guān)系是:對象是類的實(shí)例,類是對象的模板。
程序舉例:
struct Animal {char [128];int age;int sex;//成員屬性void (*peat)();void (*pbeat)();//成員方法 } struct Animal dog; struct Animal cat;//dog cat 是類(Animal)的一種對象C語言面向?qū)ο笈e例:
#include <stdio.h> //類 :抽象 模板 struct Animal {char name[128];int age;int sex;//成員屬性void (*peat)();void (*pbeat)();//成員方法,這里是函數(shù)指針類型。 }; void dogEat() {printf("eat meat\n"); } void catEat() {printf("ear fish\n"); } void dogBeat() {printf("咬\n"); } void catBeat() {printf("抓\n"); } int int main() {struct Animal dog; struct Animal cat;//dog cat 是類(Animal)dog.peat=dogEat;cat.peat =catEat;dog.pbeat=dogBeat;cat.pbeat=catBeat;//函數(shù)名相當(dāng)于指針dog.peat();dog.pbeat();cat.peat();cat.pbeat();return 0; }C結(jié)構(gòu)體的另一種使用方法(在前面驅(qū)動代碼的編寫中使用過):
#include <stdio.h> //l類 :抽象 模板 struct Animal {char name[128];int age;int sex;//成員屬性void (*peat)();void (*pbeat)();//成員方法 }; void dogEat() {printf("eat meat\n"); } void catEat() {printf("ear fish\n"); } void dogBeat() {printf("咬\n"); } void catBeat() {printf("抓\n"); } int main() {struct Animal dog1={"阿黃",11,20,dogEat,dogBeat};//這是之前的寫法,必須按照順序來//下面是新的寫法,可以選擇性的為模板里面的元素賦值struct Animal dog={.pbeat=dogBeat,.peat=dogEat} ;struct Animal cat={.pbeat=catBeat,.peat=catEat} ;//結(jié)構(gòu)體新的用法dog.peat();dog.pbeat();cat.peat();cat.pbeat();return 0; }什么是工廠模式:
工廠模式(Factory Pattern)是最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。在工廠模式中,我們在創(chuàng)建對象時不會對客戶端暴露創(chuàng)建邏輯,并且是通過使用一個共同的接口來指向新創(chuàng)建的對象。下面通過軟件將以上代碼采用簡單工廠模式在sourceInsight里面進(jìn)行編寫,以下是簡單工廠模式的示例,工廠模式使代碼邏輯和思路更加清晰,便于修改和添加。
- 首先在選定位置新建一個文件夾,然后在文件夾里面新建dog.c、animal.h、cat.c和mianpro.c 然后再新建一個文件夾存放sourceInsight的工程文件(有關(guān)sourceInsight的用法),如下圖所示:
- 然后將對應(yīng)的代碼寫入對應(yīng)的文件,比如:dog.c這個文件就是存放dog這個對象的相關(guān)行為,并且提供讓主程序調(diào)用的函數(shù)API將dog這個對象添加到鏈表中去(這個就像是以后的智能家居為實(shí)現(xiàn)整個控制系統(tǒng),需要添加的各個功能模塊,一個供能模塊就是一個文件),putdogLink 是將dog對象插入進(jìn)鏈表的API接口,這里采用頭插法進(jìn)行插入,即:先插入的在后邊。
- 然后再將cat.c的代碼進(jìn)行編寫,意思和上面一樣
- 因?yàn)閐og.c和cat.c里面都含有,struct Animal 這個結(jié)構(gòu)體,所以應(yīng)該將其聲明在animal.h 這個頭文件里面,然后還需要聲明供主程序調(diào)用的API函數(shù)接口。
- 最后就是編寫mainpro.c主函數(shù),下面函數(shù)還編寫了一個可供用戶輸入的然后查找響應(yīng)節(jié)點(diǎn)的函數(shù),用戶輸入要查找的節(jié)點(diǎn)名稱,找到后返回指向該節(jié)點(diǎn)的指針,通過指針就可以對該節(jié)點(diǎn)進(jìn)行操作,就把它當(dāng)做鏈表的一個節(jié)點(diǎn)即可。
- 然后把整個文件夾拖進(jìn)虛擬機(jī)里面運(yùn)行一下:gcc *.c -o factory ,*是通配符。然后執(zhí)行以下就可以了,運(yùn)行如下:
- 根據(jù)以上簡單工廠模式,智能家居設(shè)計(jì)的時候,就可以設(shè)計(jì)為指令工廠、main函數(shù)、控制工廠,指令工廠面就存放指令(比如:語音指令、客戶端指令等,將這些指令串為一個鏈表),控制工廠就是控制一些家庭設(shè)備(比如:各個房間的燈,門鎖、串口等,創(chuàng)建一個鏈表,然后根據(jù)指令,去查找對應(yīng)的控制結(jié)點(diǎn)),main函數(shù)里面首先創(chuàng)建兩個鏈表(指令工廠、控制工廠),然后接下來創(chuàng)建兩個線程(一個是語音的、一個是客戶端的),在每個線程里面在接受到指令后去控制工廠里面去查找對應(yīng)的控制設(shè)備然后進(jìn)行一系列操作。
- 根據(jù)上面的敘述,我們可以創(chuàng)建以下架構(gòu)的代碼文件工程,指令工場和控制工場的頭文件就是以下圖片中的兩個頭文件。然后將這些文件導(dǎo)入到sourceInsight里面進(jìn)行代碼的編寫。
以上是智能家居開發(fā)的軟件框架構(gòu)建準(zhǔn)備工作,接下來開始代碼的編寫。
總結(jié)
以上是生活随笔為你收集整理的智能家居项目开发准备工作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩转oracle 11g(4):连接,文
- 下一篇: 64 modol1模型