From 8c9d3881dc9e36e80ccd2cb99a6d0e22ebbd237c Mon Sep 17 00:00:00 2001 From: jason bruce Date: Mon, 11 Dec 2023 10:21:41 -0500 Subject: [PATCH] change autodection so only SW SPI needs pins listed in config.py --- config.py | 17 ++++++++++------- lib/oven.py | 19 +++++-------------- test-thermocouple.py | 26 +++++++++++--------------- 3 files changed, 26 insertions(+), 36 deletions(-) diff --git a/config.py b/config.py index d085957..50150f8 100644 --- a/config.py +++ b/config.py @@ -38,14 +38,16 @@ currency_type = "$" # Currency Symbol to show when calculating cost to run j # # - faster # - requires 3 specific GPIO pins be used on rpis +# - no pins are listed in this config file # # Software SPI # # - slower (which will not matter for reading a thermocouple # - can use any GPIO pins +# - pins must be specified in this config file ####################################### -# SPI pins if you choose hardware spi # +# SPI pins if you choose Hardware SPI # ####################################### # On the raspberry pi, you MUST use predefined # pins for HW SPI. In the case of the adafruit-31855, only 3 pins are used: @@ -58,6 +60,8 @@ currency_type = "$" # Currency Symbol to show when calculating cost to run j # I chose gpio pin 5: # # GPIO5 = BCM pin 5 = CS on the adafruit-31855 +# +# Note that NO pins are configured in this file for hardware spi ####################################### # SPI pins if you choose software spi # @@ -66,12 +70,11 @@ currency_type = "$" # Currency Symbol to show when calculating cost to run j # You must connect clock, mosi, miso and cs each to a GPIO pin # and configure them below based on your connections. - ####################################### # SPI is Autoconfigured !!! ####################################### -# whether you choose HW or SW spi, it is autodetected. If you use the hw pins -# HW spi is assumed. +# whether you choose HW or SW spi, it is autodetected. If you list the PINs +# below, software spi is assumed. ####################################### # Output to control the relay @@ -81,10 +84,10 @@ currency_type = "$" # Currency Symbol to show when calculating cost to run j try: import board - spi_sclk = board.D11 #spi clock + spi_sclk = board.D17 #spi clock + spi_miso = board.D27 #spi Microcomputer In Serial Out + spi_cs = board.D22 #spi Chip Select spi_mosi = board.D10 #spi Microcomputer Out Serial In (not connected) - spi_miso = board.D9 #spi Microcomputer In Serial Out - spi_cs = board.D5 #spi Chip Select gpio_heat = board.D23 #output that controls relay except (NotImplementedError,AttributeError): print("not running on blinka recognized board, probably a simulation") diff --git a/lib/oven.py b/lib/oven.py index 3876b7c..9496698 100644 --- a/lib/oven.py +++ b/lib/oven.py @@ -121,26 +121,17 @@ class TempSensorReal(TempSensor): self.spi_setup() self.cs = digitalio.DigitalInOut(config.spi_cs) - def hw_spi(self): - import board - if(hasattr(board,'SCLK') and - hasattr(board,'MOSI') and - hasattr(board,'MISO')): - if(board.SCLK == config.spi_sclk and - board.MOSI == config.spi_mosi and - board.MISO == config.spi_miso): - return board.SPI(); - return None - def spi_setup(self): - self.spi = self.hw_spi() - if self.spi is None: + if(hasattr(config,'spi_sclk') and + hasattr(config,'spi_mosi') and + hasattr(config,'spi_miso')): self.spi = bitbangio.SPI(config.spi_sclk, config.spi_mosi, config.spi_miso) log.info("Software SPI selected for reading thermocouple") else: + import board + self.spi = board.SPI(); log.info("Hardware SPI selected for reading thermocouple") - def get_temperature(self): '''read temp from tc and convert if needed''' try: diff --git a/test-thermocouple.py b/test-thermocouple.py index 386ed1d..27ff6a3 100755 --- a/test-thermocouple.py +++ b/test-thermocouple.py @@ -30,18 +30,19 @@ except NotImplementedError: ######################################################################## spi = None -if(hasattr(board,'SCLK') and - hasattr(board,'MOSI') and - hasattr(board,'MISO')): - if(board.SCLK == config.spi_sclk and - board.MOSI == config.spi_mosi and - board.MISO == config.spi_miso): - spi = board.SPI(); - print("Hardware SPI selected for reading thermocouple") - -if spi is None: +if(hasattr(config,'spi_sclk') and + hasattr(config,'spi_mosi') and + hasattr(config,'spi_miso')): spi = bitbangio.SPI(config.spi_sclk, config.spi_mosi, config.spi_miso) print("Software SPI selected for reading thermocouple") + print("SPI configured as:\n") + print(" config.spi_sclk = %s BCM pin" % (config.spi_sclk)) + print(" config.spi_mosi = %s BCM pin" % (config.spi_mosi)) + print(" config.spi_miso = %s BCM pin" % (config.spi_miso)) + print(" config.spi_cs = %s BCM pin\n" % (config.spi_cs)) +else: + spi = board.SPI(); + print("Hardware SPI selected for reading thermocouple") cs = DigitalInOut(config.spi_cs) cs.switch_to_output(value=True) @@ -57,11 +58,6 @@ if(config.max31856): print("thermocouple: adafruit max31856") sensor = adafruit_max31856.MAX31856(spi, cs) -print("SPI configured as:\n") -print(" config.spi_sclk = %s BCM pin" % (config.spi_sclk)) -print(" config.spi_mosi = %s BCM pin" % (config.spi_mosi)) -print(" config.spi_miso = %s BCM pin" % (config.spi_miso)) -print(" config.spi_cs = %s BCM pin\n" % (config.spi_cs)) print("Degrees displayed in %s\n" % (config.temp_scale)) temp = 0