Projet

Général

Profil

Lucas Pallaro

Je suis en L3 EEA à l'université de Bordeaux et en stage au FABLAB du 17 mai au 25 juin. Le but du stage est de mettre au point un réseau de capteurs de température et d'humidité dans une bibliothèque de l'université de Bordeaux permettant d'avoir accès aux données localement. La bibliothèque est celle de la fac de médecine campus Carreire et le serveur est au 20 rue Tourat aux Chartrons.

Le projet

Contact:

06.95.13.40.99

17 mai :

  • Introduction au projet
  • Recherche sur les moyens pour transmettre les signaux des capteurs au serveur :
  1. Sigfox : 3-9e/an, 12 octets 140 fois/jour, module environ 5e
  2. GPRS : carte SIM 5e/mois, pas besoin de module
  3. Lora : abonnement 3 ans = 36e (avec Orange), module Lora min 12e

18 mai :

  • Choix du moyen de communication : GMSR

biblio:
datasheet esp32 wrover b
datasheet technique
datasheet dht22
Incertitude humidité = 5%, incertitude température 0.5°C
revendeur de notre esp
notre module ep32 + sim

  • Installation : VSCode + platform IO
  • Apprendre Git
  • S'inscrire sur Element io pour communiquer

Connecter esp32 à l'ordi

A faire :

Installer esp idf

19 mai :

Nous avons installé l'environnement de développement isp-idf sur windows grâce à cette page
Ainsi nous pouvons compiler et flasher nos programmes sur l'esp.
REMARQUE : pour l'esp avec la batterie il faut maintenir le bouton "boot" lorsqu'on flash le programme.

esp32 wroom datasheet

  • Essai réussi pour faire clignoter une led avec l'esp et afficher hello world
  • Recherche pour trouver un moyen de communiquer avec le dht22 : RMT?

A faire : écrire programme qui effectue le protocole de communication avec le dht22

20 mai :

  • Finalement on utilisera VS Code pour développer
  • Essai réussi pour lire la temp et l'humidité sur un dht22

21 mai :

  • Amélioration du programme
  • Recherche à propos du protocole MQTT pour envoyer des data au RASPBERRY
  • Pose de quatre capteurs le long d'un mur pour des tests (distance entre capteur du haut et du bas : 1.60m):

Ecart d'humidité entre haut et bas : max 8%, peut descendre jusqu'à 4%
Ecart de température entre haut et bas : max 1°C

25 mai :

  • Recherche sur le MQTT

Ecriture d'un programme, librairies utilisées : PubSubClient, ESPAsyncWebServer et WIFI => il fonctionne bien pour tous les capteurs de capteur

ecriture d'un programme python pour subscribe le broker (le raspberrry) => fonctionne

A faire : ecrire code python côté serveur pour récupérer donnée dans un .txt avec la date

26 mai :

  • script python côté serveur qui stocke les donnée en .txt avec la date
  • nous réfléchissons au format sous lequel nos stockerons les données reçues :

format :
L1 numéro de la grappe
L2 Date
L3 Moyenne de température des capteurs de la grappe
L4 Moyenne d'humidité des capteurs de la grappe
L5 Ligne vide

  • Nous avons également écrit un programme qui récupère les données du fichier txt et les range dans des tableaux : un tableau pour la température, pour l'humidité et pour le temps

Nous avons rencontré un problème avec le programme qui subscribe au MQTT, pourtant il marchait précédemment, à résoudre

27 mai :

Résoudre les problèmes du programme qui subscribe au MQTT
=> problème résolu ! : il faut que les ordi qui se connectent au broker aient tous un nom différent
Pour la base de données nous nous intéressons à InfluxDB, et pour l'affichage sur le web à Grafana. Les deux fonctionnent ensemble.
Nous laissons un ordi tourner cette nuit pour récupérer les datas de temp et d'humidité
à faire : mettre en place une database influxdb, regarder si l'esp peut lire l'état de la batterie

28 mai :

recherche sur influxdb
mise au point de la base de donnée influxdb
tracé de graphe avec grafana
amélioration du code mqtt
Nous laissons tout le week end l'esp récolter des data dans une database influxdb : un programme récupère les moyennes des capteurs et l'autre les data de chaque capteur

31 mai :

L'esp a bien récolté les data sans problème. Cependant le programme récupérant les moyennes a eu une erreur : elle est corrigée.
Grosse amélioration du programme faisant la connexion mqtt : création de fonction, lisibilité du code.
On a implémenté le mode sommeil et l'esp + 4 capteurs consomme 11mA pour 5.1V.
A faire : penser comment on pourrait mettre les capteurs dans la bibliotheque, commencer site, regarder comment se connecter à internet avec GSM.

1 juin :

On met en place grafana pour utiliser la base de données en temps réel
documentation sur le raspberry et son module GSM

2 juin :

Recherche su internet pour utiliser le mqtt à travers le réseau GSM + recherche d'autres solutions.
Ajout d'une fonctionnalité pour que l'esp horodate chaque donnée

3 juin

Installation de l'OS sur le raspberry, test du programme python, documentation.

4 juin :

Documentation sur tout ce qui concerne l'installation du site web sur la VM et le réseau.
On laisse tourner une grappe de 5 capteurs tout le week-end pour mesurer la conso, l'esp prend une mesure toutes les 30 min puis se met en deep sleep.

7 juin :

La grappe a consommé 699mAh en 64h soit un courant moyen de 10,9mA (alim de 5V) ce qui correspond à ce que nous indique notre appareil de mesure.
Lecture de la doc pour chercher à diminuer la conso. Hyp: surconsommation vient de la board entière ou du convertisseur de tension de la carte.
Nous allons refaire l'expérience précédente mais une pile de 3.7V comme alimentation.
Documentation sur les commandes AT.

8 juin :

Commande carte SIM
Début de rédaction d'une doc en attendant les composants commandés

  • Comment installer l'environnement de développement
  • commentaire de codes et documentation de ceux-ci
  • début de la doc du projet complet

à faire :
doc sur le programme python côté serveur et l'installation des modules + utilisation d'influxDB

9 juin :

Tuto Inkscape + écriture de doc en attendant les composants commandés

10 juin :

On continue la doc en attendant les composants commandés (doc des programmes, installation de python et InfluxDB)
A faire : UTILISER DES STYLES POUR LES TITRES

11 juin :

On continue la doc en attendant les composants commandés.

14 juin :

Doc
On a reçu la SIM num : 0757770569
conférence avec tutrice de stage
On fera une présentation avec Charlotte
mise au point d'un circuit pour faire tester la sim : cela semble fonctionner puisque "AT" renvoie "OK" mais les commandes intéressantes renvoient "error" => avec une capa de 470 micro cela ne fonctionne toujours pas
tuto utilisé

15 juin :

Je réessaie de faire fonctionner le module SIM.
Je parviens à trouver l'erreur : le module ne détecte pas la SIM "SIM not inserted" après la commande "AT+CPIN?"
lundi 11h30 présentation à Charlotte
J'ai testé un autre module SIM et cela a fonctionné sans erreur, l'autre était sûrement défectueux (de nombreuses personnes ont eu ce problème d'après les forums que j'ai pu consulté)
J'ai donc réussi a envoyer un sms avec le module sim
A faire : commandes AT pour le MQTT

16 juin :

Recherche sur le protocole MQTT via les commandes AT
Pour utiliser le port série sur rapsberry :

  • $ sudo raspi-config
  • Interface options
  • Serial Port
  • No
  • puis Yes
  • puis reboot le raspberry

https://www.balena.io/docs/reference/OS/network/2.x/#cellular-modem-setup
https://forums.balena.io/t/raspberry-pi-sim800-for-gprs/1768/5
https://www.raspberrypi.org/forums/viewtopic.php?t=184886

Problème avec le sim800l : lorsqu'on saisie la PIN il la reconnaît mais il la redemande juste après. La commande "AT+COPS?" renvoie "+COPS: 0"
Tuto à essayer demain

17 juin :

Pour régler le problème de déconnexion de la SIM je vais remplacer l'alimentation par le raspberry par une batterie car j'ai remarqué qu'il y avait une chute de tension aux bornes du module lorsqu'on entre le code PIN.
Lorsque la batterie est connectée et que je lance la liaison série, les caractères que je tape dans la console sont étranges : des u et y tildes par exemple (c'est parce que je n'avais pas connecté le gnd du module au gnd du raspberry).
Retour avec l'alimentation par le raspberry : j'ai réinstallé l'OS et les softwares sur le raspberry et changé le module GSM, toujours le même problème.
A savoir : si le module clignote toutes les 1s cela signifie qu'il n'est pas connecté et qu'il en cherche un, s'il clignote toutes les 3s alors il est connecté.

18 juin :

Aujourd'hui j'essaie encore de trouver une solution à ce problème de SIM qui se déconnecte.
Après saisie du code PIN je tape rapidement "AT+CREG?" => "2,2"
Le 2e 2 signifie "not registered, but MT is currently searching a new operator to register to", problème pour trouver un opérateur ?
Je remplace l'alimentation du module par une batterie. Je branche le tx et rx du raspberry correctement au module SIM. Je connecte le gnd de la sim au gnd du raspberry. Les commandes at fonctionnent.
Lorsque je recherche les réseaux avec le module SIM je trouve ceux d'Orange et Bouygues. Avec une petite antenne je trouve ceux d'Orange Bouygues et SFR.
Lorque je recherche les réseaux 2G sur mon portable avec la même carte SIM je trouve :
1er essai : Orange et EI TELECOM (notre opérateur)
2e essai : Bouygues, Orange, SFR
3e essai : Orange, EI Telecom, SFR

Même essais avec ma carte SIM perso (je suis abonné chez SFR)
1er essai : Bouygues, Orange
2e essai : Bouygues, Orange, SFR
3e essai : pareil que le 2e

Après quelques observations je remarque qu'en fait le module SIM se reboot lorsqu'on saisie le code PIN. D'après ce forum dse gens ont résolu ce problème avec de meilleurs fils et un condensateur. Je vais essayer cette solution.
Cela FONCTIONNE désormais, c'est donc un problème d'alimentation, il faut un gros condensateur (le mien : 4700 micro Farad) et la batterie en alim pour pouvoir fournir suffisamment de courant.
Je viens de ravoir le même problème, je rajoute un condensateur en parallèle du premier et de même capacité. Cela fonctionne et je n'ai plus eu de problème.
Je regarde la datasheet des commandes AT pour chercher des moyens d'envoyer les données par le réseau mobile : PPP? HTTP? FTP?

lundi : essayer la clé WiFi de Pierre

21 juin :

Essai de la clé WiFi de Pierre
Cela fonctionne.
Je cherche si la clé peut partager sa connexion internet par elle-même ou s'il faut la récupérer sur un ordi et ensuite la partager.
Je fais un oral d'entraînement de la soutenance de stage et j'écoute celles de mes camarades.
Je reprends mes recherches précédentes.

22 juin :

J'eesaie de faire fonctionner la clé avec le raspberry pi
Lorsque la clé GPRS est branché, le raspberry la détecte, je cherche ensuite à entrer le code pin, etc
La clé actuelle ne peut pas faire hotspot WiFi par elle-même, Pierre apportera un clé similaire qui peut le faire.
A faire :

  • Commencer à fabriquer le prototype qu'on installera sur site
  • recherche sur les risques liés à l'utilisation de batteries Li-ion

Le principal risque dans notre cas dans l'utilisation des batteries est un court-circuit
Pour ce qui est du prototype de grappe, nous avons pensé à fixer les dht22 sur une plaque en plexi (pour l'isolation thermique et hydrique). Nous cherchons comment fixer la plaque sur le côté de l'armoire.
Penser aussi à un boîtier pour l'esp32

23 juin :

On a trouvé un taquet pour crémaillère d'étagère. On réfléchit à la manière dont on va fixer la plaque de plexi dessus.
Nous allons imprimer un support à la découpe laser, fichier .svg disponible en bas.
Nous avons vissé le dht22 au support crée et avons fixer l'ensemble au taquet avec un collier de serrage. Le résultat a l'air bricolé mais semble fonctionnel.

24 juin :

On conçoit un autre support plus petit
Mesures de notre module DHT22
Le module de notre DHT22 a trois trous : 1 en haut et 2 en bas
Disposition des trous :

°

°____°

Ceux du bas sont alignés horizontalement et distants de 16 mm
Celui du haut est sur la droite verticale passant au milieu des 2 trous du bas, à une hauteur de 30.5 mm

25 juin :

D'après la photo montrant la crémaillère de l'étagère de la réserve, je déduis la largeur des crans est d'environ 3 mm. Nous allons découper un carton en avec les dimensions du cran pour tester les taquets.
Résultats : tous les crans que nous possédions sont adéquats.
Ainsi nous concevons un nouveau prototype.
Je n'ai pas réussi à trouver les mêmes types, cependant j'ai trouvé ceux-ci, à voir s'il convienne :
https://www.leroymerlin.fr/produits/quincaillerie/cheville-vis-clou-et-boulon/crochet-piton-et-gond-de-fixation/fixation-de-cadre-et-tableau/pack-5-crochets-en-s-pour-cloison-ou-panneau-accrochage-tableau-artiteq-82994827.html
https://www.cimaise-shop.fr/crochet-s-blanc-pour-fil-boucle-128.html

Aide d'un stagiaire pour PlatformIO

28 juin :

Mesure courant consommé par l'esp en mesurant la tension aux bornes d'une résistance en série avec l'esp.
Cependant quand je mets une résistance en série même petite (55 ohm), l'esp ne démarre pas. J'ai mis un condensateur de 4.7 mF en parallèle de l'esp, même résultat. Je remplace la résistance par un led ça fonctionne. La tension à ses bornes est de 0.73V.
A-t-on des pinces ampèremétriques ?

29 juin :

On va utilier la RTC pour diminuer la consommation de l'esp en mode sleep.
Nous allons utiliser une bascule RS avec ce circuit intégré : MM74HC00

Pin I2C :
SDA : 21
SCL : 22

30 juin :

Essai de programme avec la RTC : on règle l'heure de la RTC et on l'affiche ensuite. Il fonctionne.
Essai de l'alarme : cela ne fonctionne pas du premier coup. Je revoie mes réglages.
Il semble que l'alarme (pin SQW) soit à l'état haut avant l'alarme et passe à l'état bas après.

Autre essai : avant l'alarme SQW est au niveau de VCC, après l'alarme il est au niveau du GND. Penser à utiliser RTC.clearAlarm(numero_alarm) pour remettre le flag de l'alarme à 0.
La batterie ne doit pas être très puissante puisque lorsque je mets une résitance en sortie de SQW il y a une chute de tension (mesure : 70 mV).

La mémoire : J'utilise le cicuit intégré HEF4001BP qui est composé de 4 portes NOR.
La mémoire fonctionne bien.
ATTENTION : bien brancher les inputs inutilisées au GND !!!

1 juillet :

Nous n'aurons peut-être pas besoin de mémoire puisque l'alarme reste activée jusqu'à ce qu'on la reset. Il nous faudra quand même le circuit intégré car la pile n'est pas assez puissante.
Pour faire l'interrupteur qui ouvrira le circuit d'alimentation de l'esp je vais tester le MOSFET NPN BS170 et le PNP 2N2905. Je les teste avec une LED et je regarde si elle s'allume.

NPN BS170 : nécessite une porte NOT avant la grille donc un circuit intégré
PNP 2N2905 : pas besoin de porte NOT avant la grille

Dans l'idéal il faudrait un MOSFET PNP pour cnonsommer encore moins de courant.

Je fais le même test avec l'esp alimenté sur batterie : cela fonctionne.
Pour l'alimenter avec les batteries il faut connecter le VCC et le GND du module de l'esp.

IMPORTANT :
Lorsqu'on coupe l'alimentation de l'esp et qu'on la remet, le programme se relance depuis le début, il refait donc le void setup.

Essai pour utilser le transistor comme interrupteur :
Il ne faut pas que l'interrupteur ne s'ouvre trop tôt, càd que SQW soit au niveau haut trop tôt.
.setAlarm1 ne met pas SQW au niveau haut
.clearAlarm1 met le SQW au niveau haut
.writeSqwPinMode ne met pas SQW au niveau haut

Tout semble marcher, il faut vérifier la consommation désormais.

2 juillet :

La RTC+transistor ouvrent bien le circuit d'alimentation de l'esp. La tension aux bornes de transistor est la même que la tension aux bornes de la batterie. Cela signifie qu'il n'y a aucune tension aux bornes de l'esp, ce qui implique que le courant le traversant est nul (en réalité 0.7mA).
Schéma du circuit dispo en bas de la page.

5 juillet :

J'ai un code utilisant la RTC qui fonctionne mais quand je rajoute les codes MQTT, etc plus rien ne marche. Je vais donc partir du code qui fonctionne et rajouter au fur et à mesure les autres codes.
J'utilise le transistor P14NF12 finalement.
Il semble que le transistor empêche de bien alimenter l'esp.

6 juillet :

Pour palier au problème il faut alimenter par le 3V3 pas par le 5V.
Problème : je n'arrive pas à utiliser la RTC pour rendre le transistor passant.
Finalement on utilise le transistor BC327