Transmettre des données depuis l'arduino sur un site web.

Bonjour,

J'ai un site web: Grinova.fr.
Je souhaite, pour mon projet de baccalauréat transmettre des informations de mon arduino à une base de donnée en ligne, puis de les diffusées sur mon site.

Je voudrais savoir si cela est impossible. Comment puis-je arriver?

Je ne souhaite pas qu'on me fasse un programme tout fait, mais quand m'aide et me guide sur la bonne voie.

Je vous remercie !

Salut,

quel est l'arduino que tu utilises, comment communique-t-il (Filaire, Wifi, bluetooth, ...).

Salut,

J'ai une carte arduino uno et une carte shield ethernet 2 semblable à celui ici: https://www.sparkfun.com/products/11166

Merci,

Ok, ça me parle un peu mais je n'ai jamais jouer avec mais pour d'autres forumeurs cela sera clair.

Ensuite, je pense qu'il faut que tu nous détailles les différents intervenants (un schéma du réseau). Par exemple on ne sais pas ou se situe la "base de données en ligne". C'est ton PC ? Le serveur qui héberge ton site ? autre chose...

Ton serveur est déjà capable de lire dans ta base de données ou c'est à faire ?
Tu as déjà réussi la transmission simple d'un message de l'arduino au PC via l'Ethernet ou tu pars de zéro ?

Mon site grinova.fr est sur un hébergeur, celui de LWS: https://www.lws.fr/.
J'ai déjà réussis à connecter mon site web à la base de donnée présente sur https://www.lws.fr/.
La base de donnée est ici: phpMyAdmin.

Maintenant, je ne sais comment programmer l'arduino pour qu'il se connecte à ma base de donnée en ligne, et puisse y entrer les informations qu'il obtient grâce à un capteur de température.

Je voudrais, par exemple que chaque minute, arduino entre la valeur reçue par le capteur, et ainsi remplir ma base de donnée.
Comme ça je peux le diffuser sur mon site internet.

J'espère avoir été compréhensif, merci pour ton temps accordé supercc.

C'est de plus en plus clair, .... mais quelques remarques et encore des questions :wink:

Ton projet à une grande partie réseau qui n'est pas triviale :

  • Il va falloir que tu joues sans doute avec des adresses IP (arduino, passerelle par défaut, dns, voir un proxy si tu es au lycée) car ton arduino n'est pas directement connecté à Internet mais derrière une box (ou le proxy du lycée) sans doute.
  • Mais pire un système d'authentification ! car pour pas que n'importe qui mette n'importe quoi dans la base de données il va falloir s'assurer de ne laisser passer que les messages de ton arduino. En général un système d'authentification utilise le protocole https et là je crois que la bibliothèque Arduino n'est pas capable de le faire.

Je ne veux pas te décourager, surtout que je ne suis pas un spécialiste ni de mysql ni de php ni de serveur web et qu'un post suivant me contredira peut-être (je l'espère pour toi ;-)).

Une solution plus simple pour avoir la température de l'arduino sur le web est, je pense, d'héberger le serveur web directement sur l'arduino et d'effectuer sur la box une redirection (quand un message arrive sur le port 80 de ta box elle le renvoie vers le port 80 de ton arduino et inversement pour la page retour). Par contre c'est valable pour ta box mais cela m'étonnerai que ton lycée accepte de le faire !

C'est un projet que tu as imaginé ou qu'un prof à validé ? parce que je trouve que c'est un peu chaud pour un futur bachelier !

Merci pour ta réponse!

Le projet, je l'ai choisis moi même, le problème c'est que je ne peux héberger mon serveur web directement sur l'arduino, car les données doivent être accessible partout dans le monde entier. Donc c'est pas possible.

La démonstration de mon projet se fera par mon rooter internet à domicile, puis pour la démonstration finale, lors du passage au bac, je ferai un partage de connexion.

La connexion n'a pas besoin d'être sécurisée, car elle sera de courte instant.

Pourrais-tu m'aider à faire le programme?

Satorus:
Merci pour ta réponse!

Le projet, je l'ai choisis moi même, le problème c'est que je ne peux héberger mon serveur web directement sur l'arduino, car les données doivent être accessible partout dans le monde entier. Donc c'est pas possible.

Tu te trompes, avec la manip que je te donne (redirection d'adresse appelée en abrégé DNAT dans ce cas pour Destination Network Address Translation), supportée par toutes les box , tu peux mettre ton arduino sur Internet. Les gros mots que je te donne c'est pour que tu fasses des recherches vers la solution simple.

La démonstration de mon projet se fera par mon rooter internet à domicile, puis pour la démonstration finale, lors du passage au bac, je ferai un partage de connexion.

Et donc, confirme moi, ton arduino reste chez toi ? Cool, tu vas pouvoir leur montrer la baisse de température de ton oreillé depuis que tu t'es levé :wink:

La connexion n'a pas besoin d'être sécurisée, car elle sera de courte instant.

Oui mais j'imagine mal une base de données comme msql accepter d'enregistrer des infos d'une source qu'elle ne peut pas authentifier... Mais encore une fois quelqu'un te trouveras peut-être une solution.

Pourrais-tu m'aider à faire le programme?

Y participer quand je passe sur le forum, en fonction de mes dispos, oui :wink: mais compte surtout sur d'autres membres et avant tout sur toi même :wink: .

Poste bien tes morceaux de codes (entre balise code je crois) , lis bien les premiers posts épinglés du forum pour les règles, notamment concernant les projets de bac.

Je crois que en résumé l'idée c'est de montrer que tu as cherché avant de demander car sinon tu risques de te faire lyncher :wink:

Le problème est, que je ne veux mettre mon site sur l'arduino.

J'ai un site web, je veux donc l'exploiter. configurer tous depuis la base de donnée MYSQL, se trouvant sur LWS.

Pour se connecter à la base de donnée, il suffit de l'identifiant et du mot de passe.
Comme pour connecter son site à la base de donnée:

$pdo = new PDO('mysql:dbname=NOM_BASEDEDONNE;host=ADRESSE_IP', 'IDENTIFIANT' , 'PASSWORD');

Je pense qu'il existe aussi une fonction sur arduino, comme celle-ci, pour me connecter à la base de donnée, et pour y faire de modification !

Merci,

Tu as foiré ton tes premières balises ça doit pas être ça :wink:

Bien tu veux donc passer par le protocole mysql établissant une connexion avec la base de données avec login et mot de passe dans la requête, d'ailleurs les infos elles suivent ? ( je ne les voient pas dans la requête que tu donnes)

Tu as raison d'insister, car je pense que c'est faisable même si au niveau sécurité c'est pas cela....

Je suis persuadé que sur ce forum même, peut-être la rubrique dans "projets finis", tu trouveras beaucoup d'infos. Regardes peut-être là Données de capteurs vers une base de données MySQL - Français - Arduino Forum.

Si jamais tu restes bloqué sur mysql va sur leur forum.

Je n'ai pas de connaissances sur le protocole utilisé par mysql pour autoriser l'enregistrement de données avec le genre de requête que tu présentes, désolé....

J'ai trouvé ce code, parmi le lien dont tu viens de me partager.

Si j'ai bien compris, ce code dans Arduino permet de se connecter à la base de donnée, et ainsi d'y placer un message, ici: 'Hello, Arduino!'.

Est-ce bien cela ?

Comment faire pour remplacer ce petit message, par les données que je reçoit de mon capteur?

Merci beaucoup!

Très prometteuse ta trouvaille !

Quel est le type de ta donnée ? Tu sais l'afficher sur la console arduino. Si oui comment ?

Le but est que tu la mette en chaîne de caractères si ce n'est pas déjà le cas (char maValeur[30]; // tu adapteras le 30 après).

Après il faudra voir comment l'insérer dans une requête de genre de celle du INSERT_SQL.

Tu connais sql ? pas moi.

D'accord ! Je vais chercher et approfondir le code ! Je reviendrai dès que ça avance !

Merci beaucoup !

A l'occas regarde la fonction C sprintf(). Apprends bien :wink:

J'ai essayé ce programme:

#include <Ethernet.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

byte mac_addr[] = { 0x4C,0xED,0xFB,0xA7,0xB3,0x6C };

IPAddress server_addr(ADRESSE IP);  
char user[] = "ID";          
char password[] = "MDP";     

char INSERT_SQL[] = "INSERT INTO arduino (message) VALUES ('Hello, Arduino!')";

EthernetClient client;
MySQL_Connection conn((Client *)&client);

void setup() {
  Serial.begin(115200);
  while (!Serial);
  Ethernet.begin(mac_addr);
  Serial.println("Connecting...");
  if (conn.connect(server_addr, 3306, user, password)) {
    delay(1000);
  }
  else
    Serial.println("Connection failed.");
}


void loop() {
  delay(2000);

  Serial.println("Recording data.");

  // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(INSERT_SQL);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;
}

j'ai bien rentré l'adresse IP, l'identifiant et le mot de passe de ma base de donnée qui se trouve sur LWS. mais quand je lance la simulation, le moniteur série ne m'affiche rien du tout !

Pouvez-vous m'aider?

Salut,

c'est là que commence l'aspect "réseau"...

Tel que tu as configuré ton initialisation Ethernet (regardes la doc de Ethernet.begin) normalement ton arduino devrait obtenir de ta box toutes les infos dont il a besoin (c'est le but du protocole DHCP).

Ton arduino est-t-il connecté par le câble Ethernet à ta box ou à un switch connecté à ta box ?