Schede Raspberry Pi Pico e rp2040: pinout, specifiche e configurazione IDE Arduino – 1
È 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
- 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.
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: 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: high-resolution pinout and specs
WeAct Studio rp2040 Pico
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.
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: 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
.
Ora puoi andare su: e cercare “Pico” .Tools --> Boards ... --> Boards manager
Ora puoi selezionare la tua scheda rp2040
Alternativa gestore della scheda Arduino IDE
Arduino offre anche un’alternativa al gestore URL rp2040 già visto, puoi andare su: e cercare “mbed rp2040” .Tools --> Boards ... --> Boards manager
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
o così
Le altre schede hanno un pulsante di ripristino integrato e devi semplicemente eseguire questi passaggi:
- Premere il pulsante BOOTSEL;
- Premere e rilasciare il pulsante Reset;
- 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.
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.
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.
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
- Schede Raspberry Pi Pico e rp2040: pinout, specifiche e configurazione IDE Arduino
- Schede Raspberry Pi Pico e rp2040: filesystem LittleFS integrato
- Scheda Raspberry Pi Pico e rp2040: ethernet w5500 e requests HTTP e HTTPS (SSL)
- Schede Raspberry Pi Pico e rp2040: WiFiNINA con coprocessore WiFi ESP32
- Schede Raspberry Pi Pico e rp2040: come utilizzare una scheda SD
- Dallas ds18b20
- Collegamento dell’EByte E70 ai dispositivi Raspberry Pi Pico (rp2040) ed un semplice sketch di esempio