Aiuto per Ethernet shield enc28j60 e semplice programma android

Salve a tutti!

chiedo il vostro aiuto per realizzare un piccolo progettino che mi è venuto in mente. Vedo primadi spiegare cosa vorrei fare e dopo come vorrei procedere.

Ho installato una caldaia con un veltil convettore nel mio laboratorio, odio il freddo sapete! Nel momento di attaccare al muro il banale termostato da 10€ preso in ferramenta, come potete immaginare, l'ho subito classificato come "Estremamente banale e semplice" :smiley:

Mi piacerebbe poter avviare il riscaldamento dal mio cellulare, quindi anche se sono fuori casa e sto per tornare, o magari solamente conoscere la temperatura della stanza. Tutto qui.

Ora, dal lato cellulare (Android) ero nei guai più profondi, in quanto ho perso alcune sere a cercare di capire come un essere unano con nessuna nozione di Java possa creare un banale programmino che richieda o invii semplici comandi via inernet. Avevo quasi abbandonato, quando ho trovato una bruttissima e del tutto non flessibile soluzione. App-Inventor! Inizialmente creata proprio da Mamma google, poi passata sotto mano del MIT.

Ho installato e configurato tutto, e sembra essere molto intuitivo e semplice da usre. Ma, ancora terrificante per la flessibilità! vengono fuori cose graficamente raccapriccianti. Ma, per il mio scopo e il mio livello di conoscenze Java pari a 0.....è ottimo! Mi piace!

Ora, in poche parole riesco a far girare un web client (o server non ho ben capito) sul cellulare, che invia e riceve comandi HTML tramile comandi GET e POST.
Premettendo il fatto che non sò usarli, ma leggendo in rete sono arrivato ad intuirne il funzionamento, sorge adesso il problema dal lato Arduino.

Ho da parecchio tempo la suddela shield di rete, mai usata. l'ho agganciata alla UNO e ho caricato un esempio di PING. Niente male, ha funzionato al primo colpo! Almeno questo!

Ora, veniamo alla domanda saliente.

Dove trovo ad esempio la lista dei comandi e funzioni della libreria che uso? Si tratta di quella suggerita da Luca dentella "JeeLabs Cafè" GitHub - njh/EtherCard: EtherCard is an IPv4 driver for the ENC28J60 chip, compatible with Arduino IDE

e in più, non sò dove mettere le mani anche solo per ricevere un comando inviato dal programmino sul cellulare e interpretarlo.

vediamo:

#include <EtherCard.h>

static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};
static byte myip[] = {192,168,1,10};
byte Ethernet::buffer[700];
 
 
void setup () {
  
  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0) 
    Serial.println( "Failed to access Ethernet controller");
 
  if (!ether.staticSetup(myip))
    Serial.println("Failed to set IP address");
}
 
void loop() {
 

  
}

mi pare che iniziando a scrivere questo, la shield è correttamente inizializzata e funziona.

ma mi mancano adesso i comandi per controllare se sono arrivati dati e quindi poi usalri. Trattandosi di Ethernet ed HTLM molto probabilmente, ri-piombo nel baratro!

è troppo chiedervi di farmi un esempio magari di ricezione di un numero o una lettera da usare poi come flag nel programmino che scriverò?
Premettendo che dal lato cellulare ho a disposizione i comandi POST e GET che a quanto ho capito possono reagire al "Click" di un "button" della App.

Grazie, e perdonate la chilometrica discussione!

Inizia a consultare tutti i tutorial di Luca. Ce ne anche uno per il led.
--> http://www.lucadentella.it/category/enc28j60-arduino/

Ho da parecchio tempo la suddela shield di rete, mai usata. l'ho agganciata alla UNO e ho caricato un esempio di PING. Niente male, ha funzionato al primo colpo! Almeno questo!

Io ho aperto un post qualche giorno fa proprio in merito all'Ethernet Shield ENC28J60 sfortunatamente a me non è andata allo stesso modo, scusami se sono offtopic potresti dirmi che IDE usi, il nome della libreria e dove hai acquistato lo shield??

si, li ho letti tutti! :smiley:

ma ho trovato una sostanziale differenza, nell'esempio del led, Luca crea una piccola pagina Web sull'arduino stesso, che appare digitando l'indirizzo.

a me servirebbe ricevere un comando dall'esterno! quindi non vedere cosa viene cliccato sulla pagina generata!

o sbaglio?

l'ho acquistata l'anno scorso sulla Baya!

Il venditore non lo ricordo, ma è tale e quale a quella di Luca Dentella C'è una foto in fondo alla pagina

la libreria l'ho lincata sopra!

Và sia con la IDE 0023 che con la 1.0. Al momento uso la 1.0

Allora potresti vedere qui --> Arduino Forum

z3us:
si, li ho letti tutti! :smiley:

ma ho trovato una sostanziale differenza, nell'esempio del led, Luca crea una piccola pagina Web sull'arduino stesso, che appare digitando l'indirizzo.

a me servirebbe ricevere un comando dall'esterno! quindi non vedere cosa viene cliccato sulla pagina generata!

o sbaglio?

ciao

il tuo programma creato con app-inventor è sostanzialmente un "browser" web in versione ridotta (infatti stai utilizzando l'oggetto web client). L'esempio che ho scritto su come comandare un relay da cellulare fa al caso tuo:
http://www.lucadentella.it/2012/11/10/enc28j60-e-arduino-9/

questo sketch infatti riceve un comando (GET /?ON o GET /?OFF) e accende/spegne il relay di conseguenza... essendo poi pensato per un web browser di risposta ti formatta una pagina html che visualizzi lo stato: se a te non interessa (perché stai usando un tuo web client) puoi rimuovere quella parte o semplicemente ignorarla lato codice java.

bye

Meraviglioso!

Grazie Luca! avevo trascurato quell'esempio credendo che trattasse di manipolazioni di immagini viste le prime righe.

Ora sono a lavoro, non vedo l'ora di poter provare!

ovvio vi farò prtecipi del risultato....e dei sicuri problemi che spunteranno!

Dopo un paio di prove, ed aver afferrato l'ingranaggio di App-inventor, il led si è acceso!!!!

Grazie Luca!

Ecco dove sono per adesso:

Il codice è quello dell'esempio 9 di Luca, senza la parte HTML

#include <EtherCard.h>

#define RELAY_PIN 2

static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};
static byte myip[] = {192,168,1,78};
byte Ethernet::buffer[700];

boolean relayStatus;


void setup () {
 
  Serial.begin(57600);
  Serial.println("WebRelay Demo");

  if(!ether.begin(sizeof Ethernet::buffer, mymac, 10))
    Serial.println( "Failed to access Ethernet controller");
  else
    Serial.println("Ethernet controller initialized");

  if(!ether.staticSetup(myip))
    Serial.println("Failed to set IP address");

  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);
  relayStatus = false;
}
  
void loop() {
 
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  
  if(pos) {
        
    if(strstr((char *)Ethernet::buffer + pos, "GET /?ON") != 0) {
      relayStatus = true;
    } else if(strstr((char *)Ethernet::buffer + pos, "GET /?OFF") != 0) {
      relayStatus = false;
    }
    digitalWrite(RELAY_PIN, relayStatus);

    }
}

su App inventor, al momento ho solo due pulsanti messi a casaccio. Il primo invia "/?ON" il secondi "/?OFF" preceduti dall'indirizzo dell'arduino, nel mio caso, il locale http://192.168.1.78

Bene, non conoscendo un "H" di roba WEB, sono davvero contento del risultato!

ora c'è da vedere se riesco a prendere dimestichezza con App-Inventor e interfacciarlo per bene con il firmware che scriverò per arduino.

Ah, una domanda, ho notato che schiacciando ON, spesso arrivano più comandi intervallati.....avvolte anche di OFF dopo che l'ho premuto. Chiudendo la APP però, non succede più! Sarà un qualche sistema di sicurezza del cellulare? tipo che prova ad inviare i dati finche non riceve una qualche risposta indietro che ovviamente non è settata per essere inviata?

strano... non conosco App Inventor ma da quello che vedo l'unica possibilità è che il blocco "GET" che hai messo si aspetti qualche risposta particolare da Arduino... prova a toglierlo