Buona giornata a tutti
Sono un nuovo membro del forum Arduino, il mio lavoro è la progettazione HW, ma riguardo al software sono un principiante. Sto realizzando una scheda madre, con montato Arduino NANO, Ethernet scudo ENC28J60 e un modulo a 4 relè, mentre la scheda madre ha 12 ingressi a 12Vdc, alimentatore galvanicamente isolato, RS485 a 2 fili , 4 LED diagnostica e dip-switch esterno per configurare la scheda.
Questa scheda deve comunicare con il sistema SW BLUE IRIS di videosorveglianza in esecuzione sul PC attraverso la rete INTRANET: la scheda funziona correttamente : riceve i comandi dal SW di videosorveglianza e in caso di allarme generato dal Sw, Arduino riceve in comando e attiva il relè opportuno.
Riguardo alla trasmissione dei comandi, sempre su linea Ethernet , Il mio problema è quello di inviare comandi al PC per attivare la videocamera.
Il formato della telecamera è il seguente :
http://192.168.1.188:81/admin?camera=Cam11&trigger&user=bluiris&pw=bluiris
Dove password e nome utente sono = bluiris, mentre Cam11 è la camera da triggerare per avviare la registrazione .
Il comando HTTP, inviato da un altro PC funziona, ma purtroppo non sono in grado da Arduino.
Ho osservato molti esempi, e ho visto che viene richiamato quasi sempre la classe STASH, ritenendo fosse una buona soluzione per me, nonostante non ci sia molta documentazione. Ho effettuato molti test ma senza successo .
Gentilmente qualcuno può aiutarmi a trovare il modo giusto per inviare via Arduino, la stessa stringa di HTTP sopra descritto.
Riporto sotto il codice sorgente , con evidenziata in giallo la parte del codice interessato, che per evitare errori di condizionalità , ho copiato il codice nel main loop, con invio ogni 7 secondi .
Il codice è in via di realizzazione, ho dato la priorità all’invio dei comandi , in quanto punto focale del SW
Grazie a tutti coloro che mi aiuteranno
Andrea
Buongiorno e benvenuto sul forum,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili
... dopo di che, in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
Grazie,
Guglielmo
Usa la libreria Ethercard e in particolare il suo esempio WebClient.
Buongiorno SukkoPera,
Ho provato il tuo suggerimento e ti allego il programma se hai tempo di verificare.
Il risultato che invece di uscire un pacchetto HTTP, purtroppo esce un pacchetto TCP il cui contenuto non ha nulla a che fare con la stringa,(non capisco perchè in quanto ho visto mille esempi in giro e non va!!)
La configurazione di testa è la seguente
- PC windows 7, con a bordo Wireshark, simula il vero server (ho creato questo solo per modalità di debug) che è collegato allo switch di rete.
- Arduino con il suo cavo è collegato allo stesso switch di rete, poi lo stesso switch è collegato alla sempre alla LAN principale
Premetto che HW funziona, in quanto già ricevo i pacchetti HTTP dal SW di videosorveglianza e Arduino controlla e attiva i relè in caso di allarme
Allego la videata di wireshark qualora possa essere utile e la foto della scheda , che gli manca così poco per essere messa dentro l'armadio
Cosa potrebbe essere a questo punto,non so cosa pensare se non a una cavolata mia oppure una semplice banalità da novizio
Grazie dell'aiuto che mi vorrete dare
Andrea
// Demo using DHCP and DNS to perform a web client request.
// 2011-06-08 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
#include <EtherCard.h>
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[700];
static uint32_t timer;
const char website[] PROGMEM = "192.168.1.240";
// called when the client request is complete
static void my_callback (byte status, word off, word len) {
Serial.println(">>>");
Ethernet::buffer[off+300] = 0;
Serial.print((const char*) Ethernet::buffer + off);
Serial.println("...");
}
void setup () {
Serial.begin(57600);
Serial.println(F("\n[webClient]"));
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println(F("Failed to access Ethernet controller"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
byte hisip[] = { 192,168,1,240 };
ether.copyIp(ether.hisip, hisip);
ether.printIp("SRV: ", ether.hisip);
static int server_Port = 81;
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 1000;
Serial.println();
Serial.print("<<< REQ ");
ether.browseUrl(PSTR("/admin?camera=Cam11&trigger&user=bluiris&pw=bluiris"), "", website, my_callback);
}
}
Io metterei:
const char website[] PROGMEM = "192.168.1.242";
E come richiesta farei:
ether.browseUrl(PSTR("/admin?camera=Cam11&trigger&user=bluiris&pw=bluiris"), "", website, my_callback)
Buongiorno SukkoPera,
Ho provato il tuo suggerimento e ti allego il programma se hai tempo di verificare.
Il risultato che invece di uscire un pacchetto HTTP, purtroppo esce un pacchetto TCP il cui contenuto non ha nulla a che fare con la stringa,(non capisco perchè in quanto ho visto mille esempi in giro e non va!!)
La configurazione di testa è la seguente
- PC windows 7, con a bordo Wireshark, simula il vero server (ho creato questo solo per modalità di debug) che è collegato allo switch di rete.
- Arduino con il suo cavo è collegato allo stesso switch di rete, poi lo stesso switch è collegato alla sempre alla LAN principale
Premetto che HW funziona, in quanto già ricevo i pacchetti HTTP dal SW di videosorveglianza e Arduino controlla e attiva i relè in caso di allarme
Allego la videata di wireshark qualora possa essere utile e la foto della scheda , che gli manca così poco per essere messa dentro l'armadio
Cosa potrebbe essere a questo punto,non so cosa pensare se non a una cavolata mia oppure una semplice banalità da novizio
Grazie dell'aiuto che mi vorrete dare
Andrea
// Demo using DHCP and DNS to perform a web client request.
// 2011-06-08 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
#include <EtherCard.h>
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[700];
static uint32_t timer;
const char website[] PROGMEM = "192.168.1.240";
// called when the client request is complete
static void my_callback (byte status, word off, word len) {
Serial.println(">>>");
Ethernet::buffer[off+300] = 0;
Serial.print((const char*) Ethernet::buffer + off);
Serial.println("...");
}
void setup () {
Serial.begin(57600);
Serial.println(F("\n[webClient]"));
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println(F("Failed to access Ethernet controller"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
byte hisip[] = { 192,168,1,240 };
ether.copyIp(ether.hisip, hisip);
ether.printIp("SRV: ", ether.hisip);
static int server_Port = 81;
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 1000;
Serial.println();
Serial.print("<<< REQ ");
ether.browseUrl(PSTR("/admin?camera=Cam11&trigger&user=bluiris&pw=bluiris"), "", website, my_callback);
}
}