Choix technologiques et techniques - AllanFontaine/Pot-App GitHub Wiki

Table of content

  1. Workflow git
    1.1 Workflow envisagés
    1.2 Workflow choisi
  2. Technologies
    2.1 Back-end
    2.2 Front-end
    2.3 Electronique et équipements

Workflow git

Workflow envisagés :

Feature branch workflow

Ce workflow git est basé sur le fait de faire une branche à chaque feature développée. Il permet d'éviter que 2 personnes programmes sur la même partie de code en même temps sans le savoir, codant ainsi quelque chose qui a peut-être déjà été codé. Son défaut est qu'il demande un grand nombre de création de branches.

Découpage thématique

Ce workflow était celui choisi de base, qui obligeait à découper le projet en branche/thème. On aurait donc eu dans le cadre de notre projet 3 thèmes : électronique, front-end, back-end. Malgré la certaine facilité à mettre en place, il pose quand même des problèmes quant à la gestion des fusions qui ne se font pas toujours sans casse.

Workflow choisi :

(1/10/2020)

Gitflow workflow

Ce workflow git est basé autour des délivrables du projet. Il est très pratique pour des projets qui ont des dates précises pour les délivrables. Il permet en effet de faire progresser le projet en utilisant 2 branches principales en parallèles :

  • La branche master qui contient toutes les versions qui sont potentiellement délivrable sur le marché.
  • La branche développement qui représente la branche sur laquelle on développe les features. La branche master ne contient donc que l'évolution du produit une fois les features de la branche développement ajoutées et permet donc de tracer l'historique des versions. La branche développement quant à elle sert de branche de travail et des branches par features sont potentiellement crées à partir de celle-ci. On ne fusionnera donc la branche développement et master qu'à chaque développement opérationnel du code.

gitflow

Technologies

Back-End

Choix du langage : Python

python-logo

La raison de ce choix tient dans le fait que nous connaissons déjà en partie Python via nos projets respectifs de développement web de l'année passée. Nous voulions travailler avec un langage connu et qui ne nous demanderait pas une période d'apprentissage supplémentaire vu le temps restreint que nous possédons pour mettre en place le projet. Qui plus est, Python est un langage de plus en plus populaire au sein des entreprises ce qui représente une plus value pour notre apprentissage. Python a été classé par l'IEEE (Institute of Electrical and Electronics Engineers) comme le meilleur langage de programmation en 2019 (score de 100) dans quasi tout les domaines et pour sa polyvalence entre autre.

Choix du framework : Django

django-logo

Le framework Django a été choisi pour à peu près les mêmes raisons que nous avons décidées de choisir python comme langage :

  • Nous l'avons déjà utilisé et donc n'avons plus ou presque plus à passer par la case apprentissage.
  • Django est utilisé dans pas mal d'entreprises réputées.
  • Ci-dessous un tableau représentant les pours et les contres :
Pour (+) Contre (-)
  • Outil de développement populaire.
  • Il est facile de trouver de la documentation dessus.
  • La communauté est active.
  • Architecture bien connue et réputée (MVC) => Cela implique de la rigueur.
  • Syntaxe facile à apprendre.
  • Portabilité (Convient pour tout types d'application web).
  • Utilisé journalièrement par des compagnies réputées : Instagram,Spotify, The Washington Post,... => Cela veut dire que nous utilisons un framework dans lequel plusieurs grandes compagnies ont fait confiance, preuve d'une qualité indéniable.
  • Vu en cours => Il est plus simple de demander des feedbacks à nos professeurs.
  • Loin d'être le plus rapide (en terme de requêtes/seconde).
  • Pas vraiment fait pour les petits projets et les petites applications.
  • Peut être un overkill, vu que c'est un gros framework et que nous n'allons potentiellement pas utiliser tous les outils mis à disposition.
  • Django est mis à jour lentement, nous pouvons nous retrouver à ne pas utiliser les dernières technologies disponibles.
|

Choix de la base de donnée : MySQL

![mysql-logo](https://github.com/AllanFontaine/Pot-App/blob/master/Docs/Images/mysql-logo.jpg =250x)

drawing

Nous avons choisi d'utiliser une base de données relationnelle car nous n'avions pas l'utilité d'utiliser une autre forme de DB. Qui plus est nous étions bien plus à l'aise à l'idée d'utiliser une base de données relationnelle vu que nous avons travaillé avec ces dernières auparavant. Notre choix s'est ensuite porté vers MySQL, car certains membres de notre groupe l'avait déjà utilisé dans le projet de développement web de l'année passée. Qui plus est, nous avons eu des problèmes lorsque nous voulions utilisé MongoDB, notre premier choix à la base.

Front-End

Choix du Framework js: Angular

angular-logo

Le choix du framework pour le front-end est parti de la volonté d'apprendre un framework nouveau quitte à perdre du temps au début à apprendre ce nouveau framework. La logique est inverse à celle pour le choix du back-end. Notre volonté ici est de pouvoir apprendre un nouveau framework, ayant tous coder en React l'année passée. Qui plus est, le choix s'explique aussi parce que notre expérience avec React n'avait pas été toujours la plus agréable pour certains. La volonté de changement s'est donc vue imposée.

Choix du Framework design Js: Angular Material

angular-material-logo

Angular Material est un framework qui adapte "Material Design" pour être sur qu'il soit compatible avec Angular et que ses composants soit utilisable sans aucun soucis. Nous avons décidé de nous pencher sur Angular Material en plus de bootstrap (voir ci-dessous) car il propose une multitude de composants qu'il faut apprendre à utiliser, mais une fois maitrisées, elles sont pratiques, jolies, mais surtout très dynamiques et donnent une certaine vie au site web.

Choix du Framework css: Bootstrap

bootstrap-logo

Pour le choix du framework css, nous nous sommes basés sur notre expérience passée avec bootstrap qui s'est révélé très bonne et très agréable. Nous voulions donc préserver ce framework pour nous faciliter la tâche mais aussi nous permettre de nous focaliser sur d'autres éléments.

Codage du contrôleur

Nous avons choisi de travailler avec Arduino et donc nous travaillons dans l'environnement proposé par Arduino (langage proche du C et du C++). Pour faciliter le codage à distance nous utilisons aussi des simulateurs en ligne pour écrire notre code avant de l'implémenter et le tester dans un vrai arduino.

Electronique et équipements

Choix du contrôleur : Arduino

arduino-logo

Le choix du contrôleur était peut-être l'un des plus complexe car nous ne nous y connaissions que très peu et choisir quel allait être le meilleur choix pour notre projet ne fut pas une mince à faire! Nous avons rapidement décidé de regarder dans nos contacts pour voir si quelqu'un avec une expertise dans le sujet ne pouvait pas nous aider à faire ce choix. Nous avons donc pris contact avec une connaissance qui travaille à l'institut Belge des services postaux et communications. Ce dernier nous a aiguillé vers l'arduino, solution qui, dans le cadre de notre projet d'école, allait nous faciliter l'implémentation, ce dernier étant fabriqué pour être un outil facile d'utilisation pour des novices en la matière. Ce choix allait bien évidemment influencé le reste des choix d'équipements d'un point de vue électronique. Le choix de base d'un seul arduino a cependant beaucoup évolué suite à de nombreuses difficultés techniques rencontrées durant l'avancement du projet. [^1]

Choix des outils :

Le choix des outils s'est fait en fonction de notre interview précédente avec notre contact de l'institut Belge des services postaux et communications ainsi que notre autre interview avec notre contact horticulteur. Nous avons donc pris en compte leurs conseils et nous sommes mis d'accord pour les outils suivants :

  • Arduino méga 2560 : un modèle plus avancé, il contient plus de mémoire, est plus rapide mais a aussi plus de pin de l'iconique Arduino Uno. Il est utilisé pour toutes les choses techniques de notre programme (Calcul de la quantité d'eau récupération de données…)
  • Arduino Uno : un modèle parfait pour faire une seule tache. Dans notre cas, il est configuré en mode "slave", il reçoit des données de notre 2560 et agit en fonction.
  • AZ-Delivery soil moisture meter : Une petite sonde très portative à planter dans le sol, elle nous donne le courant qui passe entre ses pattes ce qui permet de calculer l'humidité du sol.
  • YF-S201 Water meter : Un simple compteur d'eau qui nous permet de connaitre le débit à tout moment et grâce auquel nous pouvons calculer la quantité d'eau déversée pour arroser de manière optimale.
  • US Solid 12V solenoid valve : La vanne utilisée, au départ fermée, elle s'ouvre quand on lui injecte un courant de 12v.
  • AZ-Delivery DHT22 : Une petite sonde qui prélève 2 données de notre potager, la première étant la température extérieure qui est utilisée pour le calcul de la quantité d'eau d'arrosage. La seconde est l'humidité extérieur, elle n'est pas utilisée dans les calculs mais est gardée pour former des graphiques.
  • AZ-Delivery ESP32 : Un petit module Wi-Fi, il est utilisé pour envoyer les données récoltées sur notre api.
  • Tube en métal troué par palier (type béquille) pour régler en hauteur notre arrosage. tube troué
  • Tuyaux flexibles pour acheminer l'eau jusqu'aux différentes parcelles.

Coût d'achat :

Pièce Prix en EUR
  • Arduino méga
  • Arduino Uno
  • YF S-201
  • AZ-Delivery ESP32
  • AZ-Delivery Soil Moisture meter
  • AZ-Delivery DHT22
  • US Solid 12V Solenoid Valve
  • Cables pour breadboard
  • Breadboards
  • Subtotal
  • 40.73
  • 19.99
  • 9.99
  • 3.00
  • 9.07
  • 9.06
  • 15,83
  • 8.99
  • 7.99
  • 125.2

Design retenu :

[^1]:Les interviews en question se retrouvent dans la page collaboration ici

⚠️ **GitHub.com Fallback** ⚠️