09/02/2023, 21:22
(09/02/2023, 18:25)verito Ha scritto:(04/09/2022, 20:02)Paolo Proietti Ha scritto:(24/01/2022, 09:38)verito Ha scritto: Ciao a tutti.
Ritorno nel forum perche' ho acquistato un sensore DS18B20 che mi e' arivato in questi giorniu ed ho provato appena potuto.
Lo ho collegato al GPIO4 (PIN 7) ed ho provato con un programmino di test: il sensore sembra funzionare e riesco a leggere il valore di temperatura.
Ho quindi modificato i valori del file thermostat_settings.json in
"sensTemp": 4,
"sensPin": 7,
(in realta' ho fato anche prove con altri valori ma con glis tessi risultati) ed ottengo il seguente output
Codice:~/thermostat_v5 $ sudo python3 thermostat.py
[INFO ] [Logger ] Record log in /root/.kivy/logs/kivy_22-01-24_13.txt
[INFO ] [Kivy ] v2.0.0
[INFO ] [Kivy ] Installed at "/usr/local/lib/python3.9/dist-packages/kivy/__init__.py"
[INFO ] [Python ] v3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110]
[INFO ] [Python ] Interpreter at "/usr/bin/python3"
[INFO ] [Factory ] 186 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO ] [Text ] Provider: sdl2(['text_pango'] ignored)
[INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used <gl>
[INFO ] [GL ] OpenGL version <b'3.1 Mesa 20.3.5'>
[INFO ] [GL ] OpenGL vendor <b'Mesa/X.org'>
[INFO ] [GL ] OpenGL renderer <b'llvmpipe (LLVM 11.0.1, 128 bits)'>
[INFO ] [GL ] OpenGL parsed version: 3, 1
[INFO ] [GL ] Shading version <b'1.40'>
[INFO ] [GL ] Texture max size <16384>
[INFO ] [GL ] Texture max units <32>
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
tempsensor W1 OFF
tempsensor BMP280 OFF
Unexpected error: <class 'KeyError'>
Traceback (most recent call last):
File "/home/pi/thermostat_v5/thermostat.py", line 2683, in <module>
main()
File "/home/pi/thermostat_v5/thermostat.py", line 2678, in main
thermostatApp().run()
File "/usr/local/lib/python3.9/dist-packages/kivy/app.py", line 950, in run
runTouchApp()
File "/usr/local/lib/python3.9/dist-packages/kivy/base.py", line 582, in runTouchApp
EventLoop.mainloop()
File "/usr/local/lib/python3.9/dist-packages/kivy/base.py", line 347, in mainloop
self.idle()
File "/usr/local/lib/python3.9/dist-packages/kivy/base.py", line 387, in idle
Clock.tick()
File "/usr/local/lib/python3.9/dist-packages/kivy/clock.py", line 733, in tick
self.post_idle(ts, self.idle())
File "/usr/local/lib/python3.9/dist-packages/kivy/clock.py", line 776, in post_idle
self._process_events()
File "kivy/_clock.pyx", line 616, in kivy._clock.CyClockBase._process_events
File "kivy/_clock.pyx", line 649, in kivy._clock.CyClockBase._process_events
File "kivy/_clock.pyx", line 645, in kivy._clock.CyClockBase._process_events
File "kivy/_clock.pyx", line 218, in kivy._clock.ClockEvent.tick
File "/home/pi/thermostat_v5/thermostat.py", line 497, in check_sensor_temp
rawTemp = round(tempSensor.get_temperature(sensorUnits),1)
NameError: name 'sensorUnits' is not defined
/usr/local/lib/python3.9/dist-packages/cherrypy/process/wspbus.py:254: RuntimeWarning: The main thread is exiting, but the Bus is in the states.STARTED state; shutting it down automatically now. You must either call bus.block() after start(), or call bus.exit() before the main thread exits.
warnings.warn(
da cui si vede che il sensore sembra non essere rilevato ("tempsensor W1 OFF") e di conseguenza si ha l'errore del codice.
Mi sembra anche che i campi "sensTemp" e "sensPin" del file json di setting non siano documentati nel manuale, quindi non sono sicuro di aver correttamente settato i valori.
Quale puo' essere il problema considerando che il sensore funziona se testato con altro codice (minimo e di base)?
Anche qui ho trovato una soluzione "empirica" che però va:
Devi aggiungere al codice di thermostat.py ed esattamente nella sezione dove viene testato quale sensore hai
la parte che ho messo in grassetto; soluzione strana ma solo così il sensore viene visto!
### Set GPIO ###################################################################
tempSensor = None
try:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
from w1thermsensor import W1ThermSensor
tempSensor = W1ThermSensor()
sensorUnits = W1ThermSensor.DEGREES_C if tempScale == "metric" else W1ThermSensor.DEGREES_F
print ("tempsensor W1 ON")
except:
import FakeRPi.GPIO as GPIO
print ("tempsensor W1 OFF")
try:
from lib.bme280.BME280 import *
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
tempSensor = "bmp280"
print ("tempsensor BMP280 ON")
except:
print ("tempsensor BMP280 OFF")
Ciao
Riprendo il mio post dopo molto tempo perche' non ho avuto la possibilita' di mettere nuovamente mano alla installazione che stavo facendo.
Ringrazio Paolo per la risposta data; pero' con il suo suggerimento ancora non funziona.
Ho invece risolto modificando
Codice:### Set GPIO ###################################################################
tempSensor = None
try:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
from w1thermsensor import W1ThermSensor
tempSensor = W1ThermSensor()
sensorUnits = W1ThermSensor.DEGREES_C if tempScale == "metric" else W1ThermSensor.DEGREES_F
print ("tempsensor W1 ON")
except:
in
Codice:### Set GPIO ###################################################################
tempSensor = None
try:
import RPi.GPIO as GPIO#GPIO.setmode(GPIO.BCM)
from w1thermsensor import W1ThermSensor, Unit
tempSensor = W1ThermSensor()
## sensorUnits = W1ThermSensor.DEGREES_C if tempScale == "metric" else W1ThermSensor.DEGREES_F
sensorUnits = Unit.DEGREES_C if tempScale == "metric" else Unit.DEGREES_F
print ("tempsensor W1 ON")
except:
dove la riga commentata e' quella del file originale e la modifica e' la riga subito successiva relativa alla inizializzazione dell'oggetto sensorUnits.
Adesso sto provando a modificare i caratteri e i colori di alcune schermate per adattarli ad uno schermo piu' piccolo da 3,5''. Non avendo alcuna esperienza con kivi pero' ho molte difficolta'.
(26/01/2023, 12:04)beps2 Ha scritto: Ciao a tutti,
Abbandono ogni speranza.
Grazie lo stesso ?
Io ho installato i file originali in una distribuzione recente seguendo la procedura descritta nel manuale con l'unica differenza che ho sostituto i comandi della sezione 5.3 sull'installazione di Kivy con questi:
------------------------------------------------
sudo apt update
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev \
pkg-config libgl1-mesa-dev libgles2-mesa-dev \
python-setuptools libgstreamer1.0-dev git-core \
gstreamer1.0-plugins-{bad,base,good,ugly} \
gstreamer1.0-{omx,alsa} python-dev libmtdev-dev \
xclip xsel libjpeg-dev
python3 -m pip install --upgrade --user pip setuptools
python3 -m pip install --upgrade --user Cython==0.29.10 pillow
sudo pip3 install kivy
sudo pip3 install websocket
------------------------------------------------
Con queste modifiche l'applicazione si e' avviata.
Ho dovuto solo modificare una riga del codice python per fare rilevare il sensore di temperatura DS18B20 che e' l'unico a mia disposizione. Con queste modifiche tutto al momento sta funzionando.
Ciao e grazie per la risposta.
Nei prossimi giorni proverò sicuramente a fare la procedura con le modifiche che mi hai indicato.
Ti aggiorno.
GRAZIE ANCORA ?