Permanentspeicher für Einstellungen

Es gibt einen Speicher, in dem Einstellungen, die nach einer neuen Programminstallation („Sketch“) auf dem Board erhalten bleiben sollen, permanent gespeichert werden können. Hier bietet es sich an, Einstellungen wie WiFi-Zugangsdaten o.⁥ ä. zu speichern.

Mit dem Beispiel „PropertyEditor“ aus der Library „Arduino-mbed-APIs“ gibt es ein kleines Programm, welches diese Properties bearbeiten kann. Im Beispiel „PropertyTest“ wird der Umgang mit den Properties erklärt. Properties können Strings oder Zahlen sein. Verschiedene enthaltene Beispielsprogramme nutzen bereits Properties.

Im „ECO Power“-Board sowie im LongRa-Board (ab Rev. 7.5) werden einige Properties wie die LoRa Geräte-ID, die ADC-Referenzspannung und die RTC-Kalibirierung schon bei der Produktion fest gespeichert.

Es gibt drei Speicherorte, an denen Properties gespeichert werden:

  • Im OTP-Speicher – kann nur einmalig programmiert werden
    Der OTP-Speicher ist in der Regel sehr klein, sodass hier nur wenige Daten gespeichert werden können. Oft wird dieser Bereich nur von den Hardwareherstellern genutzt. Aktuell ist der OTP-Speicher nur für das „ECO Power“-Board verfügbar
  • Im Flash-Speicher – speichert Daten, die erhalten bleiben sollen (non-volatile)
    Der Flash-Speicher ist in der Größe ebenfalls begrenzt; in der Regel sind dort nur wenige Kilobytes reserviert; 16 kB beim ESP32, 1-64 kB beim D21 (Vorgabe 16 kB). Der Flash-Speicher darf nicht beliebig oft beschrieben werden. Mehrere Tausend Schreibzugriffe sind aber dennoch möglich
  • Im RAM-Speicher – hier können Property-Daten, während das Programm läuft, gespeichert werden
    Die RAM-Daten gehen bei einem Neustart der Anwendung verloren

Wenn eine Property geladen wird, wird sie zuerst im RAM-, dann im Flash- und zuletzt im OTP-Speicher gesucht. Daher kann eine Flash-Property auch die OTP-Property überschrieben bzw. die Flash-Property wird zuerst gefunden.

Es gibt Properties, welche bereits vom System intern reserviert sind und weitere, die vom Anwender selbst hinzugefügt werden können.

Bereits reservierte Properties

Viele reservierte Properties sind gar nicht gesetzt und können bei Bedarf per Programm oder per „PropertyEditor“ gesetzt oder gelöscht werden.

Zusätzlich lassen sich eigene Properties (ab Nr. 128) definieren und nutzen. Wie das geht, wird im Beispiel „PropertyEditor“ gezeigt. Sämtliche Properties sind intern als „enum“ aufgezählt und haben eine Nummer sowie einen Namen.

Eine API-Beschreibung ist in der Datei „NVProperty.h“ in der Library „Arduino-mbed-APIs“ zu finden. Hierbei ist das Beispielprogramm „PropertyTest“ hilfreich, denn es zeigt, wie Properties richtig gesetzt werden.

Aktuell stehen die Property-APIs für die „ECO Power“- und LongRa-Boards zur Verfügung.

PropertyIDTypStandardwert
RTC_AGING_CAL1T_8BITvoreingestellt
ADC_VREF2T_8BITvoreingestellt
HARDWARE_REV3T_8BIT0
LORA_DEVICE_ID10T_32BITvoreingestellt
LORA_CODE_ID11T_32BITvoreingestellt
LORA_REMOTE_ID12T_32BITnicht gesetzt
LORA_REMOTE_ID_ALT13T_32BITnicht gesetzt
LORA_RADIO_TYPE14T_32BITnicht gesetzt
LORA_FREQUENCY15T_32BITnicht gesetzt
LORA_BANDWIDTH16T_32BITnicht gesetzt
LORA_SPREADING_FACTOR17T_8BITnicht gesetzt
LORA_TXPOWER18T_8BITnicht gesetzt
LORA_FREQUENCY_OFFSET19T_32BITnicht gesetzt
LORA_APP_PASSWD20T_STRnicht gesetzt
LORA_APP_PASSWD_ALT21T_STRnicht gesetzt
LOC_LONGITUDE25T_STRnicht gesetzt
LOC_LATITUDE26T_STRnicht gesetzt
LOC_NAME27T_STRnicht gesetzt
HOSTNAME28T_STRnicht gesetzt
WIFI_SSID30T_STRnicht gesetzt
WIFI_PASSWORD31T_STRnicht gesetzt
WIFI_SSID_ALT32T_STRnicht gesetzt
WIFI_PASSWORD_ALT33T_STRnicht gesetzt
USE_DHCP34T_STRnicht gesetzt
MAC_ADDR35T_BITnicht gesetzt
NET_IP_ADDR36T_STRnicht gesetzt
NET_IP_ROUTER37T_STRnicht gesetzt
NET_IP_DNS_SERVER38T_STRnicht gesetzt
MQTT_SERVER40T_STRnicht gesetzt
MQTT_SERVER_ALT41T_STRnicht gesetzt
MQTT_TOPIC_INFO42T_STRnicht gesetzt
MQTT_TOPIC_ALARM43T_STRnicht gesetzt
MQTT_TOPIC_CONTROL44T_STRnicht gesetzt
MQTT_TOPIC_445T_STRnicht gesetzt
MQTT_TOPIC_546T_STRnicht gesetzt
ALARM_STATUS50T_32BITnicht gesetzt

Beispiele

RTC_AGING_CAL = -10
ADC_VREF = 1121
NET_IP_ADDR = 192.168.1.1
MQTT_SERVER = „mqtt://benutzername:passwort@domain:port“