2015-04-21 2 views
0

J'ai écrit un script python à exécuter sur un Raspberry Pi A + pour me connecter à un Raspberry Pi B + via bluetooth et envoyer des données de température avec un capteur DS18B20. Quand je lance le script manuellement à partir du A +, il fonctionne parfaitement, mais quand j'essaie de lancer le script quand le Pi démarre, il ne peut pas se connecter via bluetooth. Voici le script:Raspberry Pi A + Bluetooth avec DS18B20 ne fonctionne pas lorsque le script s'exécute au démarrage

import socket 
import time 
import os 

#time.sleep(10) 
serverMACAddress = '00:15:83:12:1A:39' 
port = 3 
connected = False 
while connected == False: 
    try: 

     s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM) 
     s.connect((serverMACAddress,port)) 
     connected=True 
     print("connected") 
    except Exception as e: 
     print('failed') 
os.system('modprobe w1-gpio') 
os.system('modprobe w1-therm') 

temp_sensor = '/sys/bus/w1/devices/28-000006773191/w1_slave' 
current_time = time.time() 
UPDATE_THRESHOLD = 5 
newTemp = False 
def temp_raw(): 
    f = open(temp_sensor,'r') 
    lines = f.readlines() 
    f.close() 
    return lines 

def read_temp(): 
    lines = temp_raw() 
    temp_output = lines[1].find('t=') 
    if temp_output != -1: 
     temp_string = lines[1].strip()[temp_output+2:] 
     temp_c = float(temp_string)/1000.0 
     temp_f = temp_c*9.0/5.0+32.0 
     return temp_c 

waterTemp = read_temp() 

while True: 

    nextWaterTemp = read_temp() 
    current_time = time.time() 
    newTemp = True 
    if nextWaterTemp != waterTemp: 
     waterTemp = nextWaterTemp 
    try: 
     s.send(bytes(str(waterTemp),'UTF-8')) 
     time.sleep(30) 
     connected = True 
     print(waterTemp) 
    except Exception as e: 
     print("Fail") 
     connected = False 

    while connected == False: 
     try: 
      s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.s.connect((serverMACAddress,port))) 
      s.send(bytes(str(waterTemp),'UTF-8')) 
      connected = True 
      print("Connected") 
     except Exception as e: 
      print("Fail") 
      time.sleep(.5) 

Ce code a également des problèmes de reconnexion au B + si la connexion échoue. Je dois redémarrer le code sur le B + et le A + pour les amener à se connecter à nouveau pour une raison quelconque. Mais c'est un problème différent. Je veux juste que ce code s'exécute quand il démarre.

La méthode que je l'habitude d'obtenir le script à exécuter au démarrage est de mettre ce code dans le fichier /etc/rc.local: /usr/bin/python /home/pi/Desktop/client.py >/tmp.client.out 2>/tmp/client.err

Toutes les idées?

MISE À JOUR:

Il soit toujours imprimer « échoué » dans le fichier client.out.

OU

Rien ne s'enregistré dans le client.err ou les fichiers client.out et l'icône Bluetooth dans la partie supérieure de l'écran montre qu'il est connecté, mais je reçois seulement une valeur de 0 pour la température, il devrait être envoyé. Mais lorsque j'essaie manuellement d'exécuter le script sans l'exécuter au démarrage, la température fonctionne correctement.

+1

Vous devez remplacer le 'print ('failed')' par un 'raise' pour sur-relancer l'exception et le voir dans le journal. –

Répondre

0

Trouvé.

/usr/bin/python /home/pi/Desktop/client.py >/tmp.client.out 2>/tmp/client.err 

doit être

/usr/bin/python3 /home/pi/Desktop/client.py >/tmp.client.out 2>/tmp/client.err 

pour travailler avec le DS18B20

Je me sens comme un idiot après avoir cherché pendant des heures. Désolé de perdre le temps. Je vais laisser ceci ici au cas où une pauvre âme en aurait besoin pour une référence.