当前位置:   article > 正文

树莓派——linux智能家居_基于linux的智能家居系统

基于linux的智能家居系统

一、需求:

       主控芯片——树莓派

        控制端支持语音设备的输入uart,也可以是安卓app(tcp客户端)

        外设——灯:客厅灯、餐厅灯、二楼灯、卫生间灯;

                      火灾报警器

                        摄像头:监控、人脸锁

                        433M:泳池灯、实景智能窗帘

                        红外——电风扇、电视、空调、小夜灯

如下图,一边是指令工厂、一边是控制工厂,main函数负责组织架构

1、树莓派控制灯的实现

接线:灯的接线,orangepi2、5、7、8接4联继电器1,2,3,4,

                                客厅——2

                                餐厅——5脚

                                卫生间灯——7脚,

                                二楼灯——8脚,

代码:

mainPro.c

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "controlDevices.h"
  4. struct Devices *findDeviceByName(char *name,struct Devices *phead)
  5. {
  6. struct Devices *tmp =phead;
  7. if(phead==NULL){
  8. return NULL;
  9. }else{
  10. while(tmp!=NULL){
  11. if(strcmp(tmp->deviceName,name)==0){
  12. return tmp;
  13. }
  14. tmp=tmp->next;
  15. }
  16. }
  17. }
  18. int main()
  19. {
  20. char name[32];
  21. struct Devices *tmp=NULL;
  22. if(wiringPiSetup()==-1)
  23. return -1;
  24. struct Devices *pdeviceHead=NULL;
  25. pdeviceHead=addBathroomLightToDeviceLink(pdeviceHead);
  26. pdeviceHead=addupstairLightToDeviceLink(pdeviceHead);
  27. pdeviceHead=addresturantLightToDeviceLink(pdeviceHead);
  28. pdeviceHead=addlivingroomLightToDeviceLink(pdeviceHead);
  29. while(1){
  30. printf("你想要点亮哪盏灯\n");
  31. scanf("%s",name);
  32. tmp= findDeviceByName(name,pdeviceHead);
  33. if(tmp!=NULL){
  34. tmp->deviceInit(tmp->pinNum);
  35. tmp->close(tmp->pinNum);//这里控制打开和关闭,关闭是close,打开是open
  36. }
  37. }
  38. //1.指令工厂初始化
  39. //2.设备工厂初始化
  40. //3.线程池建立
  41. //3.1语音线程
  42. //3.2socket线程
  43. //3.3摄像头线程
  44. //3.4火灾线程
  45. return 0;
  46. }

controlDevices.h 

  1. #include <wiringPi.h>
  2. struct Devices
  3. {
  4. char deviceName[128];//名字
  5. int status;//状态
  6. int pinNum;
  7. int (*open)(int pinNum);//打开
  8. int (*close)(int pinNum);//关闭
  9. int (*deviceInit)(int pinNum);//初始化
  10. int (*readStatus)();//火灾传感器状态
  11. int (*changeStatus)(int status);
  12. struct Devices *next;
  13. };
  14. struct Devices *addBathroomLightToDeviceLink(struct Devices *phead);
  15. struct Devices *addupstairLightToDeviceLink(struct Devices *phead);
  16. struct Devices *addlivingroomLightToDeviceLink(struct Devices *phead);
  17. struct Devices *addresturantLightToDeviceLink(struct Devices *phead);

   livingroomLight.c

  1. #include "controlDevices.h"
  2. #include <stddef.h>
  3. int livingroomLightOpen(int pinNum)
  4. {
  5. digitalWrite(pinNum,LOW);
  6. }
  7. int livingroomLightClose(int pinNum)
  8. {
  9. digitalWrite(pinNum,HIGH);
  10. }
  11. int livingroomLightInit(int pinNum)
  12. {
  13. pinMode(pinNum,OUTPUT);
  14. digitalWrite(pinNum,HIGH);
  15. }
  16. int livingroomLightStatus(int status)
  17. {
  18. }
  19. struct Devices livingroomLight={
  20. .deviceName="livingroomLight",
  21. .pinNum=2,
  22. .open=livingroomLightOpen,
  23. .close=livingroomLightClose,
  24. .deviceInit=livingroomLightInit,
  25. .changeStatus=livingroomLightStatus
  26. };
  27. struct Devices *addlivingroomLightToDeviceLink(struct Devices *phead)
  28. {
  29. if(phead==NULL){
  30. phead=&livingroomLight;
  31. return phead;
  32. }else{
  33. livingroomLight.next=phead;
  34. phead=&livingroomLight;
  35. return phead;
  36. }
  37. };

resturantLight.c

  1. #include "controlDevices.h"
  2. #include <stddef.h>
  3. int resturantLightOpen(
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/390915
推荐阅读
相关标签
  

闽ICP备14008679号