Une sonde de temperature avec le capteur BME280 sur RPI 0

## Introduction
Dans un article précédent j'ai expliqué la mise en place d'une Gateway pour le réseau Lorawan TheThingsNetwork.

Le matériel étant en extérieur dans une boite fermée, j'ai décidé de suivre la température de la CPU et son évolution en fonction de la température exérieure à la boite

Pour cela j'ai installé une sonde de température connectée à un rapsberry pi Zero de test pour comprendre le fonctionnement et les pre-requis à l'installation.

Ce court article est la description des composants matériels, logiciels me permettant de suivre graphiquement cette évolution.  

## Le materiel.

Une sonde de température  dans notre cas BME280 et un raspberry Pi ici un Zero mais pour tous les RPI les connecteurs GPIO sont identiques.


+ BME280
[Fiche technique du capteur](https://doc.riot-os.org/group__drivers__bmx280.html)

![Bme280](images/bme280.jpg)


+ Le rpi0 [GPIO](https://www.raspberrypi.org/documentation/usage/gpio/)

![piZero](images/Pi-Zero-W-1_400x.jpg)

Et des cables entre les deux suivant ce schéma.

|   BME280	|  Description 	| GPIO PI0  	|
|---	|:---:	|---:	|
|  **VCC**	|   3.3 V	|   P1	|
|  **GND** 	|  Ground	|   P9	|
|  **SCL**	| I2C SCL	|   P5	|
|  **SDA**	| I2C SDA	|   P3	|


## Les logiciels

### les installations

Les éléments logiciels à installer sont :

+ **les packages**
  + pip (apt install python-pip)
  + mosquitto-clients ( apt install mosquitto-clients )
  + i2c-tools ( apt install i2c-tools )
+ **python**
  +  paho-mqtt (pip install paho-mqtt)
  +  RPi.bme280 (pip install RPi.bme280)


### la configuration

Il s'agit de l'activation du protocole I2C sur le raspberry PI Zero.
Pour cela on utilise raspi-config option
+  3 Interface Options
![config](images/i2c-config.png)

Et aprés le branchement du capteur bme280 et un reboot on peut vérifier si i2c est vu par le systeme.

Vérification par les deux commandes

+ dmesg | grep i2c
+ lsmod | grep i2c

puis on lance la commande suivante pour trouver le parametre à utiliser dans le code Python:

>i2cdetect -y 1   
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f   
00:          -- -- -- -- -- -- -- -- -- -- -- -- --   
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   
70: -- -- -- -- -- -- **76** --   

Cette valeur est l'adresse du capteur sur le bus I2C

**Nota!!!** pour utiliser le device i2c à partir d'un utilisateur il faut ajouter cet utilisateur au groupe i2c.

> adduser username i2c

### Le code Python.
Et un peu de code.

Celui-ci lit les valeurs de température sur l'Os et sur la sonde bme280.

Puis transmets le tout au broker mqtt.

**Code**
```python

#!/usr/bin/env python   
import os   
import time   
import smbus2   
import bme280   
import paho.mqtt.client as mqtt

def get_cpu_temp():

    result = 0.0

    if os.path.isfile('/sys/class/thermal/thermal_zone0/temp'):
        with open('/sys/class/thermal/thermal_zone0/temp') as f:
            line = f.readline().strip()
        if line.isdigit():
          result = float(line) / 1000   
    return result


port = 1   
address = 0x76   
bus = smbus2.SMBus(port)   

calibration_params = bme280.load_calibration_params(bus, address)   

client_name = "pi0bme280"   
broker_address = "192.168.10.104"   
client =mqtt.Client(client_name)   
client.connect(broker_address) #connect to broker   

while True:   
   data = bme280.sample(bus, address, calibration_params)   
   client.publish("temp/pi0bme280/ext",data.temperature)   
   client.publish("temp/pi0bme280/CPU",get_cpu_temp())   
   time.sleep(30)

exit(0)
```

## Le suivi des résultats.
Le suivi ce fait avec grafana  / influxdb / mqtt et telegraf.

Le résultat.
![Grafana](images/Suivi-temp-Bureau.png)



## Référence.

+ [Using bme280-i2c](https://www.raspberrypi-spy.co.uk/2016/07/using-bme280-i2c-temperature-pressure-sensor-in-python/)
+ [Paho-mqtt](http://www.steves-internet-guide.com/into-mqtt-python-client/)
+ [mosquitto](https://www.codeflow.site/fr/article/how-to-install-and-secure-the-mosquitto-mqtt-messaging-broker-on-debian-10)
+ [grafana](https://grafana.com/docs/grafana/latest/installation/debian/)
+ [influxdb](https://docs.influxdata.com/influxdb/v2.0/install/)
+ [telegraf](https://www.influxdata.com/time-series-platform/telegraf/)