Jeder GPIO-Pin ("General Purpose Input Output") des Calliope kann grundsätzlich zwei Rollen einnehmen: Er kann als Ausgang ein angeschlossenes Bauteil (einen Aktor) ansteuern oder als Eingang ein angeschlossenes Bauteil (einen Sensor) auslesen. Dabei wird jeweils zwischen einer digitalen Variante mit nur zwei Zuständen (an/aus bzw. 0/1) und einer analogen Variante mit vielen Zwischenwerten (z. B. eine Zahl zwischen 0 und 1023) unterschieden. Insgesamt ergeben sich daraus vier Funktionen, die auf dieser Seite nacheinander vorgestellt werden.
Für die folgenden Beispiele wird dabei stets der Pin P0 gewählt. Aber auch die weiteren Pins verfügen in der Regel über die gleichen Funktionen. Zu beachten ist, dass einige Pins doppelt genutzt werden und daher vielleicht schon an anderer Stelle belegt sind. Eine Übersicht über alle Pins und deren Funktionen findet sich in der Dokumentation zu den Pins des Calliope v3.
Im folgenden Schaltplan ist eine LED über einen Vorwiderstand mit dem GPIO-Pin P0 verbunden. Der Pin wird als digitaler Aktor genutzt: Er gibt entweder die Spannung 3,3V oder die Spannung 0V aus.

Zunächst muss der Pin in der Konfiguration als digitaler Ausgang festgelegt werden:

Anschließend kann der Pin im Programm geschaltet werden:

# Imports go at the top
from calliopemini import *
# Code in a 'while True:' loop repeats forever
while True:
pin0.write_digital(1) # schalte Spannung 3,3V ein
sleep(1000) # warte 1000 Millisekunden
pin0.write_digital(0) # schalte Spannung aus (-> 0V)
sleep(1000) # warte 1000 Millisekunden
Im folgenden Schaltplan ist eine LED über einen Vorwiderstand mit dem GPIO-Pin P0 verbunden. Der Pin wird hier als analoger Aktor genutzt: Dabei wird sehr schnell zwischen 3,3V und 0V hin und her geschaltet. Der angegebene analoge Wert gibt an, wie lang die Phase mit 3,3V sein soll: Je größer die Zahl ist, desto länger ist die Phase mit 3,3V gegenüber 0V.

Zunächst muss der Pin in der Konfiguration als analoger Ausgang festgelegt werden:

Anschließend kann der Pin im Programm mit analogen Werten angesteuert werden:

# Imports go at the top
from calliopemini import *
# Code in a 'while True:' loop repeats forever
while True:
pin0.write_analog(1023) # schalte Spannung 3,3V dauerhaft ein
sleep(1000) # warte 1000 Millisekunden
pin0.write_analog(768) # schalte Spannung zu 3/4 ein
sleep(1000)
pin0.write_analog(512) # schalte Spannung zur Hälfte ein
sleep(1000)
pin0.write_analog(256) # schalte Spannung zu 1/4 ein
sleep(1000)
pin0.write_analog(0) # schalte Spannung aus
sleep(1000)
Im folgenden Schaltplan ist ein Taster mit dem GPIO-Pin P0 verbunden. Der Pin wird als digitaler Sensor genutzt.

Zunächst muss der Pin in der Konfiguration als digitaler Eingang festgelegt werden:

Anschließend kann der Pin im Programm ausgelesen werden:

# Imports go at the top
from calliopemini import *
import neopixel
np = neopixel.NeoPixel(pin_RGB, 3)
while True:
if pin0.read_digital() == 1:
np.fill((255, 255,0)) # grün
np.show()
else:
np.fill((255, 0, 0)) # rot
np.show()
Im folgenden Schaltplan ist ein Potentiometer mit dem GPIO-Pin P0 verbunden. Der Pin wird als analoger Sensor genutzt: Er liest nicht nur zwei Zustände, sondern viele Zwischenwerte von 0 bis 1023 ein, die die Stellung des Drehreglers widerspiegeln.

Zunächst muss der Pin in der Konfiguration als analoger Eingang festgelegt werden:

Anschließend kann der Pin im Programm ausgelesen werden:

# Imports go at the top
from calliopemini import *
import neopixel
np = neopixel.NeoPixel(pin_RGB, 3)
while True:
np.fill((255, 0, 0)) # rot
np.show()
sleep(pin0.read_analog()) # Leuchtzeit in ms so groß wie der Analogwert von P0
np.clear()
sleep(500)
Ein GPIO-Pin des Calliope kann vier verschiedene Rollen einnehmen:
Die Entscheidung, welche Funktion ein Pin einnimmt, hängt vom angeschlossenen Bauteil ab: Ein Bauteil, das Energie benötigt, um etwas zu tun, ist ein Aktor, und wird an einen Ausgang angeschlossen. Ein Bauteil, das Informationen über die Umgebung liefert, ist ein Sensor und wird an einen Eingang angeschlossen. Reicht dabei die Unterscheidung in zwei Zuständen aus, genügt die digitale Variante; werden Zwischenwerte benötigt, muss die analoge Variante verwendet werden.