ESP8266/ESP32 programmieren – Resultate der Umfrage

Vor einigen Tagen hatte ich eine Umfrage zu den eingesetzten resp. erwünschten Programmiersprachen/Programmierumgebungen für die beiden Prozessoren von Espressif lanciert.

Hier sind nun die (nicht repräsentativen) Resultate der 65 Rückmeldungen. Mehrfach-Nennungen waren möglich.

ESP8266:

esp8266

ESP32:

esp32

Die Verteilung ist für beide Prozessoren praktisch identisch, woraus der Schluss gezogen werden kann, dass man gern die beim ESP8266 eingesetzte Umgebung auch für den ESP32 verwenden möchte.

IoT-Knoten mit LoRa-Funkmodul

Auf der Basis von NodeMCU/ESP-8266 war es recht einfach einen IoT-Knoten zu erstellen, der über WiFi ins Heimnetz integriert werden konnte. Problematisch waren dabei immer Reichweite und Energiebedarf.

Mit dem radino32 SX1272 der Dresdner Fa. in-circuit.de kann eine Funkübertragung mit einer Reichweite von mehr als 30 Kilometern erreicht werden. Der radino32 SX1272 kombiniert einen STM32L151 Controller von STMicroelectronics mit dem SX1272 LoRa Funkchip von SemTech zum kompakten radino Formfaktor.

Mit dem radino Spider, einem low-cost Entwicklungsboard für alle radino/radino32 Funkmodule mit RP-SMA Buchse, hat man eine für den Breadboard-Aufbau geeignete Plattform. Alle Pins des radino Moduls sind auf zwei Stifleisten im 2.54mm Raster geführt.

Im Bild gezeigt ist ein radiono Spider hier allerdings mit aufgesetztem radinoWiFi-Modul.spider_top_640

radino_32_WiFi_Pinout.jpg

In der Folge möchte ich meine Erfahrungen mit dem radino32 SX1272 LoRa-Funkmodul mitteilen und dessen Eignung für einen IoT-Knoten untersuchen.

Nextcloud/ownCloud

ownCloud als Universal File Access Plattform hat nicht nur für Unternehmen eine starke Verbreitung gefunden und kann sowohl auf eigenen Servern als auch in externen Rechenzentren gehostet werden. Ein Überblick über die Möglichkeiten und die Architekture von ownCloud ist hier zu finden.

Zu den Hintergründen, warum es nun Nextcloud und ownCloud gibt, möchte ich auf einen Beitrag im Linux-Magazin verweisen.

Will man sich nicht die Mühe machen, ownCloud auf einem eigenen System zu installieren, dann bieten sich externe Anbieter an, die Transparenz und Datensicherheit garantieren.

Für erste Test bietet u.a. der Schweizer Anbieter woelkli.com einen Gratiszugang mit 500 MB an. Die zur Verfügung stehenden Pakete und die Features sind detailliert beschrieben. Für alle möglichen Geräte sind ownCloud Clients vorhanden.

Der Zugriff auf die Daten kann aber auch über ein Webinterface oder WebDAV erfolgen.

Auf einem Linux-Device (hier ein Raspberry Pi 3) ist dazu das WebDAV Filesystem zu installieren und ein Directory für das Mounting einzurichten:

apt-get install davfs2
mkdir /mnt/DAV
mount -t davfs cloud.woelkli.com/remote.php/webdav /mnt/DAV

Alle ins Directory /mnt/DAV geschriebenen Dateien werden dann auf dem ownCloud-Server und den mit ihm synchronisierten Clients zur Verfügung stehen.

Wie man Dropbox, Box und 4share einbinden kann, ist hier beschrieben.

Mit der Nextcloud Box steht nun auch eine vorbereitete Hardware zur Verfügung.

Anzeige von ThingSpeak-Daten mit ThingView

ThingSpeak ist eine Open Source IoT-Anwendung und API zum Speichern und Abrufen von Daten von IoT-Nodes über HTTP über das Internet oder über ein Local Area Network (https://github.com/iobridge/thingspeak, http://www.thingspeak.com).

Zusätzlich zum Speichern und Abrufen von numerischen und/oder alpha-numerischen Daten erlaubt die ThingSpeak-API auch numerische Datenverarbeitung wie Time-Scaling, Bildung von Mittelwert und Medianwert, Summation und Rundung u.a.m. Jeder ThingSpeak-Kanal unterstützt Dateneinträge von bis zu 8 Datenfeldern, Breitengrad, Längengrad, Höhe und Status. Die Abfrageergebnisse stehen als JSON-, XML- und CSV-Formate für die Integration in Anwendungen zur Verfügung.

Mit ThingView können ThingSpeak-Kanäle auf einfache Weise auf dem Smartphone oder Tablet sichtbar gemacht werden. Es reicht die Kanal-ID einzugeben und die Daten können angezeigt werden. Die App kann von Google Play als Gratis-Version (mit Werbung) oder kostenpflichtig heruntergeladen werden.

Das folgende Bild zeigt die Darstellung meiner lokalen Wetterdaten im Browser und Screenshots der Darstellung über ThingView auf dem Smartphone.

 

 

thingview

Enviro pHAT am Raspberry Pi (Zero)

Die englische Firma Pimoroni bietet sogenannte pHATs (HAT = Hardware at Top) für den Raspberry Pi an. Von den Abmessungen her orientieren sich diese am Raspberry Pi Zero. Das Interface ist aber durch den 40-poligen GPIO-Stecker definiert, so dass ein solches pHAT auf jeden, diesen Stecker aufweisenden Raspberry Pi installiert werden kann.

Enviro pHAT umfasst vier unterschiedliche Sensoren, die die Messung von Temperatur und Druck, Licht und Farben (RGB), Bewegung in drei Achsen, Ausrichtung des Magnetfelds (Compass) und Gleichspannung über vier Analog-Eingänge ermöglichen. Ausserdem befinden sich zu Beleuchtungszwecken zwei weisse LEDs auf diesem pHAT.

Enviro pHAT Features:

  • LSM303D accelerometer/magnetometer sensor (I2C Slave Addr 0x1d)
  • TCS3472 light and RGB colour sensor (I2C Slave Addr 0x29)
  • ADS1015 4-channel 3.3v, analog to digital sensor (ADC) (I2C Slave Addr 0x48)
  • BMP280 temperature/pressure sensor (I2C Slave Addr 0x77)
  • Two LEDs for illumination (GPIO4)

i2c map

Eine Python Library unterstützt eine komfortable Programmierung in Python. Installation und Inbetriebnahme sind im Dokument „Getting started with Enviro pHAT“ beschrieben.

Bei der Inbetriebnahme blieben die LEDs dunkel. Es muss sicher gestellt sein, dass GPIO4 frei zur Verfügung steht und das Script setup.py gestartet wurde. Danach sollte alles problemlos laufen.

Mit dem Script test_all.py kann nun jede Funktion des Enviro pHAT getestet werden. Der Screenshot zeigt die Ausgabe über die Console.

Unbenannt

#!/usr/bin/env python

import sys
import time
import datetime

from envirophat import light, weather, motion, analog, leds


def write(line):
 sys.stdout.write(line)
 sys.stdout.flush()

write("--- Enviro pHAT Monitoring ---")

try:
 while True:
 leds.on()
 time.sleep(0.02)
 leds.off()
 rgb = light.rgb()
 analog_values = analog.read_all()

output = """
Date : {n}
Temperature: {t} grd C
Pressure : {p} hPa
Light : {c}
RGB : {r}, {g}, {b} 
Heading : {h}
Analog : 0: {a0}, 1: {a1}, 2: {a2}, 3: {a3}
""".format(
 n = datetime.datetime.now(),
 t = round(weather.temperature(),2),
 p = round(weather.pressure(),2),
 c = light.light(),
 r = rgb[0],
 g = rgb[1],
 b = rgb[2],
 h = motion.heading(),
 a0 = analog_values[0],
 a1 = analog_values[1],
 a2 = analog_values[2],
 a3 = analog_values[3]
 )
 output = output.replace("\n","\n\033[K")
 write(output)
 lines = len(output.split("\n"))
 write("\033[{}A".format(lines - 1))

time.sleep(10)
 
except KeyboardInterrupt:
 pass

 

 

SONOFF über MQTT steuern

Im Blogbeitrag Sonoff Wifi Smart Switch mit NODEMCU Firmware hatte ich die vorbereitenden Arbeiten beschrieben, um den Sonoff Smart Switch mit einer eigenen Firmware auszustatten. Ziel ist, den Sonoff Smart Switch von einem MQTT Client aus zu steuern. Das kann ein beliebiges Linux-Device, wie ein Raspberry Pi o.ä. sein, oder ein MQTT Client auf dem Smartphone.

Das grundsätzliche Vorgehen zum Start eines Anwendungsprogramms (credentials.lua, init.lua, sonoff.lua) auf dem ESP8266/NodeMCU wird hier als bekannt vorausgesetzt. In meinem Buch zu NodeMCU ist das im Detail beschrieben.

MyMQTTIch verwende hier MyMQTT aus dem Google Play Store auf einem Android Smartphone. Es gibt Alternativen sowohl für Android als auch für iOS.

Um sich an den Datenaustausch über das MQTT-Protokoll heranzutasten, bietet sich die Verwendung eines freien Broker-Dienstes als Spielwiese an. Der CloudMQTT-Broker der schwedischen Firma 84codes AB ist eine solche Möglichkeit. CloudMQTT sind Mosquitto Server in der Cloud.

Zum Erstellen einer CloudMQTT-Instanz ist es erforderlich, unter http://www.cloudmqtt.com/ ein Konto einzurichten und sich für einen Kunden-Plan zu entscheiden. Als Testfeld nutze ich den freien Plan Cute Cat.
Die Anmeldung eines Kundenkontos erfolgt über eine eMail-Adresse, an die ein Link zur
Freischaltung verschickt wird. Nach dem Erzeugen einer CloudMQTT-Instanz werden die Informationen zur erzeugten Instanz angezeigt. Alle in der folgenden Abbildung gezeigten Daten werden vom System zugewiesen. Das trifft auch für den Usernamen und das Password zu.

cloudmqtt

Ist die brokerseitige Einrichtung abgeschlossen, dann kann der MQTT Client MyMQTT eingerichtet werden.Die folgenden Screenshots zeigen die von MyMQTT abonierten Mitteilungen (Subscribe), das Versenden von Mitteilungen zum Schalten des Sonoff Smart Switches und die Protokollierung auf dem Dashboard.
subscribe

Mein MQTT Client abonniert durch die Angaben SONOFF/+/# alle gesendeten Sonoff-Mitteilungen. Zusätzlich sind alle Mitteilungen aus einem Netzwerk von Temperatursensoren abonniert (DHT11/+/#).

 

 

 

 

Publish

 

Gesendet wird von diesem MQTT-Client hier nur der Topic SONOFF/ESP8266-1878840/state mit 0 (Ausschalten) oder 1 (Einschalten) als Dateninhalt.

 

 

 

dashboard

 

 

Im Dashboard können nun die abonnierten Mitteilungen verfolgt werden.

Der eingesetzte Sonoff Smart Switch meldet sich mit einer Client-ID in seinem Topic, die automatisch durch dessen Chip-ID erzeugt wird. Die Adressierung ist damit eindeutig.

Im wesentlichen kann der durch die versendeten Mitteilungen beeinflusste Schaltzustand verfolgt werden.

Gelegentlich wird dieser Vorgang durch eine periodische  gesendete Mitteilung eines Sensors für Temperatur und Luftfeuchtigkeit unterbrochen.

 

Weiterlesen