Pages: [1] 2   Go Down
Author Topic: Unire 2 sketch (wifi shield ed il mio codice funzionante)... mi aiutate? pg.2  (Read 2828 times)
0 Members and 1 Guest are viewing this topic.
Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao ragazzi,

finito il mio progettino su arduino da autodidatta, ora vorrei fare il penultimo passo avanti e quindi prendere una wifi shield per poter mettere online i dati acquisiti da Arduino.

Nello specifico si tratta di far pubblicare 3 temperature ed implementare un bottone che mi permetta di azionare un servo da remoto.

Come noterete dal titolo del post il tutto andrà poi gestito da una app per iPhone che scriverò facendomi aiutare da un amico che di lavoro fa quello, nel frattempo, però, mi basta riuscire a far pubblicare da Arduino ciò che legge online (anche perché ora avendo Fastweb sto combattendo per avere un IP pubblico illimitato; finchè non me lo attivano avrò una limitazione di 20h mensili, ma per fare delle prove mi bastano).

Un paio di domande:

1) quanti pin necessita un wifi shield?
2) come comunicano? I2C?
3) questa invece voleva saperla il mio amico delle app: arduino come mette a disposizione i dati in rete? (ho capito cosa intendeva dire, ma non conoscendo le varie possibilità per me rimane una domanda aperta... boh?!)


la cosa migliore, siccome non sono programmatore e ci ho messo 10 giorni per capire il linguaggio e completare il mio programma su Arduino, sarebbe poter avere sotto mano un programma già compilato che sfrutti il wifi shield... così da comprendere sul campo ciò che succede... (qualsiasi programma, non intendo averlo già pronto per i miei scopi). ho provato a scaricare librerie e di conseguenza utilizzare gli esempi però rimangono un po' a sé... alcuni sono troppo complessi e non capisco nemmeno il codice, altri sono troppo sciatti... sembrano addirittura incompleti... ne avete uno da farmi vedere?

nel frattempo vado a leggermi qualcosa sulle modalità client e server visto che non capisco quale sarebbe necessaria per il mio progetto ... (così ad occhio entrambe, però non ne sono sicuro)..

grazie a tutti
Luca

ps: la shield che vorrei prendere è questa:

http://www.futurashop.it/allegato/8190-WIFI_SHIELD.asp?L2=SHIELD%20E%20ACCESSORI%20ARDUINO&L1=SOFTWARE%20E%20SISTEMI%20DI%20SVILUPPO&L3=&cd=8190%2DWIFI%5FSHIELD&nVt=&d=65,00


(spero si possano pubblicare i link a siti di vendita... in caso contrario chiedo scusa, ma alla fine è un rivenditore che appare anche dalla pagina di arduino...)
« Last Edit: February 18, 2012, 09:27:49 am by luca56 » Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2313
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
riguardo all'utilizzo di pin, solitamente questo sito fornisce molte informazioni:
shieldlist.org
ma non nel caso dello shield a cui fai tu riferimento.

Utilizza i pin per il bus SPI (e quindi dal 10 al 13 digitali, in realtà usando il connettore ICSP), più qualche altro per eventuali led e per il controllo della sd (pin 4 e 9 digitali).
Qui:
http://www.open-electronics.org/arduino-wifi-shield/
la pagina ufficiale dello shield, con i link alle librerie sw e qualche esempio.

Sul come Arduino metta a disposizione dati: beh, questo è lo sketch che andrai a scrivere tu!
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

intanto ti ringrazio per la risposta... ma quello è l'unico modo di collegarlo? voglio dire, avendo occupati tutti i pin tranne i digitali 8 e 9 non ho via di scampo!
 pensavo dialogasse in I2C cavoli... così sono legato...
Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2313
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao
Quote
avendo occupati tutti i pin tranne i digitali 8 e 9 non ho via di scampo
di impegnati hai il pin 4, 9, 10, 11, 12, 13
Ti rimangono liberi
digitali: 0, 1 (questi primi due considera che son quelli utilizzati anche dalla seriale), 2, 3, 5, 6, 7, 8
analogici: 0, 1, 2, 3, 4, 5, 6

Mi sembra che di pin liberi ne hai abbastanza...
Cosa ci devi fare?
3 temperature e un button riesci a gestirle senza problemi...

Considera inoltre che i pin analogici possono essere utilizzati come digitali.


Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

è un controllore per acquario, e mi rimangono liberi solo i pin 0, 1, 8, 9 digitali, tutti gli altri sono occupati (dall'rtc, da 3 sensoli galleggianti connessi ai pin analogici, dal display, 2 pin per PWM che pilotano gli alimentatori per i led....) il programma l'ho già scritto, ora cercavo di mettere in rete i parametri rilevati da arduino

questa è una foto del progetto


* IMG_1253b.jpg (145.17 KB, 768x574 - viewed 46 times.)
« Last Edit: February 06, 2012, 07:36:32 pm by luca56 » Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2313
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
tutto sommato il problema è legato all'utilizzo dei pin da parte del LCD... (correggimi se sbaglio)
In realtà potresti ovviare a questo problema pilotando il display con uno shift register:
http://code.google.com/p/arduinoshiftreglcd/
oppure usare un LCD seriale o i2c (alternativa più costosa)

In questo modo dovresti starci...

Eventualmente potresti pensare di utilizzare un'altro shield Wifi, per esempio il RedFly della Watterott, che utilizza i pin digitali 0,1,2 e 3
http://shieldlist.org/watterott/redfly

« Last Edit: February 07, 2012, 04:41:22 am by pitusso » Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

guarda, considerando la possibile implementazione di altre funzioni passo all'arduino mega e taglio la testa al toro... e quello che ho lo utilizzo per progettini nel tempo libero.

preferisco tenere come valida la scheda wifi che ho postato primo perché posso averla in giornata andandola a prendere, secondo perché, nonostante non funzionino sul mio attuale IDE che è il 22, almeno ha già la libreria pronta da scaricare comprensiva di esempi..

vorrei riformulare, a questo punto, la domanda...

questo è lo sketch d'esempio che mi ritrovo:

Code:
/*
 * A simple sketch that uses WiServer to serve a web page
 */


#include <WiServer.h>

#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2

// Wireless configuration parameters ----------------------------------------
unsigned char local_ip[] = {192,168,1,2}; // IP address of WiShield
unsigned char gateway_ip[] = {192,168,1,1}; // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network
const prog_char ssid[] PROGMEM = {"ASYNCLABS"}; // max 32 bytes

unsigned char security_type = 0; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2

// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {"12345678"}; // max 64 characters

// WEP 128-bit keys
// sample HEX keys
prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3
};

// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
unsigned char wireless_mode = WIRELESS_MODE_INFRA;

unsigned char ssid_len;
unsigned char security_passphrase_len;
// End of wireless configuration parameters ----------------------------------------


// This is our page serving function that generates web pages
boolean sendMyPage(char* URL) {
  
    // Check if the requested URL matches "/"
    if (strcmp(URL, "/") == 0) {
        // Use WiServer's print and println functions to write out the page content
        WiServer.print("<html>");
        WiServer.print("Hello World!");
        WiServer.print("</html>");
        
        // URL was recognized
        return true;
    }
    // URL not found
    return false;
}


void setup() {
  // Initialize WiServer and have it use the sendMyPage function to serve pages
  WiServer.init(sendMyPage);
  
  // Enable Serial output and ask WiServer to generate log messages (optional)
  Serial.begin(57600);
  WiServer.enableVerboseMode(true);
}

void loop(){

  // Run WiServer
  WiServer.server_task();
 
  delay(10);
}

e la mia domanda è:

i valori che vorrei ritrovarmi sulla pagina internet, li posso inserire direttamente in questestringhe di codice?:

WiServer.print("<html>");
        WiServer.print("Hello World!");   //QUESTA IN PARTICOLARE//
        WiServer.print("</html>");

e quindi, riprendendoli dallo sketch del mio arduino, mi basterebbe inserire questi parametri?:

lcd.print(sensors.getTempCByIndex(2));  --> diventerebbe --> WiServer.print(sensors.getTempCByIndex(2))
lcd.print(sensors.getTempCByIndex(1));                 -->          WiServer.print(sensors.getTempCByIndex(1))
lcd.print((sensors.getTempCByIndex(0));                -->          WiServer.print((sensors.getTempCByIndex(0))


Spero di non scrivere cavolate, sto cercando di capire se la scrittura di dati su pagina web è simile nelle istruzioni a quella che si usa per impartire comandi ai display come il mio..


riassumendo in soldoni:

Se nel mio programma Arduino legge e riporta sul display 3 temperature in I2C sul pin 10 e volessi fargliele anche riportare sulla web page che lui mi crea apposta mi basterebbe implementare nel mio codice finito quello relativo alla wifi shield ed aggiungere i parametri che deve mandare online?

dovrebbe venire una cosa così:

 WiServer.print("<html>");
 WiServer.print("Temperature");
 WiServer.print(sensors.getTempCByIndex(2))
 WiServer.print(sensors.getTempCByIndex(1))
 WiServer.print(sensors.getTempCByIndex(0))
 WiServer.print("</html>");


ottenendo così un risultato del genere aprendo la pagina web:

Temperature
24.05
26.59
40.23

                                                 ?
 

scusate l'elementarità della domanda... ad avere arduino mega e la shield avrei provato direttamente io...
        
« Last Edit: February 07, 2012, 05:42:16 am by luca56 » Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2313
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,

Quote
guarda, considerando la possibile implementazione di altre funzioni passo all'arduino mega e taglio la testa al toro... e quello che ho lo utilizzo per progettini nel tempo libero.

oook

Quote
Se nel mio programma Arduino legge e riporta sul display 3 temperature in I2C sul pin 10 e volessi fargliele anche riportare sulla web page che lui mi crea apposta mi basterebbe implementare nel mio codice finito quello relativo alla wifi shield ed aggiungere i parametri che deve mandare online?

dovrebbe venire una cosa così:

 WiServer.print("<html>");
 WiServer.print("Temperature");
 WiServer.print(sensors.getTempCByIndex(2))
 WiServer.print(sensors.getTempCByIndex(1))
 WiServer.print(sensors.getTempCByIndex(0))
 WiServer.print("</html>");

sostanzialmente sì.
Magari dovrai scriverci un poco di html di contorno.
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sono arrivato a questo risultato... dovrebbe andare bene.

purtroppo non ho la possibilità di testarlo perché non ho né la wifi shield né l'ethernet... ad occhio dovrebbe funzionare, comunque, no?

Code:


#include <OneWire.h>
#include "Wire.h"
#include <DallasTemperature.h>
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#define ONE_WIRE_BUS 10


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);




byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address
byte ip[] = {
  192, 168, 1, 4 }; // ip arduino
byte gateway[] = {
  192, 168, 1, 1 }; // router
byte subnet[] = {
  255, 255, 255, 0 }; //subnet mask
Server server(80); //server port


String readString; //string


void setup(){
  Ethernet.begin(mac, ip, gateway, subnet);

  Serial.begin(9600);
}

void loop(){

  sensors.requestTemperatures();



  /*inizio client*/
  Client client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readString.concat(c); //store characters to string
        //if HTTP request has ended
        if (c == '\n' && currentLineIsBlank) {
          Serial.print(readString);
        }

        // COSTRUZIONE PAGINA HTML
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println();
        // inizializzo pagina
        client.print("<html><head><title>ARDUINO web prova temp</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
        //body
        client.println("<div style='width:640px; height:960px;'>"); //risoluzione per iphone 4-4S
        client.println("<h1>Temperatura</h1><hr />");
        
        client.println("<p>TEMPERATURA = ");
        client.print(sensors.getTempCByIndex(2));
        client.println(" C <br /></p>");

      }  


      // link per aggiornare pagina e valori
      client.print("<h2>AGGIORNA SENSORI: <a href=''>CHECK</a></h2><hr />");



      // firma
      //client.println("<hr />");
      //client.print("<h4>Visita <a href='http://www.giannifavilli.it' target='_blank' />www.giannifavilli.it</a></h4>");
      //client.println("<hr />");

      // chiudo il div
      client.println("</div>");
      // chiudo pagina da togliere se uso ajax
      client.println("</body></html>");

      // pulisco la stringa per la successiva lettura
      readString="";
      //fermo il client
      client.stop();

    } //if c == /n
  } // if client available
} // while client connesso



Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2313
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
purtroppo non ho la possibilità di testarlo perché non ho né la wifi shield né l'ethernet...

non ho guardato bene il codice (aspetto pure che lo testi  smiley-grin), ma ho notato che è fatto per una Arduino Ethernet  o con Ethernet Shield (o analoga).
Questo codice va modificato per essere utilizzato con shield WiFi da te linkato...
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si si infatti, è che è l'unico esempio che non mi da errori sull'IDE 22; gli altri mi davano tutti errore ma non capisco di che tipo:



aspetto di provarla


* Schermata 02-2455965 alle 12.20.29.png (48.91 KB, 643x713 - viewed 37 times.)
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ultima domandina: stavo cercando qualche informazione in più e mi sono accorto che dopo tutto non è poi così complicato trovare uno shift register per pilotare l'lcd... mi chiedevo se pervaso uno di questi potesse andare bene...

http://it.rs-online.com/web/c/?sra=oss&searchTerm=74HC595&x=0&y=0

nello specifico mi riferisco al secondo della texas instr; quello da 0,25€
Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2313
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
si, dovrebbe andare bene, ma se devi prendere pochi componenti, ti consiglio la baia.

Potresti usare anche un 74LS164N, trovi cmq schemi, libreria ed esempi nel link che ti ho passato qualche post fa:
http://code.google.com/p/arduinoshiftreglcd/
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao ragazzi, allora è tutto a posto... Comprata e configurata la shield... E funziona tutto ma riceve il segnale solo fino a qualche metro dal router, quindi devo aggiungere un'antenna esterna... Qualcuno mi sa dire dove e come vada innestata per favore? Il modello da me acquistato è quello che ho lincato sopra da futura shop
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, un'altra cosa: come posso capire quali pin utilizza su Arduino?
Logged

Pages: [1] 2   Go Up
Jump to: