Ballon sonde
Fermé
codeur_du_01
Messages postés
7
Date d'inscription
samedi 10 avril 2021
Statut
Membre
Dernière intervention
11 avril 2021
-
Modifié le 10 avril 2021 à 19:12
codeur_du_01 Messages postés 7 Date d'inscription samedi 10 avril 2021 Statut Membre Dernière intervention 11 avril 2021 - 11 avril 2021 à 15:52
codeur_du_01 Messages postés 7 Date d'inscription samedi 10 avril 2021 Statut Membre Dernière intervention 11 avril 2021 - 11 avril 2021 à 15:52
A voir également:
- Ballon sonde
- Sonde extérieure la crosse technology ne fonctionne plus - Forum Accessoires & objets connectés
- Accouplé ma sonde extérieure ? - Forum Accessoires & objets connectés
- Comment dégonfler un ballon - Forum Loisirs / Divertissements
- Station meteo Bresser pas de synchro avec capteur exterieur - Forum Accessoires & objets connectés
- Ballon juju - Forum Vos droits sur internet
4 réponses
yg_be
Messages postés
22707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2024
1 471
10 avril 2021 à 20:11
10 avril 2021 à 20:11
bonjour,
quel comportement attends-tu?
quel comportement attends-tu?
codeur_du_01
Messages postés
7
Date d'inscription
samedi 10 avril 2021
Statut
Membre
Dernière intervention
11 avril 2021
10 avril 2021 à 20:38
10 avril 2021 à 20:38
je voudrai que le programme prenne la température et la prétion
puit qu'il prenne les photo
puit qu'il prenne les photo
yg_be
Messages postés
22707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2024
1 471
10 avril 2021 à 20:58
10 avril 2021 à 20:58
es-tu certain de t'être bien exprimé?
peux-tu être plus précis? dans quel ordre doit-il faire tout cela?
peux-tu être plus précis? dans quel ordre doit-il faire tout cela?
codeur_du_01
Messages postés
7
Date d'inscription
samedi 10 avril 2021
Statut
Membre
Dernière intervention
11 avril 2021
>
yg_be
Messages postés
22707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2024
Modifié le 11 avril 2021 à 10:57
Modifié le 11 avril 2021 à 10:57
je pense avoir plus détailler si dessous dans réponse |
\/
\/
codeur_du_01
Messages postés
7
Date d'inscription
samedi 10 avril 2021
Statut
Membre
Dernière intervention
11 avril 2021
10 avril 2021 à 22:56
10 avril 2021 à 22:56
le premier programme présenter doit d'abord prendre la température , pression , humidité : ensuit,
il les enregistre dans un fichier "mesures.txt" .
Le deuxième programme présenter , qui luit prend plusieurs photo.
Et donc en ajoutent les deux programmes :
je voudrais que le programme prenne la température , la pression et l'humidité en les enregistrent dans le fichiée "mesurs.txt" et une fois fais , il faut qu'il prenne des photo.
je travail sur un rasberry a l'école pour un projet avec le B.I.A ;on envoi un ballon sond , je pourrait donc pas tester le programme pour l'instant en raison du confinement .
il les enregistre dans un fichier "mesures.txt" .
Le deuxième programme présenter , qui luit prend plusieurs photo.
Et donc en ajoutent les deux programmes :
je voudrais que le programme prenne la température , la pression et l'humidité en les enregistrent dans le fichiée "mesurs.txt" et une fois fais , il faut qu'il prenne des photo.
je travail sur un rasberry a l'école pour un projet avec le B.I.A ;on envoi un ballon sond , je pourrait donc pas tester le programme pour l'instant en raison du confinement .
yg_be
Messages postés
22707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2024
1 471
11 avril 2021 à 11:13
11 avril 2021 à 11:13
ok, je me demandais dans quel ordre tout cela devait se passer.
le plus simple, me semble, alors, dans le fichier "temp":
- de créer une fonction timelaps()
- de mettre dans cette fonction les ligne 3 à 11 du fichier "timelaps"
- d'appeler cette fonction en ligne 212 du fichier "temp", juste avant les trois secondes d'attente.
il est également possible de faire un seul programme en gardant les deux fichiers séparés.
le plus simple, me semble, alors, dans le fichier "temp":
- de créer une fonction timelaps()
- de mettre dans cette fonction les ligne 3 à 11 du fichier "timelaps"
- d'appeler cette fonction en ligne 212 du fichier "temp", juste avant les trois secondes d'attente.
il est également possible de faire un seul programme en gardant les deux fichiers séparés.
codeur_du_01
Messages postés
7
Date d'inscription
samedi 10 avril 2021
Statut
Membre
Dernière intervention
11 avril 2021
>
yg_be
Messages postés
22707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2024
Modifié le 11 avril 2021 à 12:52
Modifié le 11 avril 2021 à 12:52
comme ça :
import smbus
import picamera
import time
from datetime import datetime
from ctypes import c_short
from ctypes import c_byte
from ctypes import c_ubyte
DEVICE = 0x76 # Default device I2C address
bus = smbus.SMBus(1) # Rev 2 Pi, Pi 2 & Pi 3 uses bus 1
# Rev 1 Pi uses bus 0
def getShort(data, index):
# return two bytes from data as a signed 16-bit value
return c_short((data[index + 1] << 8) + data[index]).value
def getUShort(data, index):
# return two bytes from data as an unsigned 16-bit value
return (data[index + 1] << 8) + data[index]
def getChar(data, index):
# return one byte from data as a signed char
result = data[index]
if result > 127:
result -= 256
return result
def getUChar(data, index):
# return one byte from data as an unsigned char
result = data[index] & 0xFF
return result
def readBME280ID(addr=DEVICE):
# Chip ID Register Address
REG_ID = 0xD0
(chip_id, chip_version) = bus.read_i2c_block_data(addr, REG_ID, 2)
return (chip_id, chip_version)
def readBME280All(addr=DEVICE):
# Register Addresses
REG_DATA = 0xF7
REG_CONTROL = 0xF4
REG_CONFIG = 0xF5
REG_CONTROL_HUM = 0xF2
REG_HUM_MSB = 0xFD
REG_HUM_LSB = 0xFE
# Oversample setting - page 27
OVERSAMPLE_TEMP = 2
OVERSAMPLE_PRES = 2
MODE = 1
# Oversample setting for humidity register - page 26
OVERSAMPLE_HUM = 2
bus.write_byte_data(addr, REG_CONTROL_HUM, OVERSAMPLE_HUM)
control = OVERSAMPLE_TEMP << 5 | OVERSAMPLE_PRES << 2 | MODE
bus.write_byte_data(addr, REG_CONTROL, control)
# Read blocks of calibration data from EEPROM
# See Page 22 data sheet
cal1 = bus.read_i2c_block_data(addr, 0x88, 24)
cal2 = bus.read_i2c_block_data(addr, 0xA1, 1)
cal3 = bus.read_i2c_block_data(addr, 0xE1, 7)
# Convert byte data to word values
dig_T1 = getUShort(cal1, 0)
dig_T2 = getShort(cal1, 2)
dig_T3 = getShort(cal1, 4)
dig_P1 = getUShort(cal1, 6)
dig_P2 = getShort(cal1, 8)
dig_P3 = getShort(cal1, 10)
dig_P4 = getShort(cal1, 12)
dig_P5 = getShort(cal1, 14)
dig_P6 = getShort(cal1, 16)
dig_P7 = getShort(cal1, 18)
dig_P8 = getShort(cal1, 20)
dig_P9 = getShort(cal1, 22)
dig_H1 = getUChar(cal2, 0)
dig_H2 = getShort(cal3, 0)
dig_H3 = getUChar(cal3, 2)
dig_H4 = getChar(cal3, 3)
dig_H4 = (dig_H4 << 24) >> 20
dig_H4 = dig_H4 | (getChar(cal3, 4) & 0x0F)
dig_H5 = getChar(cal3, 5)
dig_H5 = (dig_H5 << 24) >> 20
dig_H5 = dig_H5 | (getUChar(cal3, 4) >> 4 & 0x0F)
dig_H6 = getChar(cal3, 6)
# Wait in ms (Datasheet Appendix B: Measurement time and current calculation)
wait_time = (
1.25
+ (2.3 * OVERSAMPLE_TEMP)
+ ((2.3 * OVERSAMPLE_PRES) + 0.575)
+ ((2.3 * OVERSAMPLE_HUM) + 0.575)
)
time.sleep(wait_time / 1000) # Wait the required time
# Read temperature/pressure/humidity
data = bus.read_i2c_block_data(addr, REG_DATA, 8)
pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4)
temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4)
hum_raw = (data[6] << 8) | data[7]
# Refine temperature
var1 = ((((temp_raw >> 3) - (dig_T1 << 1))) * (dig_T2)) >> 11
var2 = (
((((temp_raw >> 4) - (dig_T1)) * ((temp_raw >> 4) - (dig_T1))) >> 12) * (dig_T3)
) >> 14
t_fine = var1 + var2
temperature = float(((t_fine * 5) + 128) >> 8)
# Refine pressure and adjust for temperature
var1 = t_fine / 2.0 - 64000.0
var2 = var1 * var1 * dig_P6 / 32768.0
var2 = var2 + var1 * dig_P5 * 2.0
var2 = var2 / 4.0 + dig_P4 * 65536.0
var1 = (dig_P3 * var1 * var1 / 524288.0 + dig_P2 * var1) / 524288.0
var1 = (1.0 + var1 / 32768.0) * dig_P1
if var1 == 0:
pressure = 0
else:
pressure = 1048576.0 - pres_raw
pressure = ((pressure - var2 / 4096.0) * 6250.0) / var1
var1 = dig_P9 * pressure * pressure / 2147483648.0
var2 = pressure * dig_P8 / 32768.0
pressure = pressure + (var1 + var2 + dig_P7) / 16.0
# Refine humidity
humidity = t_fine - 76800.0
humidity = (hum_raw - (dig_H4 * 64.0 + dig_H5 / 16384.0 * humidity)) * (
dig_H2
/ 65536.0
1.0
+ dig_H6 / 67108864.0 * humidity * (1.0 + dig_H3 / 67108864.0 * humidity)
)
)
humidity = humidity * (1.0 - dig_H1 * humidity / 524288.0)
if humidity > 100:
humidity = 100
elif humidity < 0:
humidity = 0
return temperature / 100.0, pressure / 100.0, humidity
#################################################################################################
def display_data(nb_for, chip_id, chip_version, temperature, pressure, humidity):
# affichage des données collectées grâce aux librairies readBME280ID & readBME280All
now = datetime.now()
print("\n{}: {}ème fois...".format(now.strftime("%d/%m/%Y %H:%M:%S"), nb_for + 1))
print("Chip ID : ", chip_id)
print("Version : ", chip_version)
print("Temperature : ", temperature, "C")
print("Pression : ", pressure, "hPa")
print("Humidité : ", humidity, "%")
def record_data(chip_id, chip_version, temperature, pressure, humidity):
# mise en forme des données collectées à enregistrer
now = datetime.now()
mesures = "{}\n\nChip ID : {}\nVersion : {}\nTemperature : {}C\nPression : {}hPa\nHumidité : {}%\n\n".format(
now.strftime("%d/%m/%Y %H:%M:%S"),
chip_id,
chip_version,
temperature,
pressure,
humidity,
)
# stockage des données formatées dans un fichier mesures.txt à la racine
with open("mesures.txt", "a") as file:
file.write(mesures)
#################################################################################################
def main():
# fonction principale
print(" start ".center(50, "-"))
for nb_for in range(3): # nb fois que la boucle est parcourrue au total
# récupération des données via les appareils de mesures
chip_id, chip_version = readBME280ID()
temperature, pressure, humidity = readBME280All()
# actionner la fonction display
display_data(nb_for, chip_id, chip_version, temperature, pressure, humidity)
# actionner la fonction record
record_data(chip_id, chip_version, temperature, pressure, humidity)
time.sleep(3) # nb secondes d'attente
print(" end ".center(50, "-"))
time.sleep(1)
######################################################
with picamera.PiCamera() as camera:
for n in range(3):
camera.start_preview()
time.sleep(5)
camera.capture_sequence([
'image%02d.jpg' % i
for i in range(1)
])
camera.stop_preview()
if __name__ == "__main__":
# execution du programme
main()
import smbus
import picamera
import time
from datetime import datetime
from ctypes import c_short
from ctypes import c_byte
from ctypes import c_ubyte
DEVICE = 0x76 # Default device I2C address
bus = smbus.SMBus(1) # Rev 2 Pi, Pi 2 & Pi 3 uses bus 1
# Rev 1 Pi uses bus 0
def getShort(data, index):
# return two bytes from data as a signed 16-bit value
return c_short((data[index + 1] << 8) + data[index]).value
def getUShort(data, index):
# return two bytes from data as an unsigned 16-bit value
return (data[index + 1] << 8) + data[index]
def getChar(data, index):
# return one byte from data as a signed char
result = data[index]
if result > 127:
result -= 256
return result
def getUChar(data, index):
# return one byte from data as an unsigned char
result = data[index] & 0xFF
return result
def readBME280ID(addr=DEVICE):
# Chip ID Register Address
REG_ID = 0xD0
(chip_id, chip_version) = bus.read_i2c_block_data(addr, REG_ID, 2)
return (chip_id, chip_version)
def readBME280All(addr=DEVICE):
# Register Addresses
REG_DATA = 0xF7
REG_CONTROL = 0xF4
REG_CONFIG = 0xF5
REG_CONTROL_HUM = 0xF2
REG_HUM_MSB = 0xFD
REG_HUM_LSB = 0xFE
# Oversample setting - page 27
OVERSAMPLE_TEMP = 2
OVERSAMPLE_PRES = 2
MODE = 1
# Oversample setting for humidity register - page 26
OVERSAMPLE_HUM = 2
bus.write_byte_data(addr, REG_CONTROL_HUM, OVERSAMPLE_HUM)
control = OVERSAMPLE_TEMP << 5 | OVERSAMPLE_PRES << 2 | MODE
bus.write_byte_data(addr, REG_CONTROL, control)
# Read blocks of calibration data from EEPROM
# See Page 22 data sheet
cal1 = bus.read_i2c_block_data(addr, 0x88, 24)
cal2 = bus.read_i2c_block_data(addr, 0xA1, 1)
cal3 = bus.read_i2c_block_data(addr, 0xE1, 7)
# Convert byte data to word values
dig_T1 = getUShort(cal1, 0)
dig_T2 = getShort(cal1, 2)
dig_T3 = getShort(cal1, 4)
dig_P1 = getUShort(cal1, 6)
dig_P2 = getShort(cal1, 8)
dig_P3 = getShort(cal1, 10)
dig_P4 = getShort(cal1, 12)
dig_P5 = getShort(cal1, 14)
dig_P6 = getShort(cal1, 16)
dig_P7 = getShort(cal1, 18)
dig_P8 = getShort(cal1, 20)
dig_P9 = getShort(cal1, 22)
dig_H1 = getUChar(cal2, 0)
dig_H2 = getShort(cal3, 0)
dig_H3 = getUChar(cal3, 2)
dig_H4 = getChar(cal3, 3)
dig_H4 = (dig_H4 << 24) >> 20
dig_H4 = dig_H4 | (getChar(cal3, 4) & 0x0F)
dig_H5 = getChar(cal3, 5)
dig_H5 = (dig_H5 << 24) >> 20
dig_H5 = dig_H5 | (getUChar(cal3, 4) >> 4 & 0x0F)
dig_H6 = getChar(cal3, 6)
# Wait in ms (Datasheet Appendix B: Measurement time and current calculation)
wait_time = (
1.25
+ (2.3 * OVERSAMPLE_TEMP)
+ ((2.3 * OVERSAMPLE_PRES) + 0.575)
+ ((2.3 * OVERSAMPLE_HUM) + 0.575)
)
time.sleep(wait_time / 1000) # Wait the required time
# Read temperature/pressure/humidity
data = bus.read_i2c_block_data(addr, REG_DATA, 8)
pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4)
temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4)
hum_raw = (data[6] << 8) | data[7]
# Refine temperature
var1 = ((((temp_raw >> 3) - (dig_T1 << 1))) * (dig_T2)) >> 11
var2 = (
((((temp_raw >> 4) - (dig_T1)) * ((temp_raw >> 4) - (dig_T1))) >> 12) * (dig_T3)
) >> 14
t_fine = var1 + var2
temperature = float(((t_fine * 5) + 128) >> 8)
# Refine pressure and adjust for temperature
var1 = t_fine / 2.0 - 64000.0
var2 = var1 * var1 * dig_P6 / 32768.0
var2 = var2 + var1 * dig_P5 * 2.0
var2 = var2 / 4.0 + dig_P4 * 65536.0
var1 = (dig_P3 * var1 * var1 / 524288.0 + dig_P2 * var1) / 524288.0
var1 = (1.0 + var1 / 32768.0) * dig_P1
if var1 == 0:
pressure = 0
else:
pressure = 1048576.0 - pres_raw
pressure = ((pressure - var2 / 4096.0) * 6250.0) / var1
var1 = dig_P9 * pressure * pressure / 2147483648.0
var2 = pressure * dig_P8 / 32768.0
pressure = pressure + (var1 + var2 + dig_P7) / 16.0
# Refine humidity
humidity = t_fine - 76800.0
humidity = (hum_raw - (dig_H4 * 64.0 + dig_H5 / 16384.0 * humidity)) * (
dig_H2
/ 65536.0
- (
1.0
+ dig_H6 / 67108864.0 * humidity * (1.0 + dig_H3 / 67108864.0 * humidity)
)
)
humidity = humidity * (1.0 - dig_H1 * humidity / 524288.0)
if humidity > 100:
humidity = 100
elif humidity < 0:
humidity = 0
return temperature / 100.0, pressure / 100.0, humidity
#################################################################################################
def display_data(nb_for, chip_id, chip_version, temperature, pressure, humidity):
# affichage des données collectées grâce aux librairies readBME280ID & readBME280All
now = datetime.now()
print("\n{}: {}ème fois...".format(now.strftime("%d/%m/%Y %H:%M:%S"), nb_for + 1))
print("Chip ID : ", chip_id)
print("Version : ", chip_version)
print("Temperature : ", temperature, "C")
print("Pression : ", pressure, "hPa")
print("Humidité : ", humidity, "%")
def record_data(chip_id, chip_version, temperature, pressure, humidity):
# mise en forme des données collectées à enregistrer
now = datetime.now()
mesures = "{}\n\nChip ID : {}\nVersion : {}\nTemperature : {}C\nPression : {}hPa\nHumidité : {}%\n\n".format(
now.strftime("%d/%m/%Y %H:%M:%S"),
chip_id,
chip_version,
temperature,
pressure,
humidity,
)
# stockage des données formatées dans un fichier mesures.txt à la racine
with open("mesures.txt", "a") as file:
file.write(mesures)
#################################################################################################
def main():
# fonction principale
print(" start ".center(50, "-"))
for nb_for in range(3): # nb fois que la boucle est parcourrue au total
# récupération des données via les appareils de mesures
chip_id, chip_version = readBME280ID()
temperature, pressure, humidity = readBME280All()
# actionner la fonction display
display_data(nb_for, chip_id, chip_version, temperature, pressure, humidity)
# actionner la fonction record
record_data(chip_id, chip_version, temperature, pressure, humidity)
time.sleep(3) # nb secondes d'attente
print(" end ".center(50, "-"))
time.sleep(1)
######################################################
with picamera.PiCamera() as camera:
for n in range(3):
camera.start_preview()
time.sleep(5)
camera.capture_sequence([
'image%02d.jpg' % i
for i in range(1)
])
camera.stop_preview()
if __name__ == "__main__":
# execution du programme
main()
yg_be
Messages postés
22707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2024
1 471
>
codeur_du_01
Messages postés
7
Date d'inscription
samedi 10 avril 2021
Statut
Membre
Dernière intervention
11 avril 2021
11 avril 2021 à 14:38
11 avril 2021 à 14:38
as-tu lu les explications (en dessous de ta question de départ) à propos de comment poster du code?
as-tu testé le code que tu montres?
as-tu testé le code que tu montres?
codeur_du_01
Messages postés
7
Date d'inscription
samedi 10 avril 2021
Statut
Membre
Dernière intervention
11 avril 2021
>
yg_be
Messages postés
22707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2024
11 avril 2021 à 15:52
11 avril 2021 à 15:52
oui j'ai lu les instruction , mais le programme je ne peut pas le tester parce-que je n'est pas de rasberry à la
maison il faut que j'attende la rentrer pour le tester .
mais il n'y a pas d'erreurs de syntaxe quand je le lance .
maison il faut que j'attende la rentrer pour le tester .
mais il n'y a pas d'erreurs de syntaxe quand je le lance .
Traceback (most recent call last):
File "ballsond.py", line 1, in <module>
import smbus
ModuleNotFoundError: No module named 'smbus'
codeur_du_01
Messages postés
7
Date d'inscription
samedi 10 avril 2021
Statut
Membre
Dernière intervention
11 avril 2021
11 avril 2021 à 10:34
11 avril 2021 à 10:34
bonjour
ce sont deux programmes différent qui fonctionne , mais j'aimerais que sa ne soi que un seul programme .
ce sont deux programmes différent qui fonctionne , mais j'aimerais que sa ne soi que un seul programme .