温度Linux 串口监测实时温度数据(linux串口获取)

温度是大多数应用场景中最常使用的物理参数,尤其是电子产品的安全性实验和电子设备的使用环境检测时,体现了温度的重要性。Linux串口监测实时温度数据可以使用一定的C语言程序来实现。

1. 设备准备

首先,我们需要准备:Linux设备,USB转TTL线,温度传感器(DHT11)。Linux设备用来接收传感器数据;USB转TTL线用以连接传感器与设备;温度传感器用来检测气温,这里我们采用DHT11作为传感器。

2. 连接设备

温度传感器DHT11有四根线:Vcc,Data,GND,NC。其中Vcc接5V,Data接USB转TTL线的RX,GND接GND,NC接无。然后将USB转TTL线的TX连接Linux设备的TTY。

3. 编写程序

程序的主要流程分为以下几部分:(1)声明变量:“temp, humi”,用来存放读取的温湿度,“fd”用来存放文件描述符;(2)打开串口:函数“open”用于打开文件描述符;(3)设置串口参数:函数“tcsetattr”用于设置串口参数;(4)读取温湿度:函数“read”用于读取传感器数据;(5)打印温湿度:函数“printf”用于打印温湿度信息;(6)关闭串口:函数“close”用于关闭文件描述符。

具体代码如下:

#include

#include

#include

#include

int open_serial_port()

{

int fd;

struct termios t_opt;

/*打开串口*/

fd=open(“/dev/ttyUSB0”, O_RDWR | O_NOCTTY | O_NDELAY);

if(-1 == fd)

{

printf(“Open Serial Port Error/n”);

return -1;

}

else

printf(“Open Serial Port Success/n”);

/*波特率设置*/

tcgetattr(fd, &t_opt);

cfsetispeed(&t_opt, B9600);/*设置输入波特率*/

cfsetospeed(&t_opt, B9600);/*设置输出波特率*/

/*数据位*/

t_opt.c_cflag &= ~CSIZE;

t_opt.c_cflag |= CS8;

/*规避奇偶位校验*/

t_opt.c_cflag &= ~PARENB;

/*无硬件流控*/

t_opt.c_cflag &= ~CNEW_RTSCTS;

/*使能接收*/

t_opt.c_cflag |= CREAD | CLOCAL;

/*屏蔽其他标志位*/

t_opt.c_cflag &= ~CRTSCTS;

t_opt.c_cflag &= ~CSIZE;

t_opt.c_cflag &= ~CSIZE;

/*关闭流控制*/

t_opt.c_lflag &=~(ICANON | ECHO | ECHOE | ISIG);

/*激活配置使其生效*/

/*设置等待时间和最小接受字符*/

t_opt.c_cc[VTIME] = 0;

t_opt.c_cc[VMIN] = 1;

/*如果发生数据溢出,接收数据,但是不再读取*/

tcflush(fd, TCIFLUSH);

if(tcsetattr(fd, TCSANOW, &t_opt))

{

perror(“Set Serial Attribute Error”);

return -1;

}

return fd;

}

float read_dht11(int fd)

{

unsigned char humi_h,humi_l;

unsigned char temp_h,temp_l;

int tme=100000;

unsigned char humi,temp;

int i;

float fhumi,ftemp;

unsgined char buf[5]

write(fd,”H”,1);

while(1)

{

usleep(tme);

if(0

{

humi_l=buf[0];

humi_h=buf[1];

temp_l=buf[2];

temp_h=buf[3];

break;

}

}

temp=temp_l;

humi=humi_l;

int sum=buf[4];

if(sum==(humi+temp_h+humi_h+temp_l))

{

printf(“temperature is : %d \nhumidity is : %d \n”,temp,humi);

fhumi=(float)humi;

ftemp=(float)temp;

return ftemp;

}

else

{

printf(“data error\n”);

return -1;

}

}

int main(int argc,char **argv)

{

int fd=open_serial_port();

while(1)

{

float temp = read_dht11(fd);

printf(“the temp is %f\n”,temp);


数据运维技术 » 温度Linux 串口监测实时温度数据(linux串口获取)