基于树莓派的智能家居设计

文章目录

前言

一个简单的小项目,下面是代码部分和物理效果展示。

[En]

A simple small project, the following is the code part and physical effects show.

一、整体系统框图

基于树莓派的智能家居设计

; 二、代码部分

  • main.c
#include
#include
#include
#include
#include

#include
#include
#include
#include
#include
#include
#include
#include

#include "contrlDevices.h"
#include "inputCommand.h"

pthread_t voiceThread;
pthread_t socketThread;
pthread_t fireThread;
pthread_t cameraThread;
pthread_t clientWemosThread;

struct InputCommander *pCommandHead = NULL;
struct Devices        *pdeviceHead = NULL;
struct InputCommander *socketHandler = NULL;
struct InputCommander *clientHandler = NULL;

pthread_mutex_t mutex;

int c_fd;

#define true 1
#define false 0
typedef unsigned int bool;

char* faceRes = NULL;

struct Devices *findEquipByName(char *name,struct Devices *phead)
{
    if(phead == NULL){
        return NULL;
    }
    while(phead != NULL){
        if(strstr(phead->deviceName,name) != NULL){
            return phead;
        }
        phead = phead->next;
    }

    return NULL;
}

struct InputCommander *findCommandByName(char *name,struct InputCommander *phead)
{
    if(phead == NULL){
        return NULL;
    }
    while(phead != NULL){
        if(strcmp(phead->commandName,name) == 0){
            return phead;
        }
        phead = phead->next;
    }
    return NULL;
}

void *camera_thread(void *datas)
{
    const char* openCamera = "/home/pi/mjpg-streamer/mjpg-streamer-experimental/start.sh";
    system(openCamera);
}

size_t handle(void *ptr, size_t size, size_t nmemb, void *stream){

    int ssize = strlen(ptr) + 1;
    faceRes = (char*)malloc(ssize);
    memset(faceRes, '\0', ssize);
    strncpy(faceRes, ptr, ssize);
}
char* getBase64(char* photoPath){
    char cmd[256] = {'\0'};

    sprintf(cmd, "base64 %s > photoBase64File", photoPath);
    system(cmd);

    int fd,size;
    fd = open("./photoBase64File", O_RDWR);
    size = lseek(fd, 0, SEEK_END) + 1;
    lseek(fd, 0, SEEK_SET);

    char* res = (char*)malloc(size);
    memset(res, '\0', size);
    read(fd, res, size);
    close(fd);

    system("rm photoBase64File");

    return res;
}
bool cameraContrlPostUrl()
{
    CURL *curl;
    CURLcode res;
    struct Devices *linkHandler  = NULL;
    char* message = NULL;

    char* img1 = getBase64("./host.jpg");

    system("wget http://192.168.137.104:8080/?action=snapshot -O ./visitor.jpg");

    char* img2 = getBase64("./visitor.jpg");

    char* key = "QYRbM22W52hMrHaUWkdKEN";
    char* secret = "30e80f34e0b04a2f863ff4ff615c2661";
    int typeId = 21;
    char* format = "xml";

    int size = strlen(img1)+strlen(img2)+strlen(key)+strlen(secret)+strlen(format)+3;
    message = (char*)malloc(size);
    memset(message, '\0', size);

    sprintf(message, "&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s",
        img1, img2, key, secret, typeId, format);

    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, message);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, handle);
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);

        printf("%s\n",faceRes);

        printf("shibiechenggong\n");

        if(strstr(faceRes, "是") != NULL){

            printf("tongyigeren\n");
            linkHandler = findEquipByName("lock",pdeviceHead);
            linkHandler->open(linkHandler->pinNum);
            sleep(3);
            linkHandler->close(linkHandler->pinNum);

        }

        else{

            printf("bushitongyigeren\n");

            }
    printf("shibiejieshu\n");
    }

    free(faceRes);
    free(img1);
    free(img2);

}

void *voice_thread(void *arg)
{
    int i = 0;
    int nread;
    struct InputCommander *voiceHandler = NULL;
    struct Devices *linkHandler = NULL;

    voiceHandler = findCommandByName("voice",pCommandHead);
    if(voiceHandler == NULL){
        printf("find voiceHandler error\n");
        pthread_exit(NULL);
    }else{
            if(voiceHandler->Init(voiceHandler) < 0){
                printf("voice init error\n");
                pthread_exit(NULL);
            }else{
                printf("%s init success\n",voiceHandler->commandName);
                }

        while(1){
            memset(voiceHandler->command,'\0',sizeof(voiceHandler->command));

            nread = voiceHandler->getCommand(voiceHandler);
            if(nread == 0){
                printf("noData from voice,please say again\n");

            }

                else{
                    printf("Get voice command:%s\n",voiceHandler->command);

                        if(strcmp("kycd\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("yongchilight",pdeviceHead);
                            linkHandler->open(linkHandler->pinNum);
                            printf("open bathroomlight\n");
                        }

                        if(strcmp("gycd\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("yongchilight",pdeviceHead);
                            linkHandler->close(linkHandler->pinNum);
                            printf("已关闭浴室灯\n");
                        }

                        if(strcmp("kwsd\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("bedroomlight",pdeviceHead);
                            linkHandler->open(linkHandler->pinNum);
                        }

                        if(strcmp("gwsd\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("bedroomlight",pdeviceHead);
                            linkHandler->close(linkHandler->pinNum);
                        }

                        if(strcmp("kktd\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("livingroomLight",pdeviceHead);
                            linkHandler->open(linkHandler->pinNum);
                        }

                        if(strcmp("gktd\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("livingroomLight",pdeviceHead);
                            linkHandler->close(linkHandler->pinNum);
                        }

                        if(strcmp("kfs\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("fan",pdeviceHead);
                            linkHandler->open(linkHandler->pinNum);
                        }

                        if(strcmp("gfs\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("fan",pdeviceHead);
                            linkHandler->close(linkHandler->pinNum);
                        }
                        if(strcmp("km\r\n",voiceHandler->command) == 0){

                            cameraContrlPostUrl();

                        }

                        if(strcmp("gm\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("lock",pdeviceHead);
                            linkHandler->close(linkHandler->pinNum);
                        }

                        if(strcmp("kqbd\r\n",voiceHandler->command) == 0){
                            linkHandler = findEquipByName("yongchilight",pdeviceHead);
                            linkHandler->open(linkHandler->pinNum);

                            linkHandler = findEquipByName("bedroomlight",pdeviceHead);
                            linkHandler->open(linkHandler->pinNum);

                            linkHandler = findEquipByName("livingroomLight",pdeviceHead);
                            linkHandler->open(linkHandler->pinNum);

                            }
                            if(strcmp("face",voiceHandler->command) == 0){

                                cameraContrlPostUrl();

                            }

                }
            }

    }
}

void *fire_thread(void *datas)
{
    int status;
    struct Devices *fireDeviceTmp = NULL;
    struct Devices *buzzerDeviceTmp = NULL;

    fireDeviceTmp = findEquipByName("fire",pdeviceHead);
    buzzerDeviceTmp = findEquipByName("buzzser",pdeviceHead);

    fireDeviceTmp->deviceInit(fireDeviceTmp->pinNum);
    buzzerDeviceTmp->deviceInit(buzzerDeviceTmp->pinNum);
    printf("fire_thread init\n");

    while(1){
        delay(2000);
        status = fireDeviceTmp->readStatus(fireDeviceTmp->pinNum);

        if(status == 0){
            buzzerDeviceTmp->open(buzzerDeviceTmp->pinNum);
        }else{
            buzzerDeviceTmp->close(buzzerDeviceTmp->pinNum);
        }
    }
}

void *read_thread(void *datas)
{
    int n_read;
    struct Devices *linkHandler  = NULL;

    while(1){
        memset(socketHandler->command,'\0',sizeof(socketHandler->command));

        n_read = read(c_fd,socketHandler->command,sizeof(socketHandler->command));
        if(n_read == -1){
            perror("read_thread");
        }else if(n_read > 0){
            printf("getCommand:%s\n",socketHandler->command);

            if(strcmp("kycd",socketHandler->command) == 0){
                linkHandler = findEquipByName("yongchilight",pdeviceHead);
                linkHandler->open(linkHandler->pinNum);

            }

            if(strcmp("gycd",socketHandler->command) == 0){
                linkHandler = findEquipByName("yongchilight",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);
            }

            if(strcmp("kwsd",socketHandler->command) == 0){
                linkHandler = findEquipByName("bedroomlight",pdeviceHead);
                linkHandler->open(linkHandler->pinNum);
            }

            if(strcmp("gwsd",socketHandler->command) == 0){
                linkHandler = findEquipByName("bedroomlight",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);
            }

            if(strcmp("kktd",socketHandler->command) == 0){
                linkHandler = findEquipByName("livingroomLight",pdeviceHead);
                linkHandler->open(linkHandler->pinNum);
            }

            if(strcmp("gktd",socketHandler->command) == 0){
                linkHandler = findEquipByName("livingroomLight",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);
            }

            if(strcmp("kfs",socketHandler->command) == 0){
                linkHandler = findEquipByName("fan",pdeviceHead);
                linkHandler->open(linkHandler->pinNum);
            }

            if(strcmp("gfs",socketHandler->command) == 0){
                linkHandler = findEquipByName("fan",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);
            }
            if(strcmp("km",socketHandler->command) == 0){
                linkHandler = findEquipByName("lock",pdeviceHead);
                linkHandler->open(linkHandler->pinNum);
            }

            if(strcmp("gm",socketHandler->command) == 0){
                linkHandler = findEquipByName("lock",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);
            }

            if(strcmp("kqbd",socketHandler->command) == 0){
                linkHandler = findEquipByName("yongchilight",pdeviceHead);
                linkHandler->open(linkHandler->pinNum);

                linkHandler = findEquipByName("bedroomlight",pdeviceHead);
                linkHandler->open(linkHandler->pinNum);

                linkHandler = findEquipByName("livingroomLight",pdeviceHead);
                linkHandler->open(linkHandler->pinNum);

            }
            if(strcmp("gqbd",socketHandler->command) == 0){
                linkHandler = findEquipByName("yongchilight",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);

                linkHandler = findEquipByName("bedroomlight",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);

                linkHandler = findEquipByName("livingroomLight",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);

            }

            if(strcmp("gqbdq",socketHandler->command) == 0){
                linkHandler = findEquipByName("bedroomlight",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);

                linkHandler = findEquipByName("yongchilight",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);

                linkHandler = findEquipByName("livingroomLight",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);

                linkHandler = findEquipByName("fan",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);

                linkHandler = findEquipByName("lock",pdeviceHead);
                linkHandler->close(linkHandler->pinNum);
            }

        }
        else{
            printf("client quit\n");
            exit(-1);

        }
    }

}

 void *socket_thread(void *datas)
{
    int n_read = 0;
    pthread_t readPthread;

    struct sockaddr_in c_addr;
    memset(&c_addr,0,sizeof(struct sockaddr_in));
    int clen = sizeof(struct sockaddr_in);

    socketHandler = findCommandByName("socketContrl",pCommandHead);
    if(socketHandler == NULL){
        printf("find socketHandler error\n");
        pthread_exit(NULL);
    }else{
        printf("%s init success\n",socketHandler->commandName);
    }
    if(socketHandler->Init(socketHandler) < 0){
        printf("socketControl init error\n");
        pthread_exit(NULL);
    }

    while(1){
        c_fd = accept(socketHandler->sfd,(struct sockaddr *)&c_addr, &clen);
        pthread_create(&readPthread,NULL,read_thread,NULL);
    }

}

int main()
{
    char name[32] = {'\0'};

    if(wiringPiSetup() == -1){
          printf("硬件接口初始化失败\n");
          return -1;
    }

    pthread_mutex_init(&mutex,NULL);

    pCommandHead = addVoiceContrlToInputCommanderLink(pCommandHead);
    pCommandHead = addsocketContrlToInputCommanderLink(pCommandHead);

    pdeviceHead = addyongchilightToDeviceLink(pdeviceHead);
    pdeviceHead = addfanToDeviceLink(pdeviceHead);
    pdeviceHead = addlivingroomLightToDeviceLink(pdeviceHead);
    pdeviceHead = addbedroomlightToDeviceLink(pdeviceHead);
    pdeviceHead = addFireToDeviceLink(pdeviceHead);
    pdeviceHead = addBuzzerToDeviceLink(pdeviceHead);
    pdeviceHead = addlockToDeviceLink(pdeviceHead);

    struct Devices *tmpequiphead = pdeviceHead;
    while(tmpequiphead != NULL){
        tmpequiphead->deviceInit(tmpequiphead->pinNum);
        tmpequiphead = tmpequiphead->next;
    }

    pthread_create(&voiceThread,NULL,voice_thread,NULL);

    pthread_create(&socketThread,NULL,socket_thread,NULL);

    pthread_create(&fireThread,NULL,fire_thread,NULL);

    pthread_create(&cameraThread,NULL,camera_thread,NULL);

    pthread_join(voiceThread,NULL);
    pthread_join(socketThread,NULL);
    pthread_join(fireThread,NULL);
    pthread_join(cameraThread,NULL);

    pthread_mutex_destroy(&mutex);

    return 0;

    }

  • socketContrl.c
#include
#include
#include
#include
#include

#include
#include
#include
#include
#include
#include
#include
#include
#include

#include "inputCommand.h"

int socketgetCommand(struct InputCommander *socketMes)
{
    int c_fd;
    int n_read;

    struct sockaddr_in c_addr;
    memset(&c_addr,0,sizeof(struct sockaddr_in));
    int clen = sizeof(struct sockaddr_in);

    c_fd = accept(socketMes->sfd,(struct sockaddr *)&c_addr, &clen);

    n_read = read(c_fd,socketMes->command,sizeof(socketMes->command));
    if(n_read == -1){
        perror("read");
    }else if(n_read > 0){
        printf("\nget:%d\n",n_read);
    }else{
        printf("client quit\n");
    }

    return n_read;
}

int socketInit(struct InputCommander *socketMes)
{

    int s_fd;
    struct sockaddr_in s_addr;

    memset(&s_addr,0,sizeof(struct sockaddr_in));

    s_fd = socket(AF_INET,SOCK_STREAM,0);
    if(s_fd == -1){
        perror("socked");
        exit(-1);
    }

    s_addr.sin_family = AF_INET;
    s_addr.sin_port = htons(atoi(socketMes->port));
    inet_aton(socketMes->ipAdress,&s_addr.sin_addr);

    bind(s_fd, (struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));

    listen(s_fd,10);
    printf("socket Server listening......\n");

    socketMes->sfd = s_fd;

}

struct InputCommander socketContrl = {
    .commandName = "socketContrl",
    .command = {'\0'},
    .port = "8085",
    .ipAdress = "192.168.137.104",
    .Init = socketInit,
    .getCommand = socketgetCommand,
    .log = {'\0'},
    .next = NULL
};

struct InputCommander *addsocketContrlToInputCommanderLink(struct InputCommander *phead)
{
    if(phead == NULL){
        return &socketContrl;
    }else{
        socketContrl.next = phead;
        phead = &socketContrl;
    }
    return phead;
}

  • voiceContrl.c
#include
#include
#include
#include
#include
#include

#include "inputCommand.h"

int getCommand(struct InputCommander *voicer)
{
    int nread = 0;
    memset(voicer->command,'\0',sizeof(voicer->command));

     nread = read(voicer->fd,voicer->command,sizeof(voicer->command));

     return nread;

}

int voiceInit(struct InputCommander *voicer)
{

    int fd;

     if((fd = serialOpen(voicer->deviceName,9600)) == -1){
        exit(-1);
     }
     voicer->fd = fd;

     return fd;
}

struct InputCommander voiceContrl = {
    .commandName = "voice",
    .deviceName = "/dev/ttyAMA0",

    .command= {'\0'},
    .Init = voiceInit,
    .getCommand = getCommand,
    .log = {'\0'},
    .next = NULL
};

struct InputCommander *addVoiceContrlToInputCommanderLink(struct InputCommander *phead)
{
    if(phead == NULL){
        return &voiceContrl;
    }else{
        voiceContrl.next = phead;
        phead = &voiceContrl;
    }
    return phead;
}

  • bedroomlight.c

#include "contrlDevices.h"

int bedroomlightOpen(int pinNum)
{
    digitalWrite (pinNum,LOW);
}

int  bedroomlightClose(int pinNum)
{
    digitalWrite (pinNum,HIGH);
}

int bedroomlightCloseInit(int pinNum)
{
    pinMode (pinNum, OUTPUT);
    digitalWrite (pinNum,HIGH);
}

int bedroomlightCloseStatus(int status)
{

}

struct Devices bedroomlight = {
    .deviceName = "bedroomlight",

    .pinNum = 27,
    .open = bedroomlightOpen,
    .close = bedroomlightClose,
    .deviceInit = bedroomlightCloseInit,
    .changStatus = bedroomlightCloseStatus,
    .next = NULL
};

struct Devices *addbedroomlightToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &bedroomlight;
    }else{
        bedroomlight.next = phead;
        phead = &bedroomlight;
    }
    return phead;
}

  • buzzer.c

#include "contrlDevices.h"

int buzzerOpen(int pinNum)
{
    digitalWrite (pinNum,LOW);
}

int buzzerClose(int pinNum)
{
    digitalWrite (pinNum,HIGH);
}

int buzzerInit(int pinNum)
{
    pinMode (pinNum, OUTPUT);
    digitalWrite (pinNum,HIGH);
}

struct Devices buzzer = {
    .deviceName = "buzzser",
    .pinNum = 7,
    .open = buzzerOpen,
    .close = buzzerClose,
    .deviceInit = buzzerInit,
    .next = NULL
};

struct Devices *addBuzzerToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &buzzer;
    }else{
        buzzer.next = phead;
        phead = &buzzer;
    }
    return phead;
}

  • fan.c

#include "contrlDevices.h"

int fanOpen(int pinNum)
{
    digitalWrite (pinNum,LOW);
}

int  fanClose(int pinNum)
{
    digitalWrite (pinNum,HIGH);
}

int fanCloseInit(int pinNum)
{
    pinMode (pinNum, OUTPUT);
    digitalWrite (pinNum,HIGH);
}

int fanCloseStatus(int status)
{

}

struct Devices fan = {
    .deviceName = "fan",

    .pinNum = 28,
    .open = fanOpen,
    .close = fanClose,
    .deviceInit = fanCloseInit,
    .changStatus = fanCloseStatus,
    .next = NULL
};

struct Devices *addfanToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &fan;
    }else{
        fan.next = phead;
        phead = &fan;
    }
    return phead;
}

  • fire.c

#include "contrlDevices.h"

int fireInit(int pinNum)
{
    pinMode (pinNum,INPUT);
    digitalWrite (pinNum,HIGH);
}

int readFireStatus(int pinNum)
{
    return digitalRead(pinNum);
}

struct Devices fire = {
    .deviceName = "fire",
    .pinNum = 25,
    .deviceInit = fireInit,
    .readStatus = readFireStatus,
    .next = NULL
};

struct Devices *addFireToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &fire;
    }else{
        fire.next = phead;
        phead = &fire;
    }
    return phead;
}

  • livingroomLight.c

#include "contrlDevices.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 livingroomLight2 = {
    .deviceName = "livingroomLight",

    .pinNum = 26,
    .open = livingroomLightOpen,
    .close = livingroomLightClose,
    .deviceInit = livingroomLightCloseInit,
    .changStatus = livingroomLightCloseStatus,
    .next = NULL

};

struct Devices *addlivingroomLightToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &livingroomLight2;
    }else{
        livingroomLight2.next = phead;
        phead = &livingroomLight2;
    }
    return phead;
}

  • lock.c

#include "contrlDevices.h"

int lockOpen(int pinNum)
{
    digitalWrite (pinNum,HIGH);
}

int  lockClose(int pinNum)
{
    digitalWrite (pinNum,LOW);
}

int lockCloseInit(int pinNum)
{
    pinMode (pinNum, OUTPUT);
    digitalWrite (pinNum,LOW);
}

int lockCloseStatus(int status)
{

}

struct Devices lock = {
    .deviceName = "lock",

    .pinNum = 5,
    .open = lockOpen,
    .close = lockClose,
    .deviceInit = lockCloseInit,
    .changStatus = lockCloseStatus,
    .next = NULL
};

struct Devices *addlockToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &lock;
    }else{
        lock.next = phead;
        phead = &lock;
    }
    return phead;
}

  • yongchilight.c

#include "contrlDevices.h"

int yongchilightOpen(int pinNum)
{
    digitalWrite (pinNum,LOW);
}

int  yongchilightClose(int pinNum)
{
    digitalWrite (pinNum,HIGH);
}

int yongchilightCloseInit(int pinNum)
{
    pinMode (pinNum, OUTPUT);
    digitalWrite (pinNum,HIGH);
}

int yongchilightCloseStatus(int status)
{

}

struct Devices yongchilight = {
    .deviceName = "yongchilight",

    .pinNum = 29,
    .open = yongchilightOpen,
    .close = yongchilightClose,
    .deviceInit = yongchilightCloseInit,
    .changStatus = yongchilightCloseStatus,
    .next = NULL
};

struct Devices *addyongchilightToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &yongchilight;
    }else{
        yongchilight.next = phead;
        phead = &yongchilight;
    }
    return phead;
}

  • contrlDevices.h
#include
#include
#include

typedef unsigned int bool;

struct Devices
{
    char deviceName[128];
    int status;
    int pinNum;

    int (*open)(int pinNum);
    int (*close)(int pinNum);
    int (*deviceInit)(int pinNum);

    int (*readStatus)(int pinNum);
    int (*changStatus)(int status);

    CURL *curl;
    char *key;
    char *secret;
    int typeId;
    char *format;
    bool (*cameraInit)(struct Devices *camera);
    int yesNum;
    int noNum;

    struct Devices *next;
};

struct Devices *addyongchilightToDeviceLink(struct Devices *phead);
struct Devices *addfanToDeviceLink(struct Devices *phead);
struct Devices *addlivingroomLightToDeviceLink(struct Devices * phead);
struct Devices *addlockToDeviceLink(struct Devices *phead);
struct Devices *addbedroomlightToDeviceLink(struct Devices *phead);
struct Devices *addFireToDeviceLink(struct Devices *phead);
struct Devices *addBuzzerToDeviceLink(struct Devices *phead);
struct Devices *addcameraContrlToDeviceLink(struct Devices *phead);

  • inputCommand.h
#include
#include

struct InputCommander
{
    char commandName[128];
    char deviceName[128];
    char command[32];

    int (*Init)(struct InputCommander *voicer);
    int (*getCommand)(struct InputCommander *voicer);

    char log[1024];
    int fd;
    char port[12];
    char ipAdress[32];
    int sfd;
    int cfd;

    struct InputCommander *next;
};

struct InputCommander *addVoiceContrlToInputCommanderLink(struct InputCommander *phead);
struct InputCommander *addsocketContrlToInputCommanderLink(struct InputCommander *phead);
struct InputCommander *addclientContrlToInputCommanderLink(struct InputCommander *phead);

二、APP客户端

参考博文:https://blog.csdn.net/bhbhhyg/article/details/115694774?spm=1001.2014.3001.5501

基于树莓派的智能家居设计

; 1.MainActivity.java

package com.example.smarthome;
import java.io.OutputStream;
import java.net.Socket;

import android.os.Bundle;
import android.app.Activity;

import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.view.View.OnClickListener;
public class MainActivity extends Activity {
    Button kycd;
    Button gycd;
    Button kws;
    Button gws;
    Button kkt;
    Button gkt;
    Button kfs;
    Button gfs;
    Button km;
    Button gm;
    Button kqbd;
    Button gqbd;
    Button ljms;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
          setContentView(R.layout.activity_main);
       WebView wb = (WebView) findViewById(R.id.web);
        wb.setWebViewClient(new WebViewClient());
        String s="http://192.168.137.104:8080/?action=stream";
        wb.loadUrl(s);

        kycd=(Button)findViewById(R.id.kycd);
        gycd=(Button)findViewById(R.id.gycd);
        kws=(Button)findViewById(R.id.kws);
        gws=(Button)findViewById(R.id.gws);
        kkt=(Button)findViewById(R.id.kkt);
        gkt=(Button)findViewById(R.id.gkt);
        kfs=(Button)findViewById(R.id.kfs);
        gfs=(Button)findViewById(R.id.gfs);
        km=(Button)findViewById(R.id.km);
        gm=(Button)findViewById(R.id.gm);
        kqbd = (Button)findViewById(R.id.kqbd);
        gqbd = (Button)findViewById(R.id.gqbd);
        ljms=(Button)findViewById(R.id.ljms);

        kycd.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
              new NetUtils("kycd").sendMessage();
            }
        });
        gycd.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("gycd").sendMessage();
            }
        });
        kws.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("kwsd").sendMessage();
            }
        });
        gws.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("gwsd").sendMessage();
            }
        });
        kkt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("kktd").sendMessage();
            }
        });
        gkt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("gktd").sendMessage();
            }
        });
        kfs.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("kfs").sendMessage();
            }
        });
        gfs.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("gfs").sendMessage();
            }
        });
        km.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("km").sendMessage();
            }
        });
        gm.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("gm").sendMessage();
            }
        });
        kqbd.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("kqbd").sendMessage();
            }
        });
        gqbd.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("gqbd").sendMessage();
            }
        });
        ljms.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                 new NetUtils("gqbdq").sendMessage();
            }
        });
    }}

2.NetUtils.java

package com.example.smarthome;

import java.io.OutputStream;
import java.net.Socket;

import android.os.Handler;

public class NetUtils {

    public String  message;
    public String  reTurnMes;
    public Handler handler;

    public NetUtils(String message) {
        this.message = message;
    }

    public NetUtils(String message, Handler handler) {
        this.message = message;
        this.handler = handler;
    }

    public void sendMessage() {

        new Thread(new Runnable() {

            @Override
            public void run() {

                try {
                     Socket client = new Socket("192.168.137.104",8085);

                    OutputStream out = client.getOutputStream();
                    out.write(message.getBytes());

                } catch (Exception e) {

                    e.printStackTrace();
                }
            }
        }).start();

    }
}

三、实物展示

基于树莓派的智能家居设计

Original: https://blog.csdn.net/mantouyouyou/article/details/125120893
Author: 秃秃秃秃哇
Title: 基于树莓派的智能家居设计

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/512589/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球