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

2023-05-16

0 前言
    本文通过文件操作读取树莓派CPU温度,在linux系统中任何设备的操作都被抽象成为文件读写,通过读取/sys/class/thermal/thermal_zone0/temp文件中的内容便获得树莓派CPU的温度。本文通过以下几个部分说明如何读取和应用该温度参数—— 1.shell脚本操作;2linux文件IO操作,3.python文件操作; 4.通过python requset上传至yeelink平台。
    网上也有相似的文章,大致的方法为通过python获得CPU温度数据,然后在写入某个文件中,再通过curl脚本读取文件内容并传送至yeelink,为了提高文件读取效率,把缓存的温度文件挂载到RAM中。
    本文的方法要更简单些,通过python获得CPU温度,接着通过requset模块直接上传到yeelink。
    【相关博文】
    【 树莓派学习笔记——索引博文】
    【 cURL 学习笔记——结合yeelink平台】
    【 树莓派学习笔记——yeelink 远程控制LED】
1 shell操作
    先通过shell操作热身一下。登录树莓派之后使用指令查看CPU温度,依次输入以下指令:
    # 进入目录
    cd /sys/class/thermal/thermal_zone0 
    # 查看温度
    cat temp
    # 树莓派返回
    48692
    从以上操作可以获得以下几点
    【1】树莓派的CPU温度信息位于文件 /sys/class/thermal/thermal_zone0/temp中,该文件为一个只读文件。
    【2】根据网上的资料和实际情况,返回的温度参数应该除以1000,单位为摄氏度。
2 C语言文件IO操作
    新建一个名为cpu-temp.c文件,文件的具体内容如下:
#include <stdio.h>
#include <stdlib.h> 

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define TEMP_PATH "/sys/class/thermal/thermal_zone0/temp"
#define MAX_SIZE 32
int main(void) 
{
    int fd;
    double temp = 0;
    char buf[MAX_SIZE];
    
    // 打开/sys/class/thermal/thermal_zone0/temp
    fd = open(TEMP_PATH, O_RDONLY);
    if (fd < 0) {
        fprintf(stderr, "failed to open thermal_zone0/temp\n");
        return -1;
    }
    
    // 读取内容
    if (read(fd, buf, MAX_SIZE) < 0) {
        fprintf(stderr, "failed to read temp\n");
        return -1;
    }
    
    // 转换为浮点数打印
    temp = atoi(buf) / 1000.0;
    printf("temp: %.2f\n", temp);
    
    // 关闭文件
    close(fd);
}
    【运行代码】
    在cpu-temp.c目录下输入以下指令生成可执行文件,接着执行该文件。
    # 编译链接
    gcc -o test cpu-temp.c
    # 执行
    ./test
    # 执行返回
    temp: 49.2
2 使用python获得温度
    相比于C语言文件IO操作,python显得更简单些。编写一个名为yeelink-temp.py的文件,文件具体内容如下:
# -*- coding: utf-8 -*-
# 打开文件
file = open("/sys/class/thermal/thermal_zone0/temp")
# 读取结果,并转换为浮点数
temp = float(file.read()) / 1000
# 关闭文件
file.close()
# 向控制台打印
print "temp : %.1f" %temp
    在yeelink-temp.py目录下输入以下指令执行脚本
    # 执行脚本
    python yeelink-temp.py
    # 执行返回
    temp : 49.2
3 使用request上传至yeelink
    继续修改yeelink-temp.py
# -*- coding: utf-8 -*- 
import requests 
import json 
# 打开文件 
file = open("/sys/class/thermal/thermal_zone0/temp") 
# 读取结果,并转换为浮点数 
temp = float(file.read()) / 1000 
# 关闭文件 
file.close() 
# 向控制台打印结果 
print "temp : %.1f" %temp 

# 设备URI 
apiurl = 'http://api.yeelink.net/v1.1/device/1949/sensor/2510/datapoints' 
# 用户密码, 指定上传编码为JSON格式 
apiheaders = {'U-ApiKey': 'ffa3826972d6cc7ba5b17e104ec5xxxx', 'content-type': 'application/json'} 
# 字典类型数据,在post过程中被json.dumps转换为JSON格式字符串 {"value": 48.123} 
payload = {'value': temp} 
#发送请求 
r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload)) 

# 打印返回码
print "response status: %d" %r.status_code
    【运行代码】
    在yeelink-temp.py目录下输入以下指令执行脚本
    # 运行脚本
    python yeelin-temp.py
    # 执行返回
    temp : 49.2
    response status: 200
    【说明】
    【1】requests.post(api, headers, data)需要代码三个参数,设备URI,请求头(包括用户密码),推送数据(JSON格式)。
    【2】payload = {'value': temp} 负载数据写成python字典格式。
    【3】data=json.dumps(payload) 发送请求时通过dumps方法进行转化,完成字典到JSON字符串的转换。
    【必要的验证】
    通过python脚本上传了温度参数,为了验证是否上传成功,可通过curl指令查询传感器的最新数据。
    在编写博文时,yeelink平台API正在进行更新测试,下面分别调用新老API,查看温度的返回结果。
    【yeelink v1.0版本API】
    编写一个shell脚本——read-sensor-temp-v1.0.sh,具体内容如下:
    APIKEY="U-ApiKey:ffa3826972d6cc7ba5b17e104ec5xxxx"
    APIURL="http://api.yeelink.net/v1.0/device/1949/sensor/2510/datapoints"
    curl --request GET --header $APIKEY $APIURL
    【返回结果】
    {"timestamp":"2014-07-28T20:56:51","value":49.23}
    【yeelink v1.1版本API】
    修改上述脚本中的API版本编号,有v1.0改为v1.1。从返回结果可以发现,1.1版本的API返回的内容信息更多。
    【返回结果】
    {"value":49.23,"timestamp":"2014-07-28T20:56:51","sensor_id":"2510","device_id": "1949"}
     
4 总结和展望
    【1】json.dumps(payload)把温度结果转化为JSON字符串格式
    【2】下面博文适当修改yeelink-temp.py,做到开机运行,定时上传温度数据。
    
5 参考资料
【1】 让树莓派说出自己的“体温”--cpu温度+gpu温度
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派学习笔记——获取树莓派CPU温度 的相关文章

  • vCPU 是否可以使用两台不同硬件计算机的不同 CPU

    我搜索过这个问题 但似乎没有得到公平的答案 假设我不想创建一个具有 vCPU 的虚拟机 并且该 vCPU 必须有 10 个核心 但我只有 2 台计算机 每台计算机有 5 个物理 CPU 核心 是否可以通过依赖这两个物理 CPU 来创建一个
  • 用于查找 UNIX 计算机上 CPU 信息的命令

    您知道是否有一个 UNIX 命令可以告诉我 Sun OS UNIX 机器的 CPU 配置是什么 我也在尝试确定内存配置 有没有 UNIX 命令可以告诉我这一点 AFAIK 没有标准的 Unix 命令 我没有使用过Sun OS 但是在Linu
  • Python CPU 计数在一台 Windows 服务器上工作但在另一台服务器上不起作用?

    我编写的代码可以在 Windows XP 和 Windows Server 2008 64 位上运行 但是 我刚刚启动了 Amazon Windows 64 位实例 代码失败 非常简单 看起来像这样 import multiprocessi
  • 您的CPU不支持VT-x

    我已经创建了 AVD 但是当我尝试运行 android 程序时 它显示 错误 您的CPU不支持VT x 我在 BIOS 中启用了虚拟化技术 但当我尝试运行 Android 程序时仍然出现此错误 有两种情况 使用VMware 进入 WM gt
  • 执行长字传输到 CPU 需要多少个周期和大小

    该任务针对架构 ColdFire 处理器 MCF5271 我不明白执行到 CPU 的长字传输或字传输需要多少个周期以及什么大小的周期 我正在阅读图表 但不明白其中有何联系 非常感谢任何评论 我附上了两个例子和答案 数据总线大小 https
  • 如何使用C获取Linux中的CPU数量?

    Linux 中是否有 API 可以获取可用 CPU 的数量 我的意思是 不使用 proc cpuinfo 或任何其他系统节点文件 我使用 sched h 找到了这个实现 int GetCPUCount cpu set t cs CPU ZE
  • GCC对读/写指令的重新排序

    Linux 的同步原语 自旋锁 互斥锁 RCU 使用内存屏障指令来强制内存访问指令重新排序 这种重新排序可以由 CPU 本身完成 也可以由编译器完成 有人可以展示一些 GCC 生成的代码示例 其中完成了此类重新排序吗 我主要对 x86 感兴
  • 多处理和并行处理之间的比较

    有人能告诉我多处理和并行处理之间的确切区别吗 我有点困惑 感谢您的帮助 多重处理 多重处理是使用两个或多个中央处理单元 单个计算机系统中的 CPU 该术语还指 系统支持多个处理器和 或的能力 在他们之间分配任务的能力 并行处理 在计算机中
  • GPU 的延迟是多少?

    我可以找到 CPU 核心与其缓存 主内存等之间的 CPU 周期延迟 但似乎很难找到有关现代 GPU 的类似信息 有谁知道 GPU 的延迟 特别是现代 nvidia GPU GF110 或更高版本 与其内存之间的延迟 谢谢 GPU 内存确实具
  • 如何让Java使用机器上的所有CPU资源?

    我有时用 Java 编写代码 我注意到有时它在多核机器上使用超过 100 的 CPU 我现在正在一台具有 33 个 CPU 亚马逊的 EC2 的多核机器上运行一些代码 我想让我的 Java 进程使用所有可用的 CPU 这样它将具有非常高的机
  • 单核上的多线程有什么意义?

    我最近一直在研究 Linux 内核 并回顾了大学操作系统课程的时代 就像那时一样 我正在玩线程之类的东西 一直以来我一直假设线程是自动在多个核心上同时运行但我最近发现您实际上必须显式编写代码来处理多个核心 那么单核上的多线程有什么意义呢 我
  • CPU利用率和能耗之间有什么关系?

    描述 CPU 利用率和能源消耗 电 热方面 之间关系的函数是什么 我想知道它是否是线性 次线性 exp 等 我正在编写一个程序 可以降低其他程序的 CPU 利用率 负载 我主要关心的是我能在能源方面受益多少 此外 我的服务器主要用作数据中心
  • k8s hpa无法获取cpu信息[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我设置了 hpa 使用命令 sudo kubectl autoscale deployment e7 build 64 cpu perce
  • 使用 AMD FX 4100 四核获取 Linux ubuntu 12.10 上的 CPU 温度

    有很多类似的问题 但我还没有找到解决方案 如何在 Linux Ubuntu 12 10 上使用 C 或 C 获取 CPU 温度无需致电 sensors 我当然可以从文件中读取它 但是我找不到它在 12 10 中的存储位置 简单地读取文本文件
  • 哪种架构称为非均匀内存访问(NUMA)?

    根据wiki http en wikipedia org wiki Non uniform memory access 非均匀内存访问 NUMA 是一种用于多处理的计算机内存设计 其中内存访问时间取决于相对于处理器的内存位置 但尚不清楚它是
  • python 进程占用 100% CPU

    我正在尝试运行 python 应用程序并根据指定的时间间隔执行操作 下面的代码持续消耗 100 的 CPU def action print print hello there interval 5 next run 0 while Tru
  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • NodeJS CPU 一次飙升至 100%

    我有一个用 NodeJS 编写的 SOCKS5 代理服务器 我正在使用原生net and dgram打开 TCP 和 UDP 套接字的库 它可以正常工作大约 2 天 所有 CPU 的最大利用率约为 30 两天没有重新启动后 一个 CPU 峰
  • 分支预测器和分支目标缓冲区如何共存?

    我的问题是它们如何在现代 CPU 架构中共存并协同工作 你把它稍微颠倒了 每次获取时 您都会索引到分支预测器 它会告诉您刚刚收到的指令是否will be解码为已采取的分支 如果没有 则获取下一个连续地址 但是 如果您的分支预测器说它将是一个
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚

随机推荐

  • centos 6.x安装squid

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 不设置用户认证 安装 安装 yum install squid yum install httpd 查看版本 rpm qa g
  • VMware清理vmdk文件,解决vmdk越来越大的问题

    目录 压缩 vmdk方法在虚拟机上操作在主机上操作 参考链接 问题 xff1a 主机是Windwos xff0c 安装了VMWare 在VMWare中安装了虚拟机Ubuntu操作系统 Ubuntu本身不大 xff0c 但是 vmdk很大 网
  • 安全-认证授权、数据脱敏

    一 认证授权 JWT xff1a JWT xff08 JSON Web Token xff09 是一种身份认证的方式 xff0c JWT 本质上就一段签名的 JSON 格式的数据 由于它是带有签名的 xff0c 因此接收者便可以验证它的真实
  • 树莓派4b 串口通信实现自发自收

    1 树莓派串口映射设置 运行以下命令 xff1a ls dev al 出现串口映射的情况 xff0c 但是此时是在默认状态下 xff0c serial0 就是GPIO14 15 是映射到ttyS0的 xff0c serial1 xff08
  • 按要求编写一个Java应用程序程序: (1)定义一个接口CanFly,描述会飞的方法public void fly(); (2)分别定义类飞机和鸟,实现CanFly接

    代码 第三题 xff1a 按要求编写一个Java应用程序程序 xff1a xff08 1 xff09 定义一个接口CanFly xff0c 描述会飞的方法public void fly xff08 2 xff09 分别定义类飞机和鸟 xff
  • plc热电偶模块模拟量数据波动原因

    要找到模拟数据波动的根本原因 可能是以下原因 您可能使用了自供电或隔离的传感器电源 xff0c 并且两个电源没有相互连接 xff0c 即模拟输入模块的电源接地和传感器的信号接地没有连接 这会产生上下振动的高共模电压 xff0c 从而影响模拟
  • C #Winform窗体自适应

    说明 xff1a Winform让窗体内的控件随着窗体的大小而改变 xff0c 而且能让指定的控件始终处于居中位置 封装成类 xff0c 直接拷贝过去即可 一 类源码如下 xff1a using System using System Co
  • Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)解决方案

    docker service Docker Application Container Engine Loaded loaded usr lib systemd system docker service enabled vendor pr
  • emWin - Movie篇

    STemWin版本 xff1a 544 xff08 ST购买了emWin的license xff0c 可以在ST芯片中使用emWin工具包 xff0c 就叫STemWin xff09 emWin开发工具包可以转换JPG BMP GIF等各种
  • 大规模集群故障处理

    我相信每一个集群管理员 xff0c 在长期管理多个不同体量及应用场景的集群后 xff0c 都会多少产生情绪 其实这在我看来 xff0c 是一个很微妙的事 xff0c 即大家也已经开始人性化的看待每一个集群了 既然是人性化的管理集群 xff0
  • ADRC调试经验(已调通)

    自抗扰控制的组成 有关自抗扰的相关内容 xff0c 韩老师在他的一系列论文中已经描绘的非常清晰了 xff0c 具体资料可以点击这里下载 其中对于TD和ESO这两个部分其实是比较好调节的 xff0c 很容易就能够获得很好的效果 比较难调节的参
  • 浏览器的同源策略

    https developer mozilla org zh CN docs Web Security Same origin policy 这篇翻译不完整 请帮忙从英语翻译这篇文章 同源策略限制了从同一个源加载的文档或脚本如何与来自另一个
  • centos简单解决报错-bash 未找到命令

    centos报错 bash 未找到命令 在使用纯净镜像的时候 经常找不到一些额外的命令 想用但是不知道怎么安装 拿telnet 和netstat 举例 telnet yum provides telnet 这里只需要 yum y span
  • [问题已处理]-docker build出来的镜像没有更新成功

    导语 xff1a 记录一下docker build镜像的坑 如果修改代码文件的话 xff0c docker build 有时候会不替换文件 xff0c 而会使用cache xff0c 导致代码文件没有更新 第一次构建镜像 产生了cache
  • [问题已处理]在docker中使用nohup

    导语 xff1a docker运行容器是否能使用nohup 以下是测试在不同的情况下使用nohup 先启动一个容器 仅看进程的pid号参考 docker run it rm ubuntu 16 04 bash sleep 5 amp amp
  • k8s-集群搭建的三种方式和区别,kubeadm、minikube,二进制包

    k8s 集群搭建的三种方式 xff0c 目前主流的搭建k8s集群的方式有kubeadm minikube xff0c 二进制包 kubeadm 是一个工具 xff0c 用于快速搭建kubernetes集群 xff0c 目前应该是比较方便和推
  • 精确算法、启发式算法、元启发式算法及增长方式浅析

    组合优化问题是通过用数学方法的研究去寻找离散事件的最优编排 分组 次序或筛选等 xff0c 其变量是离散分布的 对于结构化的组合优化问题 xff0c 其解空间的规模能够得到控制 xff0c 对于这样的问题 xff0c 使用精确算法就可以求得
  • 重构一个快不可维护的项目

    历史原因 xff0c 接手了一个一直堆业务逻辑 xff0c 没有重构过的项目 xff0c 简单看了一下代码就感觉麻头皮 xff0c 满目都是一个方法里面大段的代码 xff0c 阅读起来极度困难 可以合并的类没有合并 xff0c 导致一个请求
  • 芯片端子的多路复用

    嵌入式软件的开发 xff0c 经常要和芯片打交道 xff0c 和个人电脑的通用平台的CPU使用X86或X64架构不同 xff0c 嵌入式电子产品使用的主控芯片是各种各样的 xff0c 从8051单片机 xff0c 到ARM Cortex M
  • 树莓派学习笔记——获取树莓派CPU温度

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