Arduino / Mysql / RFID

Salut tout le monde !
Alors voilà, j'ai crée un système de sécurité avec RFID mais c'est assez gênant de devoir à chaque fois rajouter les membres autorisés 1 à 1 dans le script, alors j'ai fait ma propre base de donnée, dans la table il n'y a que 3 colonnes " ID-RFID / NOM / RANG ", maintenant je ne sais pas comment relier ma BDD à l'arduino, après avoir fait quelques recherches les seuls résultats que j'ai trouvé étaient l'utilisation d'un Shield Ethernet & le PHP " que je ne connais pas malheureusement ".
Alors j'aimerais savoir si il était possible de relier directement l'arduino à la BDD ?
Merci d'avance ! :smiley:

Avec MysqlConnectorArduino.

Il faut un shield Ethernet bien entendu.

Si l'ARDUINO est connecté à un PC par USB (je n'y crois pas trop mais on ne sais jamais), il y a une autre solution :

Save-Arduino-Sensor-Data-to-MYsql-Using-Processing

J'ai supposé bien sûr qu'il s'agit d'un ARDUINO.

Bonjour,

qu'est ce que tu as comme carte Arduino ? Sur quelle machine (réseau local, Internet) est situé ta base de données ?

supercc:
Bonjour,

qu'est ce que tu as comme carte Arduino ? Sur quelle machine (réseau local, Internet) est situé ta base de données ?

J'ai une arduino UNO et ma BDD est très simple et petite et se trouve sur mon ordinateur.

Il y a quelques jours un forumeur qui avait un problème similaire de connexion arduino<->mysql à trouvé une piste qui peux peut-être te convenir :

La version sur git : GitHub - ChuckBell/MySQL_Connector_Arduino: Database connector library for using MySQL with your Arduino projects.

La doc (pdf) du développeur est dans le répertoire extras.

Dans la partie hardware il indique l'occupation mémoire de sa bibliothèque. Je pense que cela passe sur une UNO mais il faut que ta partie de code soit légère.

Je n'ai pas testé.

J'aimerai connaître une solution plus simple et légère mais comme il n'y a pas de php sur arduino...

Sinon, si c'est juste des identificateurs/nom/rang il y a une solution (théorique pour moi) plus simple je pense.

Ne pas utiliser mysql mais mettre les données dans un simple fichier texte sur le PC et écrire (ou récupérer) un petit serveur répondant aux requêtes du genre "getNom(id)", "getRand(id)".

Tu lances le serveur sur ton PC et après par de simples requêtes TCP (bien couvert sur Internet) tu récupères les infos sur ton arduino.

C'est une solution très légère coté arduino mais nécessite un petit serveur ad hoc.

Je n'ai pas testé.

EDIT : dans cette solution les informations circulent en clair sur le réseau. Dans la solution précédente aussi je pense mais je te laisse vérifier.

Comme j'avais une MEGA avec une carte Ethernet W5100 sur mon bureau, je viens d'installer MysqlConnectorArduino.

J'ai essayé l'exemple basic_select de la librairie.

La base de données : https://dev.mysql.com/doc/index-other.html (world database)

Après exécution du script world.sql :

  • autorisation accès par le réseau :
    Commenter bind-address dans msqld.conf
  • privilèges d'accès à la database :
    GRANT ALL ON world.* TO 'riton'@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;

Pas de problème particulier. Mise en œuvre très simple.
Un peu de doc ici : Set up a remote MySQL database connection | Adobe Commerce Developer Guide

Ça c'est fait ! Je n'avais pas capté que je proposai aussi MysqlConnectorArduino, désolé. C'est bien de savoir que ça marche. Cette bibliothèque à l'air très propre et c'est tant mieux car perso je ne vois pas d'autres alternatives pour discuter avec mysql. Après il ne reste pas beaucoup de place pour le programme dans le cas de petites cartes...

C'est vrai que c'est gourmand :
Le croquis utilise 20476 octets (8%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
Les variables globales utilisent 1280 octets (15%) de mémoire dynamique, ce qui laisse 6912 octets pour les variables locales. Le maximum est de 8192 octets.

Ce qui fait dans le cas de la UNO qu'il reste pour l'appli environ 10 Ko pour le code (bootloader 2 Ko ?) et 768 octets de mémoire.

A voir si ça passe...

Avec le code de la librairie RFID + l'application ... pas sûr.
A voir

Si jamais cela bloque voici un exemple de serveur TCP qui pourra peut-être remplacé mysql dans le cas d'un "petit répertoire". C'est en Ruby (je ne connais pas plus concis).

#!/usr/bin/env ruby
 
require 'socket'

db={
"23"   => "Pierre Dupont, pdg",
"1221" => "Paul Durant, dev"
}

server = TCPServer.new "1234" # Port 
loop do # boucle infinie
    client = server.accept    # attente d'une connexion
    begin
        while id=client.gets.chomp do # pour toutes les lignes reçues
            client.puts db[id]
        end
    rescue 
    end 
    client.close # fermeture de la connexion
end

Oui c'est vrai que pour une base de données RFID mysql semble disproportionné.

Merci beaucoup pour vos réponses je vais essayer avec MysqlConnectorArduino.

hbachetti:
Oui c'est vrai que pour une base de données RFID mysql semble disproportionné.

Je commence à y penser aussi, j'ai trouvé sur le net la méthode de macro " Fichier Excel dans lequel se trouvent les informations ID/NOM/RANG " mais je n'ai trouvé que l'envoi des données de l'arduino vers le fichier, par exemple la température en fonction du temps, alors j'aimerais savoir si possible comment faire l'inverse & permettre à mon arduino de lire directement ces informations & si c'est une meilleure option.

Il faut qu'il y ait un serveur qui réponde à tes arduino. Cela peut-être mysql, un serveur perso, ... ou pourquoi pas Excel :wink:

Normalement Excel n'est là que pour gérer les données, par pour gérer leur propagation sur le réseau mais c'est possible : video sur youtube : (EXCEL / VBA) TOOLS CHAT (CLIENT - SERVER) USING SOCKET (MSWINSCK.OCX) - YouTube

Je n'ai pas trouvé/cherché le code mais je pense que cela nécessite de programmer l'équivalent du serveur Ruby montré plus haut dans des macros en VBA et utilisant des sockets (tube de communication réseau). Voir par exemple ici : VBA et développement Web

Si tu pars dans cette voie, il faudra, puisque maintenant Excel est le serveur, qu'il soit ouvert avec la bonne feuille à chaque fois qu'un arduino demandera une info.

Perso je trouve cela plus compliqué mais c'est théoriquement possible :wink: