Besoin d'aide pour une API GET W5100

Bonjour,
Pour un projet perso, j'ai besoin de communiquer entre un Arduino et un dashboard sur un site local. J'ai donc au début essayé une communication avec PHPSerial... qui n'a pas fonctionné.
Du coup j'ai voulu faire une API GET sur un Arduino UNO avec un Shield Ethernet W5100... Comme ça si je veux récupérer une variable, juste besoin de se faire une requête qui va me retourner la variable.

Mais mon gros problème, c'est trouver le code, car même après des heures de recherches sur Google j'en ai pas trouvé...

Je viens donc demander de l'aide ici...
Merci.

Salut.
Tout dépend dans quel sens tu veux communiquer. La librairie Ethernet ne manque pas d'exemples.
Si l'ARDUINO est serveur :

Si l'ARDUINO est client :

1 Like

Merci de votre réponse, je vais tester et je vous redirais.

Je viens de tester, et ca marche !
Merci de votre aide !
Mais deuxième petite question : comment je peux savoir où va la requête ; par exemple afficher différentes infos lorsqu'une requête est faites à IP/get/motor_position/ ou à IP/get/motor_speed/ ?

Votre arduino est client ou serveur ??

Ta question n'a pas vraiment de sens.
Si on répond basiquement une requête va au serveur dont tu a donné l'adresse IP.

Si ta question est plus de savoir comment connaitre les différentes fonctionnalité exposé par l'API de ton dashboard( position moteur, vitesse du moteur), cela dépend de ton API.
Visiblement dans les exemples donnée l'API décompose ses ressources de la forme /get(sens d'accès au données)/motor_position(nom de la propriété demandé)

Je voudrais faire que si on charge la page /get/motor_position/ ca nous renvoie la position du moteur
et si on charge la page /get/motor_speed/ ca renvoie la vitesse du moteur

Et l'Arduino est serveur.

Parce que quand on se connecte, l'arduino serial print client.read(); et dans ce client.read() il est marqué : GET / HTTP/1.1 et moi j'aimerais recuperer mettre le "/" dans une variable, comme ca si c'est "/get/motor_speed/" je peux client.print la variable motor_speed et si c'est "/get/motor_position/" je peux client.print la variable motor_position.

Il faut utiliser la classe String et avec indeoxOf chercher soit une sous chaine ou le caractère /.
Car je crois que sur Arduino il n'y a pas les fonctions contains ou split.

Il me semble qu'il y a une classe pour gérer les serveur HTPP et que tu peux définir des URI précis, sur un "On" qui appel ton code dédié?

Si la classe String est utilisée, penser à dimensionner le buffer : String::reserve()
Cela évitera de fragmenter la mémoire.

En recherchant "arduino ethernet parsing querystring", on trouve des choses :

Sinon mon tuto Exemple d'usage du shield Ethernet pour faire un serveur interactif contient un bout de code pour extraire la requête

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.