Python : BME280 et LCD20x04 sur RP 4

Bonjour, bonsoir !

J’ai récemment acquis un BME280 et un LCD 20x04.
Mon but est d’afficher les données du BME280 sur le LCD (pression, hydro et temp).
Je suis novice en programa…en tout, quand il s’agit de codage, programmation. :scream:

J’arrive sans problème à lancer l’un ou l’autre (récolter les données du BME et marquer HelloWorld sur le LCD), mais fusionner les librairies sous python, pas moyen…
Donc, :slight_smile: , si vous avez des pistes, je suis preneur !

En vous remerciant !

Grat’

hello,

pas facile de répondre sans voir les deux programmes que tu utilises mais en gros le principe c’est de mettre d’abord les import des deux programmes, éventuellement les fonctions ( def …) et dans la boucles qui te sert a lire les données du BME280 ( while … ) tu mets le même print ( ou autre mot clé ou fonction ) qui te sert à écrire « hello world » en la remplaçant la ligne de print du prog du bme280 avec les variables temp, pression,humidité.

si tu reconnais tes imports surtout celui la : from RPLCD.gpio import CharLCD et en remplacant les ? par tes valeurs ce truc peut peut être ( précaution jamais inutile en programmation lol ) fonctionnerr :

from RPLCD.gpio import CharLCD
import time
import bme280

lcd = CharLCD(cols=??, rows=?, pin_rs=??, pin_e=??, pins_data=[??, ??, ??, ??])

while True:
…temperature,pression,humidite = bme280.readBME280All()
…lcd.cursor_pos = (0, 0)
…lcd.write_string(« Temperature: %s » %(temperature))
…lcd.cursor_pos = (1, 0)
…lcd.write_string(« Pression: %s » %(pression)
…lcd.cursor_pos = (2, 0)
…lcd.write_string(« Humidite: %s » %(humidite)

…time.sleep(5)
…lcd.clear()

les … sont a remplacer par des espaces et les ? par tes valeurs
NB si tu n’utilises pas from RPLCD.gpio import CharLCD oublie cet essai !

je me suis inspirer de :

et de :
https://espace-raspberry-francais.fr/Composants/Ecran-LCD-1602-sur-Raspberry-Francais/

si ça plante ( ou lorsque ça aura planter lol ! ) tu peux poster les erreurs :wink:

Salut Bof,
merci beaucoup pour ton aide !
Donc j’y suis je viens de créer le script nommé lcdtest1.py, puis j’ai utilisé RPLCD.i2c, l’écran et le bme280 étant tout deux en i2C.
Et cela donne :

from RPLCD.i2c import CharLCD
import time
import bme280

#Preparation LCD
lcdmode = ‹ i2c ›
cols = 20
rows = 4
charmap = ‹ A00 ›
i2c_expander = ‹ PCF8574 ›
address = 0x27
port = 1

#lcd = i2c.CharLCD(‹ PCF8574 ›, 0x27 , port=1, charmap=‹ A00 ›,
#cols=20, rows=4)

#Bme280
bme = bme280(0x76)

while True:

temperature,pression,humidite = bme280.readBME280All()
lcd.cursor_pos = (0, 0)
lcd.write_string(" Temperature: %s " )
lcd.cursor_pos = (1, 0)
lcd.write_string(" Pression: %s " )
lcd.cursor_pos = (2, 0)
lcd.write_string(" Humidite: %s " )

time.sleep()
lcd.clear()

et voilà un des messages d’erreur :

pi@gtu:~ $ sudo python3 /home/pi/script/LCD/lcdtest1.py
Traceback (most recent call last):
File « /home/pi/script/LCD/lcdtest1.py », line 20, in
bme = bme280(0x76)
TypeError: ‹ module › object is not callable

Hop! Merci beaucoup !

Grat’

en fait 3 problèmes :

  1. bon l’erreur elle vient de la ligne :
    bme = bme280(0x76)
    il te dit que le module bme280 n’accepte pas que tu lui mettes directement un argument entre parenthèse il attend un truc de la forme:
    bm280.-une fonction-.(<un ou plusieurs parametres)
    comme par exemple la ligne :
    temperature,pression,humidite = bme280.readBME280All()

donc je suppose qu’il doit te manquer une fonction après bm280.

  1. la #Preparation LCD : la tu définis les paramètres mais a l’inverse de la ligne
    #lcd = i2c.CharLCD(‹ PCF8574 ›, 0x27 , port=1, charmap=‹ A00 ›,cols=20, rows=4)
    tu ne définis pas l’objet lcd donc les lignes y faisant référence ne vont pas fonctionner :
    lcd.cursor_pos : la fonction de positionnement du cursor pour l’objet lcd
    lcd.write_string
    lcd.clear

  2. la pour moi qui suis plus programme que électronique il y a le soucis que tes deux modules se servent du même type de bus i2c ! j’ai cru comprendre qu’on pouvait en gérer plusieurs et qu’on les interroge avec:
    sudo i2cdetect -l pour les avoir tous
    sudo i2cdetect -y 1 pour avoir son adresse

je suppose que la ligne en erreur essayait d’indiquer au programme ou trouver l’adresse (et le port ? ) du module BM280 et que pour le lcd la notion de port (et le 0X27) lui donne aussi la maniere de l"adresser.

donc si on résume :

  • il faut que tu trouves la fonction (ou les ? ) qui vont dire au programme ou il va trouver les info sur le 2ic pour le module BME280 ( ça revient à corriger la ligne en erreur bme = bme280(0x76) )
    ou pas si tu utilises le programme bme280.py dans ce cas la ligne en erreur est simplement a supprimer !
  • mettre les paramétrés du lcd sur un ligne pour définir lcd.
    lcd = … a la place de la liste de ses variables

désolé de pas être plus précis mais, bien qu"intéressé par ces montages électronique, je n’y connais vraiment que dalle ! perfect noob lol!

PS: si tu peux publier les deux programmes qui fonctionnent séparément ça pourrai aider.