Comment relier une base de données MYSQL avec une carte Arduino ?

Bien le bonjour à vous,

En classe de Terminale, j'ai un projet de groupe à présenter pour cette fin d'année. Le projet est le suivant: réaliser un système qui permet de faire l'appel automatiquement.

Nous avions penser à réaliser une base de données en MYSQL qui contiendrait les classes avec les élèves etc. Chaque élève disposerait d'un badge RFID, et quand celui-ci rentrera dans la salle de classe, il devra présenter son badge au récepteur qui est fixé sur le bureau du professeur.

Ce "récepteur" que nous avons conçu est composé d'une carte Arduino Uno, avec dessus un Shield NFC, qui dispose d'un lecteur RFID (pour lire les badges), ainsi que d'un écran LCD et d'un buzzer, le tout installé dans un petit boitier.

De mon côté, j'ai réalisé ma base de données. Mais le problème est le suivant: comment relier cette base de données avec la carte Arduino ?

Ce que nous pensions faire, était qu'au commencement, le professeur présentait son badge. Tant que celui-ci n'est pas présenté, le cours ne commence pas, et s'il ne l'a pas présenté au bout de 15 min, le cours est annulé. Lorsqu'un élève présentait son badge au récepteur, l'Arduino reconnaissait l'identité du badge, puis envoyait comme information à la base de données que cet élève était présent. Au bout de 15 min après le passage du badge du professeur, tout les élèves qui sont dans cette classe qui n'ont pas présenté leurs badges se verront mis absents. Mais voilà, comment réaliser ce système ? Comment faire pour relier l'Arduino avec cette base de données et que les transferts d'informations aient lieu ?

Je précise que ce système doit fonctionner sans connexion internet.

Merci d'avance pour vos réponses, qui j'espère pourront nous permettre d'avancer.

Salut, pour pouvoir relier ta base de données, il me semble qu'il faut utiliser du php, ce qui est (à vérifier) impossible avec l'arduino. Cependant, tu peux utiliser un raspberry pi qui tourne sous linux ou windows 10 qui te permettra de générer du php. Tu peux aussi utiliser les deux et faire une communication entre les deux cartes.

Projet sympa en tout cas ! J'espère que ce que je dis est faux afin que tu puisses réaliser ton projet, mais je pense que c'est vrai ! :3

Bon courage !

bonjour,
python, php, javascript
tout dépend comment est relié aussi le module au server et par quoi.

Roudicator:
Salut, pour pouvoir relier ta base de données, il me semble qu'il faut utiliser du php, ce qui est (à vérifier) impossible avec l'arduino. Cependant, tu peux utiliser un raspberry pi qui tourne sous linux ou windows 10 qui te permettra de générer du php. Tu peux aussi utiliser les deux et faire une communication entre les deux cartes.

Projet sympa en tout cas ! J'espère que ce que je dis est faux afin que tu puisses réaliser ton projet, mais je pense que c'est vrai ! :3

Bon courage !

D'abord merci pour ta réponse !

Mince, c'est assez problématique ... de plus je ne peux plus me procurer du matériel ! En effet, les commandes ont été passé par le lycée (nous les avons reçu il y a 1 mois ...) et nous ne pouvons en faire de nouvelles ! Ce sont les professeurs qui nous ont conseillé de partir sur une base de données MYSQL "parce que c'est universel" ... si j'avais su !

infobarquee:
bonjour,
python, php, javascript
tout dépend comment est relié aussi le module au server et par quoi.

C'est à dire ? Je ne suis que débutant de le monde de la programmation ...
La carte Arduino peut être reliée sur le PC qui contient la base de données ... celle-ci est hébergée par le PC en lui même, en localhost.

Existe-t-il d'autres moyens alors pour faire la communication entre une BDD et une carte Arduino ? Je peux encore créer la base de données sur un autre logiciel compatible lui avec Arduino ...

Sinon, je peux aussi faire toutes les entrées des élèves et me servir des fonctions temporelles sur le code Arduino en lui même, mais c'est dommage, parce que ce sera lourd et le faire via une BDD extérieure était à mon sens plus intelligent ... et dans ce cas là, chaque récepteur devra avoir un programme différent, ce qui pose un fort problème d'efficacité, contrairement à chaque récepteur qui a le même programme mais qui est juste relié à une table différente de la BDD ! Et donc au lieu d'avoir juste à modifier la BDD, il faudra alors modifier le code qui est dans l'Arduino dans le boitier, et ça remet en cause le principe de "vitesse" et de "clarté" de base de notre projet ...

Enfin bon, je reste preneur de toute aide, et merci pour vos 2 réponses ! :slight_smile:

La carte Arduino peut être reliée sur le PC qui contient la base de données ... celle-ci est hébergée par le PC en lui même, en localhost.

par quel moyen?

on va pas te sortir les vers du nez :slight_smile:
donc donnes tout ce que tu as comme matériel, etc...

infobarquee:
par quel moyen?

on va pas te sortir les vers du nez :slight_smile:
donc donnes tout ce que tu as comme matériel, etc...

Et bien j'ai une carte Arduino Uno, avec dessus un Shield NFC (qui permet de lire des émetteurs RFID), un écran LCD et un buzzer, le tout connecté à un ordinateur portable (Windows 10), ordinateur sur lequel j'ai créé ma base de données MYSQL. Cette base de données est hébergé par cet ordinateur et non un serveur web, de plus je dois réaliser le tout sans connexion internet.

Sinon j'ai trouvé ça sur le net, vous pensez que ça pourrait m'être utile ?
https://launchpad.net/mysql-arduino

Vu que ta BDD est sur le pc qui est relier a l'arduino , il ne te reste plus qu'as faire une appli en C ou en processing , qui communique avec la bdd et l'arduino...

bad_dl:
Vu que ta BDD est sur le pc qui est relier a l'arduino , il ne te reste plus qu'as faire une appli en C ou en processing , qui communique avec la bdd et l'arduino...

Ça par contre ça reste faisable alors ! Sachant que j'ai quelques bases en Processing, je me débrouille un peu, si c'est pas trop dur alors ... pourquoi pas !

Mais dans ce cas là il faut que je me renseigne sur les communications entre Processing - Arduino et Processing - MYSQL ...

Sinon j'ai trouvé ça sur le net, vous pensez que ça pourrait m'être utile ?
MySQL Connector/Arduino in Launchpad

oui il y a cette solution

Si tu utilises un pc la connexion sera gourmande pour aller se connecter à MySQL si en plus c'est pour une dizaine de lignes tu as plutôt intérêt à utiliser une sdcard avec sqlite3 c'est rapide et pas gourmand comme base de données et de plus tu te passes de pc.

infobarquee:
oui il y a cette solution

Merci, je vais essayer ça au plus vite alors, et si ça marche je vous en informerai !

JLuc:
Si tu utilises un pc la connexion sera gourmande pour aller se connecter à MySQL si en plus c'est pour une dizaine de lignes tu as plutôt intérêt à utiliser une sdcard avec sqlite3 c'est rapide et pas gourmand comme base de données et de plus tu te passes de pc.

SQLite a vraiment l'air plus utile que MYSQL pour ce que je cherche à faire, et dédié à ce genre de situation, mais je viens de me renseigner et c'est du PHP, donc ça ne marche pas avec Arduino ! Si j'avais su, j'aurais commandé un Raspberry Pi ... :frowning:

Mais je retiens quand même, ça me sera peut être utile dans le futur qui sait ! :slight_smile:

SQLIte fonctionne aussi en C (le moteur est en C), mais il fait plusieurs mégaoctets, et demande tout autant en RAM -> sur PC :wink:

Tu as encore la possibilité de mettre une carte SD et d'écrire dans un fichier csv par exemple.
C'est fonction des données que tu compte traiter, s'il s'agit de plusieurs milliers ou de simplement quelques utilisateurs pour un test. Dans un premier cas il te faut une base Oracle et un serveur lame hp9000 et dans l'autre une carte SD est suffisante. Il y a l'intermédiaire avec MySQL et un PC, c'est à toi de décider nous on ne peut qu'apporter de l'eau à ton moulin...

Bonjour,

Il s'agit d'un projet étudiant... Je doute fort qu'il y ai des centaines de milliers d'étudiants et de profs à gérer...
C'est une bonne nouvelle car on va pouvoir s'éviter l'achat d'une DB oracle et d'une lame HP (d'autant plus que les commandes sont clôturées :wink: )
Dans la liste de matos, pas de trace de lecteur de carte SD.... Pas de fichier csv non plus dès lors... (et pourquoi faire ?)

De quoi dispose-t-on ?
D'un PC avec une DB Mysql (parfait!), d'une carte Arduino avec lecteur RFID, affichage et buzzer. merveilleux.
D'un élève appends l'arduino et a des bases en Processing...
Que manque-t-il ?
Une ligne série entre les deux...(je parle de la carte et du PC :slight_smile: )

On pourrait répartir le travail entre le PC et l'arduino comme suit :
L'arduino se charge de détecter les badges et d'afficher une information y relative
Le PC se charge... du reste

Scénario possible :
L'arduino détecte un badge et envoie sa référence au PC.
Le PC détermine s'il s'agit d'un badge prof ou élève.

Il note l'heure d'ouverture du cours si c'est un badge prof

S'il s'agit d'un badge élève, il compare l'heure actuelle avec l'heure d'ouverture du cours.
Si on est dans le quart d'heure académique, il enregistre la présence de l'élève et renvoie une information ACCES_AUTORISE à l'arduino.
Celui-ci affiche un message correspondant sur le LCD

Si le quart d'heure est dépassé, il renvoie un message ACCES_NONAUTORISE à l'arduino qui affiche un message ad-hoc et bipe pour signaler l'erreur.

Ceci n'est qu'une idée d'une possible répartition des rôles. Il faudrait bien évidemment affiner...

Coyotte

Merci de vos réponses !

Comme le dit Coyotte, on est bien loin des milliers de lignes ... :slight_smile:
Et effectivement, rien pour lire les cartes SD sur l'Arduino Uno !

coyotte:
On pourrait répartir le travail entre le PC et l'arduino comme suit :
L'arduino se charge de détecter les badges et d'afficher une information y relative
Le PC se charge... du reste

Scénario possible :
L'arduino détecte un badge et envoie sa référence au PC.
Le PC détermine s'il s'agit d'un badge prof ou élève.

Il note l'heure d'ouverture du cours si c'est un badge prof

S'il s'agit d'un badge élève, il compare l'heure actuelle avec l'heure d'ouverture du cours.
Si on est dans le quart d'heure académique, il enregistre la présence de l'élève et renvoie une information ACCES_AUTORISE à l'arduino.
Celui-ci affiche un message correspondant sur le LCD

Si le quart d'heure est dépassé, il renvoie un message ACCES_NONAUTORISE à l'arduino qui affiche un message ad-hoc et bipe pour signaler l'erreur.

Ceci n'est qu'une idée d'une possible répartition des rôles. Il faudrait bien évidemment affiner...

Coyotte

C'est exactement ce que je cherche à faire !
Mais le problème, c'est que je n'ai aucune idée de la façon dont Arduino et le PC (enfin MySQL plus précisément puisque c'est dessus que les références des badges sont liées aux élèves et professeurs) communiquent !

En effet, ce n'est pas faute d'avoir cherché, mais je n'ai rien trouvé sur le net ! C'est à peine si j'ai trouvé le connector au dessus que je n'ai pu testé ... :frowning:

En plus, les interactions seraient minimes, et c'est d'autant plus frustrant de rester bloqué à quelque chose qui au final est assez minime mais indispensable !

Ce qui serait pratique, c'est que le code agisse comme ceci: lorsqu'un badge est passé, la référence du badge est comparée à toutes les références dans la base de données; lorsque la référence est trouvée, elle analyse son id: disons que les id > 500 sont les id des professeurs, et les id < 500 sont ceux des élèves. Et bien si l'id est <500, alors le badge est directement refusé; s'il est >500, alors le professeur est validé et "le cours commence". Ainsi, tout les élèves dans la classe de ce professeur (donc dans la table de l'id du professeur) dispose de 15 min pour passer leurs badges, sans quoi ils seront notés absents.

Je vais donner un exemple: imaginons la table TS1, composé de 30 élèves et 1 professeur. ID professeur: 600, les ID des élèves varient entre 200 et 230. Et bien sur le programme, on écrit que lorsque l'id 600 passe son badge, Arduino regarde LES MINUTES sur l'horloge de l'ordinateur; si les minutes sont comprises dans les intervalles [55;59] et [00;10] (en effet, il ne faudrait pas qu'un prof commence un cours par mégarde !), alors Arduino enregistre cette valeur sur une variable préfinie 'M' par exemple, et "débloque" les id compris entre [200;230] et grâce à une boucle While, Arduino regarde à chaque fois les minutes de l'horloge jusqu'à ce qu'on arrive à 'M+15', dans ce cas là il "bloque" les id compris entre [200;230] . Tout les élèves qui ont passé leurs badges ont reçu la valeur 1 dans la base de données (dans une colonne prédestinée à recevoir cette valeur), et le reste garde la valeur 0: les 0 sont absents, les 1 présents. Ensuite, on peut imaginer qu'un message est envoyé au téléphone du responsable légal de chaque élève ayant un 0 "Votre enfant a manqué un cours de 08h à 09h." Ensuite, après un delay d'une minute, les élèves reprennent tous la valeur de 0 dans la base de données (mais aucun message n'est envoyé bien sur). Et ainsi de suite tout le long de la journée ...

En théorie c'est bien beau tout ça, mais en langage machine, je n'ai aucune idée de comment l'écrire !! :frowning:

Ce qui serait pratique c'est de dire à l'Arduino de "débloquer" les id dans la table de l'id du professeur après passage de son badge, mais je n'ai aucune idée de comment je pourrais écrire ça dans le programme Arduino ! Ni de comment faire en sorte que MySQL laisse Arduino interagir avec elle ! :frowning:

Donc voilà, bien évidemment je ne vous demande pas de m'écrire le code, loin de là, mais quelqu'un aurait-il un lien vers une documentation quelconque ? Un tutoriel ? Ou même des exemples d'interactions, ou bien même quels sont les fonctions / langage machine à utiliser ... sur le net c'est le néant malheureusement ...

Au fait, j'en profite pour poser une autre question: comment faire en sorte que l'Arduino lise les minutes sur l'horloge de l'ordinateur comme je l'ai précisé au dessus ? Car je m'étais renseigné la-dessus, et il me semble qu'il fallait un Shield en plus, est-ce exact ? Car la par contre nous devrons payer nous même le matériel, mais nous n'avions pas envisagé qu'il fallait du matériel pour cela, on pensait malheureusement qu'Arduino pouvait faire ses interactions avec le PC ...

Merci d'avance ! :slight_smile:

Au fait, j'en profite pour poser une autre question: comment faire en sorte que l'Arduino lise les minutes sur l'horloge de l'ordinateur comme je l'ai précisé au dessus ? Car je m'étais renseigné la-dessus, et il me semble qu'il fallait un Shield en plus, est-ce exact ? Car la par contre nous devrons payer nous même le matériel, mais nous n'avions pas envisagé qu'il fallait du matériel pour cela, on pensait malheureusement qu'Arduino pouvait faire ses interactions avec le PC ...

http://playground.arduino.cc/Code/DateTime

A part écrire une application sur le PC qui converse par le port série avec la uno et qui soit elle même capable de lancer des requêtes sql (ça c'est simple) et d'en communiquer le résultat par le port série à la uno, je ne vois aucune issue... Pour l'heure il y a des exemples un peu partout sur ce site.

infobarquee:
Arduino Playground - HomePage

Merci, j'ai commandé un RTC DS 3231. :slight_smile:

JLuc:
A part écrire une application sur le PC qui converse par le port série avec la uno et qui soit elle même capable de lancer des requêtes sql (ça c'est simple) et d'en communiquer le résultat par le port série à la uno, je ne vois aucune issue... Pour l'heure il y a des exemples un peu partout sur ce site.

Où je peux trouver ces exemples ? J'ai beau chercher, je ne trouve rien moi ... Serait-il possible d'avoir des liens vers ces exemples, ou des tutos pour faire ça ? Je rappelle que je suis un simple débutant, je n'ai aucune base dans l'échange de requête sql avec l'Arduino !

Bonsoir,

Il est normal que tu ne trouves rien... Un arduino n'est pas prévu pour attaquer une base de données...
Comme déjà expliqué, chacun son job.

Les requêtes SQL, c'est le boulot d'un PC.
C'est donc Processing qui devrait accéder à Mysql (si tant est que ce soit possible)

L'arduino communique avec Processing via une ligne série. (Il y a beaucoup d'exemples de communication entre Processing et l'arduino)

Ensuite, il faut réfléchir à une répartition claires des rôles entre PC et Arduino (cf mon premier post)

Coyotte

En gros tu n'as jamais vu un bout de ferraille et tu t'attaque à construire la tour Eiffel...
Alors bonne chance car cela prend du temps d'apprendre des langages de programmation et connaitre un tant soit peu l'électronique que tu utilises. On ne peut pas écrire un (des) programme(s) aussi important par le biais d'un forum. Soit votre prof n'en connais pas une sur le sujet, soit il ne discerne pas suffisamment le problème auquel il vous a convié et la tache est ardu pour un novice. Ici tu ne trouveras de l'aide que sur un programme dans lequel un dysfonctionnement t'échappe et auquel cas on pourrait t'aider.