树莓派I2C连接18B20

本文介绍如何通过编程读取DS18B20温度传感器的数据,并将数据上传至Yeelink平台的方法。文章详细展示了在Raspberry Pi上配置DS18B20传感器的步骤,包括加载必要的内核模块、获取温度数据并进行单位换算,最后通过Python脚本将温度值发送给Yeelink。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按图连接设备

载入模块

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices/

显示结果

ls
pi@raspberrypi:~$ cd /sys/bus/w1/devices/
pi@raspberrypi:/sys/bus/w1/devices$ ls
28-00000494cb79 w1_bus_master1

查看当前温度

cd 28-00000494cb79
cat w1_slave
显示结果:
70 01 4b 46 7f ff 10 10 e1 : crc=e1 YES
70 01 4b 46 7f ff 10 10 e1 t=23000
第二行的t=23000就是当前的温度值,要换算成摄氏度,除以1000,即当前温度为23000/1000=23摄氏度。

将温度数据上传到yeelink的demo

 

#coding=utf8
#!/usr/bin/env python
import time
import json
import urllib
import urllib2
import sys

def DS18B20(name):
    tfile = open("/sys/bus/w1/devices/%s/w1_slave" %name) 
    #读取文件所有内容
    text = tfile.read()
    #关闭文件
    tfile.close()
    #用换行符分割字符串成数组,并取第二行
    secondline = text.split("\n")[1]
    #用空格分割字符串成数组,并取最后一个,即t=23000
    temperaturedata = secondline.split(" ")[9]
    #取t=后面的数值,并转换为浮点型
    temperature = float(temperaturedata[2:])
    #转换单位为摄氏度
    temperature = temperature / 1000
    return temperature
 
def update(name):
    temp_value = DS18B20(name)
    if(temp_value<50):
        temp_str = str(temp_value)
        url = 'http://api.yeelink.net/v1.0/device/1000/sensor/1000/datapoints'
        values = json.dumps({"value":temp_str})
        headers = {'U-ApiKey':'123456abcdef'}
        req = urllib2.Request(url, values, headers)
        urllib2.urlopen(req)
        return temp_str
    else:
        return ""
       
if __name__ == '__main__':
    name = sys.argv[1]
    while True:
        temp = update(name)
        if(temp):
            print '成功 ' + temp
        time.sleep(20)

 

 

转载于:https://www.cnblogs.com/catmelo/p/3154300.html

### 连接 DS18B20 温度传感器到 Raspberry Pi 5 Raspberry Pi 5 支持通过单总线接口(1-Wire)与 DS18B20 温度传感器进行通信。以下步骤描述了如何正确连接和配置 DS18B20读取温度数据。 #### 硬件连接 1. **准备材料**: - DS18B20 温度传感器 - 4.7kΩ 上拉电阻 - 面包板和跳线 2. **连接方式**: - 将 DS18B20 的 VDD 引脚连接到 Raspberry Pi 的 3.3V 电源(通常为物理引脚 1)。 - 将 DS18B20 的 GND 引脚连接到 Raspberry Pi 的接地(通常为物理引脚 6)。 - 将 DS18B20 的数据引脚(DQ)连接到 Raspberry Pi 的 GPIO 4(物理引脚 7),并在 DQ 和 VDD 之间连接一个 4.7kΩ 的上拉电阻[^1]。 #### 启用单总线接口 1. **打开 Raspberry Pi Configuration 工具**: - 在终端中输入 `sudo raspi-config`。 - 选择 `Interfacing Options`。 - 选择 `1-Wire`,然后选择 `Enable`。 - 完成设置后重启 Raspberry Pi。 2. **验证连接**: - 重启后,进入 `/sys/bus/w1/devices/` 目录。 - 列出目录中的文件,应能看到一个以 `28-` 开头的文件夹,表示 DS18B20 设备。 - 进入该文件夹并查看 `w1_slave` 文件,其中应包含温度数据。 #### 使用 Python 读取温度数据 以下是一个使用 Python 读取 DS18B20 数据的示例代码: ```python import os import time # DS18B20 设备文件路径 device_folder = '/sys/bus/w1/devices/28-00000xxxxxxx' # 替换为实际设备ID device_file = device_folder + '/w1_slave' def read_temp_raw(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 return temp_c # 读取并打印温度 while True: print("Current Temperature: {:.2f}°C".format(read_temp())) time.sleep(1) ``` #### 数据预处理 为了提高温度数据的准确性,可以对数据进行滤波处理。以下是一个使用中值滤波的示例: ```python import numpy as np # 模拟温度传感器数据 raw_data = np.random.normal(25, 2, 100) # 生成100个带噪声的温度数据 # 中值滤波 window_size = 5 filtered_data = [] for i in range(len(raw_data) - window_size + 1): window = raw_data[i:i + window_size] filtered_data.append(np.median(window)) # 打印原始数据和滤波后的数据 print("Raw Data:", raw_data) print("Filtered Data:", filtered_data) ``` 通过以上步骤,可以成功将 DS18B20 温度传感器连接到 Raspberry Pi 5 并读取温度数据。此外,通过数据预处理技术如中值滤波,可以进一步提高数据的准确性和可靠性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值