Buongiorno, sto cercando di far funzionare insieme su MKRWAN 1310 le due schede MKRGPS e MKRENV.
Come ho letto in altri post, utilizzando i programmi di esempio, funzionano bene separatamente ma non quando sono insieme. Credo di aver capito che il problema nasce dalla comunicazione IC2 perché il GPS è sempre in ascolto. Chiedo se qualcuno ha avuto lo stesso problema e l'ha risolto.
Grazie
Benvenuta nella sezione Italiana del forum
Cortesemente, leggi attentamente il REGOLAMENTO di detta sezione:
[REGOLAMENTO] Come usare questa sezione del forum
e poi, come da suddetto regolamento (punto 16.7), fai la tua presentazione IN CODA ALL'APPOSITA DISCUSSIONE:
Presentazioni nuovi iscritti: fatevi conoscere da tutti! (Part 2)
spiegando bene quali esperienze hai in elettronica e in programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie
Alex
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento, nessuno ti risponderà (eventuali risposte, o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto.
Mi scuso per non essermi presentata. Sono un'insegnante di matematica e fisica ed utilizzo Arduino per gli esperimenti di fisica. Non ho conoscenze elevate in informatica ma sono disposta a studiare. Di nuovo grazie a quanti vorranno aiutarmi.
Ti ringrazio, e complimenti per lo spirito (oltre che per il mestiere di insegnante, che ritengo uno dei più importanti ) anche perché matematica e fisica sono anche le mie passioni.
Però la presentazione dovresti farla nell'apposita area, quella che ti avevo indicato, perché è lì che la cercano i moderatori e gli altri utenti. Se si chiede la presentazione NON è per chissà quale strana curiosità ma è perché, prima di rispondere, si va a vedere chi si ha di fronte e si cerca di adattare la risposta alla sua preparazione, quindi, più completa è, più chi risponde sa fino a che punto spingersi.
Clicca quindi ora sul link:
Presentazioni nuovi iscritti: fatevi conoscere da tutti! (Part 2)
quindi sul pulsante "Reply" in fondo:
ed inserisci la tua presentazione.
Ancora benvenuta!
Allora io non ho esperienza diretta con queste schede.
Vedo dallo schema che si può dialogare con il GPS tramite seriale TX(9)/RX(8) della 1310, oppure dal connettore J3 Wire Sensor Connector della GPSshield, tu come dialoghi con la GPSshield?
Se dialoghi con la seriale non ci dovrebbero essere problemi con i sensori SPI/I2c a bordo della MKRENV.
La libreria che sto visionando è: Arduino_MKRGPS.h
che usa la seriale.
Posta il codice che usi per testare entrambe le shield, cioè quello che dici che non funziona bene.
Dal codice si riescono a ricavare molte informazioni.
PS: vero che le sentenze nmea sparano sempre dati però in questo caso c'è la possibilità di chiamare il metodo: void end();
Ciao.
/*
MKR ENV Shield - Read Sensors
This example reads the sensors on-board the MKR ENV Shield
and prints them to the Serial Monitor once a second.
The circuit:
- Arduino MKR board
- Arduino MKR ENV Shield attached
This example code is in the public domain.
*/
#include <Arduino_MKRENV.h>
#include <Arduino_MKRGPS.h>
#include<SD.h>
#include<SPI.h>
int pinsdcard=4;
File file;
float latitude;
float longitude;
float altitude;
float speed;
int satellites;
float dateTime;
float temperature;
float humidity;
float pressure;
float illuminance;
void setup() {
Serial.begin(9600);
while (!Serial);
// INIZIALIZZAZIONE E CONTROLLO ENV
while (!Serial); {
if (!ENV.begin()) {
Serial.println("ERRORE ENV!! CONTROLLARE");
while (1);
}
}
// INIZIALIZZAZIONE E CONTROLLO SD CARD
if (!SD.begin(pinsdcard)) {
Serial.println("INIZIALIZZAZIONE SD CARD FALLITA O SD CARD NON PRESENTE");
while (1);
}
Serial.println("SD OK.");
file = SD.open("DATI.txt", FILE_WRITE); // APERTURA FILE SD CARD
if(file) {
// stampa nomi dati su sd
file.println("TEMPERATURA(°C)\t PRESSIONE(KPa)\t UMIDITA'(%)\t IRRAGGIAMENTO(lux)\t latitudine\t longitudine\t\t altitudine(m)\t\t velocità(km/h)");
file.close();
} else {
Serial.println("ERRORE APERTURA SD CARD");
}
// stampa nomi dati su seriale
Serial.println("TEMPERATURA(°C)\t PRESSIONE(KPa)\t UMIDITA'(%)\t IRRAGGIAMENTO(lux)\t latitudine\t\t longitudine\t\t altitudine(m)\t\t velocità(km/h)");
// INIZIALIZZAZIONE E CONTROLLO GPS
if(!GPS.begin()){
Serial.println(" ERRORE GPS");
while(1);
}
}
void loop() {
// read all the sensor values
temperature = ENV.readTemperature();
humidity = ENV.readHumidity();
pressure = ENV.readPressure();
illuminance = ENV.readIlluminance();
// check if there is new GPS data available
delay(5000);
if (GPS.available()) {
// read GPS values
latitude = GPS.latitude();
longitude = GPS.longitude();
altitude = GPS.altitude();
speed = GPS.speed();
satellites = GPS.satellites();
delay(500);
}
// STAMPA DATI SU SERIALE
Serial.print(temperature);
Serial.print("\t\t\t");
Serial.print(pressure);
Serial.print("\t\t");
Serial.print(humidity);
Serial.print("\t\t");
Serial.print(illuminance);
Serial.print("\t\t\t");
Serial.print(latitude, 7);
Serial.print("\t\t");
Serial.print(longitude,7);
Serial.print("\t\t");
Serial.print(altitude);
Serial.print("\t\t");
Serial.print(speed);
Serial.println("\t\t");
// print an empty line
Serial.println();
file = SD.open("DATI.txt", FILE_WRITE); // APERTURA FILE SD CARD
// SCRITTURA DATI SU SD CARD
if (file) {
file.print(temperature);
file.print("\t\t\t");
file.print(pressure);
file.print("\t\t");
file.print(humidity);
file.print("\t\t");
file.print(illuminance);
file.print("\t\t");
file.print(latitude,7);
file.print("\t\t");
file.print(longitude,7);
file.print("\t");
file.print(altitude);
file.print("\t");
file.print(speed);
file.println("\t\t");
file.close();
}else{
Serial.print("ERRORE SCRITTURA DATI SU SD CARD");
}
// wait 1 second to print again
delay(1000);
}
La MKR GPS è collegata tramite un'interfaccia I2C con un cavo ESLOV in dotazione. Grazie
Non posso testare lo sketch che mi sembra corretto.
Quale problema riscontri di preciso, puoi incollare qui il contenuto del serial monitor?
L'unico modo che ho per aiutarti è l'analisi del codice delle librerie e al momento non ho notato nulla che possa creare problemi.
Ciao.
Il contenuto del serial monitor presenta tutti i dati della SHIELD ENV e tutti zeri sui valori del GPS. Verifica fatta più volte all’aperto. Il GPS da solo funziona benissimo ma con l’ENV no, proprio non aggancia nulla. Mi sono convita, anche leggendo altri post, che il problema è nella comunicazione IC2 usata da entrambi. Ho provato ad inserire GPS.begin() , GPS.end(), ENV.begin() , ENV. end() pensando scioccamente di garantire la comunicazione ad una SHIELD per volta ma niente.
void loop() {
// read all the sensor values
temperature = ENV.readTemperature();
humidity = ENV.readHumidity();
pressure = ENV.readPressure();
illuminance = ENV.readIlluminance();
// check if there is new GPS data available
if (GPS.available()) {
// read GPS values
latitude = GPS.latitude();
longitude = GPS.longitude();
altitude = GPS.altitude();
speed = GPS.speed();
satellites = GPS.satellites();
// STAMPA DATI SU SERIALE
Serial.print(temperature);
Serial.print("\t\t\t");
Serial.print(pressure);
Serial.print("\t\t");
Serial.print(humidity);
Serial.print("\t\t");
Serial.print(illuminance);
Serial.print("\t\t\t");
Serial.print(latitude, 7);
Serial.print("\t\t");
Serial.print(longitude,7);
Serial.print("\t\t");
Serial.print(altitude);
Serial.print("\t\t");
Serial.print(speed);
Serial.println("\t\t");
}
}
[/quote]
Prova questo loop ridotto al minimo se non stampa nulla il metodo available() restituisce sempre false e non esegue il blocco della if.
Il ragionamento che seguo è il seguente:
I device slave sono schiavi e non possono impegnare il bus in modo arbitrario per cui via i2c è il master che interroga i device e questi rispondo al master.
Mentre quando ci si collega tramite seriale TTL con il GPS questo spara sentenze e riempe il buffer software della seriale se non si legge con read().
Ciao.
No, non funziona. Non stampa nulla, quindi non entra nell'IF.
if (!GPS.begin(GPS_MODE_UART)) {
Serial.println(" ERRORE GPS");
while(1);
}
Con questa configurazione dovrebbe lavorare con la seriale ma serve avere la schield impilata nella 1310.
Ciao.
Finalmente sono riuscita a fare la prova impilando la shield (sopra la ENV). Non ho una risposta semplice funziona/non funziona. Ci sono state delle prove dove aspettando molto in effetti ho visto i dati ma per la maggior parte delle volte niente di niente. Io ho provato sempre nella stessa zona e nelle medesime condizioni. Tra l'altro provando senza la ENV agganciava subito il GPS. Insomma non capisco.
Lasciando tutto impilato puoi verificare che non sia la scheda ENV a dare fastidio.
Quindi commenti questa porzione di codice:
// read all the sensor values
temperature = ENV.readTemperature();
humidity = ENV.readHumidity();
pressure = ENV.readPressure();
illuminance = ENV.readIlluminance();
Considera anche che normalmente è sufficiente interrogare i sensori della ENV ogni secondo usando millis(). In questo modo il ciclo di loop è più rapido e in un secondo il GPS verrà interrogato 100 volte o più.
Io escludo che ci sia incompatibilità tra ENV e GPS adesso a maggior ragione se hai usato il codice al post #12. Con questa inizializzazione il GPS dialoga con la mkr via seriale TTL, mentre la ENV continua ad usare il bus I2c.
Ciao.
Io ti ringrazio tantissimo dell’aiuto che mi stai dando. Stasera ho un dubbio atroce…che si sia scaricata la pila! Ma non posso provarne una nuova fino a mercoledì!
mmmh...di che pila stiamo parlando, non sarà per caso la pila Radio da 9v vero?
Ciao.
Quella batteria è connessa al pin V_BCKP del modulo ublox e serve solo per mantenere i dati della ultima posizione. In effetti trovo poche info riguardanti la batteria a bottone, devo leggere nuovamente il datasheet dell'ublox.
Da cosa sorge il dubbio sulla batteria scarica?
Ciao.
Dal fatto che io ho visto comparire dei dati dopo che avevo inserito UART come mi hai suggerito. Ma una volta poi non più. Questo esito mi sembra strano.
1.17.2 Real-Time Clock (RTC)
The RTC is driven by a 32 kHz oscillator using an RTC crystal. If the VCC_IO voltage fails, and a battery
is connected to V_BCKP, parts of the receiver switch off, but the RTC still runs providing a timing
reference for the receiver. This operating mode is called Hardware Backup Mode, which enables all
relevant data to be saved in the backup RAM to allow a hot or warm start later.
Dal datasheet:
https://content.u-blox.com/sites/default/files/SAM-M8Q_DataSheet_(UBX-16012619).pdf
In breve la sua funzione sembra equiparabile a quella che si usa con un RTC tipo DS3231.
Inoltre il manuale dice che l'antenna incorporata lavora meglio con un gran piano di massa, ipotizzo intenda qualcosa di metallo connesso a GND (terra giallo/verde), ma non saprei dire, non ho esperienza diretta.
Ma nello stesso punto il GPS del cellulare lavora correttamente?
Ciao.