Я могу установить связь I2C между Raspberry Pi и Arduino и передать данные датчика на мастер один раз. Тем не менее, моя проблема заключается в том, если попытаться инициировать соединение I2C во второй раз, когда я получаю - ошибка «OSError: [Errno 9] Bad file descriptor». Вот мой код ниже -
import time
import smbus
import struct
#Slave Address from Arduinos
SLAVE_ADDRESS = 0x04
#Creating I2C Bus
I2C_Bus = smbus.SMBus(1)
weight = 0
def get_data():
return I2C_Bus.read_i2c_block_data(SLAVE_ADDRESS,0,16)
def get_int(data, index):
bytes = bytearray(data[4*index:(index+1)*4])
return struct.unpack("<i",bytes)[0]
def send_data(value):
I2C_Bus.write_byte(SLAVE_ADDRESS,value)
time.sleep(1)
def start():
while True:
for x in range(1,2):
send_data(1)
x = x +1
data = get_data()
weight = get_int(data,0)
if (weight == 25000):
I2C_Bus.close()
time.sleep(5)
x = 1
get_input()
else:
print("The transaction weight is: "+str(weight))
time.sleep(1)
def get_input():
var = input("Enter a number from 1-9: ")
print(var)
while (var != "1"):
print ("Please select only 1 for now")
get_input()
if (var == "1"):
start()
while True:
get_input()
Полагаю, проблема в том, что после выполнения I2C_Bus.close () я не могу снова открыть шину I2C. Как я могу перезапустить I2C после его закрытия? Я также приложил ошибку, которую я получаю при попытке инициировать время отправки I2C. Обратите внимание, что мне нужно подключить несколько arduinos в качестве подчиненных к Raspberry, хотя текущий код предназначен для одного подчиненного. И мне нужно вызвать конкретный Arduino на основе выбора пользователя. Нужно ли нам закрывать автобус, прежде чем мы сможем начать общение с другим Arduino. Пожалуйста, ведите меня, если я ошибаюсь. Большое спасибо за ваше время и помощь.
Traceback (последний вызов был последним): файл "/home/pi/Desktop/weightData_PiMaster_2.py", строка 65, в файле get_input () "/home / pi / Desktop / weightData_PiMaster_2.py ", строка 57, в файле get_input start () (") /home/pi/Desktop/weightData_PiMaster_2.py ", строка 38, в стартовом файле get_input ()" / home / pi / Desktop /weightData_PiMaster_2.py ", строка 57, в файле start_input start ()" /home/pi/Desktop/weightData_PiMaster_2.py ", строка 30, в стартовом файле send_data (1)" /home/pi/Desktop/weightData_PiMaster_2.py ",строка 24, в send_data I2C_Bus.write_byte (SLAVE_ADDRESS, значение) OSError: [Errno 9] Неверный дескриптор файла