温度实时监控上报(客户端)

温度实时监控上报客户端功能1、树莓派上运行socket客户端程序,每隔30秒以字符串“ID/时间/温度”形式上报 采样温度,其中ID为树莓派的编号,便于服务器端区别是哪个树莓派客户端,如“RPI0001/2019-01-05 11:40:30/30.0C”;2、通过命令行参数指定服务器IP地址和端口以及间隔采样时间;3、程序放到后台运行,并通过syslog记录程序的运行出错、调试日志;4、程序能够捕捉kill信号正常退出;代码1、该模块是用于客户端与服务器建立连接。#include <
摘要由CSDN通过智能技术生成

温度实时监控上报

客户端功能

1、树莓派上运行socket客户端程序,每隔30秒以字符串“ID/时间/温度”形式上报 采样温度,其中ID为树莓派的编号,便于服务器端区别是哪个树莓派客户端,如“RPI0001/2019-01-05 11:40:30/30.0C”;
2、通过命令行参数指定服务器IP地址和端口以及间隔采样时间;
3、程序放到后台运行,并通过syslog记录程序的运行出错、调试日志;
4、程序能够捕捉kill信号正常退出;

代码

1、该模块是用于客户端与服务器建立连接。

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <arpa/inet.h>
//port和ser_ip由用户自己输入指定的服务器端口和地址
int connect_server(int port, char *server_ip)
{
   
    int                      con_fd = -1; 
    struct sockaddr_in       ser_addr; 
    //创建socket_fd
    con_fd = socket(AF_INET, SOCK_STREAM, 0); 
    if (con_fd < 0) 
    {
    
        printf("Creat socket failure:%s\n",strerror(errno)); 
        
        return -2; 
    } 
    
    //设置服务器端IP地址及端口信息
    memset(&ser_addr, 0, sizeof(ser_addr)); 	//ser_addr结构体变量占用内存区域清零
    ser_addr.sin_family = AF_INET; 				//设定协议族为AF_INET,即使用ipv4(32位)与端口号(16位)的组合
    ser_addr.sin_port = htons(port);			//调用htons()函数,将端口号由主机字节序转变成网络字节序
    inet_aton(ser_ip, &ser_addr.sin_addr); 		//将目前字符串形式的IP地址转变成一个32位的网络序列的IP地址
    
    //与服务器端建立连接,并判断是否成功连接
    //ipv4对应sockaddr_in类型,此时应进行强制类型转换为通用套接字sockaddr类型
    if (connect(con_fd, (struct sockaddr *)&ser_addr, sizeof(ser_addr)) < 0) 
    {
    
        printf("Connect server failure:%s\n", strerror(errno)); 
        return -3; 
    } 

    //连接成功,打印相关信息
    printf("Establish the connection with server successfully\n");

	//返回客户端创建的socket_fd
    return con_fd;
} 

2、该模块用于采集温度数据

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>

int temperper_get(float *temper);

int temperper_get(float *temper)
{
   
    int              fd = -1;
    int              found = 0;
    char             f_name[32];
    char             cache[512];
    char             *ptr = NULL;
    char             path[128]="/sys/bus/w1/devices/";
    DIR              *dirp = NULL;
    struct dirent    *direntp = NULL;

	//打开温度传感器设备文件夹
    dirp = opendir(path);   
    
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值