Другой метод платы уже импортировал ошибку в графический интерфейс tkinter с использованием Raspberry PI

#python #user-interface #tkinter #raspberry-pi

#python #пользовательский интерфейс #tkinter #raspberry-pi

Вопрос:

Мне пришлось написать код для измерения проводимости и расхода с помощью датчиков, подключенных к raspberry pi, и отображать и обновлять значение в графическом интерфейсе tkinter каждые 5 секунд.

Я получаю ошибку из-за платы импорта и GPIO.setmode (GPIO.ПЛАТА), используемая в той же программе.Точная ошибка, которую я получаю, — «Другой режим для платы уже установлен», помогите мне решить эту ошибку.

 import os
import RPi.GPIO as GPIO
import tkinter as tk
import datetime,time
import threading
import board     #used to define i2c communication in raspberry pi
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
GPIO.setmode(GPIO.BOARD)   #Getting error beacuse of import board 

def read_sensor():
    flowin =7
    GPIO.setup(7,GPIO.IN) #defined pin for flow sensor input
    rate=0
    seconds=0
    pulse=550
    time_new = 0.0

    while True:
        y=2
        time_new = time.time()   5
        rato= 0
        while time.time() <= time_new:
            x=GPIO.input(flowin)
            if y!=x:
                if x!= 0:
                    rate = 1
                litre=rate/pulse
                y=x
        seconds =5
        flowrate=(litre*60*12)
        var.set(f'Flowrate:{flowrate:0.0f} litres/hrs')
        
def read_sensorco():
    time_newco= 0.0
    temprature=27 #Asumed that this temperature is constant.Later I have used temperature sensor to update real time temprature sensor 
    i2c = busio.I2C(board.SCL, board.SDA)
    ads = ADS.ADS1115(i2c)
    chan = AnalogIn(ads, ADS.P0)
    while True:
        time_newco = time.time()   5
        while time.time() <= time_newco:
            compco=1.0 0.02*(temprature-25.0)
            tdsvoltage=chan.voltage/compco
            tdsvalue=(133.42*tdsvoltage*tdsvoltage*tdsvoltage-255.86*tdsvoltage*tdsvoltage 857.39*tdsvoltage)*0.5
            #print(chan.value, chan.voltage)
            print(tdsvalue)
        varco.set(f'tdsvalue:{tdsvalue:0.0f} ppm')        



# create the thread
task = threading.Thread(target=read_sensor, daemon=True)
taskco= threading.Thread(target=read_sensorco, daemon=True)

root = tk.Tk()

var = tk.StringVar()
varco= tk.StringVar()

lbl = tk.Label(root, textvariable=var, width=40, height=5, font=('Consolas', 18, 'bold'))
lbl.pack()  #Label for Flow sensor
lblco = tk.Label(root, textvariable=varco, width=40, height=5, font=('Consolas', 18, 'bold')) #Label for Conductivity sensor
lblco.pack()
  

Ответ №1:

В качестве платы импорта и GPIO.setmode(GPIO.ПЛАТА) используется в той же программе, которая генерирует ошибку.Используйте метод GPIO.setmode (GPIO.BCM) для настройки платы для устранения ошибки.

 import os
import RPi.GPIO as GPIO
import tkinter as tk
import datetime,time
import threading
import board     #used to define i2c communication in raspberry pi
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
GPIO.setmode(GPIO.BCM)   #Use BCM method to setup the board

def read_sensor():
    flowin =4 #The pin number is 4 in BCM  configuration
    GPIO.setup(flowin,GPIO.IN) #defined pin for flow sensor input
    rate=0
    seconds=0
    pulse=550
    time_new = 0.0

    while True:
        y=2
        time_new = time.time()   5
        rato= 0
        while time.time() <= time_new:
            x=GPIO.input(flowin)
            if y!=x:
                if x!= 0:
                    rate = 1
                litre=rate/pulse
                y=x
        seconds =5
        flowrate=(litre*60*12)
        var.set(f'Flowrate:{flowrate:0.0f} litres/hrs')
        
def read_sensorco():
    time_newco= 0.0
    temprature=27 #Asumed that this temperature is constant.Later I have used temperature sensor to update real time temprature sensor 
    i2c = busio.I2C(board.SCL, board.SDA)
    ads = ADS.ADS1115(i2c)
    chan = AnalogIn(ads, ADS.P0)
    while True:
        time_newco = time.time()   5
        while time.time() <= time_newco:
            compco=1.0 0.02*(temprature-25.0)
            tdsvoltage=chan.voltage/compco
            tdsvalue=(133.42*tdsvoltage*tdsvoltage*tdsvoltage-255.86*tdsvoltage*tdsvoltage 857.39*tdsvoltage)*0.5
            #print(chan.value, chan.voltage)
            print(tdsvalue)
        varco.set(f'tdsvalue:{tdsvalue:0.0f} ppm')        



# create the thread
task = threading.Thread(target=read_sensor, daemon=True)
taskco= threading.Thread(target=read_sensorco, daemon=True)

root = tk.Tk()

var = tk.StringVar()
varco= tk.StringVar()

lbl = tk.Label(root, textvariable=var, width=40, height=5, font=('Consolas', 18, 'bold'))
lbl.pack()  #Label for Flow sensor
lblco = tk.Label(root, textvariable=varco, width=40, height=5, font=('Consolas', 18, 'bold')) #Label for Conductivity sensor
lblco.pack()