樹莓派智能家居系統(2)
文章目錄
- 樹莓派智能家居系統(2)
- 前言
- 一、Dvices.h
- 二、基于結構體添加外設
- 1.引入bathroomLight
- 2.main.c
- 3.編譯測驗
- 總結
前言
今天我們進入正式的智能家居系統的架構開發,我們先創建好工程檔案,將所需實作的功能一一創建在工程專案內,運用c語言所學鏈表知識逐一實作,
提示:以下是本篇文章正文內容,下面案例可供參考
一、Dvices.h
#include <wiringPi.h>
struct Devices
{
char deviceName[128];
int status;
int pinNum;
int (*open)(int pinNum); //燈開關
int (*close)(int pinNum);
int (*deviceInit)(int pinNum); // 外設初始化
int (*readStatus)(int status); // 火災報警器
int (*changeStatus)(int status);
struct Devices *next;
}
struct Dvices* addBathrommLightToDeviceLink(struct Dvice *phead)
二、基于結構體添加外設
1.引入bathroomLight
代碼如下(示例):
#include "contrlDevices.h"
#include <fcntl.h>
#include<stdlib.h>
#include <stdio.h>
int bathroomLightOpen(int pinNum)
{
digitalWrite(pinNum,LOW);
printf("open success\n");
}
int bathroomLightClose(int pinNum)
{
digitalWrite(pinNum,HIGH);
printf("open fail\n");
}
int bathroomLightCloseInit(int pinNum)
{
pinMode(pinNum,OUTPUT);
digitalWrite(pinNum,HIGH);
}
int bathroomLightCloseStatus(int status)
{
}
struct Devices bathroomLight = {
.deviceName = "bathroomLight",
.pinNum = 22,
.open = bathroomLightOpen,
.close = bathroomLightClose,
.deviceInit = bathroomLightCloseInit,
.changeStatus = bathroomLightCloseStatus
};
struct Devices* addBathrommLightToDeviceLink(struct Devices *phead)
{
if(phead == NULL){
phead = &bathroomLight;
return phead;
}else{
bathroomLight.next = phead;
phead = &bathroomLight;
return phead;
}
}
2.main.c
代碼如下(示例):
#include <stdio.h>
#include <string.h>
#include "contrlDevices.h"
struct Devices* findDevicesByName(char *name,struct Devices *phead) //遍歷鏈表
{
struct Devices *tmp = phead;
if(phead == NULL){
printf("NULL\n");
return NULL;
}else{
while(tmp != NULL){
if(strcmp(tmp->deviceName,name) == 0){
return tmp;
}
tmp = tmp ->next;
}
return NULL;
}
}
int main ()
{
// char *name = "bathroomLight" ; //僅測驗用,這里遍歷bathroomLight
char buf[128] = {'\0'};
struct Devices *tmp ;
if(-1==wiringPiSetup())
{
return -1;
}
struct Devices *phead = NULL; //添加phead 用于連接鏈表 s
phead=addBathrommLightToDeviceLink(phead); //添加元素
phead=addLivegroomLightToDeviceLink(phead);
phead=addUpstairLightToDeviceLink(phead);
while(1)
{
printf("please input bathroomLight/livegroomLight/upstairLight\n");
scanf("%s",buf);
tmp = findDevicesByName(buf,phead);
if (tmp != NULL){
tmp->deviceInit(tmp->pinNum); //初始化tmp指向device功能
tmp->open(tmp->pinNum); //實作tmp指向地址功能
}
}
return 0;
}
3.編譯測驗
發送到樹莓派進行測驗代碼是否可以實作,
利用unbunto 發送檔案或者fileZilla
這里我使用的是fileZilla,百度下載即可,

輸入樹莓派ip地址,用戶名及密碼
sftp://192.168.31.76
連接成功以后出現右邊欄,如圖,

gcc *.c
發現使用gcc *.c容易報錯
gcc main.c bathroomLight.c -wiringPi -0 test1
添加庫編譯即可解決
總結
提示:這里對文章進行總結:我們創建了基本的智能家居架構,外設可由自己需要添加,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304288.html
標籤:其他
上一篇:【創業必備企業架構,可開發任意專案】SpringCloud大型企業分布式微服務云架構
下一篇:Linux網路服務—DHCP
