Pin Arduino nano 33 iot

Ciao a tutti,

Sto utilizzando un arduino nano 33 iot e vorrei capire quali pin non utilizzare per non disturbare la comunicazione con il Cloud.

Poiche tempo fa avevo letto da qualche parte che alcuni pin non dovevanl essere usati se veniva usato online.

Grazie mille per l'aiuto

Lorenzo

:warning:
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato.
Grazie.

Mi raccomando ... NON è la prima volta che sbagli sezione e costringi uno dei moderatori ad occuparsi del tuo post ... presta più attenzione e memorizzati in un bookmark la setione Italiana del forum.
Ti rammento che il reiterarsi dell'errore potrebbe portare alla sospensione dell'account.
Grazie.

Guglielmo

Non sono a conoscenza della cosa ... hai già letto tutta la documentazione ufficiale disponibile QUI? magari trovi qualche info ... :roll_eyes:

Guglielmo

P.S.: invece mi sembra importante questa nota che è nella documentazione:

NOTE: As opposed to other Arduino Nano boards, pins A4 and A5 have an internal pull up and default to be used as an I2C Bus so usage as analog inputs is not recommended.

Ho letto questo:

L'Arduino Nano 33 IoT utilizza il modulo u-blox NINA-W102, che gestisce la connessione Wi-Fi e la comunicazione con il cloud. Per evitare interferenze con questa comunicazione, dovresti evitare di utilizzare i seguenti pin:

  1. Pin 0 (RX) e Pin 1 (TX) – Sono collegati alla porta seriale hardware (Serial1) usata per la comunicazione con il modulo NINA-W102. Evita di collegare dispositivi esterni su questi pin.

  2. Pin 5 (GPIO05) e Pin 6 (GPIO06) – Sono usati internamente per la comunicazione tra il microcontrollore (SAMD21) e il modulo Wi-Fi.

  3. SPI (MISO, MOSI, SCK, SS) – Se usi la comunicazione SPI per altri dispositivi, assicurati di non disturbare il modulo Wi-Fi, che potrebbe usare questi pin per il funzionamento.

  4. I²C (SDA, SCL - Pin A4, A5) – Se devi usare dispositivi I²C, fai attenzione a possibili interferenze se il modulo Wi-Fi lo utilizza per la gestione interna.

  5. Pin A6 e A7 – Sono collegati internamente al circuito di alimentazione e al sensore IMU; modificarne l'uso potrebbe compromettere il funzionament.

Cos'è una risposta di ChatGPT? DOVE hai letto queste cose?

Guglielmo

Questo è lo schema:

... basta che segui i collegamenti per verificare :roll_eyes:

Guglielmo

Putroppo non sono capace di leggerli.

Sapresti aiutarmi,?

Grazie

Le due file di connettori sulla destra in basso sono i pin della scheda ...

... il primo ed il secondo a destra (1 e 2) vedi come si chiamano? TX ed RX (la seriale Serial1) e ... guarda un po' dove vanno? Sul D21G18 (che è la MCU) sui pin PB22 e PB23, marcati anche loro TX ed RX ... ti sembra che vadano al NINA-W102 (in alto a destra) ??? NO, al NINA vanno i pin marcati TX_NINA_PROG e RX_NINA_PROG, che vanno su PA22 e PA23 della MCU ed i pin marcati PA12_S2_TX/MOSI e PA13_S2_RX/MISO che vanno su PA13 e PA12 della MCU ... quindi?

Quanto scritto al punto 1. è una emerita bojata ... :roll_eyes:

Per gli altri punti puoi seguire lo stesso procedimento ...
... ma NON mi hai ancora risposto ... DOVE hai preso quelle indicazioni???

Guglielmo

Quelle che ho messo da Chat gbt ma non risultavano corrette in quanto mi ero segnao prima di iniziare il progetto di non i pin D10/11/12/13 solo che non trovo piu il sito dove ho letto questa cosa.

Vi spiego il mio problema.

Ho creato una porta scorrevole in legno che si muove tramite una cremagliera e un modode modulato con alduino tramite un MOS, tutto questo funziona in locale.

Quando vado a mettete lo stesso codice su arduino could funziona tutto se gestito con Alexa ma il pulsante a muro funziona in modo instabile.

Quindi ho pensato potesse essere colpa, di aver utilizzato pin che non si puo.

Se volete posso condividere il codice, ora sono tramite il cellulare.

Grazie per l'aiuto

Se guardi la mappa dei pin sui documenti che ti ho detto che DEVI STUDIARE vedrai che quelli sono i pin del bus SPI PA16, PA17 e PA18) ... se usi qualche cosa che fa uso di tale bus, ovviamente NON li puoi usare, ma ... il NINA-W102 NON usa quei pin per il bus SPI ma usa PA12, PA13, PA14 e PA15 e quindi non c'entra ...

... li il punto 3. era giusto ... ti diceva le stesse cose che ti dico ora io ... se usi il bus SPI non li devi usare, altrimenti son utilizzabili.

Guglielmo

Prova a metterlo ... almeno gli si può dare un'occhiata ... ma ...
... che NON sia codice generato con ChatGPT ... perché, in tal caso, meglio che lo butti e ricominci da capo :roll_eyes:

Guglielmo

No sia il codice che Hardware sono un mio progetto ma purtroppo non capisco questo cambio di comportamento fra ONline e OFFLine, vi metto di seguito il codice:


#include "thingProperties.h"

#define RELAY_PIN_2 2  // pin D2 relè
#define RELAY_PIN_3 3  // pin D3 relè
#define RELAY_PIN_4 4  // pin D4 relè
#define RELAY_PIN_5 5  // pin D5 relè

#define MOS_PIN_6 6  // pin D6 come pin per la modulazione PWM del MOS

#define SBLOCCO_PIN_7 7 // pin D7 come pin per la gestione del lucchetto

#define FINECORSA_PIN_1 A0  // pin analogico A0
#define FINECORSA_PIN_2 A1  // pin analogico A1
#define PULSANTE_PIN_3 A2  //  pin analogico A2

int finecorsa1Value;
int finecorsa2Value;
int PulsanteValue;
int PulsanteValue1;

bool StatoApertura1;
bool StatoChiusura2;
bool StatoPulsante;
bool StatoPulsanteFine;
bool StatoApertura1Cambio;
bool StatoChiusura2Cambio;

bool StatoRele_2;
bool StatoRele_3;
bool StatoRele_4;
bool StatoRele_5;

int PrimoCiclo = 0;

//Tempo e PWM

int t0 = 0;
int tm = 1000;

int ymin = 145;
int ymax = 250;

int y = 0; // Variabile PWM

unsigned long tCorrente = 0;
unsigned long t; // Variabile tempo

int AvvioTempo = 0;


void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500); 

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
 */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();

  pinMode(RELAY_PIN_2, OUTPUT); 
  pinMode(RELAY_PIN_3, OUTPUT); 
  pinMode(RELAY_PIN_4, OUTPUT); 
  pinMode(RELAY_PIN_5, OUTPUT); 
  pinMode(MOS_PIN_6, OUTPUT); 
  pinMode(SBLOCCO_PIN_7, OUTPUT); 
   
  digitalWrite(RELAY_PIN_2, HIGH);
  digitalWrite(RELAY_PIN_3, HIGH);
  digitalWrite(RELAY_PIN_4, HIGH);
  digitalWrite(RELAY_PIN_5, HIGH);

  
}







void loop() {
  ArduinoCloud.update();
  // Your code here 

finecorsa2Value = analogRead(FINECORSA_PIN_1); // Leggo se chiusa
finecorsa1Value = analogRead(FINECORSA_PIN_2); // Leggo se aperta


StatoApertura1 = (finecorsa1Value < 900); // Se Vero allora la porta è Aperta
StatoChiusura2 = (finecorsa2Value < 900); // Se Veru allora la porta è Chiusa

StatoRele_2 = digitalRead(RELAY_PIN_2);
StatoRele_3 = digitalRead(RELAY_PIN_3);
StatoRele_4 = digitalRead(RELAY_PIN_4);
StatoRele_5 = digitalRead(RELAY_PIN_5);

//Serial.println("Rele 2");
//Serial.println(StatoRele_2);
//Serial.println("Rele 3");
//Serial.println(StatoRele_3);
//Serial.println("Rele 4");
//Serial.println(StatoRele_4);
//Serial.println("Rele 5");
//Serial.println(StatoRele_5);

//Serial.println("Apertura");
//Serial.println(finecorsa1Value);
//Serial.println("Cniusura");
//Serial.println(finecorsa1Value);
//Serial.println("Ciclo");
//Serial.println(PrimoCiclo);

//Serial.println("Velocità rotazione");
//Serial.println(y)//;

//delay(500);

/////////////////////// Gestisco all'accensione il caso in cui la porta non sia ne chiusa ne aperta

if (StatoApertura1 == HIGH && StatoChiusura2 == HIGH && PrimoCiclo == 0) {

  // Apro se è a metà corsa appena accesa quindi al primo ciclo (Ciclo 0)
  
 
  digitalWrite(RELAY_PIN_2, LOW); 
  digitalWrite(RELAY_PIN_4, LOW);
  
  y = 145;
  analogWrite(MOS_PIN_6, y);

///////////////// Se quando accendo la porta è completamente aperta o chiusa vado a saltare tutta la parte della porta ne chiusa ne aperta

}else if (StatoApertura1 == LOW && PrimoCiclo == 0) {

  digitalWrite(RELAY_PIN_2, HIGH); 
  digitalWrite(RELAY_PIN_4, HIGH);
  PrimoCiclo = 1;
  //Serial.println("INIZIO CHIUSO");

  y = 0;
  analogWrite(MOS_PIN_6, y);

}else if (StatoChiusura2 == LOW && PrimoCiclo == 0) {

  digitalWrite(RELAY_PIN_3, HIGH); 
  digitalWrite(RELAY_PIN_5, HIGH);
  PrimoCiclo = 1;

  y = 0;
  analogWrite(MOS_PIN_6, y);
  //Serial.println("INIZIO APERTO");
}

//////////// Logiche di apertura e chiusura dopo pre ciclo di accensione

PulsanteValue = analogRead(PULSANTE_PIN_3); //Leggo lo stato del pulsante

StatoPulsante = (PulsanteValue > 300); // Se Veru allora la porta è Chiusa

if (StatoApertura1 == LOW && PrimoCiclo == 1 && (StatoPulsanteFine != StatoPulsante || porta == LOW)) {  // Se aperta, non è primo ciclo e cambiato lo stato del pulsante

// Chiude la porta se completamente aperta

 if(AvvioTempo == 0) { 

   tCorrente = millis();
  // Serial.println("Tempo partito");
 }

  t = millis() - tCorrente;
 
  digitalWrite(RELAY_PIN_2, HIGH); 
  digitalWrite(RELAY_PIN_4, HIGH);

  //delay(250);

  digitalWrite(RELAY_PIN_3, LOW); 
  digitalWrite(RELAY_PIN_5, LOW);

  StatoPulsanteFine = StatoPulsante;
  
  AvvioTempo = 1;

}else if (StatoChiusura2 == LOW && PrimoCiclo == 1 && (StatoPulsanteFine != StatoPulsante || porta == HIGH)) {  // Se chiusa, non è primo ciclo e cambiato lo stato del pulsante

// Apre la porta se completamente chiusa

 if(AvvioTempo == 0) { 

   tCorrente = millis();
 }

  t = millis() - tCorrente;
  
  digitalWrite(SBLOCCO_PIN_7, HIGH); //Apro il lucchetto prima di tutto

  //delay(250);

  digitalWrite(RELAY_PIN_3, HIGH); 
  digitalWrite(RELAY_PIN_5, HIGH);
  digitalWrite(SBLOCCO_PIN_7, HIGH);
  
  //delay(250);
  
  digitalWrite(RELAY_PIN_2, LOW); 
  digitalWrite(RELAY_PIN_4, LOW);

  StatoPulsanteFine = StatoPulsante;
  
  AvvioTempo = 1;  //Resetto la funzione

  

}else if (StatoRele_2 == LOW && StatoApertura1 == HIGH && StatoChiusura2 == HIGH && PrimoCiclo == 1 && StatoPulsanteFine != StatoPulsante) {  // Se in movimento di Apertura, non è primo ciclo e cambiato lo stato del pulsante

//Inverto la corsa se premo pulsante durante la manovra

  digitalWrite(RELAY_PIN_2, HIGH); 
  digitalWrite(RELAY_PIN_4, HIGH);

  //delay(250);

  digitalWrite(RELAY_PIN_3, LOW); 
  digitalWrite(RELAY_PIN_5, LOW);
  
  y = 145;
  analogWrite(MOS_PIN_6, y);

  AvvioTempo = 0;  //Resetto la funzione

}else if (StatoRele_3 == LOW && StatoApertura1 == HIGH && StatoChiusura2 == HIGH && PrimoCiclo == 1 && StatoPulsanteFine != StatoPulsante) {  // Se in movimento di Chiusura, non è primo ciclo e cambiato lo stato del pulsante

//Inverto la corsa se premo pulsante durante la manovra

  
  analogWrite(MOS_PIN_6, y);
  digitalWrite(RELAY_PIN_3, HIGH); 
  digitalWrite(RELAY_PIN_5, HIGH);

  //delay(250);

  digitalWrite(RELAY_PIN_2, LOW); 
  digitalWrite(RELAY_PIN_4, LOW);

  y = 145;
  analogWrite(MOS_PIN_6, y);

}

//Blocco di manovra se arriva a fine corsa

if (StatoApertura1 == LOW && StatoApertura1Cambio == HIGH && PrimoCiclo == 1) {

  digitalWrite(RELAY_PIN_3, HIGH); 
  digitalWrite(RELAY_PIN_5, HIGH);
  digitalWrite(RELAY_PIN_2, HIGH); 
  digitalWrite(RELAY_PIN_4, HIGH);

  digitalWrite(SBLOCCO_PIN_7, LOW); //Sgancio il lucchetto

  y = 0;
  analogWrite(MOS_PIN_6, y);

  AvvioTempo = 0;  //Resetto la funzione

  
}

if (StatoChiusura2 == LOW && StatoChiusura2Cambio == HIGH && PrimoCiclo == 1) {

  digitalWrite(RELAY_PIN_3, HIGH); 
  digitalWrite(RELAY_PIN_5, HIGH);
  digitalWrite(RELAY_PIN_2, HIGH); 
  digitalWrite(RELAY_PIN_4, HIGH);

  
  digitalWrite(SBLOCCO_PIN_7, LOW); //Sgancio il lucchetto

  y = 0;
  analogWrite(MOS_PIN_6, y);

  AvvioTempo = 0;  //Resetto la funzione

  
}

//////////////////////////////////

if (t > 0) {

  if (t < tm) {
    t = millis() - tCorrente;
    y = ((ymax - ymin)*t/tm)+ ymin;
    analogWrite(MOS_PIN_6, y);
    //Serial.println("Cresce");
    
  }else if (t > tm && t < 2*tm) {
    t = millis() - tCorrente;
    y = ((ymin-ymax)*((t-tm)/tm))+ymax;
    analogWrite(MOS_PIN_6, y);
    //Serial.println("Diminuisce");
    
  }
  
}


StatoPulsanteFine = StatoPulsante;
StatoApertura1Cambio = StatoApertura1;
StatoChiusura2Cambio = StatoChiusura2;
  
  
}


/*
  Since Porta is READ_WRITE variable, onPortaChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onPortaChange()  {
  // Add your code here to act upon Porta change
}

Spero di non aver fatto danni nel copiarlo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.