Shield ethernet

En fait je voudrais comprendre le fonctionnement en vue d'envoyer ensuite des données issues d'une sonde type DS18B20 (Température) sur mon compte carriots et générer une alerte mail si un certain seuil de température est dépassé. J'ai essayé le sketch "webserver" dans l'IDE donc avec http et le port 80 ,j'ai renseigné l'adresse IP de mon shield et cela ne fonctionne pas , j'ai l'impression que le port ne s'ouvre pas ! Giloris

Giloris:
En fait je voudrais comprendre le fonctionnement en vue d’envoyer ensuite des données issues d’une sonde type DS18B20 (Température) sur mon compte carriots et générer une alerte mail si un certain seuil de température est dépassé.
J’ai essayé le sketch “webserver” dans l’IDE donc avec http et le port 80 ,j’ai renseigné l’adresse IP de mon shield et cela ne fonctionne pas , j’ai l’impression que le port ne s’ouvre pas !
Giloris

pourquoi ne pas aller voir les tutos de carrios?
https://www.carriots.com/tutorials/arduino_carriots/alert_system

/*
    Carriots.com
    Created 27 Dec 2012

    This sketch sends streams to Carriots according to the values read by a LDR sensor

*/
#include <SPI.h>
#include <Ethernet.h>

const int ON = 1;    // Constant to indicate that lights are on
const int OFF = 2;  // Constant to indicate that lights are off
const String APIKEY = "YOUR APIKEY HERE"; // Replace with your Carriots apikey
const String DEVICE = "YOUR DEVICEs ID_DEVELOPER HERE"; // Replace with the id_developer of your device

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,27);       // Your IP Address
IPAddress server(82,223,244,60);  // api.carriots.com IP Address

EthernetClient client; // Initialize the library instance

int ledPin = 7;        // Led pin number
int LDRPin = 3;        // LDR sensor pin number

int lights = OFF;       // Current status
int newLights = OFF;    // New status



// The setup routine runs once when you press reset
void setup() {

  pinMode(ledPin, OUTPUT);        // Initialize the digital pin as an output

  Serial.begin(9600);             // Start serial port
  Serial.println(F("Starting"));

  Ethernet.begin(mac,ip);         // Start the Ethernet connection
  delay(1000);                    // Give the Ethernet shield a second to initialize
}

// The loop routine runs over and over again forever
void loop() {

  int val = analogRead(LDRPin);   // Read the value from the sensor
  Serial.println(val);

  if (val > 990) {  // This is the value limit between day or night with our LDR sensor. Maybe you need adjust this value.
    newLights = OFF;             // Now its night. We have to turn on the LED
    digitalWrite(ledPin, HIGH);   // Turn the LED on (HIGH is the voltage level)
  }
  else {
    newLights = ON;               // Now its day. We have to turn off the LED
    digitalWrite(ledPin, LOW);    // Turn the LED off by making the voltage LOW
  }

  if (lights != newLights) {        // Check if we have a change in status
    Serial.println(F("Send Stream"));
    lights = newLights;             // Status update and send stream
    sendStream();
  }

  delay(500);

  // If theres incoming data from the net connection, send it out the serial port
  // This is for debugging purposes only
  while (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
      client.stop();
  }
}

// Send stream to Carriots
void sendStream()
{
  String txt = "";          // Text to send
  if ( lights == OFF ) {   // Alarm OFF
     txt = "OFF";
  } else {                  // Alarm ON
     txt = "ON";
  }
  Serial.println(txt);      // For debugging purpose only

  if (client.connect(server, 80)) {   // If theres a successful connection
    Serial.println(F("connected"));
    // Build the data field
    String json = "{\"protocol\":\"v2\",\"device\":\""+DEVICE+"\",\"at\":1356390000,\"data\":{\"light\":\""+txt+"\"}}";

    // Make a HTTP request
    client.println("POST /streams HTTP/1.1");
    client.println("Host: api.carriots.com");
    client.println("Accept: application/json");
    client.println("User-Agent: Arduino-Carriots");
    client.println("Content-Type: application/json");
    client.print("carriots.apikey: ");
    client.println(APIKEY);
    client.print("Content-Length: ");
    int thisLength = json.length();
    client.println(thisLength);
    client.println("Connection: close");
    client.println();

    client.println(json);
  }
  else {
    // If you didnt get a connection to the server:
    Serial.println(F("connection failed"));
  }


}

Bonsoir,

Merci pour le tuto, je l’avais aussi repéré mais je voulais au préalable faire fonctionner le sketch Webserver dans les exemples arduino car mon problème vient de l’ouverture du port. Plus haut j’avais essayé avec TELNET et le port 23 qui n’était plus affecté , mais là j’utilise des adresses IP qui fonctionnent avec le port 80, mais lors du lancement du sketch le shield est bien repéré avec son adresse MAC et son IP et ensuite il ne se passe plus rien. Sous Mac j’ai fait un scan des ports le 80 fonctionne !
Je suis complètement perdu car je ne peux pas allé plus loin dans mon projet
Mon shield ethernet est de marque sunfounder, le problème peut-il venir du shield ?
Merci encore pour votre aide
Giloris

mais le but exact de ton projet, c'est quoi? interroger ton arduino via internet ou envoyer des données sur carmachintruc? interroger ==> webserver caramachintruc ===> webclient

c'est pas la même chose

Effectivement Ç est d envoyer les données vers le site carriots Donc webclient mais je ne comprends pas pourquoi le webserver ne fonctionne pas j en aurais sûrement besoin par la suite ! Je souhaiterais ensuite utiliser l application sur iPhone osc Touch qui permet de contrôler l arduino avec un iPhone ou iPad Merci pour votre aide Giloris

Giloris: je voulais au préalable faire fonctionner le sketch Webserver dans les exemples arduino car mon problème vient de l'ouverture du port. Plus haut j'avais essayé avec TELNET et le port 23 qui n'était plus affecté , mais là j'utilise des adresses IP qui fonctionnent avec le port 80, mais lors du lancement du sketch le shield est bien repéré avec son adresse MAC et son IP et ensuite il ne se passe plus rien. Sous Mac j'ai fait un scan des ports le 80 fonctionne !

d'après ce que tu écrit ton schield fonctionne mais tu mélanges un peu tout

pour être sur que ça fonctionne : - tu utilises l'ex webserver dans lequel tu modifie Ethernet.begin(mac,ip) par Ethernet.begin(mac) - au démarrage dans la console tu notes l' @ IP (adresse ip) affectée a ton schield par ta box (adresse fournie par ton DHCP) - sur ton ordi (je ne connais pas les mac) tu lances un ping avec l'@ IP notée avant - sur ton ordi dans un browser internet tu te connecte a http://@IP

tu reviens nous dire : - le résultat de ce qui est écrit dans la console - le résultat du ping - le résultat du http

au niveau du ping 64 bytes from 192.168.1.xx qui est l'adresse du shield

le http : analog input 0 is 297 analog input 1 is 305 .....

et sur le moniteur défile une série d'"informations après la connexion client établie.

donc ça fonctionne ;) maintenant il faut réfléchir à ce que tu veux faire : - si tu as besoin de faire un serveur il faut le mettre en @ ip fixe (donc Ethernet.begin(mac,ip) ) mais en choisissant une ip en dehors de ta plage DHCP tout en restant dans la même plage (les 3 premiers chiffres 192.168.1.x) ex ta box distribue x de 1 à 150 tu prend une adresse entre 151 et 253 et s'il doit être accessible de l'extérieur il faut déclarer une redirection de port sur ta box - si tu as besoin seulement d'un client tu laisse attribuer une @ ip par ta box (donc Ethernet.begin(mac))

Bonjour,

Merci pour toutes ces précisions et informations qui vont me permettre d'avancer dans mes projets. J'ai une dernière interrogation sur l'utilisation d'un port udp (8888) . J'ai redirigé sur ma box ce port vers mon mac, mais cela ne fonctionne pas ! j'ai utilisé l'application UdpNtpClient d'arduino et rien ne se passe Faut-il rebooter la box ou cela fonctionne en instantanée ? Merci encore.

sur une freebox, oui sur les autres, cela vaut mieux car le port ne sera pas forcément actif de suite.

Giloris: Merci pour toutes ces précisions et informations qui vont me permettre d'avancer dans mes projets. J'ai une dernière interrogation sur l'utilisation d'un port udp (8888) . J'ai redirigé sur ma box ce port vers mon mac, mais cela ne fonctionne pas ! j'ai utilisé l'application UdpNtpClient d'arduino et rien ne se passe

je vois pas trop l’intérêt de passer par la redirection en réseau interne on est bien d'accord que la redirection de port c'est fait pour les accès depuis l'extérieur de ton réseau, mais tu as de la chance la freebox le fait aussi de l'intérieur ce qui n'est pas le cas pour une livebox ...

La mienne est une freebox révolution et cela ne fonctionne pas ! Avez vous une idée sur la cause ? Giloris

J'ai redirigé sur ma box ce port vers mon mac, mais cela ne fonctionne pas !

et sur votre mac vous avez enlevé le firewall logiciel? ou vous l'avez configuré comme il faut?

Giloris: Avez vous une idée sur la cause ?

ton mac est un serveur NTP ????

oui il n'y a pas de pare feu activé sur mon mac, j'utilise uniquement de pare feu interne de ma box.

NTP ? vous pouvez me préciser , comme le vérifie t-on ? ou comment le configure t-on ? Merci

ci-joint mon sketch et du cote de mon iphone j’utilise l’application TOUCH OSC qui me permet de contrôler l’intensité d’une LED avec une sort de telecommande.

OSCuino_TouchOSC.ino (2.94 KB)

si vous voulez jouer avec les ports de voter mac au dela du firewall, dans un terminal

sudo pfctl -vnf /etc/pf.conf

l'option v = verbose l'option n = ne charge pas les règles, fait simplement le parsing l'option f = le fichier de conf à lire

(faites un man pfctl pour plus d'info)

J'ai saisi les instructions dans le terminal, et je tombe sur un password à fournir !

Giloris:
J’ai saisi les instructions dans le terminal, et je tombe sur un password à fournir !

oui
** **sudo** **
veut dire “exécuter (do) la commande qui suit en mode super user”

cf la doc apple (il faut un mot de passe , si votre mac n’a pas de mot de passe (pas bien!) alors la commande ne passera pas)