Je recherche depuis un certain temps s'il est possible ( et si oui comment ) d'envoyer une variable au PC pour contrôler ou lire des variables Arduino depuis un site web hébergé sur le PC qui est connecté à la carte Arduino également, si jamais je ne me suis pas assez bien expliqué : j'aimerais pouvoir voir des mesures que ma carte Arduino ferait ( un thermomètre ) et me la mettre sur mon site web ( La température est de : #LaVariable# )
Tout d’abord merci pour votre réponse plus que rapide, je comprends l’utilité de la bibliothèque Qt, je n'arrives en revanche pas à l’utiliser, j'ai donc essayé de faire un petit programme, en suivant deux ou trois tutoriels sur le Qt sur internet, mais sans grand succès.
Par contre, y aurait-il un moyen pour stocker les variables dans un document texte, sans avoir besoin de faire passer l'info dans l'URL de ma page Php ( c'est juste pour que ça fasse un peu plus propre dans les liens, parce que j'ai une bonne dizaine de capteurs, mais si ce n'est pas possible, ça ne fait rien ).
Merci encore pour votre aide.
- Edité par TheDarangel 18 novembre 2014 à 9:36:00
Alors là, j'avoue ne pas du tout comprendre ton code.
En effet, il y a un petit problème : tu mélanges un peu tout
D'un coté, il y a les fonctions setup et loop qui utilise Serial.begin et Serial.print pour transmettre des données.
=> C'est donc un code purement Arduino destiné à envoyer des données vers un PC
De l'autre coté, il y a les fonctions Qt et Qt_read qui QextSerialPort pour lire des données.
=> C'est donc un code purement PC destiné à recevoir des données que l'arduino envoie.
Normalement, ton code arduino devrait ressemblé à ça :
int pinThermometre = 5; // Thermomètre ANA connecté sur la pin 5
void setup() {
pinMode(pinThermometre , INPUT); // On passe la pin en INPUT
Serial.begin(9600); // On commence la COM à 9600b
}
void loop()
{
int temperature = analogRead(pinThermometre); // On lit la température (brut)
Serial.print(thermometre_read); // On l'envoie
Serial.print(";"); // On envoie aussi un délimiteur
delay(500); // On attend 500ms avant de recommencer
}
Avec cela, ton arduino devrait envoyer la température brut (valeur de l'ADC entre 0 et 1023 qu'il faudra ensuite convertir en °C) toutes les 500ms soit 2 fois par secondes.
Pour Qt, je ne te cache pas que ce sera bien plus compliqué.
Tu auras besoin de télécharger et installer l'IDE complet (Qt + QtCreator) soit environ 1 Go.
Ensuite, tu devras faire un nouveau projet et commencer à coder.
Par contre, je ne te cache pas que Qt ne s'apprend pas en un jour.
Le dernier chapitre du cours Q++ est entièrement consacrer à Qt et il faut surement plusieurs semaines pour tout assimiler.
Pour stocker les données dans un document texte, là encore Qt te permet de faire ça avec la classe QFile.
En faite, Qt permet vraiment de faire tout et n'importe quoi sur un PC (gérer des fenêtres, du réseau, des fichiers, des images, des sons, des vidéos, des threads, des scripts JS ...)
C'est vraiment une lib extrêmement puissante et diversifiée et donc longue à maitriser au début.
Bien sûre que tu peux faire ça sans la lib Qt : il te suffit de passer par les API de ton système d'exploitation.
Cependant, le gros avantage de Qt, c'est que c'est une librairie très bien codée, facile à utiliser et qui fonctionne sur tous les systèmes d'exploitations.
Si tu utilises l'API windows, tu te rendras vite compte que le code finale est imbuvable, excessivement long et ne marche que sur Windows.
Ce que l'on peut faire facilement en quelques lignes de code avec Qt peut nécessiter 10 à 100 fois plus de lignes avec l'API windows.
sinon, je sais pas si ça a été dit dans le post, tu peux utiliser les librairies ethernet de ta carte arduino, et donner les données à ton site via un formulaire sur une page que lui seul connait...
il y a peut être plus simple qu'un délimiteur, peut être qu'en envoyant un caractère a chaque fois depuis ton interface graphique et la récupéré dans un switch du côté de l'Arduino non? Perso j'ai fais comme ça pour récupéré les infos sur mon IHM que j'ai fais avec Visual Studio et ça fonctionne pas mal :).
Pourquoi faire? si il veut juste récuperer une valeur, il envoi par exemple 'a' a l'arduino, de son côté l'arduino va réagir car quand on lui envoi 'a' c'est que l'on veut une temperature, donc il l'envoi.
exemple provenant de mon code :
char carlu = 0; //variable contenant le caractère à lire
int cardispo = 0; //variable contenant le nombre de caractère disponibles dans le buffer
cardispo = Serial.available();
while(cardispo > 0) //tant qu'il y a des caractères à lire
{
carlu = Serial.read(); //on lit le caractère
switch(carlu)
{
case 't':
Serial.println(tempD);
break;
case 'p' :
Serial.println(Pvalue);
break;
case 'i':
Serial.println(Ivalue);
break;
case 's':
Serial.println(PIsum);
break;
case 'd':
Serial.println(PIdelta);
break;
case 'C':
Serial.println(Pcoeff);
break;
case 'c':
Serial.println(Icoeff);
break;
case 'o':
Serial.println(consigne);
break;
case 'D':
Serial.println(tempC);
break;
}
cardispo = Serial.available(); //on relit le nombre de caractères dispo
}
Ouai, ça marche aussi, sauf que cela pose quand même 2 autres problèmes :
- le PC est obligé d'envoyer ses commandes en boucles
- le PC est obligé de respecter des temps de pause pour être sur de récupérer la bonne donnée.
D'ailleurs, si le PC envoie 2 commandes sans respecter un temps de pause (du genre envoyer Di d'un coup), il va recevoir 256 et donc impossible pour lui de savoir si la réponse est 25°/6A ou si la réponse est 2°/56A
Ce n'est donc pas pratique non plus, même avec des commandes, il vaut mieux aussi utiliser des délimiteurs dans la réponse.
C'est peut être le cas sur des programmes assez lourd, mais personnellement je n'ai jamais eu ce soucis avec mon programme. Je récupère les infos de température et de régulation (PID) pour mon incubateur et j'ai laisser le programme tourné plusieurs jours sans problème. Et je suis sur qu'il n'y a pas de loupé vu que le programme n'a jamais planté et que j'enregistre mes valeurs toutes les minutes.
Par contre du côté HMI, j'envoi tous les caractères en même temps du moins via une boucle for, et je fait un split de la chaîne récupéré pour les affiché correctement.
Juste pour savoir, si j’utilise la lib ethernet, me sera t'il possible tout de même de les stocker dans un document txt directement, ou je devrais plutôt le faire côté php dès que j'aurais reçu les variables ?
Coté serveur, une page HTML n'est pas exécutée mais juste envoyée en brut à celui qui en fait la demande.
Si tu as une action à faire (consulter une base de données, écrire un fichier, générer du contenu dynamique...), il faut forcément un script CGI associé au serveur HTTP et c'est généralement PHP que l'on utilise pour ça.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
oui. non. enfin je regarde et je te dis.
oui. non. enfin je regarde et je te dis.