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.
Vous devez remplacer le 'print ('failed')' par un 'raise' pour sur-relancer l'exception et le voir dans le journal. –