Jgk54
Posts: 4
Joined: Sun Jan 18, 2015 6:04 pm

CamjamEduKit Sensors Worksheet 3

Sun Jan 18, 2015 6:26 pm

I'm am very new at this but cannot get the temperature. py
to run. It fails on line 12.
device_folder = glob.glob(base_dir+'28*')[0]
IndexError: list index out of range

This is my first delve into python, I have double checked the line and it seems to be typed correctly. I would be grateful to know if anyone else has managed to run the code correctly. If they have then I will have to investigate further.

User avatar
mahjongg
Forum Moderator
Forum Moderator
Posts: 13142
Joined: Sun Mar 11, 2012 12:19 am
Location: South Holland, The Netherlands

Re: CamjamEduKit Sensors Worksheet 3

Sun Jan 18, 2015 6:29 pm

do you even understand the code?
base_dir+'28*'
seems strange to me if the result should be numerical. especially that asterix I would not expect it there.

User avatar
rpdom
Posts: 17275
Joined: Sun May 06, 2012 5:17 am
Location: Chelmsford, Essex, UK

Re: CamjamEduKit Sensors Worksheet 3

Sun Jan 18, 2015 8:25 pm

mahjongg wrote:do you even understand the code?
base_dir+'28*'
seems strange to me if the result should be numerical. especially that asterix I would not expect it there.
It looks like it is looking for a ds18b20 if base_dir = "/sys/bus/w1/devices/" then it would pick up the names of the devices that all start with "28-".

To the OP (Jgk54): Have you made sure the driver modules for the w1_gpio and w1_therm have been loaded?
Does the sensor appear in the base_dir? (try "ls /sys/bus/w1/devices/28*" in a terminal and see if it gives any results).

DirkS
Posts: 10371
Joined: Tue Jun 19, 2012 9:46 pm
Location: Essex, UK

Re: CamjamEduKit Sensors Worksheet 3

Sun Jan 18, 2015 8:31 pm

mahjongg wrote:do you even understand the code?
base_dir+'28*'
seems strange to me if the result should be numerical. especially that asterix I would not expect it there.
That code is from the worksheet: https://www.dropbox.com/s/crtabzm3l5mb4 ... e.pdf?dl=0 (page 4)
You would expect that works...

DirkS
Posts: 10371
Joined: Tue Jun 19, 2012 9:46 pm
Location: Essex, UK

Re: CamjamEduKit Sensors Worksheet 3

Sun Jan 18, 2015 8:34 pm

rpdom wrote:
mahjongg wrote:do you even understand the code?
base_dir+'28*'
seems strange to me if the result should be numerical. especially that asterix I would not expect it there.
It looks like it is looking for a ds18b20 if base_dir = "/sys/bus/w1/devices/" then it would pick up the names of the devices that all start with "28-".

To the OP (Jgk54): Have you made sure the driver modules for the w1_gpio and w1_therm have been loaded?
Does the sensor appear in the base_dir? (try "ls /sys/bus/w1/devices/28*" in a terminal and see if it gives any results).
+1
Page 3 of the worksheet describes loading the modules and checking for the devices.

User avatar
DougieLawson
Posts: 39304
Joined: Sun Jun 16, 2013 11:19 pm
Location: A small cave in deepest darkest Basingstoke, UK
Contact: Website Twitter

Re: CamjamEduKit Sensors Worksheet 3

Sun Jan 18, 2015 9:32 pm

Jgk54 wrote:I'm am very new at this but cannot get the temperature. py
to run. It fails on line 12.
device_folder = glob.glob(base_dir+'28*')[0]
IndexError: list index out of range

This is my first delve into python, I have double checked the line and it seems to be typed correctly. I would be grateful to know if anyone else has managed to run the code correctly. If they have then I will have to investigate further.
I've just tried this code

Code: Select all

# Import Libraries
import os
import glob
import time

# Initialize the GPIO Pins
os.system('modprobe w1-gpio') # Turns on the GPIO module
os.system('modprobe w1-therm') # Turns on the Temperature module

# Finds the correct device file that holds the temperature data
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

# A function that reads the sensors data
def read_temp_raw():
  f = open(device_file, 'r') # Opens the temperature device file
  lines = f.readlines() # Returns the text
  f.close()
  return lines

# Convert the value of the sensor into a temperature
def read_temp():
  lines = read_temp_raw() # Read the temperature 'device file'
  
  # While the first line does not contain 'YES', wait for 0.2s
  # and then read the device file again.
  while lines[0].strip()[-3:] != 'YES':
    time.sleep(0.2)
    lines = read_temp_raw()

  # Look for the position of the '=' in the second line of the
  # device file.
  equals_pos = lines[1].find('t=')

  # If the '=' is found, convert the rest of the line after the
  # '=' into degrees Celsius, then degrees Fahrenheit
  if equals_pos != -1:
    temp_string = lines[1][equals_pos+2:]
    temp_c = float(temp_string) / 1000.0
    temp_f = temp_c * 9.0 / 5.0 + 32.0
    return temp_c, temp_f

# Print out the temperature until the program is stopped.
while True:
  print(read_temp())
  time.sleep(1)
on a system that doesn't have the 1-wire interface enabled and doesn't have any 1-wire devices connected and I get exactly the same error as you've seen.

Step back to page3 of the PDF and check everything again.

Open a Terminal Window:
  • Enter the following command: sudo modprobe w1-gpio
  • Followed by: sudo modprobe w1-therm
  • Go to the ‘devices’ directory: cd /sys/bus/w1/devices
  • View the devices, and check that you see “28-00000626cc81” (the number following “28-” may vary). If you see the number, then the changes have taken affect and the sensor should now work:
    ls –l
Note: Any requirement to use a crystal ball or mind reading will result in me ignoring your question.

Criticising any questions is banned on this forum.

Any DMs sent on Twitter will be answered next month.
All non-medical doctors are on my foes list.

Jgk54
Posts: 4
Joined: Sun Jan 18, 2015 6:04 pm

Re: CamjamEduKit Sensors Worksheet 3

Sun Jan 18, 2015 9:43 pm

Managed to get it all working. Many thanks for your help. I had indentation problems when typing the code. Learnt the hard way.

User avatar
DougieLawson
Posts: 39304
Joined: Sun Jun 16, 2013 11:19 pm
Location: A small cave in deepest darkest Basingstoke, UK
Contact: Website Twitter

Re: CamjamEduKit Sensors Worksheet 3

Sun Jan 18, 2015 10:14 pm

Jgk54 wrote:Managed to get it all working. Many thanks for your help. I had indentation problems when typing the code. Learnt the hard way.
Any code printed in a PDF is a monster pain because cut'n'paste doesn't work. Anything written in python is a monster pain because the stupid language has syntax that relies on space on the left. Add the two together and you're heading for a disaster.
Note: Any requirement to use a crystal ball or mind reading will result in me ignoring your question.

Criticising any questions is banned on this forum.

Any DMs sent on Twitter will be answered next month.
All non-medical doctors are on my foes list.

Return to “Python”