Outils pour utilisateurs

Outils du site


start:arduino:esp32:spi:start

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
start:arduino:esp32:spi:start [2022/11/15 04:36] – [Présentation du protocole de communication ESP32 SPI] gerardadminstart:arduino:esp32:spi:start [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 10: Ligne 10:
 {{ :start:arduino:esp32:spi:spi-communication.png?direct&600 |}} {{ :start:arduino:esp32:spi:spi-communication.png?direct&600 |}}
  
 +
 +Vous ne pouvez avoir qu'un seul maître , qui sera un microcontrôleur (l'ESP32), mais vous pouvez avoir plusieurs esclaves. Un esclave peut être un capteur, un écran, une carte microSD, etc., ou un autre microcontrôleur. Cela signifie que vous pouvez avoir un ESP32 connecté à plusieurs capteurs, mais le même capteur ne peut pas être connecté à plusieurs cartes ESP32 simultanément.
 +
 +
 +====Interface SPI====
 +
 +Pour la communication SPI, vous avez besoin de quatre lignes :
 +
 +    ***MISO** : Master In Slave Out
 +    ***MOSI** : sortie maître entrée esclave
 +    ***SCK** : Horloge Série
 +    ***CS / SS** : Chip Select (utilisé pour sélectionner l'appareil lorsque plusieurs périphériques sont utilisés sur le même bus SPI)
 +
 +Sur un appareil uniquement esclave, comme les capteurs, les écrans et autres, vous pouvez trouver une terminologie différente :
 +
 +    *MISO peut être étiqueté comme SDO (Serial Data Out)
 +    *MOSI peut être étiqueté comme SDI (Serial Data In)
 +
 +====Périphériques ESP32 SPI====
 +
 +L'ESP32 intègre 4 périphériques SPI : SPI0, SPI1, SPI2 (communément appelé HSPI ) et SPI3 (communément appelé VSPI ).
 +
 +SP0 et SP1 sont utilisés en interne pour communiquer avec la mémoire flash intégrée, et vous ne devez pas les utiliser pour d'autres tâches.
 +
 +Vous pouvez utiliser HSPI et VSPI pour communiquer avec d'autres appareils. HSPI et VSPI ont des signaux de bus indépendants et **chaque bus peut piloter jusqu'à trois esclaves SPI.**
  
  
Ligne 28: Ligne 53:
 Remarque : généralement, lorsqu'elles ne sont pas spécifiées, la carte utilise les broches VSPI lors de l'initialisation d'une communication SPI avec les paramètres par défaut. Remarque : généralement, lorsqu'elles ne sont pas spécifiées, la carte utilise les broches VSPI lors de l'initialisation d'une communication SPI avec les paramètres par défaut.
 </note> </note>
 +
 +=====Trouver les broches SPI par défaut de votre carte ESP32=====
 +
 +Si vous n'êtes pas sûr des broches SPI par défaut de votre carte, vous pouvez télécharger le code suivant pour le savoir.
 +
 +<code c brochesspi.ino>
 +/*
 +  Rui Santos
 +  Complete project details at https://RandomNerdTutorials.com/esp32-spi-communication-arduino/
 +  
 +  Permission is hereby granted, free of charge, to any person obtaining a copy
 +  of this software and associated documentation files.
 +  
 +  The above copyright notice and this permission notice shall be included in all
 +  copies or substantial portions of the Software.
 +*/
 +
 +//Find the default SPI pins for your board
 +//Make sure you have the right board selected in Tools > Boards
 +void setup() {
 +  // put your setup code here, to run once:
 +  Serial.begin(115200);
 +  Serial.print("MOSI: ");
 +  Serial.println(MOSI);
 +  Serial.print("MISO: ");
 +  Serial.println(MISO);
 +  Serial.print("SCK: ");
 +  Serial.println(SCK);
 +  Serial.print("SS: ");
 +  Serial.println(SS);  
 +}
 +
 +void loop() {
 +  // put your main code here, to run repeatedly:
 +}
 +</code>
 +
 +Important : assurez-vous de sélectionner la carte que vous utilisez dans Outils > carte , sinon vous risquez de ne pas obtenir les bonnes broches.
 +
 +Après avoir téléchargé le code, ouvrez le moniteur série, RST votre carte et vous verrez les broches SPI.
 +
 +{{ :start:arduino:esp32:spi:capture_d_ecran_du_2022-11-15_04-46-53.jpg?direct&600 |}}
 +
 +
 +====Utilisation de broches ESP32 SPI personnalisées====
 +
 +Lorsque vous utilisez des bibliothèques pour vous interfacer avec vos périphériques SPI, il est généralement simple d'utiliser des broches SPI personnalisées car vous pouvez les transmettre en tant qu'arguments au constructeur de la bibliothèque.
 +
 +Par exemple, jetez un coup d'œil à l'exemple suivant qui s'interface avec un capteur [[https://randomnerdtutorials.com/esp32-bme280-arduino-ide-pressure-temperature-humidity/|BME280]] en utilisant la bibliothèque. **Adafruit_BME280** 
 +
 +
 +<code c bibliothequeadafruitexempleOO1.ino>
 +
 +
 +/*
 +  Rui Santos
 +  Détails complets du projet sur https://RandomNerdTutorials.com/esp32-spi-communication-arduino/
 +  Basé sur l'exemple Adafruit_BME280_Library : https://github.com/adafruit/Adafruit_BME280_Library/blob/master/examples/bme280test/bme280test.ino
 +
 +  Permission est accordée, sans frais, à toute personne obtenant une copie
 +  de ce logiciel et des fichiers de documentation associés.
 +  
 +  L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans tous
 +  des copies ou des parties substantielles du Logiciel.
 +*/
 +
 +#comprendre
 +    
 +#comprendre
 +    
 +     
 +#comprendre
 +     
 +      
 +
 +#comprendre
 +      
 +       
 +#define BME_SCK 25
 +#define BME_MISO 32
 +#define BME_MOSI 26
 +#define BME_CS 33
 +#define SEALEVELPRESSURE_HPA (1013.25)
 +
 +//Adafruit_BME280bme ; // I2C
 +//Adafruit_BME280 bme(BME_CS); // SPI matériel
 +Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // logiciel SPI
 +
 +délai long non signé ;
 +
 +void setup() {
 +  Série.begin(9600);
 +  Serial.println(F("BME280 test"));
 +
 +  état booléen ;
 +
 +  // paramètres par défaut
 +  // (vous pouvez également passer un objet de bibliothèque Wire comme &Wire2)
 +  status = bme.begin();  
 +  si (!statut) {
 +    Serial.println("Impossible de trouver un capteur BME280 valide, vérifiez le câblage !");
 +    tandis que (1);
 +  }
 +
 +  Serial.println("-- Test par défaut --");
 +  delayTime = 1000 ;
 +
 +  Serial.println();
 +}
 +
 +
 +boucle vide() {
 +  printValeurs();
 +  retard(delayTime);
 +}
 +
 +void printValues() {
 +  Serial.print("Température = ");
 +  Serial.print(bme.readTemperature());
 +  Serial.println(" *C");
 +  
 +  // Convertir la température en Fahrenheit
 +  /*Serial.print("Temperature = ");
 +  Serial.print(1.8 * bme.readTemperature() + 32);
 +  Serial.println(" *F");*/
 +  
 +  Serial.print("Pression = ");
 +  Serial.print(bme.readPressure() / 100.0F);
 +  Serial.println(" hPa");
 +
 +  Serial.print("Altitude approximative = ");
 +  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
 +  Serial.println(" m");
 +
 +  Serial.print("Humidité = ");
 +  Serial.print(bme.readHumidity());
 +  Serial.println(" %");
 +
 +  Serial.println();
 +}
 +</code>
 +
 +Vous pouvez facilement transmettre vos broches SPI personnalisées au constructeur de la bibliothèque.
 +      
 +<code c biblio002.ino>
 +Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
 +</code>   
 +
 +Dans ce cas, j'utilisais les broches SPI suivantes (pas par défaut) et tout fonctionnait comme prévu :
 +
 +<code c biblio003.ino>
 +#define BME_SCK 25
 +#define BME_MISO 32
 +#define BME_MOSI 26
 +#define BME_CS 33
 +</code>
 +
 +Si vous n'utilisez pas de bibliothèque, ou si la bibliothèque que vous utilisez n'accepte pas les broches du constructeur de bibliothèque, vous devrez peut-être initialiser le bus SPI vous-même. Dans ce cas, vous devrez appeler leSPI.begin()méthode sur lamettre en place()et passez les broches SPI en arguments :
 +
 +<code c bliblio004.ino>
 +SPI.begin(SCK, MISO, MOSI, SS);
 +</code>
 +
 +Vous pouvez voir un exemple de ce scénario dans ce tutoriel , dans lequel nous initialisons un émetteur-récepteur SPI LoRa qui est connecté à des broches SPI personnalisées. Ou cet exemple montrant comment utiliser des broches SPI personnalisées avec un module de carte microSD .  
 +    
 +====== Liens web ======
 +
 +[[https://microcontrollerslab.com/esp32-spi-communication-tutorial-arduino/|ESP32 SPI autres exemples]]
 +
 +[[https://projetsdiy.fr/esp32-gpio-broches-fonctions-io-pwm-rtc-i2c-spi-adc-dac/|broches GPIO ESP32 references]]
 +
 +
 +
/home/chanteri/www/fablab37110/data/attic/start/arduino/esp32/spi/start.1668483408.txt.gz · Dernière modification : 2023/01/27 16:08 (modification externe)