Ciao,
ho provato a fare un semplice programma di test per utilizzare con la scheda Giga R1 le fionzionalità IoT messe a disposizione da Arduino e tutto funziona correttamente.
Poi quando invece inserisco le stesse istruzioni all'interno di un codice molto più lungo e complesso, la connessione non va mai a buon fine e soprattutto fa ripartire la procedura Setup() e non riesco a capire come mai.
Grazie a chiunque possa darmi un aiuto.
Alesandro
La Giga R1 è una "brutta bestia" per niente facile da programmare e, sicuramente, NON è adatta a chi si avvicina per la prima volta al mondo Arduino ... se avessi scelto una delle schede "classiche" (tra quelli che supportano Arduino Cloud), avresti avuto sicuramente molti meno problemi.
La Giga R1 funziona in ambiente Mbed OS (un sistema operativo per quel tipo di MCU) e, se si violano alcune regole del sistema operativo ... è facile che vada in crash (cosa descritta anche nel Arduino GIGA R1 Cheat Sheet)
Per il tuo problema, senza vedere il codice (che, come da REGOLAMENTO, va racchiuso nei tag CODE) è difficile poter anche solo immaginare dove è il problema ... a questo aggiungi che, nella sezione Italiana del forum, che usano la Giga R1 ... sono veramente in pochi ![]()
Volendo, puoi porre la domanda, nella SEZIONE internazionale dedicata a tale scheda (sezione dove però è d'obbligo scrivere SOLO in lingua Inglese) ... li, ovviamente, molta più gente può aiutarti ... vedi tu ... ![]()
Guglielmo
Intanto ti ringrazio anche per la celerità della risposta. Ho provato poco fa a scrivere nella sezione dedicata a GIGA R1 in inglese, vediamo se qualcuno mi risponde. Però goà mi hai dato una informazione che non avevo ovvero che la scheda può andare in crash che è quello che mi succede.
In verità avevo iniziato con la scheda UNO R4 wifi con la quale per la verità mi trovavo benissimo, ma dovendo gestire un numero di pin digitali più elevato di quelli disponibili sulla scheda sono dovuto migrare sulla GIGA. Sto costruendo un impianto antizanzare e devo pilotare 7 relay, uno schermo lcd, un tastierino, un orologio esterno, una eprom esterna e 4 sensori a ultrasuoni.
Invece come facico per allegare il codice, con TAG? non so come fare.
grazie ancora
Alessandro
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <RTClib.h>
const char SSID[] = "FASTWEB-Smart";
const char PASS[] = "ad2467";
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
void setup() {
Serial.begin(9600); // per comunicare con il video del PC
delay(1500);
initProperties(); // attiva le variabili IoT
ArduinoCloud.begin(ArduinoIoTPreferredConnection); // Si collega con Arduino IoT Cloud
setDebugMessageLevel(2);
//ArduinoCloud.printDebugInfo();
do { // ciclo di attesa per wifi connessa correttamente
delay(100);
} while (WiFi.status() != 3);
lcd.init(); // inizializza lo schermo LCD
lcd.backlight();
lcd.noBacklight();
Wire.begin(); // inizializza la comunicazione con il bus I2C numero 0 (quello collegato ai pin 20 e 21 della R1 GIGA)
while (!Serial) {} // Attendi che la comunicazione I2C sia disponibile
rtc.begin(); // apre la comunicazione con l'orologio con batteria
pinMode(PIN_TRIGGER_SP1, OUTPUT);
pinMode(PIN_ECHO_SP1, INPUT);
pinMode(PIN_TRIGGER_SP2, OUTPUT); // !!!!! DA CAMBIARE APPENA ARRIVANO I SENSORi A ULTRASUONI
pinMode(PIN_ECHO_SP2, INPUT); // !!!!! DA CAMBIARE APPENA ARRIVANO I SENSORi A ULTRASUONI
pinMode(PIN_TRIGGER_SM1, OUTPUT); // !!!!! DA CAMBIARE APPENA ARRIVANO I SENSORi A ULTRASUONI
pinMode(PIN_ECHO_SM1, INPUT); // !!!!! DA CAMBIARE APPENA ARRIVANO I SENSORi A ULTRASUONI
pinMode(PIN_TRIGGER_SM2, OUTPUT); // !!!!! DA CAMBIARE APPENA ARRIVANO I SENSORi A ULTRASUONI
pinMode(PIN_ECHO_SM2, INPUT); // !!!!! DA CAMBIARE APPENA ARRIVANO I SENSORi A ULTRASUONI
pinMode(PIN_P1, OUTPUT);
pinMode(PIN_P2, OUTPUT);
pinMode(PIN_PP, OUTPUT);
pinMode(PIN_EI1, OUTPUT);
pinMode(PIN_EI2, OUTPUT);
pinMode(PIN_EU1, OUTPUT);
pinMode(PIN_EU2, OUTPUT);
Comando_RELAY(PIN_P1, CHIUSO); // Chiuso per sicurezza tutti i relay
//delay(200);
Comando_RELAY(PIN_P2, CHIUSO); // Chiuso per sicurezza tutti i relay
//delay(200);
Comando_RELAY(PIN_PP, CHIUSO); // Chiuso per sicurezza tutti i relay
//delay(200);
Comando_RELAY(PIN_EI1, CHIUSO); // Chiuso per sicurezza tutti i relay
//delay(200);
Comando_RELAY(PIN_EI2, CHIUSO); // Chiuso per sicurezza tutti i relay
//delay(200);
Comando_RELAY(PIN_EU1, CHIUSO); // Chiuso per sicurezza tutti i relay
//delay(200);
Comando_RELAY(PIN_EU2, CHIUSO); // Chiuso per sicurezza tutti i relay
//delay(200);
}
eccola ce l'ho fatta
a pubblicare il codice.
Ne ho messa solo una piccola parte, di fatto non esce mai dal ciclo while del wifi.status() e dopo alcuni secondi fa il reboot
Vedo che comandi dei relè ... con Arduino, se non si prendono le dovute precauzioni, sono sempre problemi causa disturbi elettromagnetici, specie se pilotano carichi induttivi ... hai preso tutte le precauzioni necessarie? Snubber, alimentazioni separate, ove possibili diodi in anti parallelo, ecc. ecc. ?
Guglielmo
Mah ... c'erano varie strade da seguire ... tra cui utilizzare dei multiplexer digitali ... senza complicarsi la vita con Mbed OS e la complessità della Giga ![]()
Guglielmo
qui purtroppo sono completamente ignorante (pur avendo fatto in un lontano passato qualche studio al riguardo): i relay devono far funzionare 3 pompe e 4 elettrovalvole.
Se mi dici ad esempio diodi in anti parallelo, snubber, ecc, purtroppo credo mi manchi la conoscenza di base. Non so se c'è qualche articolo nel forum o qualche manuale che mi puoi consigliare per capire cosa sono e come inserirli.
L'unica cosa che stavo pensanodo è che in effetti il crash avviene prima di agire sui relay, non so se questo abbia qualche importanza però
Potrei eventualmente utilizzare un bus I2C?
Intanto ti rammento il REGOLAMENTO, punto 15 sui sottopunti ... se le pompe non lavorano a bassissima tensione ... qui NON possiamo aiutarti
... stesso discorso, spero lavorino a bassissima tensione e ... possono essere la maggiore causa di disturbi elettromagnetici.
Ci devi dare maggiori dettagli ![]()
Guglielmo
... ma lo leggete mai il punto 15.5 del REGOLAMENTO?
Le schede Arduino, come già discusso in altro thread, possono essere un punto di partenza, ma ... per applicazioni reali richiedono conoscenze, studio e progettazione o i problemi sono assicurati ![]()
Prova a leggere da QUI in poi ... ![]()
Guglielmo
Guglielmo
... me lo sono letto ora ops. in effetti lascheda arduino la vorrei utilizzare per questa centralina antizanzare che è alimentata tramite presa di corrente dalla rete di casa mia. Oramai però ho investito già alcune centinaia di euro su questa centralina e vorrei se possibile portarla a termine
due pompe sono a 12 volt, mentre la pompa principale e tutte e 4 le elettrovalevole sono a 220 volt
Come modulo relay ho acquistato questo modello "# AZDelivery 8 canali modulo Relay 5V con optoaccoppiatore Low-Level-Trigger compatibile con Arduino"
ecco un'altra informazione è che ne le pompe ne le elettroalvole sono ancora state collegate ai relay, quindi il problema iniziale non può dipendere dai carichi (o almeno non ancora)
Mi spiace, ma quando le collegherai ed avrai sicuramente altri problemi ... NON potrai chiedere aiuto qui ... il thread verrà immediatamente chiuso ![]()
Dura lex, sed lex
Guglielmo
... se metti il link si fa prima.
Guglielmo
Comunque, se è quello che vendono anche su Amazon ... subito una prima prova che puoi fare è separare le alimentazioni (completamente, incluso il GND, usando DUE alimentatori a 5V separati, uno per alimentare la scheda Arduino ed uno per la scheda relè):
... collegala così ... ovviamente avrai un funzionamento a logica invertita ... pin Arduino HIGH relè non attivo, pin Arduino LOW relè attivo.
Vedi se così facendo cambia qualche cosa ... ![]()
Guglielmo
P.S.:
Occhio però ... mi sembra che la GIGA lavora a 3.3V ... se è così, lato pin Arduino, NON devi collegare il 5V, ma il 3.3V !!! ![]()
Grazie mille Guglielmo, proverò a darci un'occhiata questo fine settimana
Buona giornata,
Alessandro
Ricorda comunque che le cause possono essere tante e magari NON derivanti solo dall'alimentazione dei relè ... ![]()
Guglielmo
