Raspberry Pi Pico – Hello World

Ich bin ein bisschen spät, was den Raspberry Pi Pico betrifft. Er wurde vor knapp einem Jahr von der Raspberry Pi Foundation der Öffentlichkeit vorgestellt. Nach dem ersten Lesen der Spezifikation habe ich nicht so recht verstanden, wofür der eigentlich gut sein sollte, denn ähnliche Mikrocontroller gibt es schon. Vor allem der ESP32 schien für mich schon seit Jahren den Platz einzunehmen, den der RP2040 anstrebt. Und der ESP32 ist in nahezu allen Punkten besser, vor allem besitzt er auch Bluetooth und WiFi, so dass er bei weitem mehr mögliche Anwendungsgebiete abdeckt. Darum verlor ich sofort wieder das Interesse am Pico.

Betrachtet man allerdings das andere Ende des Mikrocontroller Markts für Anfänger, so ist da der Arduino Uno zu finden und im Vergleich zu diesem macht der Pico keine schlechte Figur mit seinen 133 MHz und zwei Kernen (Uno: 16 MHz und ein Kern).

Ohne weiteren Anbau benötigt der Raspberry Pi Pico weniger als 20 mA.

Bei genauerer Betrachtung findet man aus Sicht der Raspberry Pi Foundation noch ein anderes wichtiges Argument für den Pico: Deren Raspberry Pi Computer Serie kann nicht direkt Sensoren abfragen, die analoge Messgrößen zurück liefern, wie zum Beispiel einen Lichtwiderstand. Und auf den Raspberry Pis läuft normalerweise ein Betriebssystem wie Linux, mit dem nicht sichergestellt werden kann, Sensoren in Echtzeit abzufragen oder Aktuatoren wie Motoren in Echtzeit zu steuern. Darum wurde schon in der Vergangenheit zwischen Sensor und Raspberry Pi ein Arduino als – sozusagen – Vermittler eingesetzt.

Jetzt kann die Raspberry Pi Foundation mit dem Pico alles aus einer Hand anbieten!

Beim letzten Stöbern bei Banggood habe ich dort ein interessantes Produkt entdeckt. Einen RP2040 mit angelötetem Display! Ganz ähnlich wie das Lilygo TTGO T-Display, mit dem ich schon vieles entwickelt habe, wie ihr beim Stöbern auf meinem Blog entdecken werdet. Da habe ich mir gleich einmal 2 Stück bestellt!

Leider dauert die Lieferung, wie üblich bei einer Bestellung aus China, relativ lange und darum habe ich mir zwischendurch noch einen Raspberry Pi Pico bei Amazon gekauft, der heute angekommen ist.

Wie immer bei neuen Mikrocontrollern habe ich gleich ausprobiert, ob ich ihn über die Arduino IDE programmieren kann. Also einfach einmal den Pico über ein Micro-USB Kabel an den großen Computer gesteckt.

Jetzt hatte ich erwartet das Board unter ‘Werkzeuge->Port’ mit seiner ‘COM’-Nummer zu finden. Das war aber nicht der Fall. Stattdessen meldete sich ein neues Laufwerk im Windows-Explorer mit dem Namen ‘RPI-RP2’. Darin befinden sich zwei Dateien ‘INDEX.HTM’ und ‘INFO_UF2.TXT’. Aber in der Arduino IDE gab es keinen neuen Port den ich zum Flashen hätte verwenden können. Darum drückte ich jetzt einfach einmal den Taster ‘BOOTSEL’ direkt auf der Pico Platine und ein paar Sekunden später hatte ich in der Arduino-IDE einen neuen Port mit der Bezeichnung ‘COM17 (Raspberry Pi Pico)’. Bei Euch ist da natürlich nicht unbedingt ‘COM17’ zu sehen…

Nun habe ich der schon laufenden Arduino IDE über ‘Werkzeuge->Board->Boardverwalter…’ nach irgendetwas mit der Bezeichnung ‘Pico’ gesucht und den Eintrag ‘Arduino Mbed OS RP2040 Boards’ gefunden, den ich gleich installiert habe. Kurz darauf konnte ich unter ‘Werkzeuge->Arduino Mbed OS RP2040 Boards’ den ‘Raspberry Pi Pico’ auswählen.

Aus ‘Datei->Beispiele->01.Basics’ habe ich ‘Blink’ ausgewählt und mit dem kleinen Pfeil links oben in der IDE den Kompilier- und Flash-Vorgang gestartet.

Mein Pico läuft und blinkt im Sekundentakt!

Im Vergleich zu einem etwas älteren Adafruit Feather ESP12, ist der Pico etwas schmaler.

Ich hatte irgendwo gelesen, dass der Pico einen eingebauten Temperatursensor besitzt. Mal sehen, ob ich den irgendwie auslesen kann. Im RP2040 Datasheet habe ich Informationen zum intern verbauten Temperatur Sensor des Pico gefunden. Dort steht in Kapitel 4.9.5 eine Formel, mit der der vom Sensor zurück gegebene Wert in Grad Celsius umgerechnet werden kann:

T = 27 – (ADC_voltage – 0.706)/0.001721

Mit einem kleinen Programm kann ich die Temperatur auf der seriellen Schnittstelle ausgeben:

#include <hardware/adc.h>

// 12 bit conversion factor
const double convFactor = 3.3 / 4096; // Der ADC Eingang liefert Werte zwischen 0 und 4095 zurück
const double userCalibration = 4.0;

void setup() {
  Serial.begin (115200);
  adc_init();
  adc_set_temp_sensor_enabled (true);
  adc_select_input (4);
}

void loop() {
  while (true) {
    double sensorValue = adc_read() * convFactor;
    double temp = 27 - (sensorValue - 0.706) / 0.001721;
    Serial.println ("Temperature: %4.2f\n" + (String) (temp + userCalibration));
    sleep_ms(1000);
  }
}

Wenn ich den Pico anhauche, kann ich sehen wie die Temperatur langsam steigt. Da der Sensor aber direkt auf dem Board sitzt und durch so ein Board ja elektrischer Strom fließt, der wiederum zu Wärme führen kann, ist die angezeigte Temperatur nicht unbedingt die Umgebungstemperatur.

Mit der XTAR PB2S kann der Pico netzunabhängig betrieben werden.

Mit ein paar Ergänzungen ist es auch möglich die interne Versorgungsspannung anzuzeigen:

#include <hardware/adc.h>

// 12 bit conversion factor
// Der ADC Eingang liefert Werte zwischen -1 und 4096 zurück

const double convFactor = 3.3/4096;
const double userCalibration = 4.0;

void setup() {
  Serial.begin (115200);
  adc_init();
  adc_set_temp_sensor_enabled (true);
  pinMode(29, INPUT); / Für die Spannungsmessung
}

void loop() {
  while (true) {
    adc_select_input (4);
    double tempValue = adc_read() * convFactor;
    double temperature = 27 - (tempValue - 0.706) / 0.001721;
    Serial.println ("Temperature: " + (String) (temperature + userCalibration));
    adc_select_input (3);
    double voltageValue = adc_read()*3.0*3.3/4096; // adc_read()*3.0 * convFactor;
    Serial.println ("Voltage: " + (String) voltageValue);
    sleep_ms(1000);
  }
}

Bei den Recherchen zu diesem Artikel habe ich noch einen weiteren guten Grund für diesen Mikrocontroller gefunden. Es sind seine flexiblen Möglichkeiten zur Stromversorgung. Am Pin VSYS kann eine Spannung zwischen 1.8 V und 5.5 V angeschlossen werden! Das ermöglicht es, die Stromversorgung aus zwei AA Batterien, einem 3.7 V Lipo oder einer Powerbank sicherzustellen!

Mit einem Labornetzteil habe ich das ein wenig überprüft und tatsächlich läuft der Pico auch mit 1.8 V. Der Strom steigt dabei aber an.

Beim Elektor Magazin findet Ihr eine gute deutschsprachige Beschreibung des Pico.

 

 

 

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.