zaterdag 23 maart 2013

I²C Bussysteem check script.

Op internet zijn behoorlijk veel scripts te vinden voor de Raspberry Pi en I²C samen.
Maar helaas nog nergens een script die je kunt gebruiken in je bussysteem om te scannen op aanwezige hardeware.

Men kan wel in de console bij de Raspberry Wheezy de volgende commando gebruiken.:
sudo i2cdetect -y 1
Alleen je kunt het niet in je programma gebruiken.

Omdat ik dit wel wil, heb ik dus de moeite genomen om tijd erin te steken een script te maken die dit wel kan.
Met als resultaat dat het gelukt is.
Met onderstaand Python script kan men de I²C bus wel laten scannen.
Het script toont welk busnummer een PCF8575 bevat en alles wat hierop niet reageerd maar wel is aangesloten word als overige I²C ic aangegeven.

Ik weet het word door vele niet gedaan, maar toch vraag ik het, indien men hiervan gebruik maakt neem mijn author naam mee.

#!/usr/bin/python
# Raspberryboard I2C bus scan V0.1
# voor de Raspberry Pi Revision 2
#
# Author : Pascal Schuffelers
# Site   : http://www.vbib.be
# 
# Date   : 21/03/2013 tijd.: 01:14 uur.
#
# Bussysteem scannen op hardware aanwezig


#Doe imports
import smbus
import time
import pylcdlib
import os
import random

from time import sleep
from datetime import datetime
from subprocess import *

i2c = smbus.SMBus(1)


#Signaal code voor PCF8575
#Controleer voor I/0 fouten (geen device aangesloten)
temp = 0x55AA
#Gehele I2C detection.
locations = [0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
   0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
   0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
   0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
   0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
   0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
   0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77]

print "****************************************************************"
print "* Het bussysteem word gescanned op aangesloten hardware , deze *"
print "* word met een signaalcode voor de PCF8575 aangeroepen.        *"
print "* Alle gevonden hardware word getoont en alles wat een PCF8575 *"
print "* bevat word erachter vermeld, indien anders word              *"
print "* dit ook vermeld.                                             *" 
print "****************************************************************"


b = 0 
d = 0
e = 0
for device in locations:
 
 try:
  b = b + 1
  i2c.write_byte(device,temp)
  a = int(device) - 12
  devicebyte = int(i2c.read_byte(device))
  c = (b * 2.702702702702702)
  sleep(0.1)
    
  #temp = signaal code 0x55AA voor de PCF8575 word als 170 getoont.
  if devicebyte == 170:
   #print "IC PCF8575"
   d=d+1
   print 'Hardware gevonden op I2C bus met nummer.: ' + str(a) + " ,deze bevat een IC PCF8775"
  if devicebyte == 0:
   e=e+1
   print 'Hardware gevonden op I2C bus met nummer.: ' + str(a) + " ,deze bevat een andere I2C IC."
  #sleep(0.1)
  
 except:
  if device == 'end':
   print "Geen unit gevonden op "+ device
   exit()

Geen opmerkingen:

Een reactie posten