## 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/)