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“-, Eagle- und LongRa- (ab Rev. 7.5) sowie im Turtle-Board 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 die Boards ECO Power und Eagle 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“ (ECO Power, Eagle und LongRa) bzw. „Turtle_RadioShuttle/NVProperty“ (Turtle) 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“-, Eagle-, LongRa- sowie Turtle-Boards zur Verfügung.
Property | ID | Typ | Standardwert |
---|---|---|---|
RTC_AGING_CAL | 1 | T_8BIT | voreingestellt |
ADC_VREF | 2 | T_8BIT | voreingestellt |
HARDWARE_REV | 3 | T_8BIT | 0 |
LORA_DEVICE_ID | 10 | T_32BIT | voreingestellt |
LORA_CODE_ID | 11 | T_32BIT | voreingestellt |
LORA_REMOTE_ID | 12 | T_32BIT | nicht gesetzt |
LORA_REMOTE_ID_ALT | 13 | T_32BIT | nicht gesetzt |
LORA_RADIO_TYPE | 14 | T_32BIT | nicht gesetzt |
LORA_FREQUENCY | 15 | T_32BIT | nicht gesetzt |
LORA_BANDWIDTH | 16 | T_32BIT | nicht gesetzt |
LORA_SPREADING_FACTOR | 17 | T_8BIT | nicht gesetzt |
LORA_TXPOWER | 18 | T_8BIT | nicht gesetzt |
LORA_FREQUENCY_OFFSET | 19 | T_32BIT | nicht gesetzt |
LORA_APP_PWD | 20 | T_STR | nicht gesetzt |
LORA_APP_PWD_ALT | 21 | T_STR | nicht gesetzt |
LOC_LONGITUDE | 25 | T_STR | nicht gesetzt |
LOC_LATITUDE | 26 | T_STR | nicht gesetzt |
LOC_NAME | 27 | T_STR | nicht gesetzt |
HOSTNAME | 28 | T_STR | nicht gesetzt |
WIFI_SSID | 30 | T_STR | nicht gesetzt |
WIFI_PASSWORD | 31 | T_STR | nicht gesetzt |
WIFI_SSID_ALT | 32 | T_STR | nicht gesetzt |
WIFI_PASSWORD_ALT | 33 | T_STR | nicht gesetzt |
USE_DHCP | 34 | T_STR | nicht gesetzt |
MAC_ADDR | 35 | T_BIT | nicht gesetzt |
NET_IP_ADDR | 36 | T_STR | nicht gesetzt |
NET_IP_ROUTER | 37 | T_STR | nicht gesetzt |
NET_IP_DNS_SERVER | 38 | T_STR | nicht gesetzt |
NET_IP_DNS_SERVER_ALT | 39 | T_STR | nicht gesetzt |
NET_NTP_SERVER | 50 | T_32BIT | nicht gesetzt |
NET_NTP_SERVER_ALT | 51 | T_32BIT | nicht gesetzt |
NET_NTP_GMTOFFSET | 52 | T_32BIT | nicht gesetzt |
NET_NTP_DAYLIGHTOFFSET | 53 | T_32BIT | nicht gesetzt |
MQTT_SERVER | 40 | T_STR | nicht gesetzt |
MQTT_SERVER_ALT | 41 | T_STR | nicht gesetzt |
MQTT_TOPIC_INFO | 42 | T_STR | nicht gesetzt |
MQTT_TOPIC_ALARM | 43 | T_STR | nicht gesetzt |
MQTT_TOPIC_CONTROL | 44 | T_STR | nicht gesetzt |
MQTT_TOPIC_4 | 45 | T_STR | nicht gesetzt |
MQTT_TOPIC_5 | 46 | T_STR | nicht gesetzt |
ALARM_STATUS | 60 | T_32BIT | nicht gesetzt |
VOIP_SERVER | 70 | T_STR | nicht gesetzt |
VOIP_USER | 71 | T_STR | nicht gesetzt |
VOIP_PASSWORD | 72 | T_STR | nicht gesetzt |
VOIP_DEVNAME | 73 | T_STR | nicht gesetzt |
VOIP_DIALNO | 74 | T_32BIT | nicht gesetzt |
VOIP_DIALNO_ALT | 75 | T_32BIT | nicht gesetzt |
PROG_CMDLINE | 80 | T_STR | nicht gesetzt |
MY_CITY | 129 | T_STR | nicht gesetzt |
Beispiele
RTC_AGING_CAL = -10
ADC_VREF = 1121
NET_IP_ADDR = 192.168.1.1
MQTT_SERVER = „mqtt://benutzername:passwort@domain:port“