Mesure de température sur Raspberry Pi avec capteurs 1‑Wire Maxim et pont I2C DS2482
Mesure de température sur Raspberry Pi avec capteurs 1‑Wire Maxim et pont I2C DS2482
Vue d'ensemble matérielle
- Raspberry Pi – tout modèle avec bus I2C (ex. Pi 2/3/4)
- DS2482‑2 – maître 1‑Wire sur I2C, adresse 0x18
- Capteurs de température Maxim 1‑Wire – jusqu'à 10 unités, chacune avec une adresse 1‑Wire unique
- Résistances de pull-up – 4,7 kΩ sur la ligne de données 1‑Wire (optionnel si DS2482 gère les pull-ups)
Prérequis logiciels
Ces instructions supposent une installation Raspbian standard avec les sources du noyau disponibles. Vous devrez reconstruire le noyau après les modifications suivantes.
Étape 1 – Activer le DS2482 sur le bus I2C
Modifiez arch/arm/mach-bcm2708/bcm2708.c dans les sources du noyau pour enregistrer le DS2482 comme périphérique I2C. Ajoutez la définition de périphérique platform et le tableau d'informations board :
static struct platform_device bcm2708_bsc1_device = {
.name = "bcm2708_i2c",
.id = 1,
.num_resources = ARRAY_SIZE(bcm2708_bsc1_resources),
.resource = bcm2708_bsc1_resources,
};
static struct i2c_board_info __initdata pi_i2c_devs[] = {
{ I2C_BOARD_INFO("ds1307", 0x68)},
{ I2C_BOARD_INFO("ds2482", 0x18)},
};
...
bcm_register_device(&bcm2835_thermal_device);
Après l'ajout du périphérique, recompilez et installez le noyau.
Étape 2 – Gérer les pull-ups 1‑Wire dans le noyau
Modifiez drivers/w1/w1_io.c pour permettre au DS2482 de contrôler la résistance de pull-up pendant les conversions. Remplacez la fonction w1_post_write par :
static void w1_post_write(struct w1_master *dev) {
if (dev->pullup_duration) {
if (dev->enable_pullup && dev->bus_master->set_pullup) {
dev->bus_master->set_pullup(dev->bus_master->data, 0);
msleep(dev->pullup_duration);
} else {
msleep(dev->pullup_duration);
}
dev->pullup_duration = 0;
}
}
Étape 3 – Ajouter le contrôle de pull-up au driver DS2482
Dans drivers/w1/masters/ds2842.c, ajoutez un helper qui active le pull-up fort du DS2482 quand un délai est demandé :
static u8 ds2482_w1_set_pullup(void *data, int delay) {
struct ds2482_w1_chan *pchan = data;
struct ds2482_data *pdev = pchan->pdev;
u8 retval = 1;
u8 cfg;
if (delay) {
/* S'assurer que le bus est inactif avant de changer la config */
ds2482_wait_1wire_idle(pdev);
/* Activer SPU et APU pour un pull-up fort */
retval = ds2482_send_cmd_data(pdev, DS2482_CMD_WRITE_CONFIG,
ds2482_calculate_config(DS2482_REG_CFG_SPU | DS2482_REG_CFG_APU));
ds2482_wait_1wire_idle(pdev);
}
return retval;
}
Étapes finales
- Reconstruisez et redémarrez le Pi avec le nouveau noyau.
- Vérifiez que le DS2482 apparaît sous
/sys/bus/i2c/devices/1-0018. - Connectez vos capteurs Maxim 1‑Wire à la ligne de données du DS2482 (broche 1) et à la masse.
- Vérifiez que chaque capteur apparaît sous
/sys/bus/w1/devices/et quecat /sys/bus/w1/devices/28‑xxxxxxxxxxxx/w1_slaveretourne une valeur de température.
Avec ces modifications du noyau en place, le Raspberry Pi peut lire fiablement jusqu'à dix capteurs de température 1‑Wire via un seul pont DS2482, le rendant idéal pour les projets de surveillance multi-capteurs.
Ressources supplémentaires
- Maxim Integrated – Fiche technique DS2482
- Raspberry Pi – Tutoriel I2C
- eLinux – Configuration noyau Raspberry Pi
Processus de fabrication
- Système de contrôle d'accès intégré QR, RFID et vérification de température
- Construire un enregistreur de température Raspberry Pi avec capteur I2C à 5 $
- Profilage température Raspberry Pi précis avec Python, SQLite et LabVIEW
- Connecter plusieurs capteurs DS18B20 1-Wire à un Raspberry Pi pour une surveillance température précise
- Moniteur réseau température et humidité Raspberry Pi — Guide de configuration DIY
- Comment lire la température avec un DS18B20 sur Raspberry Pi 2
- Surveillance de température professionnelle sur Raspberry Pi avec DS18B20
- Construire un capteur de température distant avec Raspberry Pi et Python – Guide étape par étape
- Surveillance transparente température et humidité sur Raspberry Pi avec EzTemp