La Banana Pi BPI-PicoW-S3 è una dev-board con ESP32 che imita perfettamente la Raspberry Pi PicoW

Progettata proprio per emulare nelle dimensioni e nell’aspetto la Raspberry Pi PicoW, la Banana Pi BPI-PicoW-S3 è una dev-board con un microcontrollore ESP32-S3 con dimensioni ridotte, interfaccia pratica, facile da usare e può essere applicato direttamente a progetti IoT a basso consumo. Come tutte le dev-board della Banana Pi che abbiamo visto, anche la BPI-Pico-S3 è fornita di una comunicazione wireless dual-mode Wi-Fi a 2,4 GHz e Bluetooth® LE. Possiamo programmare questa scheda sia con la IDE di Arduino, che in MicroPython e CircuitPython.

Specifiche tecniche

La BPI-Picow-S3 possiede un microcontrollore ESP32-S3, Xtensa® LX7 a 32 bit , corredato da 2MB PSRAM8MB di memoria flash e connessione Wi-Fi 2.4GHz a 150 Mbps con standard IEEE 802.11 b/g/n, Bluetooth 5 e tensione di lavoro a 3,3V, sebbene sia possibile fornire alla scheda una tensione in ingresso di 5V. L’idea che ha portato alla creazione di questa scheda è ottenere una dev-board che in grado di lavorare anche con solo 10μA in deep sleep, adattandola a moltissimi progretti IoT.

LaBPI-PicoW-S3 possiede ben 39 pin, di cui i GPIO sono solo 27 e sono tutti programmabili sia digitalmente (compreso PWM a 8 canali) che analogicamente, mentre 8 pin sono solo per il GND.



Possiamo adoperare le diverse interfacce  I2C, SPI, RMT, I2S, UART, USB, JTAG, senza scordarci che la temperatura di esercizio di questa dev-board va dai -40℃ ai +85℃, facendone una scheda adoperabile in ogni circostanza.

Troviamo un connettore Micro-USB che svolge sia il ruolo di porta per caricare gli sketch, che per alimentare la scheda stessa. A differenza della BPI-Leafe-S3 che possedeva un connettore per la batteria e un sistema di ricarica integrato, la BPI-PicoW-S3 non ha questa particolarità.

Sulla BPI-PicoW-S3 troviamo anche inserito un LEG ARGB, collegato al pin 48, oltre al led  per l’alimentazione. Il LED ARGB è posizionato di fianco al pulsante di reset (RST). Manca un pulsante di Boot, sempre presente nella due schede della Banana Pi viste fin ora; sarà, difatti, necessario creare un cortocircuito tra i contatti del Boot per programmare la scheda.

Fase preliminare

La nostra BPI-PicoW-S3 è programmabile sia in MicroPython che con la IDE di Arduino. Passiamo a predisporre la IDE di Arduino per programmare la nostra ESP32 inserendo il link https://dl.espressif.com/dl/package_esp32_index.json nel percorso File -> Impostazioni e aggiungerlo alla voce URL aggiuntive per il gestore schede. 

ESP32

Una volta confermato tutto, muoviamoci sul menu Strumenti->Schede->Gestore schede.

ESP32

Quando la finestra sarà aperta, cerchiamo ESP32 e installiamo il pacchetto che ci appare.

ESP32

A questo punto muoviamoci per collegare la BPI-PicoW-S3 al computer;  creiamo un cortocircuito tra i contatti del BOOT mentre la dev-board non è ancora collegata, quindi connettiamola al computer tramite cavo USB e infine rilasciamo i contatti di BOOT. La dev-board entrerà in modalità di programmazione e apparirà nel menu Strumenti->Porta la COM per caricare lo sketch. Per caricare lo sketch selezioniamo dalla barra dei menu Strumenti->Scheda->esp32->ESP32S3 Dev Module.



Codice

Testiamo la scheda con alcuni sketch utilizzati per la BPI-Leaf-S3. Andiamo a testare la nostra BPI-PicoW-S3 realizzando un WebServer. Vi lasciamo il codice per provarlo di seguito [LINK], a cui dovete solo indicare l’SSID e la Password della vostra rete di casa.

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
const char* ssid = "XXXXXXXXXXX";
const char* password = "xxxxxxxxxxxxx";

WebServer server(80);

const int led = 13;

void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp32!");
  digitalWrite(led, 0);
}

void handleNotFound() {
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void) {
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp32")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);

  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  server.handleClient();
  delay(2);//allow the cpu to switch to other tasks
}

Stiamo andando a creare un WebServer, collegandoci al quale ci verrà fornito il messaggio di “hello from esp32!”. Per facilitarci nell’individuazione dell’indirizzo della scheda nella nostra rete Wi-Fi locale, basterà digitare l’indirizzo http://esp32.local sul nostro browser per verificare che tutto sia andato a buon fine.

 BPI-Leaf-S3



Infine, andiamo a provare il Led RGB. Sempre dalla IDE di Arduino, selezioniamo Strumenti-> Gestore librerie e cerchiamo la libreria Freenove WS2812 Lib for ESP32. Installiamola e muoviamoci sullo sketch Rainbox che troviamo al percorso File->Esempi->Freenove WS2812 Lib for ESP32. Una volta aperto lo sketch [LINK] modifichiamo un solo valore, ossia impostiamo come LEDS_PIN il pin 48.

#define LEDS_PIN 48

Carichiamo lo sketch e vedremo il LED cambiare colore.