引脚对照表

先放一张引脚对照表。

我直接把风扇接在了BOARD编码的39号引脚和40号引脚上。通过40号引脚的高低电平控制风扇的转动与停止。
ps:这里有点问题,我最开始用的是一个小风扇,用40号引脚上的电压可以带动风扇,后面我换了一个风扇就不行了,通过程序控制风扇开和关时能通过万用表看到引脚上电压的变化,但风扇就是不动,接到2号或者4号引脚又可以了,但是2号和4号引脚又不能通过编程控制电压,所以有点难搞。这里应该可以接一个继电器,通过29号引脚控制继电器的通断进而控制风扇,我不懂硬件,就不搞了这个了。

代码

#include <wiringPi.h>      //这个库的详细介绍 在文中末尾
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>#define FANIO 29    //风扇接线  这里的29是wiringPi编码,就是上面说的40号引脚
#define DMT 45      //设置默认上限温度//风扇控制
//参数:
//  0 :关闭风扇
//  1 :打开风扇
void fanCtrl(int stat)
{wiringPiSetup();    //硬件初始化pinMode(FANIO,OUTPUT);      //设置FANIO为OUTPUT模式if(stat){digitalWrite(FANIO,HIGH);       //设置为高电平}else{digitalWrite(FANIO,LOW);        //设置低电平}
}//获取CPU温度 返回为 CPU温度×1000
int getTemp()
{int temp;//打开存放CPU温度的文件FILE *file=fopen("/sys/class/thermal/thermal_zone0/temp","r");fscanf(file,"%d",&temp);    //读取温度fclose(file);return temp;
}//启动风扇自动控制
//参数为CPU温度上限 x 1000
void fanAuto(int maxT)
{int temp=0;while(1){temp=getTemp();         //获取当前CPU温度if(temp>maxT){fanCtrl(1);         //开启风扇}else{fanCtrl(0);         //关闭风扇}delay(5*1000);  //延时5*1000 ms}
}int main(int argc,char *argv[])
{int tempMax=50;     //温度上限设置int temp;           //当前温度char cmmd[20];      //命令if(argc==1){//参数错误,输出提示printf("参数:\n\-open: 打开风扇\n\-close: 关闭风扇\n\-auto [temp=%d] :设置温度上限,触发上限时自动开启风扇\n\-v [temp=%d]:实时监视\n",DMT,DMT);exit(1);}strcpy(cmmd,argv[1]);if(strcmp(cmmd,"-open")==0)     //开启风扇{fanCtrl(1);printf("风扇已开启\n");exit(0);}if(strcmp(cmmd,"-close")==0)    //关闭风扇{fanCtrl(0);printf("风扇已关闭\n");exit(0);}if(strcmp(cmmd,"-auto")==0)     //自动模式{if(argc==3){tempMax=atoi(argv[2]);      //获取设置的上限值}else{tempMax=DMT;                //没有设置,使用默认值}pid_t pid=fork();     //创建进程执行温度检测if(pid==0)          //{fanAuto(tempMax*1000);}if(pid==-1){printf("开启失败!\n");exit(1);}printf("开启成功!上限为:%d\n",tempMax);exit(0);}if(strcmp(cmmd,"-v")==0)        //实时监视{if(argc==3){tempMax=atoi(argv[2]);}else{tempMax=DMT;}while(1){temp=getTemp();printf("当前温度为:%.2f°C\n",(float)temp/1000);if(temp>(tempMax*1000)){fanCtrl(1);printf("超过上限,风扇已开启!\n");    }else{fanCtrl(0);printf("温度正常,风扇已关闭!\n");}delay(1500);                                                                                                     }}printf("参数:\n\-open: 打开风扇\n\-close: 关闭风扇\n\-auto [temp=%d] :设置温度上限,触发上限时自动开启风扇\n\-v [temp=%d]:实时监视\n",DMT,DMT);return 0;
}     

编译:

gcc fanCtrl.c -o fanCtrl -l wiringPi

运行:

问题

每开一次自动模式就会在后台创建一个进程,要手动关闭
如图:

这个我目前没办法解决,先手动关闭吧,也不是很麻烦。
关闭自动模式留下的进程:

pkill fanCtrl

优化

每次都要cd到这个目录 或者 输入全路径 才可以运行这个程序,很麻烦,
我们可以将生成的可执行文件放到bin目录下,这样就可以在任何目录控制风扇了,

比如放到“/usr/local/bin”下

sudo mv fanCtrl /usr/local/bin/

这样就能在其他目录执行这个风扇控制程序了

当然也可以建立软链接:
这样

sudo ln -s /home/pi/code/c/fanCtrl/fanCtrl /usr/local/bin/fanCtrl

参考:【树莓派wiringPi库详解】(引脚图也是这里扒来的)

【树莓派】CPU温度控制风扇(C语言)相关推荐

  1. 树莓派pwm调速c语言,树莓派智能温控风扇(PWM控制风扇转速)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 接下来就是上代码的时候了(C语言) /* * main.c * * Created on: 2017年7月24日 * 说明:程序使用的事wiringPi. ...

  2. python获取cpu温度_如何获得树莓派CPU实时温度值

    [前言] 任何的电子设备在工作过程中必定会产生发热的现象,而不控制好设备的温度的话,很有可能会损坏设备,或者照成设备的性能下降,本文将通过学习如何读取树莓派CPU温度值,方便后期对树莓派做一些相应的控 ...

  3. 树莓派输出pwm波c语言,02树莓派4B—C语言编程——PWM

    01树莓派直接输出PWM波 -- 硬件PWM程序  (推荐使用) #include #include #include //必不可少 int main( void) { int pwm_gpio5 = ...

  4. 树莓派学习笔记——获取树莓派CPU温度

    0 前言 本文通过文件操作读取树莓派CPU温度,在linux系统中任何设备的操作都被抽象成为文件读写,通过读取/sys/class/thermal/thermal_zone0/temp文件中的内容便获 ...

  5. 如何获得树莓派CPU实时温度值

    如何获得树莓派CPU实时温度值 [前言] 任何的电子设备在工作过程中必定会产生发热的现象,而不控制好设备的温度的话,很有可能会损坏设备,或者照成设备的性能下降,本文将通过学习如何读取树莓派CPU温度值 ...

  6. 树莓派3B+温控风扇

    树莓派3B+温控风扇 已添加散热片的树莓派3B+,在空载工作过程中温度过高,需要增加风扇达到物理降温的效果.但在使用过程中,风扇发出的声音过高,需要在温度较低的情况下停止风扇的工作. 准备材料 树莓派 ...

  7. DHT11大气温湿度模块+直流电机实现根据温度控制风扇转动

    欢迎使用Mixly编辑器 DHT11大气温湿度模块+直流电机实现根据温度控制风扇转动 今天我们介绍一个可以测量温度及湿度的传感器-DHT11; 生活水平提高,人们不仅对环境温度有要求,当温度过高时我们 ...

  8. 计算机cpu散热方式,调整电脑CPU散热风扇转速的简单方法【图文】

    电脑风扇对于电脑的使用和寿命有着密不可分的关系,怎么调节电脑的风扇的转速来控制电脑CPU的散热?首先电脑风扇转速的控制,通常有两种方法可以进行调节,第一种就是一刀切式的调整,直接到BIOS里面手动将风 ...

  9. 计算机cpu的风扇是多少电压,哪位知道cpu风扇电压是多少?

    A:处理器在工作时都会产生大量的热量,所以工程师在设计处理器时考虑到散热问题会给每个盒装的处理器里放置一个散热风扇(极少的AMD黑盒处理器没有风扇).CPU风冷风扇分两种:下压式风扇和侧*式风扇,两种 ...

最新文章

  1. 仿苹果手机闹钟_你会用苹果手机吗?这些快捷指令快速设置一下,好用度提升10倍...
  2. php如何存到磁盘,php缓存----磁盘缓存
  3. 供给测结构性改革内容_智能包装结构,提高可测性
  4. sd_fusing.sh将uboot烧写到SD卡
  5. 《贪玩蓝月》年入10亿?背后的玩法也太“流氓”了
  6. java中修改对象类的数据_Java中创建对象的六个步骤 细分后(new关键字)对象头详细介绍...
  7. Xshell/Xftp个人完全免费版
  8. 计算机处理器性能排名,cpu天梯图2018最新版 2018电脑cpu处理器性能排行榜
  9. VirtualBox虚拟机安装
  10. Flink SQL语法检查
  11. 【Android 进阶】开发APP常见的错误
  12. 乐山计算机学校有几个,乐山计算机学校全国排名是多少,好不好?
  13. 已解决SyntaxError: invalid syntax
  14. Windows Phone 7体验
  15. FPGA 使用PCIE高速接口
  16. 轨道看盘系统 通达信选股公式 看盘指标详解主图/副图
  17. 帝国CMS7.5微信扫码登录插件 帝国cms插件分享
  18. 用python对文件内容差异对比
  19. 科普 | 生物多样性: 大自然的新陈代谢
  20. 华为手机流量日显示无服务器,华为手机打开移动数据却无法上网怎么解决教程...

热门文章

  1. 如何去除视频上的水印?
  2. 好心情精神心理科医生:精神病人为何会出现幻觉?
  3. mysql练习-数据查询之连接查询
  4. 华为手机如何固定横屏_英雄联盟手游,华为手机如何安装,亲测已经开撸
  5. Matplotlib全部基础可视化图形及实现代码(共11种图形)
  6. HTML 5种空格表示 对齐文本框
  7. 基于vue + axios + lrz.js 微信端图片压缩上传
  8. 线程池的五种状态及创建线程池的几种方式
  9. 京东方要向苹果供应OLED面板还差好几步
  10. bzoj1001 [BeiJing2006]狼抓兔子(最小割/平面图最大流转对偶图最短路)