该楼层疑似违规已被系统折叠隐藏此楼查看此楼
接下来就是上代码的时候了(C语言)
/*
* main.c
*
* Created on: 7月24日
* 说明:程序使用的事wiringPi。PWM接口为8
* Author: cheetah
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define _FANPIN 8
#define MAX_SIZE 32
#define TEMP_PATH "/sys/class/thermal/thermal_zone0/temp"
int initWiringPi();
float getCpuTemp();
void dieError(char *errors);
int main(void)
{
//初始化
if (initWiringPi() < 0)
{
return -1;
}
printf("[ OK ]Start geeiot smart fan controler.\n");
while (1)
{
//获取CPU温度 浮点数据
float temp = getCpuTemp();
//printf("CPU tempreture is %0.2f\n", temp);
//如果小于0,说明获取失败,设置50%电压
if (temp < 0)
{
softPwmWrite(_FANPIN, 50);
}
else if (temp < 30)
{
softPwmWrite(_FANPIN, 0);
}
else if (temp > 30 && temp < 40)
{
softPwmWrite(_FANPIN, 30);
}
else if (temp > 40 && temp < 50)
{
softPwmWrite(_FANPIN, 40);
}
else if (temp > 50 && temp < 60)
{
softPwmWrite(_FANPIN, 50);
}
else
{
softPwmWrite(_FANPIN, 80);
}
delay(1000);
}
return 0;
}
/*
* 初始化wiringPi
*/
int initWiringPi()
{
if (wiringPiSetup() != 0)
{
dieError("WiringPi setup failed!");
return -1;
}
if (softPwmCreate(_FANPIN, 0, 100) != 0)
{
dieError("GPIO soft pwm setup failed!");
return -2;
}
return 0;
}
/*
* 获取树莓派CPU温度
*/
float getCpuTemp()
{
int fd;
float temp = 0;
char buf[MAX_SIZE];
// 打开/sys/class/thermal/thermal_zone0/temp
fd = open(TEMP_PATH, O_RDONLY);
if (fd < 0)
{
dieError("Failed to open thermal_zone0/temp");
return -1;
}
// 读取内容
if (read(fd, buf, MAX_SIZE) < 0)
{
dieError("Failed to read temp\n");
return -1;
}
// 转换为浮点数打印
temp = atoi(buf) / 1000.0;
return temp;
}
/*
* 输出错误信息
*/
void dieError(char *errors)
{
if (strlen(errors) <= 0)
{
return;
}
else
{
printf("[ FAILED ]%s\n", errors);
}
}