Est il possible à un serveur Arduino d'envoyer une information a un client sans requête ?
Je m'explique:
le client ( mon pc ) envoie une requête au serveur Arduino, par exemple une valeur.
Le serveur (la carte Arduino ) envoie une réponse au client , il a bien compris la valeur
Jusque la je sais faire et ça fonctionne.
Mais est ce que l'Arduino peut envoyer un retour d'information, comme quoi il a fini de faire ce qu'on lui demande. La valeur permet de compter le nombre de rotation d'un moteur, l'arduino arrête le moteur quand il a atteint la valeur
Mon projet est composé d'une page HTLM, CSS et JavaScript. Communication via Ethernet.
Il fonctionne, mais j'aurais aimé avoir l'info retour
No, you cannot send datas from server to client directly... Client must "ask" for datas...
Try some UDP example Send / Receive String from Ethernet.h library...
Mon projet est composé d'une page HTLM, CSS et JavaScript. Communication via Ethernet.
il semble que vous soyez dans une transaction sur une page web
Vous pourriez inclure dans cette page web au premier chargement le déclenchement ('onLoad') d'une fonction Javascript<body onload='asTuFini()'>
Vous définissez la fonctionfunction asTuFini() { ... }dans cette même page et utilisezXMLHttpRequest (AJAX) pour balancer une requête au serveur et lui demander "salut, as-tu as fini la tâche ?" et le server répondra par avec un fichier JSON par exemple avec un attribut ok qui vaudra true ou false.
Tant que vous recevez false vous relancez la demande un peu plus tard. Ça pourrait ressembler à cela:
<script>
function asTuFini()
{
const request = new XMLHttpRequest();
request.onload = () => {
var responseObject = null;
try {responseObject = JSON.parse(request.responseText);}
catch (e) {console.error('Could not parse JSON!');}
if (!responseObject || (! responseObject.ok)) { // si on n'a pas reçu de réponse ou si on a reçu false
setTimeout(asTuFini, 5000); // on relance cette même fonction dans 5 secondes
} else {
alert('La tâche est bien terminée');
}
};
request.open('post', 'asTuFini'); // envoi sous forme de POST
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send();
});
}
</script>
J'ai tapé ce code ici donc il doit y avoir des bugs
ça devrait balancer un requête POST vers votre code en appelant l'URL /asTuFini
Lorsque vous recevez cette demande, vous allez bâtir un petit JSON comme réponse qui sera l'une des deux chaînes:
const char* tacheFinie = "{\"ok\":true}"; // JSON tâche terminée
const char* tacheEnCours = "{\"ok\":false}"; // JSON tâche en cours
et bien sûr il faudra mettre un header pour dire que c'est du JSON donc mettre un"Content-Type" à "application/json"
Vous pouvez bien sûr dans le code Javascript qui traite la réponse mettre à jour le innerHTML d'un élément de l'interface pour montrer que la tâche est toujours en cours ou pas plutôt que de faire un alert()