联网获取树莓派温度

很早就想尝试一下用自己服务器试一下物联网,但一直比较忙没有付诸实践,现在正好寒假有空,又买了树莓派,就拿树莓派来试下吧

环境:pc+阿里云学生主机+树莓派4,均安装python3.7.1,vscode+sftp插件远程部署代码(这个吹爆,特别配合Flask库的debug模式,本地ctrl+s后就直接上传云端并重新运行)

首先,先在树莓派上找个有意义的数据,这里就定为cpu温度了,由于linux一切均是文件,获取其值就是打开一个文件读取的过程,代码如下

file = open("/sys/class/thermal/thermal_zone0/temp")
tmp = float(file.read()) / 1000
file.close()

对比c可以说是相当简单了……

然后发送数据,有两种http数据传递方式:GET和POST,我这里使用了POST,用json数组来传递

data = {
'tmp': tmp
}
url = 'http://duya12345.top:39123/senddata'
web_data = requests.post(url=url, data=json.dumps(data)).text
print(web_data)

这两部分组合起来,再加个循环延时,树莓派部分就结束了,接下来写服务器端

服务器端我们要用到一个轻量级http库:Flask,接收之前树莓派传过来的数据部分代码如下:

app = Flask(__name__)

@app.route('/senddata', methods=['POST'])
def test_recv():
    if not request.data: # 检测是否有数据
        return 'no data'
    tmp_json = request.data # json.loads(tmp_str)
    print(tmp_json)
    return 'yes, i\'ve recived'

 

测试一下,服务器确实收到了数据,客户端也不停收到服务器的回应

然后新开一个api地址,对get请求这个地址的其他客户端返还此数据

@app.route('/resenddata', methods=['GET'])
def test_send():
    return tmp_json

测试发现tmp_json是空的,需要在app外定义变量,并在上一个route(接收程序)内定义为globle tmp_json,再用浏览器访问此api即可看到数据

最后是获取数据客户端,这就很简单了,get一下地址,获取到json数据,转换为字典后提取tmp值即可

源代码地址

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注