Galileo, Serial Monitor Arduino et Rififi

Un petit préambule
Dans le cadre de Pi-Vigilance, je me suis décidé à développer un premier noeud esclave expérimental autour d'Arduino Ethernet (en filaire donc).

Arduino Galiléo disposant d'une connexion réseau Ethernet et étant réputé certifié Arduino, je me suis décidé à faire un premier prototype autour de Galiléo... autant lier l'utile à l'agréable.

Arduino Galileo - disponible chez MCHobby


Voici quelques constatations troublantes qu'il est intéressant de connaître pour ne pas tourner en rond.

Pas d'auto-reset Arduino au Moniteur Série

Si vous êtes un habitué d'Arduino IDE, vous serez certainement très étonner de ne pas avoir un Reset Automatique de votre Sketch/Croquis lorsque vous ouvrez le moniteur série d'Arduino IDE.

En fait, vous reprenez le fil des messages Serial.print() là ou se trouve votre programme Arduino. Il n'y a pas de reset de votre sketch/croquis lorsque vous ouvrez votre Serial Monitor IDE. 

activation de connexion USB/Série
Rien de catastrophique mais à savoir.
Si vous débranchez la fiche USB Client, vous perdez votre connexion sur le "Serial Moniteur d'Arduino IDE".
Si vous rebranchez votre connexion USB, il faudra au moins 30 sec pour pouvoir ré-établir la connexion avec le moniteur série d'Arduino.

Le programme Arduino est perdu après un cycle d'alimentation USB/Série
C'est aussi très surprenant lorsque l'on vient du monde pure-Arduino (ou le programme est sauvé dans la mémoire Flash).

Dans le cas de Galileo, c'est normal... par défaut, les sketchs/croquis ne sont pas sauvés sur la plateforme de prototypage.
Une fois votre programme prêt pour la production, vous devez le placer sur une carte SD qui sera bootée au démarrage de la plateforme.

Pour savoir comment faire, référez-vous à la section "Booting your board from an SD card" section (section 11) du guide Intel® Galileo Getting Started.

Le bouton Reset Sketch/Croquis, Reset-il?
Et bien, ce dernier semble simplement inactif... après avoir modifié un programme pour avoir une variable de détection de l'exécution de setup(), je constate que la fonction setup() n'est pas re-exécutée si l'on presse le bouton reset.
En fait, le programme continue a fonctionner comme de si le bouton n'avait pas été pressé :-?

Voici un petit programme issu de l'exemple WebServer.ino et modifié pour tenter de détecter la re-exécution de la fonction setup(). 

#include <spi.h>
#include <ethernet.h>

volatile boolean setupStrap = true;

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
  setupStrap = true;
  pinMode( 13, OUTPUT );
  digitalWrite( 13, LOW );
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Serial.println( "Setuping...." );
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // Code qui n'
  if( setupStrap ){
    delay( 2000 );  
    Serial.println( "bootStrap detected..." );
    setupStrap = false;
    delay( 2000 );  
    Serial.println( "Going to loop()..." );
  }
  else {
    Serial.print('.');
    delay(50);
  }
  
  digitalWrite( 13, HIGH );

  return;
}


Il faudra que je me renseigne plus avant sur ce point...