Auf Grund der abweichenden Pinbelegungen zwischen BBC micro:bit und Calliope mini ist die Programmierung in Python gerade für I/O-Operationen nicht immer ohne Probleme. Die folgende Tabelle zeigt die Unterschiede:
nRF51822 |
micro:bit |
Calliope mini |
P0.00 |
SCL |
P0 |
P0.01 |
P2 |
P1 |
P0.02 |
P1 |
P2 |
P0.03 |
P0 |
P3 (MIC) |
P0.04 |
COL1 |
P4 (LED_C1) |
P0.05 |
COL2 |
P5 (LED_C2) |
P0.06 |
COL3 |
P6 (LED_C3) |
P0.07 |
COL4 |
P7 (LED_C4) |
P0.08 |
COL5 |
P8 (LED_C5) |
P0.09 |
COL6 |
P9 (LED_C6) |
P0.10 |
COL7 |
P10 (LED_C7) |
P0.11 |
COL8 |
P11 (LED_C8) |
P0.12 |
COL9 |
P12 (LEDC_9) |
P0.13 |
ROW1 |
P13 (LED_R1) |
P0.14 |
ROW2 |
P14 (LED_R2) |
P0.15 |
ROW3 |
P15 (LED_R3) |
P0.16 |
P16 |
P16 (TAST_B) |
P0.17 |
BTN A |
P17 (TAST_A) |
P0.18 |
P18 |
P18 (RGB LED) |
P0.19 |
TGT nRST |
P19 (SCL) |
P0.20 |
P20 |
P20 (SDA) |
P0.21 |
MOSI |
P21 (BMX055 INT) |
P0.22 |
MISO |
P22 |
P0.23 |
SCK |
P23 |
P0.24 |
TGT TxD |
P24 (TxD) |
P0.25 |
TGT RxD |
P25 (RxD) |
P0.26 |
BTN B |
P26 (Rx) |
P0.27 |
ACC INT2 |
P27 (Tx) |
P0.28 |
ACC INT1 |
P28 |
P0.29 |
MAG INT1 |
P29 |
P0.30 |
SDA |
P30 |
Zur Temperaturmessung möchte ich von folgendem Setup ausgehen.

Dezentrale Temperaturerfassung mit Calliope
Ein abgesetzter Calliope mini wird über ein Steckernetzteil am USB-Anschluss mit Spannung versorgt. Ein Temperatursensor LM35 erfasst die Temperatur im Bereich von 0 bis 150 °C. Hat man eine LM35 nicht zur Verfügung, dann kann anfangs auch mit dem internen Temperatursensor der CPU gearbeitet werden. Der Sensor sendet über die Radio-Verbindung die erfasste Temperatur an einen zweiten Calliope mini, der über USB mit einem PC verbunden ist.
Auf dem PC läuft ein Terminalprogramm (z.B. PuTTY) und erfasst die hier mit 9600 Baud seriell übertragenen Daten und bringt diese zur Anzeige.
Die beiden Calliope mini sind mit den folgenden Programmen zu flashen.
Sender:
# Measuring chip temperature on CPU & output to console
# works unchanged for micro:bit & Calliope mini
from microbit import *
import radio
# The radio won't work unless it's switched on.
radio.on()
while True:
temp = temperature() - 3 # offset to ambient temperature
display.scroll(str(temp)+" *C")
radio.send(str(temp))
sleep(60000) # sleep a minute
Bei Einsatz eines LM35 Temperatursensors ist das Erfassen der Temperatur anzupassen:
temp = pin1.read_analog() * 330 / 1024
Der Ausgang des LM35 ist, wie in der Abbildung gezeigt, mit P2 am Calliope mini zu verbinden (sh. auch in der Tabelle oben).
Empfänger:
# Receiving chip temperature from a second board & output to console
# works unchanged for micro:bit & Calliope mini
from microbit import *
import os
import radio
uart.init()
uart.write(os.uname().machine + "\r\nGet chip temperature by radio connection\r\n")
# The radio won't work unless it's switched on.
radio.on()
while True:
# Read any incoming messages.
temp = radio.receive()
if str(temp) != "None":
display.scroll(str(temp)+" *C")
uart.write("Received chip temperature = "+str(temp)+" *C\r\n")
sleep(1000)
Die Reichweite der Radio Verbindung des Calliope mini liegt bei ca. 20 m, so dass dem Test im Wohnraum wenig Grenzen gesetzt sind.