Schede Raspberry Pi Pico e rp2040: pinout, specifiche e configurazione IDE Arduino – 1

Spread the love

Raspberry Pi Pico, W, and other rp2040 boards: pinout specs Arduino IDE configuration
Raspberry Pi Pico, W, and other rp2040 boards: pinout specs Arduino IDE configuration

È tempo di esplorare la nuova serie di microcontrollori basati sul chip rp2040 della Raspberry Pi Foundation. Come al solito, utilizzeremo l’IDE Arduino generico ed il linguaggio C.

Introduzione

Raspberry Pi Foundation ha progettato un nuovo chip chiamato RP2040. Il chip è dotato di un processore Arm Cortex-M0+ dual-core con 264kB di RAM interna e supporto per un massimo di 16 MB di flash off-chip. Un’ampia gamma di opzioni I/O flessibili: include I2C, SPI e I/O programmabile (PIO).

Dopo un po’ di tempo e circa due milioni di dispositivi venduti, Raspberry Pi ha rilasciato anche la versione W con WiFi per offrire una soluzione IoT.

Here my selection of rp2040 boards Official Pi Pico - Official Pi Pico W - Waveshare rp2040-zero - WeAct Studio rp2040

Specifiche delle schede rp2040

rp2040 structure block diagram
rp2040 structure block diagram
  • Doppio ARM Cortex-M0+ a 133 MHz
  • SRAM su chip da 264 kB in sei banche indipendenti
  • Supporto per un massimo di 16 MB di memoria Flash off-chip tramite bus QSPI dedicato
  • Controllore DMA
  • Traversa AHB completamente collegata
  • Periferiche interpolatore e divisore di interi
  • LDO programmabile su chip per generare una tensione del core
  • 2 PLL su chip per generare clock USB e core
  • 30 pin GPIO, di cui 4 utilizzabili come ingressi analogici
  • periferiche
    • 2 UART
    • 2 controller SPI
    • 2 controller I2C
    • 16 canali PWM
    • Controller USB 1.1 e PHY, con supporto per host e dispositivo
    • 8 macchine a stati PIO

rp2040 identifica il tipo di chip, quindi ci aspettiamo che questo sia il primo di una lunga serie. Nel codice puoi leggere il numero di core, la variante del processore, la ram, ecc. Guarda il diagramma.

rp2040 code identification
rp2040 code identification

AIROC CYW43439 di Infineon

Solo per il Raspberry Pi Pico W possiamo controllare le specifiche del coprocessore WiFi.

WiFi

  • Wi-Fi 4 (802.11n), banda singola (2,4 GHz);
  • 1×1 SISO;
  • Canali a 20 MHz, velocità dati PHY fino a 96 Mbps;
  • Lo switch PA, LNA e T/R interno integrato supporta un’unica antenna condivisa tra Wi-Fi e Bluetooth.

Bluetooth (non attivo ora)

  • Funzionamento in Classe 1 (100 m) e Classe 2 (10 m);
  • Bluetooth® 5.2;
  • Supporta BDR (1Mbps), EDR (2/3Mbps) e Bluetooth® LE.

Raspberry Pi Pico

La primogenita è la scheda Pico che ha una buona quantità di pin e un form factor adatto per breadboard.

Raspberry Pi Pico rp2040 pinout low resolution
Raspberry Pi Pico rp2040 pinout low resolution

Raspberry Pi Pico: high-resolution pinout and specs

PINs

Pins di alimentazione

  • VBUS  – tensione di ingresso micro-USB
  • VSYS  – tensione di ingresso del sistema principale
  • 3V3  – uscita regolata 3,3V,  300mA max
  • GND  – riferimento di massa principale
  • AGND  – riferimento di massa per GP26-29 e  ADC0  e  ADC1

GPIO Pins

  • Da GP0  a  GP28: uscita di ingresso per uso generico (GPIO) e modulazione di larghezza di impulso (PWM)

I2C Pins

  • SCL0 – I2C port 0 clock
  • SDA0 – I2C port 0 data
  • SCL1 – I2C port 1 clock
  • SDA1 – IC2 port 1 data

SPI Pins

  • SCLK0 – SPI port 0 clock
  • MOSI0 – SPI port 0 data out
  • MISO0 – SPI port 0 data in
  • SCLK1 – SPI port 1 clock
  • MOSI1 – SPI port 1 data out
  • MISO1 – SPI port 1 data in

ADC Pins

  • ADC0  – Convertitore da analogico a digitale (ADC) 0
  • ADC1  – Convertitore da analogico a digitale (ADC) 1
  • ADC2  – Convertitore da analogico a digitale (ADC) 2

Raspberry Pi Pico W

La versione W ha le stesse specifiche di Pico ma con un coprocessore AIROC CYW43439 di Infineon per ottenere una connessione Wi-Fi.

Raspberry Pi Pico W pinout
Raspberry Pi Pico W pinout

Raspberry Pi Pico W: high-resolution pinout and specs

WeAct Studio rp2040 Pico

WeAct Studio RP2040 pinout
WeAct Studio RP2040 pinout

WeAct Studio rp2040: high-resolution pinout and specs

WeAct Studio è una fabbrica che costruisce una scheda di ottima qualità, e pubblico già le varianti STM32F4 Black pill (WeAct STM32F411CEU6 Black-Pill  WeAct STM32F401CCU6), qui propongono un clone Raspberry Pi Pico con dimensione della flash selezionabile.

WeAct Studio RP2040 Pico
WeAct Studio RP2040 Pico

Oltre al Raspberry Pi Pico, qui abbiamo:

  • Connettore USB di tipo C
  • Pulsante BOOTSEL e pulsante Reset
  • Pulsante utente
  • La porta di debug include un pin 3V3 per alimentare la scheda
  • 2 MB, 4 MB, 8 MB o 16 MB di flash
  • Pinout simile ma non identico

Waveshare rp2040-zero

Un’altra alternativa con un fattore dimensionale ridotto è proposta da Waveshare.

Waveshare rp2040-zero pinout
Waveshare rp2040-zero pinout

Waveshare rp2040-zero: high-resolution pinout and specs

Configurazione IDE Arduino

Prima di tutto, devi aggiungere questo URL

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

agli URL del tuo gestore di bacheche aggiuntive in File --> Preferences.

Raspberry Pi Pico w rp2040 board url manager on Arduino IDE
Raspberry Pi Pico w rp2040 board URL manager on Arduino IDE

Ora puoi andare su: e cercare “Pico” .
Tools --> Boards ... --> Boards manager

Raspberry Pi Pico w rp2040 board manager Arduino IDE
Raspberry Pi Pico w rp2040 board manager Arduino IDE

Ora puoi selezionare la tua scheda rp2040

Arduino IDE select Raspberry Pi Pico rp2040 boards
Arduino IDE select Raspberry Pi Pico rp2040 boards

Alternativa gestore della scheda Arduino IDE

Raspberry Pi Pico W
Raspberry Pi Pico W

Arduino offre anche un’alternativa al gestore URL rp2040 già visto, puoi andare su: e cercare “mbed rp2040” .
Tools --> Boards ... --> Boards manager

Arduino mbed rp2040 board manager Arduino IDE
Arduino mbed rp2040 board manager Arduino IDE

Ma sconsiglio questo approccio. Puoi avere problemi.

Modalità di caricamento

Una piccola nota sulla modalità di caricamento su dispositivi simili a Raspberry Pi Pico. Per le schede ufficiali, puoi seguire due approcci, per me molto noiosi.

Per accedere alla modalità di caricamento, puoi:

  • scollegare la scheda e poi ricollegarla premendo il pulsante BOOTSEL;
  • aggiungi un pulsante di ripristino (o usa un singolo filo) in questo modo
Reset button on Raspberry Pi Pico rp2040
Reset button on Raspberry Pi Pico rp2040

o così

Bottone reset su Raspberry Pi Pico rp2040 su run reset
Bottone reset su Raspberry Pi Pico rp2040 su run reset

Le altre schede hanno un pulsante di ripristino integrato e devi semplicemente eseguire questi passaggi:

  1. Premere il pulsante BOOTSEL;
  2. Premere e rilasciare il pulsante Reset;
  3. Rilascia il pulsante BOOTSEL.

Primo sketch

Sketch Blink per Pi Pico, W e WeAct rp2040

È possibile utilizzare uno sketch di lampeggio standard per Raspberry Pi Pico, W e WeAct Studio rp2040.

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

Per le schede ufficiali, puoi selezionare la scheda dall’elenco.

Raspberry Pi Pico
Raspberry Pi Pico

Per WeAct Studio rp2040, se hai solo 2Mb di flash, puoi selezionare la scheda Raspberry Pi Pico, altrimenti puoi selezionare una scheda rp2040 generica e quindi la dimensione della flash corretta.

Arduino IDE select Generic rp2040 board and correct flash size
Arduino IDE select Generic rp2040 board and correct flash size.

LED RGB su Waveshare rp2040-zero

C’è una situazione diversa per Waveshare rp2040-zero che ha un led RGB integrato.

Ora andiamo a gestire il led RGB indirizzabile (LED RGB indirizzabile (WS2812), pilotato da GPIO16) installato sulla scheda.

È necessario installare la libreria Adafruit_NeoPixel.h dal gestore delle librerie.

Ecco il semplice sketch:

/*
 *  Here a simple sketch to test the upload on Waveshare rp2040-zero.
 *  The addressable RGB LED (WS2812), driven by GPIO16 need
 *  Adafruit NeoPixel library
 *  by Mischianti Renzo <https://mischianti.org>
 *
 *  https://mischianti.org/
 *
 */

#include <Adafruit_NeoPixel.h>
#define PIN 16
#define NUMPIXELS 1
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

enum {NONE, RED, GREEN, BLUE};
int ledColor = NONE;

void setup()
{
  pixels.begin();
}

void loop()
{
  switch (ledColor) {
    case NONE:
      pixels.setPixelColor(0, pixels.Color(0, 0, 0));
      pixels.show();
      break;
    case RED:
      pixels.setPixelColor(0, pixels.Color(20, 0, 0));
      pixels.show();
      break;
    case GREEN:
      pixels.setPixelColor(0, pixels.Color(0, 20, 0));
      pixels.show();
      break;
    case BLUE:
      pixels.setPixelColor(0, pixels.Color(0, 0, 20));
      pixels.show();
      break;
    default:
      break;
  }

  ledColor++;
  if (ledColor == 4) {
    ledColor = NONE;
  }

  delay(1000);
}

E questo è il risultato.

Waveshare rp2040-zero
Waveshare rp2040-zero

Test di rete con Raspberry Pi Pico W

Vado a mostrare lo sketch per la scansione della rete per Raspberry Pi Pico W.

// Simple WiFi network scanner application
// Released to the public domain in 2022 by Earle F. Philhower, III
#include <WiFi.h>

void setup() {
  Serial.begin(115200);
}

const char *macToString(uint8_t mac[6]) {
  static char s[20];
  sprintf(s, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
  return s;
}

const char *encToString(uint8_t enc) {
  switch (enc) {
    case ENC_TYPE_NONE: return "NONE";
    case ENC_TYPE_TKIP: return "WPA";
    case ENC_TYPE_CCMP: return "WPA2";
    case ENC_TYPE_AUTO: return "AUTO";
  }
  return "UNKN";
}

void loop() {
  delay(5000);
  Serial.printf("Beginning scan at %d\n", millis());
  auto cnt = WiFi.scanNetworks();
  if (!cnt) {
    Serial.printf("No networks found\n");
  } else {
    Serial.printf("Found %d networks\n\n", cnt);
    Serial.printf("%32s %5s %17s %2s %4s\n", "SSID", "ENC", "BSSID        ", "CH", "RSSI");
    for (auto i = 0; i < cnt; i++) {
      uint8_t bssid[6];
      WiFi.BSSID(i, bssid);
      Serial.printf("%32s %5s %17s %2d %4d\n", WiFi.SSID(i), encToString(WiFi.encryptionType(i)), macToString(bssid), WiFi.channel(i), WiFi.RSSI(i));
    }
  }
  Serial.printf("\n--- Sleeping ---\n\n\n");
  delay(5000);
}

E il risultato è:

Beginning scan at 16543
Found 7 networks

                            SSID   ENC     BSSID         CH RSSI
                reef-casa-centro  WPA2 00:E0:20:74:B4:99  6  -76
                 reef-casa-sotto  AUTO 04:95:E6:81:67:51 11  -82
                    TIM-18355607  WPA2 20:B0:01:18:15:97 11  -82
                 reef-casa-sopra  WPA2 4C:ED:FB:1C:8C:10  1  -44
                   Vodafone-WiFi  NONE 92:16:05:19:3F:D2  2  -92
                  reef-casa-orto  AUTO C8:3A:35:C3:8F:F1  8  -49
                reef-casa-centro  WPA2 F0:B0:14:79:6D:70  6  -62

--- Sleeping ---

Grazie

  1. Schede Raspberry Pi Pico e rp2040: pinout, specifiche e configurazione IDE Arduino
  2. Schede Raspberry Pi Pico e rp2040: filesystem LittleFS integrato
  3. Scheda Raspberry Pi Pico e rp2040: ethernet w5500 e requests HTTP e HTTPS (SSL)
  4. Schede Raspberry Pi Pico e rp2040: WiFiNINA con coprocessore WiFi ESP32
  5. Schede Raspberry Pi Pico e rp2040: come utilizzare una scheda SD

Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *