如果我们必须要使用DS18B20的防水版,则需要连接3个ping,它们分别是:红色,黑色,黄色,并且未连接下一个ping(也就是引脚)。

如果可以的话,利用高温版本的防水版,需要橙色针脚(ping)连接到3.3V上面,白色接地线,蓝色针脚连接到针脚4(4ping)。

在3.3V和数据引脚之间也需要4.7K-10K的电阻。

虽然DS18B20看起来像一般市面上的普通传感器,但它却有许多复杂的内部组件。

它的芯片包括这块板专用的单总线串行接口、逻辑控制部分单元和核心部分温度传感器。

它的输出针脚输出数字信息,以便Raspbian/ococentalis可以在某一个针上。在运行项目之前,使用SSH工具来进行一次测试是最稳妥的。

sudomodprobew1-gpio

sudomodprobew1-thermcd/sys/bus/w1/devices

cd28-xxxx(changethistomatchwhatserialnumberpopsup)

catw1_slave

系统会告诉我们有一个可供读取的温度数据。它也许像一个文个个文件,所以我们需要将这个数据读取出来。

在返回消息的第一行的结尾,将出现True或者是False,如果是,则第二行后面我们需要跟着温度数据来结尾。

如果主板连接了多个传感器单元,我们将可以了解并看到多个28-xxxfile(文件),插入传感器,校检新生成的文件名,然后标记,将他们一一对应给传感器。这样,我们就可以区分每一个传感器对应于的确定文件。

3系统软件设计

下面的Python脚本处理一些异常或者错误信息并且反馈给用户界面,同时还会返回每秒的华氏和摄氏温度数据。

importos

importglobimporttime

os.system(‘modprobew1-gpio’)os.system(‘modprobew1-therm’)base_dir=‘/sys/bus/w1/devices/’

device_folder=glob.glob(base_dir+‘28*’)[0]device_file=device_folder+‘/w1_slave’

Defread_temp_raw():

f=open(device_file,‘r’)lines=f.readlines()f.close()

returnlines

defread_temp():

lines=read_temp_raw()

whilelines[0].strip()[-3:]!=‘YES’:time.sleep(0.2)

lines=read_temp_raw()equals_pos=lines.find(‘t=’)ifequals_pos!=-1:

temp_string=lines[equals_pos+2:]temp_c=float(temp_string)/1000.0temp_f=temp_c*9.0/5.0+32.0returntemp_c,temp_f

whileTrue:

print(read_temp())time.sleep(1)

在开始运行脚本时,需要先运行modprobe命令以使得api运行。

接下来的脚本用于查找可以从哪些文件中读取消息。

现在有一个问题是有时候温度会在在树莓派下读取。可以用以下代码替换read-temp-ray方法。然后在程序开始时添加一行“导入子进程”。

defread_temp_raw():