Raspberry Pi 当脚本在启动时运行时,带 DS18B20 的 A+ 蓝牙不工作
Raspberry Pi A+ Bluetooth with DS18B20 not working when script runs on boot
我在 Raspberry Pi A+ 上编写了一个 python 脚本 运行 以通过蓝牙连接 Raspberry Pi B+ 并使用 DS18B20 传感器发送温度数据。当我从 A+ 手动 运行 脚本时,它 运行 非常好,但是当我尝试在 Pi 启动时将脚本设置为 运行 时,它无法通过蓝牙。这是脚本:
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)
如果连接失败,此代码也无法重新连接到 B+。由于某种原因,我必须重新启动 B+ 和 A+ 上的代码才能让它们再次连接。但这是一个不同的问题。我只希望这段代码在启动时 运行。
我用来在启动时将脚本获取到 运行 的方法是将此代码放入 /etc/rc.local 文件中:
/usr/bin/python /home/pi/Desktop/client.py >/tmp.client.out 2>/tmp/client.err
有什么想法吗?
更新:
它将始终在 client.out 文件中打印出 "failed"。
或
client.err 或 client.out 文件中未记录任何内容,屏幕顶部的蓝牙图标显示它已连接但我只收到它的温度值 0应该发送。但是,当我尝试手动 运行 启动脚本而不 运行 启动时,温度正常。
找到了。
/usr/bin/python /home/pi/Desktop/client.py >/tmp.client.out 2>/tmp/client.err
需要
/usr/bin/python3 /home/pi/Desktop/client.py >/tmp.client.out 2>/tmp/client.err
与 DS18B20 一起工作
搜索了几个小时后,我觉得自己像个白痴。抱歉浪费了大家的时间。我会把它留在这里,以防某些可怜的人需要它作为参考。
我在 Raspberry Pi A+ 上编写了一个 python 脚本 运行 以通过蓝牙连接 Raspberry Pi B+ 并使用 DS18B20 传感器发送温度数据。当我从 A+ 手动 运行 脚本时,它 运行 非常好,但是当我尝试在 Pi 启动时将脚本设置为 运行 时,它无法通过蓝牙。这是脚本:
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)
如果连接失败,此代码也无法重新连接到 B+。由于某种原因,我必须重新启动 B+ 和 A+ 上的代码才能让它们再次连接。但这是一个不同的问题。我只希望这段代码在启动时 运行。
我用来在启动时将脚本获取到 运行 的方法是将此代码放入 /etc/rc.local 文件中:
/usr/bin/python /home/pi/Desktop/client.py >/tmp.client.out 2>/tmp/client.err
有什么想法吗?
更新:
它将始终在 client.out 文件中打印出 "failed"。
或
client.err 或 client.out 文件中未记录任何内容,屏幕顶部的蓝牙图标显示它已连接但我只收到它的温度值 0应该发送。但是,当我尝试手动 运行 启动脚本而不 运行 启动时,温度正常。
找到了。
/usr/bin/python /home/pi/Desktop/client.py >/tmp.client.out 2>/tmp/client.err
需要
/usr/bin/python3 /home/pi/Desktop/client.py >/tmp.client.out 2>/tmp/client.err
与 DS18B20 一起工作
搜索了几个小时后,我觉得自己像个白痴。抱歉浪费了大家的时间。我会把它留在这里,以防某些可怜的人需要它作为参考。