Problème envoi données Raspberry PI BME280

Bonjour à tous,

Je suis nouveau sur ce forum, et débutant dans le Raspberry PI.

Je suis en BTS SN, et pour l’année prochaine je dois présenter un projet avec :

  • un capteur
  • un Raspberry PI
  • une base de données
  • une interface Web

Pour cela, je dispose d’un Raspberry PI 4 Go, ainsi qu’un capteur BME 280.

J’arrive à lire les données du capteur via un script en Python, mais je ne parviens pas à les envoyer dans ma base de données

Mon script :

import bme280
from time import sleep
import MySQLdb
import mysql.connector
import requests
import datetime
import sys
import serial
import pymysql

temperature,pressure,humidity = bme280.readBME280All()
(chip_id, chip_version) = bme280.readBME280ID()

conn = MySQLdb.connect(host=« localhost »,user=« admin »,passwd=« admin »,db=« test »)
c = conn.cursor()

while True:

c.execute(« INSERT INTO bmetest (temperature) VALUES ($s) » %(temperature))
conn.commit()

print (« Chip_ID : », chip_id)
print (« Version : », chip_version)
print (« Température : », temperature, « C »)
print (« Humidité : », humidity, « % »)
print (« Pression: », pression, « hPa »)

sleep(3)

J’obtiens l’erreur : TypeError : not all arguments converted durint string formatting

J’ai tout essayé, je comprends pas, j’aimerai juste que toutes les 3 secondes, la pression, l’humidité et la température soient intégrés dans la base

Pouvez-vous m’aider SVP

Merci,

hello,

a priori se sont les champs de ta table qui ne correspondent pas au valeur que tu veux y mettre.
a savoir 3 champs : temperature,pressure,humidity
reste a determiner quel est le type de ces valeurs (int ou float) :

result = type(temperature)
print(result)

et ce pour les trois valeurs
reste plus qu a définir les types de ces valeurs sur la table mysql

l’insert va aussi changer puisque tu lui balances 3 champs ( peut être 4 avec le timestamp - horodatage in french ! )
a noter que pour la pression il y a sans doute un calcul pour obtenir une valeur en hectopascal…

enfin la lecture du BME280 est en dehors du while donc dans l’état, tu remplies la table avec un seul trio de valeurs !

source :

Bonjour, cette ligne est fausse c’est le « % » qui doit être utilisé et non le « $ »
c.execute(« INSERT INTO bmetest (temperature) VALUES (%s) » %(temperature))

1 J'aime

Merci beaucoup !!! c’était ça!! je vous aime merci encore !!!