Go Down

Topic: Connecter un Smartphone avec Arduino UNO WiFi (Read 844 times) previous topic - next topic

MCDefalt117

Bonjour à tous.

J'aimerais pour mon projet de SI au Lycée en classe de Terminale, réaliser une maquette d'une maison qui soit contrôlable par Smartphone grâce au Arduino UNO.

Déjà pour la communication, j'avais pensé à Zigbee mais le téléphone n'a évidemment pas Zigbee donc je me suis rabattu sur du Bluetooth ou du WI-FI et j'ai découvert qu'il existait un Arduino UNO R3 version WiFi donc ce problème est réglé.

Le problème suivant me préoccupe. Le but est que Arduino possède sur ses broches, des petits capteurs type humidité, luminosité, température, des LED's (Pour simuler lumière), une résistance thermique (pour simuler chauffage), voir un moteur pas à pas pour miniaturiser des stores électriques. Il faut que les informations (des facteurs) soient transmises au téléphone grâce au WiFi mais je dois avouer que là je suis paumé. Ça c'est pour le problème simple.

Problème compliqué, il faut que le smartphone puisse envoyer des requêtes aux Arduino pour lui dire allume la lampe, étaient la lampe, augmente la tension du chauffage, ouvre et ferme le volet. Mais il y a déjà un script entré dans l'Arduino grâce à son IDE sur Pc, donc il faut que le smartphone rajoute des lignes de code à l'arduino en temps réel sans toucher aux anciennes et sans accéder à l'IDE sur PC. Le problème n'est pas temps les commandes à rentrer car je les connais. DigitalWrite pour LED, analogWrite pour résistance etc mais plus le fait fe les transmettre à l'arduino et qu'il les rajoute en temps réel.

Merci de vos futures réponses, j'espère que vous comprendrez mon problème.

MCDefalt117

J'ai oublié autre problème, si je fais envoyer des lignes de codes par WiFi il faut bien que Arduino les comprennes... sans compilateur c'est impossible non ?

_pepe_

#2
Jul 29, 2017, 11:28 pm Last Edit: Jul 29, 2017, 11:40 pm by _pepe_
Bonsoir

Dans le principe d'un tel système, on n'envoie pas de lignes de code (qui nécessiteraient d'être compilées, enregistrées dans la mémoire programme de l'Arduino puis exécutées), mais des commandes, c'est-à-dire des informations désignant des actions à effectuer.

Par exemple, on peut décider que si l'utilisateur envoie le texte "lampe=1" à l'Arduino alors ce dernier allumera la lampe en forçant la sortie numérique correspondante à HIGH, et que s'il envoie le texte "lampe=0" alors l'Arduino éteindra la lampe en forçant la sortie numérique à LOW :

Code: [Select]
if (!strcmp(commande, "lampe=") {
  if (commande[6]=='1')
    digitalWrite(pinLampe, HIGH);
  else
  if (commande[6]=='0')
    digitalWrite(pinLampe, LOW);
}


Typiquement, ce texte de commande est envoyé depuis un smartphone ou un PC à l'Arduino connecté en Wifi et pourvu d'un serveur web (des exemples sont fournis dans l'IDE Arduino).

Lorsque le navigateur web du smartphone ou du PC se connecte à l'Arduino, ce dernier lui retourne dans un premier temps une page web contenant des éléments graphiques (tels que des boutons, des cases à cocher, des curseurs, des listes, etc.) permettant d'envoyer les commandes et de visualiser l'état actuel des périphériques contrôlés par l'Arduino, et un script Javascript permettant de gérer dynamiquement les échanges avec l'Arduino et l'aspect de la page.

La manipulation d'un des éléments graphiques cités provoque l'envoi d'une nouvelle requête contenant le texte de la commande associée. Une requête Javascript de type XMLHttpRequest permet d'envoyer cette requête et d'en recevoir une réponse sans provoquer le chargement d'une nouvelle page dans le navigateur.

L'Arduino reçoit cette requête, en extrait le texte de la commande, interprète cette commande et réalise l'action souhaitée (voir l'exemple de code ci-dessus), puis retourne une information sur le nouvel état du périphérique au navigateur afin qu'il mette à jour l'état de l'élément graphique correspondant.


Des explications plus détaillées et plusieurs exemples de ce type de système ont déjà été donnés dans des discussions sur le forum.

MCDefalt117

#3
Jul 30, 2017, 10:21 am Last Edit: Jul 30, 2017, 10:29 am by MCDefalt117 Reason: Oublis
Bonjour merci pour votre réponse mais dans le cas d'une application spéciale pour smartphone dans le but de rendre le contrôle de la maison accessible à l'utilisateur, il faudrait qu'une application annexe (dotés de simple bouton) envoie les instructions à l'Arduino.

Donc si j'ai bien compris Arduino possède une adresse Ip sur le web, il suffit donc de créer des boutons sur l'application qui envoie des url type «http://ADRESSEIPARDUINO.lampe=0»  ?

-------------

Et dans le cas d'une communication Arduino-Application Smartphone. Arduino est connecté à des capteurs de température, d'humidité etc, il reçoit des valeurs de type int. Comment peut-il les communiquer au smartphone, et que celui-ci les affiches ?

_pepe_

#4
Jul 30, 2017, 10:57 am Last Edit: Jul 30, 2017, 01:47 pm by _pepe_
Oui, c'est le principe. Mais l'URL devrait être de la forme « http://ADRESSEIPARDUINO/cmd?lampe=0 », si l'on choisit de passer la commande en paramètre d'une requête GET. Un caractère point (« . ») suivant immédiatement l'adresse de l'Arduino constituerait une erreur de syntaxe qui empêcherait l'envoi.

En fait, l'application sur le smartphone fera le même travail que le navigateur web dans mon explication, avec une interface graphique déjà intégrée à la place de la page web téléchargée. Mais lors de la connexion à l'Arduino elle devra en plus commencer par l'envoi d'une requête pour récupérer l'état des périphériques qu'elle contrôle.


Le fait de passer par une application est surtout le moyen de placer le système sous le contrôle commercial du fournisseur de l'OS du smartphone au travers de sa boutique logicielle en ligne, avec les avantages, les inconvénients et les risques qui en découlent pour le distributeur et l'utilisateur du produit.

Par ailleurs, le développeur devra produire et maintenir autant de versions de l'application qu'il prévoit d'OS différents.

MCDefalt117

L'adresse IP de l'Arduino UNO Wifi s'obtient comment ? Faudra t'il que je connecte celui-ci à ma Box Internet ?

_pepe_

#6
Jul 30, 2017, 01:35 pm Last Edit: Jul 30, 2017, 01:52 pm by _pepe_
La question de l'adresse IP est un problème de réseau.

On peut partir du principe que l'Arduino est équipé d'une interface fonctionnant en adaptateur Wifi, avec la box comme point d'accès.

Dans ce cas, l'adresse IP locale de l'Arduino peut être fixe ou bien attribuée dynamiquement par le serveur DHCP de la box.

L'Arduino étant placé dans la DMZ de la box, son adresse IP vue depuis un client connecté à Internet sera l'adresse WAN de la box, elle-même fixe ou bien attribuée dynamiquement par le fournisseur d'accès selon le type d'abonnement souscrit.

Un smartphone ou un PC pourra se connecter :
- sur le réseau local pour joindre l'Arduino à l'adresse IP locale de son adaptateur Wifi
- via Internet pour joindre l'Arduino à l'adresse WAN de la box, si la DMZ de cette dernière est activée et configurée en conséquence.

MCDefalt117

Et dans la mesure où le Arduino UNO WiFi ne peut se connecter à la Box ? (Dans mon lycée c'est interdit). Il peut fonctionner sans être connecté à Internet ?

MCDefalt117

« The ESP8266 Wi-Fi Module is a self contained SoC with integrated TCP/IP protocol stack that can give access to your Wi-Fi network. (Or the device can act as an access point.) One useful feature of Uno Wi-Fi is support for OTA (over-the-air) programming, either for transfer of Arduino sketches or Wi-Fi firmware. » site officiel Arduino je pense que oui visiblement

_pepe_

L'ESP8266 peut effectivement être paramétré pour fonctionner en point d'accès Wifi, afin qu'un smartphone ou un PC puisse s'y connecter directement.

Toutefois, dans ce mode de fonctionnement, il n'est possible de se connecter à l'Arduino que si l'on s'en trouve à proximité.

Go Up