Arduino Yun PA WIFI

Un point d’accès avec code wpa2 tournant!

img_5006

Quoi qu’est-ce ?

C’est une carte Arduino doublée d’un Linux, d’un module Ethernet et Wifi… besoin de rien d’autre !!!

Et on peut faire quoi avec ça ? Beaucoup de choses moi j’ai créée un point accès wifi temporaire.

Branché sur le réseau Ethernet de l’établissement, le boitier génère automatiquement une nouvelle clé Wifi toute les heures la clé s’affiche sur un écran lcd.  Idéale pour le CDI ou bien en ISN ou TPE pour permettre un accès au wifi aux élèves.

La clé wifi change automatiquement toute les heures.

 

1/ LE MATOS  90€ environ en France (moins cher chez nos amis chinois).

difficile à trouver on trouve l’équivalent chez robotshop : Carte whatsnext Turquoise
2 boutons poussoirs
Prévoir l’alimentation avec un cordon USB/Micro USB  ou transformateur MicroUsb (ceux des telephones portables).
yunimg_5031

2/ CONFIGURATION

Il faut configurer la carte en mode Bridge (pont).
Pour cela brancher la carte sur un ordinateur a l’aide du cordon USB. taper http://linino.local  ou 192.168.240.1 (10s sur le bouton reset) (A vérifier selon le model de la carte)
Mot de passe doghunter.
Pour les cartes compatibles  WhatsNext TURQUOISE le mot de passe est : whatsnext
le menu de configuration est dans le menu whatsnext/ luci   root/whatsnext…..

linino

Cliquer advanced configuration panel

capture1

Puis de configurer en Bridge. PENSEZ A SAUVER

capture2

On suppose un DCHP sur le réseau sinon il faudra régler les ip.

 

3/ CABLAGE

Les 2 boutons poussoir peuvent fonctionner sans résistance pull-up,
on active celle intégré dans l’arduino grace à cette ligne de commande : digitalWrite(5,HIGH);
L’afficheur LDC est alimenté en 5v.
L’alimentation peut se faire par le cordon  micro USB
Prendre un afficheur I2C il suffit ainsi de connecter SDA et SCL.

 

SCHEMA DE CABLAGE

fritz

4/ LE CODE

Il faut le dernier IDE c’est mieux, et les 2 librairies ci-dessous à copier dans le dossier Arduino/librairies.

IDE ARDUINO :
Arduino Software
Bibliothéques :
LiquidCrystal
Process.h

Voici le code :

//————code Eric KELNER . AEFE Lycée FRANCAIS BAMAKO——————
//———-   Thomas CASTANET. AEFE Lycée FRANCAIS BAMAKO——————
#include <LiquidCrystal_I2C.h>
#include <Process.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);   // VERIFIEZ L ADRESSE DE VOTRE LCD 0X3F OU 0X27 OU AUTRE….

const int buttonChangeclef = 6;       // reinitialise la clé
const int boutonAjoutTemps=5;         // ajoute du temps

//int etatButtonChangeclef = 0;         // état des boutons/
//int etatBoutonAjoutTemps = 0;

int firstStart=1;

String uciClef= » »;
String prefixeClef= »klnr »;             // 4 lettres en prefixe de la clé wifi
String ssid= »klnrWifi »;                 // nom du wifi, a personnaliser
String clef= » »;
String xClef= » »;

uint16_t start = millis();
uint16_t previousMillis=0;
static int tempsParDefaut=61;  //  on part sur 60mn par defaut MOINS1 MN le temps de boot
long time1Hz = 0;
extern volatile unsigned long timer0_millis;

//=================================  SETUP ================
void setup() {

pinMode(buttonChangeclef, INPUT);     // bouton reinitialise la clé
digitalWrite(buttonChangeclef,HIGH);  // POUR ACTIVER PULL UP INTERNE
pinMode(boutonAjoutTemps,INPUT);      // bouton ajoute du temps
digitalWrite(boutonAjoutTemps,HIGH); // POUR ACTIVER PULL UP INTERNE

lcd.begin();lcd.blink();
lcd.setCursor(2,0); lcd.print(« DEMARRAGE »); delay(1000);
lcd.setCursor(2,1);lcd.print(« PATIENTEZ »); delay(1000);

Bridge.begin();
Serial.begin(9600);
}

//=================================  LOOP ================
void loop() {

int nbClients=0;
String test,chaine;
Process p;

p.runShellCommand(« /etc/config/testclients2.sh »);
while (p.running());
while (p.available()) {
char c = p.read();
test=c;
//  if(test.equals(« \n »)) nbClients++;
if(!test.equals( » « ))  if(c==’\n’) nbClients++;
chaine=chaine+c;
SerialUSB.print(c);      // print the number as well
}

SerialUSB.println(« AFFFICHAGE DE LA CHAINE »);
SerialUSB.print(test);
SerialUSB.print(« ————-« );

//for (int =0;chaine.lenght;i++)
//SerialUSB.print(c);      // print the number as well

// CALCUL DU TEMPS ECOULE
int m,s;
unsigned long over,elapsed,currentMillis = millis();
elapsed=(currentMillis-previousMillis)-start;
over=elapsed%3600000;
m=int(over/60000);
over=over%60000;
s=int(over/1000);

//LIGNE 1   LCD
lcd.setCursor(0,0);lcd.print(« CLEF: »); lcd.print(clef);  // ON AFFICHE LA CLE WIFI

//LIGNE 2     LCD   // TOUTES LES 2 SECONDE ON AFFICHE LE TEMPS OU LE SSID
SerialUSB.println(currentMillis – time1Hz);

if ((currentMillis – time1Hz) <3000 )  { lcd.setCursor(0,1); lcd.print(« CONNECTES: « ); lcd.print(nbClients); }
if ((currentMillis – time1Hz) >= 3000  && (currentMillis – time1Hz) < 6000 )
{
lcd.setCursor(0,1); lcd.print(« WIFI: »);lcd.print(ssid);
}

//if ((currentMillis – time1Hz) >= 4000    || digitalRead(boutonAjoutTemps)==1)
if ((currentMillis – time1Hz) >= 6000  )
{ lcd.setCursor(0,1); lcd.print(« Tps : »);
lcd.print(tempsParDefaut-m);lcd.print(« mn »);lcd.print(60-s);lcd.print(« s       « );
time1Hz = currentMillis;
SerialUSB.print(« je rentre je remets a ZERO »);
}

//lcd.scrollDisplayLeft();
// LECTURE DE L ETAT DES BOUTONS

if(digitalRead(boutonAjoutTemps)==0) {tempsParDefaut=tempsParDefaut+2;}  // On rajoute 2mn lors de l appui sur le bouton

if(tempsParDefaut-m<1)  {                   //   si le temps est eecoulé on reinitialise l horloge
firstStart=1;
noInterrupts ();
timer0_millis = 0;
interrupts ();
start = millis();
}

if (digitalRead(buttonChangeclef) == LOW || firstStart==1)   // SI LE TEMPS EST ECOULE OU APPUI SUR LE BOUTON
{
tempsParDefaut=60;   // on repart pour 60mn
firstStart=0;

lcd.clear(); lcd.noBlink(); lcd.setCursor(0,0); lcd.print(« CREATION CLE »);

randomSeed(analogRead(0));
xClef=(int)random(1000,9999);   // cle entre  1000 et 9999

uciClef= »wireless.@wifi-iface[0].key= »;
uciClef=uciClef+prefixeClef+String(xClef);  // on construit la chaine
clef=prefixeClef+String(xClef);

lcd.setCursor(0,0); lcd.print(« CONFIGURATION     « );
delay(1000);

//   command UCI  parametrage de la carte

p.runShellCommand(« uci set wireless.@wifi-iface[0].ssid=klnrWifi »);   // possible de changer
p.runShellCommand(« uci set wireless.@wifi-iface[0].mode=ap »);   // point acces
p.runShellCommand(« uci set wireless.@wifi-iface[0].encryption=psk-mixed »);   // wpa/wpa2
p.runShellCommand(« uci set wireless.@wifi-iface[0].country=FR »);

//  reglage clef;
p.begin(« uci »);
p.addParameter(« set »);
p.addParameter(uciClef);
p.run();

//  validation des parametres
p.runShellCommand(« uci commit wireless »);

// on relance le reseau
p.runShellCommand(« uci /etc/init.d/network restart »);
p.runShellCommand(« wifi »);
}
}

 

C’est terminé !.

5/ Compter le nombre de clients. (en option)

il faut copier le fichier testclients2.sh dans etc/config.

 

cela permet d’afficher sur le lcd le nombre de clients connectés au point d’accès.

 

Bugs relevés :

Lors du  téléchargement du code dans la carte arduino YUN elle ne redemarre pas ….
Il faut alors Débrancher et rebrancher son alim….

 

 

Arduino Yun PA WIFI

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.