Changer la bibliothèque d'un programme (EtherCard à Ethernet)

Bonjour, je suis un jeune qui débute dans la programmation et j’ai le projet de faire un distributeur de croquette pour chat automatique. Et pour cela je dispose d’un capteur de force (pour connaitre la quantité de croquette dans la gamelle) et d’un capteur infrarouge (pour connaitre la quantité de croquette restantes dans mon réservoir). Je voudrai pouvoir faire afficher les données de mes capteurs sur une page internet (je possède bien évidemment une carte arduino, un shield et une carte raspberry). J’ai réalisé des testes via une machine virtuelle et proteus. Le programme utilisé pour ceci marche très bien et les données s’affichent bien sur ma page internet. Seulement voilà, je veux maintenant changer de bibliothèque afin de pouvoir faire afficher mes données sans la machine virtuelle et donc directement via le serveur raspberry.

#include <EtherCard.h>

#define STATIC 1 

#if STATIC
// ethernet interface ip address
static byte myip[] = { 172,16,114,98 };
// ethernet subnet mask
static byte netmask[] = { 255,255,255,0 };
// gateway ip address
static byte gwip[] = { 172,16,114,2 };
// dns ip address
static byte dnsip[] = { 8,8,8,8 };
#endif


// ethernet mac address
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[900];
BufferFiller bfill;

void setup () {
  Serial.begin(9600);
  Serial.println("Hello");
  
  // Broche 10 de Arduino reliée à la broche /CS du ENC28J60 
  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0) 
    Serial.println( "Failed to access Ethernet controller");
  #if STATIC
    ether.staticSetup(myip, gwip, dnsip, netmask);
  #else
    if (!ether.dhcpSetup())
      Serial.println("DHCP failed");
  #endif

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("MASK:  ", ether.netmask);  
  ether.printIp("GW:  ", ether.gwip);
  ether.printIp("DNS: ", ether.dnsip);
  
  Serial.println("\rUtiliser votre navigateur ");
  Serial.print("URL= ");
  ether.printIp(ether.myip);
  Serial.println("\rpour visualiser la temperature");
  Serial.println("Actualisation toutes les 5s");
}

void loop () {
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  
  if (pos)  // check if valid tcp data is received
    ether.httpServerReply(homePage()); // send web page data
}


static word homePage()
{
  int gam = analogRead(A0);
  int Res=1;
  int Gam=(gam/2)-1;  // Pour la simulation seulement 
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
   "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n"
    "\r\n"
    "<meta http-equiv='refresh' content='5' charset='utf-8'/>" 
    "<body>" 
        "<object data='http://172.16.114.99/données/Form_record_Data.php?Gam$D&&Res=$D'>"
        "<param name='autoplay' value='true'>"
        "</object>"
         "<object data='http://172.16.114.99/données/TblGPhy1.php'>"
        "<param name='autoplay' value='true'>"
        "</object>"
    "</body>"

   ),Gam,Res);
  return bfill.position();
}

Pour changer cela j’utilise la bibliothèque Ethernet.h (je suppose?) et j’ajoute également SPI.h
Mais voilà, toutes les fonctions se retrouvent incorrectes (dû au changement de bibliothèque). Je voudrai donc savoir quelles fonctions mettre à la place de quelles fonctions et surtout pourquoi/comment sait-on.

Salut
Quel modèle de shield ?

C'est un shield Ethernet EF02029

Donc un chip W5100.

C'est bien la librairie Ethernet qu'il faut utiliser.
La librairie Ethercard est OK pour un chip ENC28J60.

Ces deux librairies sont très différentes.
Je te conseille de repartir sur l'exemple WebServer de la librairie, en conservant ton code HTML. Le reste est à refaire.

D'accord merci je verrai ça plus tard ! :slight_smile:

Dois-je aussi modifier/supprimer le début de mon programme?

#define STATIC 1  // set to 1 to disable DHCP (adjust myip/gwip values below)

#if STATIC
// ethernet interface ip address
static byte myip[] = { 172,16,114,69 };
// ethernet subnet mask
static byte netmask[] = { 255,255,255,0 };
// gateway ip address
static byte gwip[] = { 172,16,114,2 };
// dns ip address
static byte dnsip[] = { 8,8,8,8 };
#endif


// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[900]; // tcp/ip send and receive buffer
BufferFiller bfill;

Plutôt ceci :

// l'IP utilise la classe IPAddress mais c'est un détail
IPAddress ip(172,16,114,69);

// buffer et bfill n'ont plus lieu d'être
byte Ethernet::buffer[900]; // tcp/ip send and receive buffer
BufferFiller bfill;

D'accord, oui je comprends mieux merci je vais me re-pencher dessus!