Multiple DS18B20 on Raspberry Pi | ThingSpeak API | Forum


Please consider registering

sp_LogInOut Log In sp_Registration Register

Register | Lost password?
Advanced Search

— Forum Scope —

— Match —

— Forum Options —

Minimum search word length is 3 characters - maximum search word length is 84 characters

sp_Feed sp_TopicIcon
Multiple DS18B20 on Raspberry Pi
No permission to create posts
January 25, 2018
10:43 am
New Member
Forum Posts: 2
Member Since:
January 25, 2018
sp_UserOfflineSmall Offline

I have at present 2 (soon to be 3) ds18b20 probes connected to a Pi zero and want to send this data to ThingSpeak using python, I have setup the 2 fields and it will report data to both but both sets of data are the same. How can I get both probes to report the correct information.

Both of the data values report correctly in the terminal on my pi when I run the command.


.py below

Many thanks


import os


import glob


import time


import sys


import datetime


import urllib2




baseURL = " KEY)&field1=&field2="




os.system('modprobe w1-gpio')

os.system('modprobe w1-therm')


# add more sensor variables here based on your setup

temp_0 = 0

temp_1 = 0


for sensors in range (2): # change number of sensors based on your setup

        base_dir = '/sys/bus/w1/devices/'

        device_folder = glob.glob(base_dir + '28*')[sensors]

        device_file = device_folder + '/w1_slave'

        print device_file

        print sensors


        def read_temp_raw(): # gets the temps one by one

                f = open(device_file, 'r')

                lines = f.readlines()


                return lines


        def read_temp(): # checks the temp recieved for errors

                lines = read_temp_raw()

                while lines[0].strip()[-3:] != 'YES':


                        lines = read_temp_raw()

                equals_pos = lines[1].find('t=')

                if equals_pos != -1:

                        temp_string = lines[1][equals_pos+2:]

                        # set proper decimal place for C

                        temp = float(temp_string) / 1000.0

                        # Round temp to 2 decimal points

                        temp = round(temp, 1)

                        return temp


# ask for temps to be read and store each in a variable

        if sensors == 0:

                temp_0 = read_temp()


        if sensors == 1:

                temp_1 = read_temp()




                print temp_0

                print temp_1


while True: #infinite loop


     temp_0 = read_temp() #get the temp


     values = [, temp_0]


     temp_1 = read_temp() #get the temp


     values = [, temp_1]


     g = urllib2.urlopen(baseURL + "&field1=%s&field2=%s" % (temp_0, temp_1))




January 25, 2018
10:57 pm

Forum Posts: 267
Member Since:
January 30, 2014
sp_UserOfflineSmall Offline

Maybe posting to the forum messed up the indenting but that code doesnt look right to me.   The way its come out it looks like you are defining functions read_temp_raw() and read_temp() within the "for sensors " loop.  Function definitions are usually done once at the top of the program.  When you start on the infinite loop the value of the variable "sensors" will be constant so you read the same temp repeatedly.


There are existing python modules ( looks like the most popular) to do the hard work of actually reading the sensor but if you want to keep rolling your own I've posted some suggestions for your code at   


(Since the forum seems to be especially unkind to python code)

January 26, 2018
4:42 pm

Forum Posts: 258
Member Since:
March 7, 2017
sp_UserOfflineSmall Offline

You may also want to consider removing "&field1=&field2=" from baseURL at definition time, since the statement at the end seems to add it again. 

g = urllib2.urlopen(baseURL + "&field1=%s&field2=%s" % (temp_0, temp_1))

January 27, 2018
8:32 am
New Member
Forum Posts: 2
Member Since:
January 25, 2018
sp_UserOfflineSmall Offline


Thank you both for taking the time to reply.

This is my first project with python and I don’t understand which part of the timofurrer code I need, my sensors are working locally and also I have them working with Domoticz so I only need to send this data to thingspeak I have read through all the code by timofurrer but can’t see anything about thingspeak which I could use or modify as I’m new to all of this.

also the link  does not work.

January 29, 2018
12:25 am

Forum Posts: 267
Member Since:
January 30, 2014
sp_UserOfflineSmall Offline

Apologies, it appears my cut and paste added spurious characters to the end of the URL

Try this link


In terms of the library you probably want the multiple sensor example: this replaces all the globbing and string parsing you currently do.

from w1thermsensor import W1ThermSensor

for sensor in W1ThermSensor.get_available_sensors():
    print("Sensor %s has temperature %.2f" % (, sensor.get_temperature()))
Forum Timezone: America/New_York

Most Users Ever Online: 114

Currently Online:
19 Guest(s)

Currently Browsing this Page:
1 Guest(s)

Top Posters:

rw950431: 261

Vinod: 196

piajola: 85

turgo: 70

vespapierre: 63

Adarsh_Murthy: 62

Member Stats:

Guest Posters: 1

Members: 5703

Moderators: 0

Admins: 2

Forum Stats:

Groups: 4

Forums: 17

Topics: 1313

Posts: 4565

Newest Members:

terranceqh2, DianeEmids, Alanawaype, uqovitay, ufijifode, manish01

Administrators: Hans: 387, lee: 457