Nécessite une LED sur IO2 et un potentiomètre sur A0.
Schéma de cablage :
le code pour la carte Arduino :
-
/**
-
* Communication bidirectionnelle en WiFi.
-
* Nécessite une LED sur IO2 et un potar sur A0.
-
* Une autre appli doit être lancé sur PC ou tablette pour communiquer.
-
* Voir les exemples
-
* - Processing (fonctionnel su PC et tablette mais pas en javascript),
-
* - AppInventor (seul l'émission vers Arduino est pour l'instant fonctionnelle),
-
* - Windev (mettre 2 dans la constante PositionCaractere),
-
* - Page Web (non fait).
-
* Les exemples contiennent un schéma du cablage.
-
* Attention à bien modifier les lignes indiquant le SSID, le type de cryptage du réseau wifi
-
* le port et l'adresse IP
-
*
-
* Téléverser le programme puis lancer le moniteur série.
-
* A son invite lancer le logiciel PC ou tablette.
-
*
-
* Les lignes estampillées "Pour débogage" ne sont pas nécessaires
-
*
-
*/
-
#include <SPI.h>
-
#include <WiFi.h>
-
-
-
-
const int LEDJaune=2;
-
const int Potar=A0;
-
-
int OctetRecu;
-
int OctetRecuPrecedent;
-
int ValeurPotar;
-
int ValeurPotarPrecedente;
-
-
String ChaineRecu;
-
int PositionCaractere=2; //1 pour processing et 2 pour windev
-
-
-
//******************** Paramètres de connexion *********************
-
//******************************************************************
-
char ssid[] = "SSID"; // SSID du réseau Wi-Fi à changer
-
char pass[] = "PASS"; // inutile pour un réseau non protégé
-
unsigned int port = 50000;// Numéro du port
-
//******************************************************************
-
-
int status = WL_IDLE_STATUS;
-
WiFiServer server(port);// création d'un serveur qui écoute le port 50000
-
boolean alreadyConnected = false;
-
-
void setup()
-
{
-
pinMode(LEDJaune, OUTPUT);
-
Serial.begin(9600); //Intitialisation de la communication série et attente de l'ouverture de du port série - Pour débogage
-
while (!Serial) {;}//Attente de connexion du port série - Pour débogage
-
if (WiFi.status() == WL_NO_SHIELD) // Vérifie la présence du shield wi-fi
-
{
-
Serial.println("Le shield WiFi doit être connecté");
-
while(true);//arrêt du programme
-
}
-
while ( status != WL_CONNECTED) // attente de la connection au Wi-Fi
-
{
-
Serial.print("Tentative de connexion au SSID : ");
-
Serial.println(ssid);
-
//Connexion en mode WPA ou non protégé
-
if (pass=="" )
-
{status = WiFi.begin(ssid);} // Connection au Wi-Fi non protégé
-
else {status = WiFi.begin(ssid, pass);} // Connection au Wi-Fi WPA
-
delay(500);
-
}
-
server.begin();// démarrage de l'objet serveur
-
IPAddress ip = WiFi.localIP();// Pour débogage
-
Serial.print("Lancer maintenant le logiciel sur PC ou Tablette avec : \n - comme IP : ");// Pour débogage
-
Serial.print(ip);// Pour débogage
-
Serial.println(",");// Pour débogage
-
Serial.print(" - comme port :");// Pour débogage
-
Serial.print(port);// Pour débogage
-
Serial.println(".");// Pour débogage
-
-
}
-
-
-
void loop() {
-
WiFiClient client = server.available();// Attente de la connection d'un nouveau client
-
if (client)
-
{
-
if (!alreadyConnected)
-
{
-
client.flush();
-
alreadyConnected = true;
-
}
-
if (client.available() > 0) // si qqc de reçu
-
{
-
ChaineRecu=client.readString();// Réception d'une chaine
-
Serial.print("Chaine reçu :");// Pour débogage
-
Serial.println(ChaineRecu);// Pour débogage
-
if (ChaineRecu.length()>1)
-
{
-
OctetRecu=int(ChaineRecu[ChaineRecu.length()-PositionCaractere]);//Extraction du dernier octet de la chaine
-
Serial.print("dans le if :");// Pour débogage
-
Serial.print(ChaineRecu.length());// Pour débogage
-
}
-
else
-
{
-
OctetRecu=int(ChaineRecu[0]);
-
Serial.println("dans le else :");
-
}
-
//OctetRecu = client.read();//Réception d'un octet directement. Marche si on peut envoyer seulement un octet
-
}
-
//Cette structure permet d'éviter de "noyer" la com série avec des info sans intérêt
-
// Attention je ne gère ici qu'un seul octet.
-
// Pour un communication plus pertinente il peut être utile de transmettre des chaines
-
if (OctetRecu!=OctetRecuPrecedent)
-
{
-
OctetRecuPrecedent=OctetRecu;
-
Serial.print("Valeur reçu : ");// Pour débogage
-
Serial.println(OctetRecu);// Pour débogage
-
// Cette structure permet de gérer l'odre reçu. On peut créer un cas par défaut
-
switch (OctetRecu)
-
{
-
case 100:
-
digitalWrite(LEDJaune,HIGH);
-
break;
-
case 101:
-
digitalWrite(LEDJaune,LOW);
-
break;
-
}
-
}
-
//client.write("Essais");
-
ValeurPotar=map(analogRead(Potar),0,1024,0,256);
-
//Cette structure permet d'éviter de "noyer" la com série avec des info sans intérêt
-
-
if ((ValeurPotar>ValeurPotarPrecedente+2) || (ValeurPotar<ValeurPotarPrecedente-2))
-
{
-
-
Serial.print("Valeur emise : ");// Pour débogage
-
Serial.println(ValeurPotar);// Pour débogage
-
client.write(ValeurPotar);//Emission d'un octet **********************************
-
//client.print(ValeurPotar);
-
ValeurPotarPrecedente=ValeurPotar;
-
}
-
}
-
}
Lancer Arduino.ino puis la communication série et après ouvrir une application sur PC ou Tablette (WinDev, Processing ou AppInventor).
Voir les exemples :
- Processing (fonctionnel sur PC et tablette, mais pas en javascript - mettre 1 dans la constante PositionCaractere),
Impossible de trouver le layout
- AppInventor (seule l'émission vers Arduino est pour l'instant fonctionnelle - mettre 1 dans la constante PositionCaractere),
Impossible de trouver le layout
- WinDev (mettre 2 dans la constante PositionCaractere),
Impossible de trouver le layout
- Page Web (non fait).
Attention à bien modifier les lignes indiquant le SSID, le type de cryptage du réseau WiFi ainsi que l’adresse IP et le Port dans le fichier Arduino.ino et l’adresse IP et le Port dans les autres.
Commentaires
Je voulais essayer une communication wifi avec Processing, et j'ai obtenu lors de la compilation les messages suivants.
processing.app.SketchException: unexpected char: 'A'
at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:361)
at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:155)
at processing.mode.java.JavaBuild.build(JavaBuild.java:122)
at processing.mode.java.JavaBuild.build(JavaBuild.java:104)
at processing.mode.java.JavaMode.handleLaunch(JavaMode.java:122)
at processing.mode.java.JavaEditor.lambda$0(JavaEditor.java:1097)
at java.lang.Thread.run(Thread.java:745)
Pour les 2lignes suivantes.
"JavaScript > Playback Setting (D:\Achives softs\Processing\Serveur_Bidir_Essai\Processing\data)"
@pjs preload="LEDBrillante.png, LEDEteinte.png, PotarVide.png, arduinoledpotar.png";
merci de vos conseils.
le reste du prg peut vous etre envoyé en pièces jointes
La ligne en question n'est nécessaire que pour compiler le programme en JS. J'ai fait ce programme il y a quelques années et je pense en processing 2.
Si vous tenez à compiler en JS essayez avec la version 2 et sinon supprimez cette ligne.
Frank
S’abonner au flux RSS pour les commentaires de cet article.