Plateforme Agir Low-Tech

Commit 6fb40dce authored by davidmercereau's avatar davidmercereau
Browse files

Thermocouple intégré

parent a558f48c
File mode changed from 100644 to 100755
......@@ -2,6 +2,8 @@
Utilisation des capteurs de température DS18B20 pour réaliser un banc d'acquisition facile à mettre en œuvre et pas trop cher
@todo : bug constaté, pas de sonde ds si le pi est alimenté en USB par mon PB :-/
## Ressources
- [Tableau Kanban](https://gitlab.lowtech.fr/pdm/projets/labo/bancs-acqusition/banc-mesure-temp-surface-DS18B20/-/boards)
......@@ -27,6 +29,12 @@ Lib Python ds18b20 : https://github.com/rgbkrk/ds18b20
pip3 install ds18b20 ConfigParser
```
Lib Python pour thermocouple MAX31855 : https://github.com/adafruit/Adafruit_CircuitPython_MAX31855
```bash
pip3 install adafruit-circuitpython-max31855
```
### Récupération des sources
FIXME
......@@ -49,4 +57,4 @@ FIXME
## Licence
Créative Common Zero https://creativecommons.org/publicdomain/zero/1.0/deed.fr
\ No newline at end of file
Créative Common Zero https://creativecommons.org/publicdomain/zero/1.0/deed.fr
......@@ -6,6 +6,12 @@ import configparser
# Pour lire les sondes ds18b20
# https://github.com/rgbkrk/ds18b20
from ds18b20 import DS18B20
# Pour lire les thermocouple mx31855
# https://github.com/adafruit/Adafruit-MAX31855-library
import adafruit_max31855
import board
import busio
import digitalio
# Pour faire des sleep
import time
# Pour la date
......@@ -13,10 +19,73 @@ from datetime import datetime
# Pour le debug
import pprint
# Définition des GPIO <> board
# @todo : on peut faire mieux... mais j'ai pas trouvé...
def gpio2board(gpio):
if gpio == 0:
return digitalio.DigitalInOut(board.D0)
elif gpio == 1:
return digitalio.DigitalInOut(board.D1)
elif gpio == 2:
return digitalio.DigitalInOut(board.D2)
elif gpio == 3:
return digitalio.DigitalInOut(board.D3)
elif gpio == 4:
return digitalio.DigitalInOut(board.D4)
elif gpio == 5:
return digitalio.DigitalInOut(board.D5)
elif gpio == 6:
return digitalio.DigitalInOut(board.D6)
elif gpio == 7:
return digitalio.DigitalInOut(board.D7)
elif gpio == 8:
return digitalio.DigitalInOut(board.D8)
elif gpio == 9:
return digitalio.DigitalInOut(board.D9)
elif gpio == 10:
return digitalio.DigitalInOut(board.D10)
elif gpio == 11:
return digitalio.DigitalInOut(board.D11)
elif gpio == 12:
return digitalio.DigitalInOut(board.D12)
elif gpio == 13:
return digitalio.DigitalInOut(board.D13)
elif gpio == 14:
return digitalio.DigitalInOut(board.D14)
elif gpio == 15:
return digitalio.DigitalInOut(board.D15)
elif gpio == 16:
return digitalio.DigitalInOut(board.D16)
elif gpio == 17:
return digitalio.DigitalInOut(board.D17)
elif gpio == 18:
return digitalio.DigitalInOut(board.D18)
elif gpio == 19:
return digitalio.DigitalInOut(board.D19)
elif gpio == 20:
return digitalio.DigitalInOut(board.D20)
elif gpio == 21:
return digitalio.DigitalInOut(board.D21)
elif gpio == 22:
return digitalio.DigitalInOut(board.D22)
elif gpio == 23:
return digitalio.DigitalInOut(board.D23)
elif gpio == 24:
return digitalio.DigitalInOut(board.D24)
elif gpio == 25:
return digitalio.DigitalInOut(board.D25)
elif gpio == 26:
return digitalio.DigitalInOut(board.D26)
elif gpio == 27:
return digitalio.DigitalInOut(board.D27)
# On charge le config.ini
config = configparser.RawConfigParser() # On créé un nouvel objet "config"
config.read('config.ini') # On lit le fichier de paramètres
# SPI, pour les max31855
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
csvfile=config.get('general', 'csv_dir').strip('"') + '/' + time.strftime ('%Y-%m-%d_%H-%M')
print('#############################################################################')
......@@ -85,6 +154,13 @@ for mesure_nb in range(int(config.get('general', 'nb_mesure'))):
temperature = sensor.get_temperature()
except NameError:
print('Erreur [',section,'] : L\'identifiant de la sonde ne semble pas être retrouvé dans le système')
elif (config.get(section, 'type') == 'max31855') :
try:
cs = gpio2board(int(config.get(section, 'gpio')))
max31855 = adafruit_max31855.MAX31855(spi, cs)
temperature = max31855.temperature
except NameError:
print('Erreur [',section,'] : Le thermocouple ne semble pas être retrouvé dans le système')
else:
print('Erreur : type inconnu de sonde inconnu')
print(section_nice_name,'=',temperature)
......
......@@ -9,26 +9,39 @@ nb_mesure=30
##################################################################
##### Correspondance des points de températures avec les sondes
##################################################################
#~ Exemple pour une sonde ds18b20 :
#~ # Exemple pour une sonde ds18b20 :
#~
#~ [t1]
#~ [t0]
#~ type=ds18b20
#~ id=011921191050
#~
#~ # Autre exemple avec un thermocouple max31855 sur la GPIO 16
#~ [t2]
#~ type=max31855
#~ # GPIO/BCM pin : https://pinout.xyz/pinout/
#~ # 0 à 27
#~ gpio=16
[t0]
type=ds18b20
id=011921191050
id=01193cf068a7
nice_name="tparoi"
[t1]
type=ds18b20
id=011921191050
id=0120333b6934
[t2]
type=ds18b20
id=011921191050
id=01203335716a
[t3]
type=ds18b20
id=0000000000
id=01193cee9bfc
[t4]
type=max31855
# GPIO/BCM pin : https://pinout.xyz/pinout/
# 0 à 27
gpio=16
2m :
01193cd9cc3b = c3b
01193cf068a7 = 8a7
0120333b6934 = 934
012033047557 = 557
01193cd85db9 = db9
01193cda8884 = 884
01193cda1e33 = e33
01203335716a = 16a
01193cd8c2d5 = 2d5
01193cdc6b13 = b13
01193cba6a7c = a7c
01193cdb523f = 23f peut être faux contact
01193cee9bfc = bfc
0120333a0fd3 = fd3
1m
01193c49c0d2 = 0d2
01193c3ec432 = 432
01193c489ae5 = ae5
01202724fc47 = c47
01193c3c4aaf = aaf
01193c3f390e = 90e
3m
3c01d607c701 = 701
3c01d607b846 = 846
3c01d607019f = 19f
3c01d607ca84 = a84
\ No newline at end of file
File mode changed from 100644 to 100755
# https://github.com/adafruit/Adafruit_CircuitPython_MAX31855/blob/master/examples/max31855_simpletest.py
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import time
import board
import busio
import digitalio
import adafruit_max31855
# indique N° GPIO : GPIO/BCM pin : https://pinout.xyz/
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
#cs = digitalio.DigitalInOut(board.D5)
#cs = digitalio.DigitalInOut(board.D6)
#cs = digitalio.DigitalInOut(board.D13)
#cs = digitalio.DigitalInOut(board.D26) # OUT
cs = digitalio.DigitalInOut(board.D16)
max31855 = adafruit_max31855.MAX31855(spi, cs)
while True:
tempC = max31855.temperature
tempF = tempC * 9 / 5 + 32
print("Temperature: {} C {} F ".format(tempC, tempF))
time.sleep(2.0)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment