Archiv der Kategorie: Calliope mini

#Calliope mini als #BLE #Beacon

Das Physical Web ist ein offener Ansatz, der von Google entwickelt wurde, um schnelle und nahtlose webbasierte Interaktionen mit physischen Objekten und Orten zu ermöglichen. Das Physical Web nutzt Bluetooth Low Energy (BLE) wegen seiner Verfügbarkeit auf mobilen Geräten und basiert auf dem Eddystone-URL-Format.

Dienste auf Ihrem Mobilgerät wie Google Chrome oder Nearby Messages können nach Übergabe der URL nach diesen suchen und diese anzeigen. Jedes Objekt kann mit einem Bluetooth Low Energy (BLE) Beacon, einem leistungsstarken, batteriebetriebenen Gerät, verknüpft werden.

Calliope mini kann sehr einfach als Eddystone Beacon eingesetzt werden. Zur Programmierung musste allerdings der JavaScript Blocks Editor des BBC micro:bit verwendet werden, da der betreffende Calliope Editor diese BLE Features (noch) nicht aufweist.

Im BBC micro:bit JavaScript Blocks Editor (https://makecode.microbit.org/) ist das Bluetooth Paket nach zu installieren. Es ersetzt dann das Radio Paket. Der folgende Code muss eingegeben und dann auf dem Calliope mini installiert werden..

Eddystone URL

Beim Programmstart wird das Bluetooth Advertisement mit der gewünschten URL gestartet. In der Endlosschleife wird die mittlere LED der 5×5-LED-Matrix periodisch kurz eingeschaltet, um von der laufenden Applikation ein Lebenszeichen zu erhalten.

Die folgenden beiden Bilder zeigen den detektierten Beacon mit der übergebenen URL http://calliope.cc im BLE Scanner sowie die sich nach einem Klick auf den Link OPEN URL öffnende Website.

Screenshot_20170811-162559

Screenshot_20170811-161602

Da das Programmbeispiel mit dem JavaScript Blocks Editor des BBC micro:bit erstellt wurde, ist es sicher kaum verwunderlich, dass das Programm auf dem BBC micro:bit gleiches Verhalten zeigt.

Mit den Tools Show.io und locly gibt es komfortable Tools, die die Anwendung von Beacons sehr komfortabel gestalten.

 

 

Advertisements

Dezentrale Temperaturerfassung mit Calliope mini in Python

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.
Calliope Radio

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.

 

Calliope in Python programmieren

Will man den Calliope mini nicht im Schulkontext verwenden, dann bietet sich, wie beim micro:bit, die Programmierung in Micro-Python an.

Einen Editor findet man beispielsweise unter http://python.microbit.org/editor.html. In diesen Editor pastet man dann einfach den Python-Quelltext, wie z.B. das folgende Programmbeispiel zur Temperaturmessung.

# Measuring chip temperature on Calliope mini & output to console
from microbit import *
import os

uart.init()
uart.write(os.uname().machine +" measuring chip temperature\r\n")

while True:
 temp = temperature() - 3 # offset to ambient temperature
 display.scroll(str(temp)+" C")
 uart.write("Calliope mini chip temperature = "+str(temp)+" C\r\n")
 sleep(5000)

Nach dem Compilieren kann das  erstellte File microbit.hex einfach in das Laufwerk kopiert werden, als das sich der Calliope mini beim Anschluss über USB meldet.

Zum Beobachten der seriellen Ausgaben kann bspw. mit PuTTY auf das betreffende COM-Port zugegriffen werden. Die Baudrate beträgt hier 9600 Bd. Die LED-Matrix zeigt die Ausgabe als Laufschrift an.

Screenshot

Zugang zu den verschiedenen Ressourcen des eingesetzten Mikrocontrollers erhält man über die micro:bit Python API.