Outils pour utilisateurs

Outils du site


spi_documentation_2

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
spi_documentation_2 [2022/05/30 15:32] – [Communication entre Raspberry Pi et Arduino en SPI] sergespi_documentation_2 [2022/05/31 07:45] (Version actuelle) serge
Ligne 4: Ligne 4:
 </WRAP> </WRAP>
  
 +=====Une ESP32 n'est pas une carte Arduino=====
 +**Les sketchs ci-dessous ne fonctionnent pas avec une ESP32**
  
 +=====Exemple 1=====
 +https://roboticsbackend.com/raspberry-pi-master-arduino-uno-slave-spi-communication-with-wiringpi/
  
-=====!!!!!!!!!!!!!!!!!===== +Raspberry Pi (master) Arduino Uno (slave) SPI communication with WiringPi
-**!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**\\ +
-**!!!!!!!!!!!!!!!!!!!!!!C'est bourré d'erreur !!!!!!!!!!!!!!!!!!!!!!!**\\ +
-**!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**\\+
  
 +<code csharp>
 +#include <SPI.h>
 +void setup() {
 +  // have to send on master in, *slave out*
 +  pinMode(MISO, OUTPUT);
 +  // turn on SPI in slave mode
 +  SPCR |= _BV(SPE);
 +  // turn on interrupts
 +  SPI.attachInterrupt();
 +}
 +// SPI interrupt routine
 +ISR (SPI_STC_vect)
 +{
 +  byte c = SPDR;
 +  SPDR = c+10;
 +}  // end of interrupt service routine (ISR) for SPI
  
-=====Raspberry===== +void loop () { } 
-<code python [enable_line_numbers="true"]>+</code> 
 + 
 +**Raspberry Pi avec wiringPi** 
 +<code> 
 +#include <iostream> 
 +#include <wiringPiSPI.h> 
 +#define SPI_CHANNEL 0 
 +#define SPI_CLOCK_SPEED 1000000 
 +int main(int argc, char **argv) 
 +
 +    int fd wiringPiSPISetupMode(SPI_CHANNEL, SPI_CLOCK_SPEED, 0); 
 +    if (fd == -1) { 
 +        std::cout << "Failed to init SPI communication.\n"; 
 +        return -1; 
 +    } 
 +    std::cout << "SPI communication successfully setup.\n"; 
 +    
 +    unsigned char buf[2] { 23, 0 }; 
 +    wiringPiSPIDataRW(SPI_CHANNEL, buf, 2); 
 +    std::cout << "Data returned: " << +buf[1] << "\n";  
 +    return 0; 
 +
 +</code> 
 +Voir le lien pour la compilation de wiringPi et de ce script 
 + 
 +=====Exemple 2===== 
 +Tiré de [[http://www.penguintutor.com/electronics/rpi-arduino-spi|penguintutor.com Using Raspberry Pi and Arduino together through SPI serial communications]]**\\ 
 +Arduino: SPCR et SPDR pas défini ! 
 +====Raspberry==== 
 +<code python>
 import spidev import spidev
 import time import time
- 
 spi_bus = 0 spi_bus = 0
 spi_device = 0 spi_device = 0
Ligne 22: Ligne 67:
 spi.open(spi_bus, spi_device) spi.open(spi_bus, spi_device)
 spi.max_speed_hz = 1000000 spi.max_speed_hz = 1000000
- 
 # Send a null byte to check for value # Send a null byte to check for value
 send_byte = 0x80 send_byte = 0x80
Ligne 32: Ligne 76:
     print ("Unable to communicate with Arduino "+str(data_recv))     print ("Unable to communicate with Arduino "+str(data_recv))
     quit()     quit()
- 
- 
 # Data is sent as single bytearray # Data is sent as single bytearray
 # lower 4 bits = pin number # lower 4 bits = pin number
Ligne 48: Ligne 90:
         pin += 0x20         pin += 0x20
     return pin     return pin
- 
 # read analog pin # read analog pin
 def req_read_analog (pin): def req_read_analog (pin):
Ligne 54: Ligne 95:
         return 0xff         return 0xff
     return pin + 0x10     return pin + 0x10
- 
 # read digital pin # read digital pin
 def req_read_digital (pin): def req_read_digital (pin):
Ligne 60: Ligne 100:
         return 0xff         return 0xff
     return pin     return pin
- 
 while True: while True:
     # Turn LEDs on     # Turn LEDs on
Ligne 93: Ligne 132:
 </code> </code>
  
- +====Arduino==== 
-=====Arduino===== +<code csharp>
-<code csharp [enable_line_numbers="true"]>+
 #include <SPI.h> #include <SPI.h>
- 
 // track if digital pins are set as input or output (saves reading registers)  // track if digital pins are set as input or output (saves reading registers) 
 // Pins 0 to 9 can be used, pin 10 can be used for SS (but can be used if that's not required)  // Pins 0 to 9 can be used, pin 10 can be used for SS (but can be used if that's not required) 
 bool pin_output[11]; bool pin_output[11];
- 
 void setup()  void setup() 
 { {
Ligne 109: Ligne 145:
     pin_output[i] = false;       pin_output[i] = false;  
   }   }
-   
   // Set the Main in Secondary Out as an output   // Set the Main in Secondary Out as an output
   pinMode(MISO, OUTPUT);   pinMode(MISO, OUTPUT);
Ligne 116: Ligne 151:
   SPCR |= _BV(SPE);   SPCR |= _BV(SPE);
 } }
- 
- 
 void loop ()  void loop () 
-{ +{ char print_text [50];
-  char print_text [50];+
   byte in_byte;   byte in_byte;
   // SPIF indicates transmission complete (byte received)   // SPIF indicates transmission complete (byte received)
Ligne 148: Ligne 180:
     {     {
       SPDR = 0xFF;       SPDR = 0xFF;
-    } +    }}}
- +
-  } +
-}+
  
 byte set_digital_pin (byte address, bool high_value)  byte set_digital_pin (byte address, bool high_value) 
Ligne 178: Ligne 207:
     pin_output[address] = false;     pin_output[address] = false;
   }   }
-   
   return digitalRead (address);   return digitalRead (address);
 } }
- 
 // As full byte is used for value there is no invalid value // As full byte is used for value there is no invalid value
 // If invalid then returns 0x00 // If invalid then returns 0x00
spi_documentation_2.1653924748.txt.gz · Dernière modification : de serge