De Ethernet à la WiFi changement de programme

Bonjour alors j’ai un programme qui me permet d’envoyer des requêtes sur un serveur externe, je l’ai réaliser avec un shield Ethernet.

Le problème c’est que mon chef de stage à décidé de le faire par Wifi au lieu de passer par câble Ethernet.

Pouvez-vous m’aider à à le corriger pour que mon programme marche en WiFi?

#include <SPI.h>         // needed for Arduino versions later than 0018
#include <Ethernet2.h>
#include <EthernetUdp2.h>         // UDP library from: bjoern@cs.stanford.edu 12/30/2008
#include <Server.h>
#include <Client.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  
  0x90, 0xA2, 0xDA, 0x10, 0x7A, 0x68 };
IPAddress ip(192, 168, 1, 168);
EthernetClient client;



// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char  ReplyBuffer[] = "acknowledged";       // a string to send back

// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

// un bouton poussoir connecté à la broche 1
int bouton=8;
int bouton2=4;
const int buttonPin = 8;
const int buttonPin2 = 4;
int buttonState = 0;
int buttonState2 = 0;
int ledpin=13;
int ledpin1=12;
int ledpin2=7;

//---- tableau de l'adresse IP de la carte Arduino
byte ipLocal[] = { 192,168,1,183 }; // le réseau local a numéro 192.168.1.x
//----- tableau de l'adresse de la passerelle --- 
//byte passerelle[] = { 192, 168, X, X }; // l'adresse du PC de connexion à internet ou de la box
//----- tableau du masque de sous réseau 
//byte masque[] = { 255, 255, 255, 0 }; // idem masque sous-réseau du PC ou de la box : 255.255.255.0
//---- IP du serveur distant de connexion ---- 
byte server[] = { 192,168,1,149 };



void setup() {
  //---- initialise la connexion Ethernet avec l'adresse MAC du module Ethernet, l'adresse IP Locale 
//---- l'adresse IP de la passerelle internet et le masque du réseau local
  Ethernet.begin(ipLocal);
  Udp.begin(9000);
  delay(1000); // donne le temps à la carte Ethernet de s'initialiser
  Serial.begin(9600);
// initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(ledpin,OUTPUT);
  pinMode(ledpin1,OUTPUT);
  pinMode(ledpin2,OUTPUT);
}

void loop() {
  //---- connexion au serveur distant ---- 
Serial.println("Connexion vers serveur en cours...");
int testConnexion = true;
if (testConnexion==true);  // si la connexion du client a réussi
  Serial.println("Connexion au serveur reussie");
  int val=digitalRead(bouton);

   if(val==LOW){
    digitalWrite(ledpin,HIGH);
    digitalWrite(ledpin1,HIGH);
    digitalWrite(ledpin2,LOW);
    delay(1000);
    digitalWrite(ledpin,LOW);
    delay(1000);
    digitalWrite(ledpin1, LOW);
    delay(1000);
    digitalWrite(ledpin2,HIGH);
    Serial.println("Envoi d'une requete HTTP au serveur");
    client.connect(server, 9000);
    client.println("GET /run HTTP/1.1");
    client.println("Host: 192.168.1.149");
    Serial.println("La partie a commencé!");
    client.println();
  }
  int val2=digitalRead(bouton2);

   if(val2==HIGH){
    Serial.println("Envoi d'une requete HTTP au serveur");
    client.connect(server, 9000);
    client.println("GET /stop HTTP/1.1");
    client.println("Host: 192.168.1.149");
    Serial.println("Partie terminée");
    client.println();
    digitalWrite(ledpin,LOW);
    digitalWrite(ledpin1,LOW);
    digitalWrite(ledpin2,LOW);
  }

Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
   
    Udp.write("label: debut");

    Udp.endPacket();

  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  buttonState2 = digitalRead(buttonPin2);
  // check if the pushbutton is pressed.     
    if (buttonState == LOW);
    if (buttonState2 ==HIGH);
    

  // if there's data available, read a packet
  int packetSize = Udp.parsePacket();
  if(packetSize)
  {
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
    Serial.print("From ");
    IPAddress remote = Udp.remoteIP();
    for (int i =0; i < 4; i++)
    {
      Serial.print(remote[i], DEC);
      if (i < 3)
      {
        Serial.print(".");
      }
    }
    Serial.print(", port ");
    Serial.println(Udp.remotePort());

    // read the packet into packetBufffer
    Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
    Serial.println("Contents:");
    Serial.println(packetBuffer);

    // send a reply, to the IP address and port that sent us the packet we received
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(ReplyBuffer);
    Udp.endPacket();
  }
delay(10);
}

Ps: adresse ip d’exemples :wink:

Merci d’avance!

arduino62:
Bonjour alors j'ai un programme qui me permet d'envoyer des requêtes sur un serveur externe, je l'ai réaliser avec un shield Ethernet.

Le problème c'est que mon chef de stage à décidé de le faire par Wifi au lieu de passer par câble Ethernet.

bonjour
Tu demande à ton chef de stage d'acheter un nanorouteur genre ça

  • pas de modif du programme d'origine
  • tu conserve la connectivité cable

c'est ce que j'ai fait lorsque j'ai voulu passer facilement au WIFI avec des applis developpées à l'origine pour le shield ethernet

Merci pour ta réponse mais le problème c’est que j’ai déjà une AT-mega 2560, je pense pas lui faire racheter une nano :open_mouth:

arduino62:
Merci pour ta réponse mais le problème c'est que j'ai déjà une AT-mega 2560, je pense pas lui faire racheter une nano :open_mouth:

c'est pas un arduino nano :grin: , c'est un nano routeur
ça se met simplement derriere ton shield ethernet.

Ah oui exact je n'avais pas vu, mais enfaîte mon tuteur veut le moins de fils possible et avoir un nano routeur sa rajoute, malgré cette super idée, l'alimentation externe donc il ne veut pas :confused: Il m'a dit qu'il y aura seulement l'alimentation de l'arduino qui aura un fil, donc je dois me débrouiller.

Sinon comment faire autrement? :open_mouth:
Pourrez vous corriger mon programme en version WiFi? J'assaye depuis tout à l'heure je n'arrive pas :confused:

bonjour,
dans ce cas, une alim pour les deux :slight_smile:
tu prends la plus adaptée au nano router ou à la carte, tu coupes les fils et fais un pont pour abaisser le voltage si besoin :wink:

infobarquee:
bonjour,
dans ce cas, une alim pour les deux :slight_smile:
tu prends la plus adaptée au nano router ou à la carte, tu coupes les fils et fais un pont pour abaisser le voltage si besoin :wink:

Merci pour ta réponse, je vais en parler a mon chef, c'est vrai qu'en réalité c'est une bonne idée :slight_smile:
Et si je suis amené à changer le programme pour qu'il fonctionne avec un shield Wifi, que changerez vous du programme ethernet que j'ai fais pour que ça marche avec le shield Wifi?

infobarquee:
bonjour,
dans ce cas, une alim pour les deux :slight_smile:
tu prends la plus adaptée au nano router ou à la carte, tu coupes les fils et fais un pont pour abaisser le voltage si besoin :wink:

Mais infobarquee, comment je fais un pont pour abaisser le voltage comme tu dis?

Est-ce que quelqu'un peux me corriger mon programme version Wifi? J'ai essayé mais n'y arrive pas :open_mouth:

arduino62:
Est-ce que quelqu'un peux me corriger mon programme version Wifi? J'ai essayé mais n'y arrive pas :open_mouth:

si tu mettais le code pour le wifi, on pourrait peut être aider.

infobarquee:
si tu mettais le code pour le wifi, on pourrait peut être aider.

Je pense m’aider de ce programme infobarquee qu’est ce que tu en dis?

#include <SPI.h>
#include <WiFi.h>

char ssid[] = "yourNetwork"; //  your network SSID (name)
char pass[] = "secretPassword";    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "www.google.com";    // name address for Google (using DNS)

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
WiFiClient client;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }

  String fv = WiFi.firmwareVersion();
  if (fv != "1.1.0") {
    Serial.println("Please upgrade the firmware");
  }

  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }
  Serial.println("Connected to wifi");
  printWifiStatus();

  Serial.println("\nStarting connection to server...");
  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected to server");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.1");
    client.println("Host: www.google.com");
    client.println("Connection: close");
    client.println();
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting from server.");
    client.stop();

    // do nothing forevermore:
    while (true);
  }
}


void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

Entre autre il faudrait faire un mix des 2 programmes, mais j’ai peur de me viander :'D
Comment tu ferais ?
Merci de m’aider!

J'ai réaliser que mon shield wifi à besoins d'une version logiciel moins récent, j'avais la version 1.6.9 et j'ai télécharger la version 1.0.2 pour que la connexion au serveur fonctionne.

Le problème est que du coup il n'y a plus les fichier exemple wifi udp qui me servait dans mon programme :confused: Comment faire ?