Archiv der Kategorie: Sensor

Kerlink Wirnet iFemtoCell – Kleines LoRaWAN Indoor Gateway mit großer Leistung

Der Ausbau landesweit erreichbarer Funknetze auf LoRa-Basis ist in einigen Ländern, wie der Schweiz (Swisscom), den Niederlanden (KPN) und Süd-Korea (SK Telecom), bereits erfolgreich umgesetzt. Andere Service Provider stellen ebenfalls die erforderliche Infrastruktur zur Verfügung. Neben kommerziellen Angeboten gibt es auch Services, die kostenfrei genutzt werden können.

Ein LoRaWAN-Gateway verbindet die über Funk kommunizierenden LoRaWAN-Nodes über das Internet mit einem LoRaWAN-Server. Weil hier in erster Linie Stabilität und Sicherheit gefordert sind, betrachte ich für diesen Einsatz nur kommerzielle LoRaWAN-Gateways.

Im Smartmakers Newsletter gehe ich speziell auf das Wirnet iFemtoCell LoRaWAN Gateway ein, welches perfekt für die Erweiterung in Gebäuden (zusätzliche Abdeckung in Gebäuden zur Verdichtung öffentlicher Verfügbarkeit und Kontinuität des Dienstes) oder für die private Abdeckung von Standorten geeignet ist, die kontinuierliche Konnektivität für ihre IoT-Anwendungen erfordern.

Betrachtet werden die folgenden Schwerpunkte

  • Unboxing
  • Inbetriebnahme
  • SSH-Verbindung
  • Firmware Update
  • Integration ins The Things Network (TTN)
  • Integration ins LORIOT-Netzwerk
  • Programmierung von Anwendungen auf dem Gateway

 

 

Advertisements

Mit phyWave-Modulen ins IoT

Daten von Sensoren im Netz oder zu Aktoren aus dem Netz verfügbar zu machen ist die Aufgabe von peripherienahen, meist drahtlos kommunizierenden IoT Devices.

Mit den phyWAVE© Modulen stellt Phytec mehrere solcher IoT Module her, die in eigene Anwendungen integriert werden können. Das phyWAVE-CC2650 ist eins der insgesamt drei von Phytec angebotenen phyWAVE Module. Kern ist das TI CC2650 SoC.

csm_phyWAVE-CC2650_95013e94a2

Das TI CC2650 SoC enthält einen 32-Bit-ARM Cortex-M3-Prozessor, der als Hauptprozessor mit 48 MHz betrieben wird. Der Sensor-Controller ist ideal für die Anbindung externer Sensoren und für die autonome Erfassung von analogen und digitalen Daten, während sich der Rest des Systems im Schlafmodus befinden kann.

Der BLE-Controller und der IEEE 802.15.4 MAC sind in ROM eingebettet und laufen teilweise auf einem separaten ARM Cortex-M0-Prozessor. Diese Architektur verbessert die Gesamtsystemleistung und den Stromverbrauch und stellt den Flash-Speicher für die Anwendung frei. Bluetooth- und ZigBee-Stacks sind kostenlos von TI erhältlich.

phyWAVE-CC26xx-block-diagram

Das phyNODE Sensor-Board stellt die Peripherie für den Betrieb des phyWAVE-CC2650 bereit. Am Rande des Boards sind eine Reihe von Sensoren angeordnet.

BLE hat die Möglichkeit, Daten in zwei verschiedenen Modes auszutauschen. Es werden der Advertising Mode und der Connected Mode unterschieden.

Nach einem Reset des phyWAVE Sensor-Boards befindet sich dieses im Advertising Mode und gibt seine MAC-Adresse aus. BLE Devices weisen eine einzigartige 6-Byte BLE- oder MAC-Adresse auf, die mit Hilfe des Kommandos sudo hcitool lescan vom als BLE Client dienenden Raspberry Pi abgefragt werden kann.

KommunikationNach dem Verbindungsaufbau werden alle Farben der RGB-LED nacheinander aktiviert bis schließlich am Ende die weiße LED eingeschaltet bleibt. Daran anschließend folgen Abfragen der einzelnen Sensoren bis hin zum Farbsensor und die Ausgabe der ermittelten Werte. Die Abfrage der Sensoren erfolgt in einer Endlosschleife.

Mit Hilfe eines Python-Scripts werden die übermittelten Sensordaten ausgewertet und einem Shell-Script zur Übermittlung an einen Server zur Visualisierung gesendet.

Der komplette Beitrag ist in der Design&Elektronik 10/2018 veröffentlicht. Der OnLine-Beitrag ist unter https://www.elektroniknet.de/design-elektronik/embedded/mit-phywave-modulen-ins-iot-158755.html zu finden. Die Software steht auf Github zum Download bereit.

 

enviro:bit add-on für micro:bit

enviro:bit ist eine Erweiterung für den micro:bit Mikrocontroller zur Erfassung von Temperatur, relativer Feuchte und Druck über einen BME280 Sensor, Licht und Farbe über einen TCS3472 Sensor sowie Geräuschen über ein MEMS Mikrofon. Ein Steckverbinder zum Kontaktieren eines micro:bit Mikrocontrollers ist vorhanden.

enviro-bit

Die Programmierung in MicroPython wird durch eine Library unterstützt. Unter Verwendung der Library bme280.py kann das folgende Programm zur Erfassung von Temperatur und relativer Feuchte erstellt werden. Die serielle Ausgabe zeigt der folgende Screenshot.

from microbit import *
import os
import bme280
bme = bme280.bme280()

CYCLE = 5000

uart.init(baudrate=115200)
uart.write("\r\n" + os.uname().machine + " measuring environmental data by BME280\r\n")
uart.write("Cycle time is " + str(CYCLE) + " msec\r\n\r\n")

while True:
    temp = round(bme.temperature(),1)
    display.scroll(str(temp)+" *C")
    uart.write("BME280 temperature = "+str(temp)+" *C\r\n")
    humi = round(bme.humidity())
    uart.write("BME280 humidity = "+str(humi)+" %\r\n\r\n")
    sleep(CYCLE)

BME280 Output

Im Beitrag LIGHT AND COLOR MEASUREMENTS WITH THE PIMORONI ENVIRO:BIT FOR THE MICRO:BIT werden verschiedene Auswertungen der Signale des TCS3472 Sensors beschrieben.

Mit Hilfe von Klatschgeräuschen können Schaltvorgänge ausgelöst werden. Der Beitrag Build a clap-activated light with micro:bit! zeigt eine solche Anwendung.

 

 

 

HiGrow-Sensor: Daten erfassen und versenden

Im Post HiGrow-Sensor sorgt für das Wohl der Pflanzen hatte ich auf den HiGrow-Sensor hingewiesen, der zur Überwachung der Umweltbedingungen in Pflanzennähe eingesetzt werden kann.

Im Programm HiGrowESP32MQTT.ino werden die Sensordaten des dort eingesetzten DHT11-Sensors zur Messung von Lufttemperatur und Luftfeuchte, sowie die kapazitiv gemessene Bodenfeuchte und die Helligkeit erfasst und entsprechenden Topics von MQTT-Messages zugeordnet. Zu Kontrollzwecken werden diese Daten auch seriell ausgegeben und können durch den internen Monitor der Arduino IDE verfolgt werden. Das Programm  HiGrowESP32MQTT.ino steht auf Github zum Download zur Verfügung.

HiGrow Data

Mit einem MQTT Client können die abonnierten Mitteilungen visualisiert werden.

Screenshot_20180319-140609.png

Bei meinen Test ist mir aufgefallen, dass recht häufig nach dem Programmstart der Brownout Detector getriggert wurde und einen entsprechenden Reset ausgelöst hat.

HiGrow Brounout

Verfolgt man die Diskussion (z.B. hier https://github.com/nkolban/esp32-snippets/issues/168) dann scheint ein hoher Strombedarf während der Initialisierungsphase ein (der?) Grund für das Verhalten zu sein.

Der HiGrow-Sensor weist einen Batteriehalter für eine 18650-LiPo-Batterie auf. Bei meinen Tests war die Batterie nicht bestückt. Möglicherweise puffert eine bestückte Batterie dann diesen kurzzeitigen Strombedarf hinreichend.

 

HiGrow-Sensor sorgt für das Wohl der Pflanzen

Für das optimale Gedeihen von Pflanzen sind die Bedingungen wie Temperatur, Luft- und Bodenfeuchtigkeit, Licht u.a.m. verantwortlich.

Kommerzielle Systeme von Kärcher, Gardena, Parrot u.a. ermitteln solche Größen und steuern damit beispielsweise die Bewässerung oder stellen die ermittelten Daten einer App auf dem Smartphone zur Verfügung.

Mit dem HiGrow-Sensor kann der Maker das Thema selbst in die Hand nehmen. Der HiGrow-Sensor nutzt einen DHT11 zur Messung von Lufttemperatur und -Luftfeuchte. Die Feuchte des Bodens wird kapazitiv gemessen, da diese Variante weniger störungsanfällig als die resistive Methode ist. Außerdem wird die Helligkeit erfasst. Als CPU kommt eine ESP32-Wroom von Espressif zum Einsatz, der  in der Arduino IDE programmiert werden kann. Softwareunterstützung findet man auf Github unter https://github.com/lucafabbri/HiGrow-Arduino-Esp. In den nächsten Tagen werde ich an dieser Stelle ein Programmbeispiel zeigen, welches die ermittelten Werte über MQTT an einen MQTT-Broker übermittelt und von da bezogen werden können.

Der HiGrow-Sensor wird von Banggood zum Preis von unter € 15 angeboten.

 

 

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.