Vorläufige
Referenz zu
espScript32**
Juni 24
powered by
mmiscool’s ESP8266Basic
---
H. Berndt, 2024 (BT24)
LED = 4
While True
PinOut LED,1
Pause 500
PinOut LED,0
Pause 500
Wend
___
Diese Skriptsprache basiert auf dem von Michael Moulinari (mmiscool) auf esp8266basic.com veröffentlichten und beschriebenen Original und ist dazu in hohem Maße kompatibel. Dateien zum Hochladen dieser Sprache auf ESP32, ESP32-S2, ESP32-C3 und ESP32-S3 stehen über Links auf hjberndt.de/esp32 zur Verfügung. Mit * gekennzeichnete Aufrufe verhalten sich anders als im Original oder sind neu hinzugekommen. Alle Funktionen, die sich noch im experimentellen Status befinden, sind mit ** gekennzeichnet. Seit 2023 existiert ein Pendant für den RP Pico W mit RP2040.
Erstellt und erweitert von H. Berndt ab 2024 (BT24) mittels Arduino IDE 2.1.0 und ESP-Core 2.0.11 und den weiter unten angegebenen eingebundenen Bibliotheken.
Bedingung für die Erstellung dieses Betriebssystems sind 4MB Flash, WiFi4, sowie die Kompatibilität der Hardware mit der Arduino IDE 2. Dies gilt zurzeit für den ESP8266, den Raspberry Pi PicoW und folgende ESP32:
Peripheriegerät |
ESP32 |
ESP32S2 |
ESP32C3 |
ESP32S3 |
ADC |
x |
x |
x |
x |
Bluetooth |
x |
|||
BLE |
x |
x |
x |
|
DAC |
x |
x |
||
GPIO |
x |
x |
x |
x |
Hall-Sensor |
x |
|||
I2C |
x |
x |
x |
x |
I2S |
x |
x |
x |
x |
LEDC |
x |
x |
x |
x |
SPI |
x |
x |
x |
x |
Temperatursensor |
x |
x |
x |
x |
UART |
x |
x |
x |
x |
USB |
x |
x |
x |
|
WLAN |
x |
x |
x |
x |
Durch die gleichzeitige Verfügbarkeit verschiedener Bibliotheken und unterschiedlicher Hardware weichen ESP32-Varianten in ihrem Befehlssatz teilweise entsprechend ab. Z. B. gilt
· Bluetooth Classic (Serial) nur auf ESP32
· Bluetooth BLE Keyboard/Mouse/Multimeter nicht auf ESP32, ESP32-S2
· DAC auf ESP32 und ESP-S2, zusätzliches Sampling und Generator nur ESP32
· USB-Keyboard/Mouse nicht auf ESP32
Ausnahmen bestätigen die Regel.
Hinweis: Wegen der Vielzahl eingebundener
Bibliotheken steht allgemein wenig RAM-Speicher zur Verfügung. Dadurch kann es
zu Abstürzen bzw. Neustarts kommen, wenn Variablen und Funktionen viel
Speicherplatz benötigen, die an der seriellen Schnittstelle vom ESP die Worte
Panic oder Heap mit auf den Weg bekommen. Bei schwacher WiFi-Verbindung zeigt
sich die Kommunikation zwischen Browser und ESP träge oder sie friert ganz ein.
Übersicht
Serielles Interface Serial 1 und 2
Event-Branches Zusammenfassung
Verschiedenes zur ESP32-Version
Inhalt
INPUT {optionaler String oder var zur Eingabeaufforderung}, {Variable}
map*(Wert,WertMin,WertMax,NeuMin,NeuMax):
timeset*(yyyy, mm, dd, hr, min, sec)
timeset*(yyyy, mm, dd, hr, min, sec, isDst)
timestamp*(yyyy, mm, dd, hr, min, sec)
timediff*(endTimePickerString, startTimePickerString)
Vergleichsoperatoren für Strings und Zahlen:
WPrint mit der Funktion htmlvar():
pwmOut**{pin},{wert},{duration}:
echo** {outPin, freq, duration,inPin}
ainMean**(Analog-Eingang[,offset]): Uar*(Analog-Eingang[,offset]):
ainRMS**(Analog-Eingang): Ueff*(Analog-Eingang[,offset]):
capture.begin*([{adc_channel}]):
Serielles Interface Serial 1 und 2
input {optionaler String oder var zur Eingabeaufforderung}, {value oder var}
serial2begin {Baudrate},{TX_pin},{RX_pin},{*}
serial2println {Wert oder var}
i2c.begin({Geräteadresse als Zahl oder Variable})
i2c.write({Wert oder Variable für Daten})
i2c.requestfrom({Geräte-ID},{Anzahl der anzufordernden Bytes})
spi.setup*({Geschwindigkeit}, {MODE}, {MSB_FIRST})
msgbranch {branch label} onServer*{newlabel}
msgreturn {Variablenname oder String für Rückgabe}
udpbeginmulticast {multicast_ip}, {localport}
udpwrite {ip_address}, {port}, {message}
udpwritemulticast {ip_address}, {port}, {message}
udpBranch {label} onUDP*{newlabel}
SendTS({API-Schlüssel},{Feldnummer},{Feldinhalt})
ReadTS({API-Schlüssel},{Kanal-ID},{Feld-Nummer)
SetupEmail**{server}, {port}, {benutzername}, {passwort}
Email**{String To email}, {String From Email}, {String Subject}, {String Body}
mqtt.subscribe(SubscriptionString)
mqtt.publish(KanalString, DatenString)
Tg.begin(TokenString, ChatIDString)
Dallas Temperatur Sensor DS18B20
neo({LED#},{R},{G},{B},{optional: 1, um das automatische Schreiben zu deaktivieren})
neo.stripcolor({Startpixel},{Endepixel},{R},{G},B})
neo.shift({Startpixel},{Endpixel},{Richtung, 1 für vorwärts, -1 für rückwärts.})
neo.hex({Pixeldaten],{Startpixel],int{Position in Pixeldaten},{Anzahl Pixel},{Helligkeit 0-100})
neo.rainbow*({Anfangswert},{Farbintensität},{Helligkeit})
stepper.setup*(steps, pin1A, pin2A, pin3A,pin4A)
oled.color({1 oder 0 für weiß oder schwarz})
oled.print({String},{optional x},{optional y})
oled*.progress(x, y, w, h, Wert in Prozent)
LCDprint {String oder var}, {x Position}, {y Position}
LCDsend {Wert oder Variable als Kommando-Byte}, {Wert oder Variable für Modus}
ads.read(Eingang als Zahl oder Variable)
ads.range(Zahl oder Variable von 1 bis 6 )
matrix.brightness(Helligkeitswert)
matrix.print(text, delay, x-position)
SPI MCP410xx Digital Potentiometer
SPI AD9833 Functions-Generator
LoRaPrint String* LoRaWrite* String LoRaSend* String
tft.rect.round(x,y,w,h,rad,col)
tft.rect.round.fill(x,y,w,h,rad,col)
tft.rect.fill.H*(x,y,w,h,col1,col2)
tft.rect.fill.V*(x,y,w,h,col1,col2)
tft.bmp*(Dateiname, x, y, Hintergrundfarbe)
tft.caption*(text) tftCaption*
tft.needle*(percent) tftNeedle*
tft.linear*(number, percent) tftLinear*
tft.obj.button(label, x, y, width, height, text_size, fore_color, back_color)
tft.obj.label(label, x, y, width, height, text_size, fore_color, back_color)
tft.obj.checkbox(label, x, y, height, checked, text_size, fore_color, back_color)
tft.obj.radio(label, x, y, height, checked, text_size, fore_color, back_color)
tft.obj.bar(label, x, y, height, width, text_size, fore_color, back_color)
tft.obj.toggle(icon1, icon2, x, y[, checked})
tft.obj.setlabel(obj_ident, label)
tft.obj.setvalue(obj_ident, value)
tft.obj.setchecked(obj_ident, check)
tft.obj.getvalue(obj_ident, value)
tft.obj.getchecked(obj_ident, check)
touchbranch [label] onTouch* label
Event-Branches Zusammenfassung
Verschiedenes zur ESP32-Version
WebSockChangeBranch onChange**
mouseMove* x,y,w mouse.move*(x,y,w)
BLE Digital Multimeter BTMETER BT-90EPD und Kompatible
Meterbranch** [Label] onMeter** Label
mouseBLEmove* x,y,w mouseBLE.move*(x,y,w)
Diese Skriptsprache und Referenz basiert auf dem von Michel Moulinari (mmiscool) auf esp8266basic.com veröffentlichten Original und ist dazu in hohem Maße kompatibel.
Gibt einen Text oder eine Variable über die serielle Schnittstelle und im Browser mit einer neuen Zeile aus. print {wert oder var}
Fordert Eingaben über die serielle Schnittstelle (USB) vom Benutzer an und speichert sie in einer Variablen. Die Variable muss vor der Abfrage nicht deklariert werden. Serialtimeout legt die Wartezeit in ms fest. Die Voreinstellung ist 0 und bedeutet unendliche Wartezeit (siehe auch watchdog)
serialtimeout 10000 ' 10 Sekunden für die Antwort
serialprintln "Input-Test...10 Sekunden-Fenster!"
input "Hi, I'm Eliza. Tell me about your problem.", a
if a = "" then print "Looser" else print a
Die Eingabe im Browserfenster ist vorzuziehen. (siehe auch TextBox/Button)
Eine for...next-Schleife wird x-mal durchlaufen.
For x = 1 to 5
Print x
Next x
Eine for...next-Schleife mit optionalem Schrittwert.
For x = 1 to 5 step 2
Print x
Next x
Der Schritt kann negativ sein und ist nicht auf eine ganze Zahl beschränkt.
For x = 5 to 0 step -0.1
Print x
Next
Die Variable nach next ist optional.
Ermöglicht es, eine Schleife zu erstellen, die entweder unendlich lange läuft oder nur, wenn bestimmte Bedingungen erfüllt sind.
DO
...
LOOP {WHILE/UNTIL} {Bedingung}
Wenn die Schleife unendlich sein soll:
Do
Print "Looping for eternity"
Loop until 0
Do-Schleife mit until-Bedingung:
Do
bla = bla + 1
Print bla
loop until bla > 5
Do-Schleife mit while-Bedingung:
Do
Bla = bla + 1
Print bla
Loop while bla < 5
Ermöglicht es, eine Schleife zu erstellen, die entweder unendlich lange läuft oder nur, wenn bestimmte Bedingungen erfüllt sind. Die Bedingung wird vor Eintritt in die Schleife abgefragt, so dass diese, im Gegensatz zu DO, nicht durchlaufen werden muss (abweisende Schleife).
While True
' Endlosschleife
Wend
Anders programmier mit IF/THEN/GOTO:
Solange: ' While
IF … THEN
' Schleifenkörper
GOTO Solange
ENDIF ' Wend
Mit dem Befehl if then werden 2 Werte oder Variablen verglichen. Um zu prüfen, ob Zeichenketten gleich sind, verwenden Sie '==', für Zahlen verwenden Sie '='.
if {var oder Wert} {=, ==,>,<,<>,>=,<=}, {var oder Wert} then {Auszuführende Anweisung, wenn wahr} {else} {Anweisung, wenn falsch}
aldo = 6
dummerSack = 2*3
If aldo = dummerSack then Print "ganz genau!" else Print "ach was"
If then-Anweisungen können auf mehrere Zeilen aufgeteilt werden. Das unten gezeigte Format kann Verwendung finden:
If bla = 5 then
Print "Bla is 5"
Else
Print "bla is not 5"
Endif
If kann wie folgt verschachtelt werden:
if a > b then
print "a > b"
if b >c then
print "b > c"
else
print "b < c"
endif
else
print "a < b"
endif
Let führt mathematische oder String-Operationen mit einer Reihe von Werten oder Variablen durch und legt das Ergebnis in einer Variablen ab. Um Zeichenketten zu addieren, muss das Symbol '&' anstelle des '+' verwenden werden. Kann auch zur Auswertung logischer Operationen wie in der if then-Anweisung verwendet werden. Wenn das Ergebnis wahr ist, wird -1 zurückgegeben, andernfalls eine 0.
let {Ergebnis var} = {Wert oder var} {Operator *,/,+,-,^,&} {Wert oder var}
let {Ergebnis var} = {Wert oder var} {=, ==,>,<,<>,<=,>=} {Wert oder var}
Kann auch ohne die LET-Anweisung verwendet werden
bla = 5 + 5
Erhöhung einer numerischen Variablen um eins. Kurz für x = x + 1: INC x
Verringerung einer numerischen Variablen um eins. Kurz für x = x - 1 zu: DEC x
= Gleich für Zahlen und für Zeichenketten
> größer als
< kleiner als
<> ungleich
>= größer gleich
<= kleiner gleich
+ Addition (nur Zahlen)
- Subtraktion
* Multiplikation
/ Division
^ Potenz
& Addition (Text)
% Modulo
Dimensioniert ein Array. Arrays, die ohne $ dimensioniert sind, werden als numerisch definiert. Arrays, die mit einem $ definiert werden, werden als String definiert. Arrays, die ohne das $ definiert werden, können als String definiert werden, indem man 'as string' am Ende der Zeile hinzufügt. Können wie andere Variablen verwendet werden. Kann nicht für GUI-Widgets verwendet werden.
dim arraynumeric( {Variable oder numerischer Wert} )
dim arraystring$( {variabler oder numerischer Wert} )
dim arraystring( {variabler oder numerischer Wert} ) as string
Gibt den von einem Array verwendeten Speicher frei
undim arraystring$
Eine weitere klassische Methode der Variablenzuweisung. Die Data-Zeilen dürfen über das ganze Programm verteilt sein.
Löscht alle Variablen, die
in einem Basic-Programm verwendet werden, aus dem Speicher.
memclear
Springt zur
Verzweigungsbezeichnung nach Wahl
goto {label} goto
[test3] goto
test3*
Springt zur Verzweigungsmarke nach Wahl und ermöglicht es, zu der Stelle zurückzukehren, von der aus der gosub-Befehl aufgerufen wurde, und den Code nach der Ausführung des return-Befehls weiter auszuführen. Der gosub-Befehl hat einen Stapel von 255 Rücksprungpunkten, so dass es möglich ist, innerhalb eines gosubs zu weitere Unterprogramme aufzurufen.
gosub {label} gosub label*
return
Beispiel:
Print "Some text"
Gosub [mySub]
Print "Some more text"
end
[mySub]
Print "Text from in the gosub"
return
Oder in dieser Version für den ESP32:
Print "Some text"
Gosub mySub
Print "Some more text"
End
mySub:
Print "Text from in the gosub"
return
Eine Verzweigungsbezeichnung (label) ermöglicht es, von einem Teil des Programms zu einem anderen zu springen. Sie kann aus einer einzigen Zeichenkette ohne Leerzeichen bestehen. Die [ und ] sind ursprünglich erforderlich, um eine Verzweigung zu definieren. [label] (Verzweigungs-Bezeichnungen wie in qbasic) In der esp32-Version können die Label mit schwer zugänglichen ][ durch einen Doppelpunkt ersetzt werden: Timer 500,label und label:
Mit dem Befehl Timer können Sie periodisch eine Verzweigung ausführen. Die Verzweigung muss mit dem Befehl wait beendet werden. Wenn Sie den Timer auf 0 setzen, wird er deaktiviert. Um Timer zu setzen: timer {Wert oder var für Wartezeit in Millisekunden}, {Zweigbezeichnung}. Um timer zu deaktivieren: timer 0
Das folgende Beispiel prüft den Status des Pins gpio 0 und gibt jedes Mal eine Nachricht an das serielle Terminal aus, wenn der Pin high ist. Wenn die Taste gedrückt wird und der Pin auf low gezogen wird, wird der Timer deaktiviert und die Meldung angezeigt, dass der Timer deaktiviert wurde.
Print "timer example"
Timer 1000, [test]
Wait
[test]
If io(pi,0) = 0 then
Timer 0
serialPrintln "timer has been disabled"
Else
serialPrintln "Button connected to gpio 0 is high"
Endif
wait
Mit dem TimerCB-Befehl (Call Branch) kann periodisch eine Unterprogramm aufgerufen werden. Sobald der Timercb-Befehl ausgeführt wurde, wird das Programm mit der Codezeile fortgesetzt, bei der er zuletzt war, so dass eine Unterprogramm ausgeführt werden kann, selbst wenn sich das Programm in einer Schleife befindet. Die Verzweigung muss mit dem Return-Befehl abgeschlossen werden. Wird der TimerCB auf 0 gesetzt, wird er deaktiviert. Um den Timer zu setzen:
timercb {Wert oder var für Wartezeit in Millisekunden}, {Verzweigungsbezeichnung}
Um den Timer zu deaktivieren: timercb 0
Das folgende Beispiel prüft den Status des Pins Gpio 0 und gibt jedes Mal eine Nachricht an das serielle Terminal aus, wenn der Pin high ist. Wenn die Taste gedrückt wird und der Pin auf low gezogen wird, wird der Timer deaktiviert und die Meldung angezeigt, dass der TimerCB deaktiviert wurde.
Print "timer example"
Timercb 1000, [test]
Wait
[test]
If io(pi,0) = 0 then
Timercb 0
serialPrintln "timer has been disabled"
Else
serialPrintln "Button connected to gpio 0 is high"
Endif
Return '(!)
Führt einen bestimmten Programmteil aus, wenn sich der Status eines
Pins ändert. Die Interrupt-Abfrage findet nur statt, wenn der ESP wartet und
ist nützlich für Dinge, wie das Auslösen von Ereignissen durch Drucktasten oder
Rotary-Encodern. Der Programmteil muss mit dem Befehl wait enden. Jedem als
Eingangs-GPIO verfügbarer Pin kann ein Interrupt zugeordnet werden.
Interrupt {Pin Nr.}, {Sprungmarke}
interrupt 3,[change]
wait
[change]
if io(laststat,3) = 1 then print "Pin put high" else print "Pin
put low"
wait
Mit der Lesefunktion können Daten abgerufen werden, die dauerhaft im Flash-Speicher (/data) des ESP-Moduls gespeichert sind. Die Funktion liefert eine Zeichenkette zurück.
Bla = read({Dateiname})
Mit dieser Lesefunktion können Daten abrufen werden, die dauerhaft im Flash-Speicher des ESP-Moduls gespeichert sind. Es wird ein numerischer Wert zurückgegeben.
Bla = read.val({Einzelteilname})
Der Schreibbefehl ermöglicht das dauerhafte Speichern einer Zeichenkette als Datenelement im Flash-Speicher (/data). Längere Texte oder Messwerte können mit chr(10) oder mit Kommata getrennt sein: write({Dateiname},{zu schreibende Zeichenkette})
Ermöglicht das Löschen eines Elements im /data-Verzeichnis, das in den Flash-Speicher geschrieben wurde. Verwenden Sie denselben Namen, den Sie beim Schreibbefehl verwendet haben.
del.dat({Dateiname})
Umbenennen einer Datei im Flash-Verzeichnis.
Lädt ein anderes Basic-Programm in den Speicher. Nützlich, um Programme miteinander zu verketten. Das Programm wird von Anfang an ausgeführt. Alle zuvor verwendeten Variablen bleiben im Speicher und sind für das geladene Programm verfügbar. Nützlich, um ein Programm-Projekt aufzuteilen. Programm liegen üblicherweise im Wurzelverzeichnis „/“.
load {Programmname}
LOAD "/myscript.bas" oder LOAD "/uploads/myscript.bas"
Liefert -1, wenn der angegebene Dateiname existiert, sonst 0.
Beendet das aktuell
laufende Programm.
end
Funktionen können anstelle von Variablen aufgerufen werden und geben normalerweise einen Wert zurück. Bei Funktionsnamen wird nicht zwischen Groß- und Kleinschreibung unterschieden, d.h. LeN() und len() sind beide gültig
Gibt die Länge der Zeichenkette zurück. Bla = len({String oder Variable})
Gibt die Position einer Teilzeichenkette innerhalb einer Zeichenkette zurück. Ein 3. optionales Argument erlaubt es, die Startposition für jede Suche festzulegen. Wird es weggelassen, beginnt die Suche an der ersten Zeichenposition. Bla = instr({Originalzeichenkette},{zu suchende Zeichenkette},{optionaler Start})
Gibt die Position des ersten Vorkommens einer Zeichenkette innerhalb einer anderen Zeichenkette zurück, ausgehend von der rechten Seite der Zeichenkette. Ein drittes optionales Argument erlaubt die Festlegung der Startposition für jede Suche, beginnend von der linken Seite der Zeichenkette. Wenn Start weggelassen wird, wird -1 verwendet, d.h. die Suche beginnt an der letzten Zeichenposition. Die Suche geht dann von rechts nach links vor. Bla = instrrev({Zeichenfolge oder Variablenname},{Zeichenfolge oder Variablenname zu suchen},{Start})
Gibt die Zeichenkette von der Startposition bis zur Endposition innerhalb der Eingabezeichenkette zurück. Bla = mid({zeichenkette oder Variable},{Startposition},{Anzahl der Zeichen})
Gibt eine Zeichenkette zurück, die eine bestimmte Anzahl von Zeichen von der linken Seite einer Zeichenkette enthält. Bla = left({String oder Variable },{Länge})
Gibt eine Zeichenkette zurück, die eine bestimmte Anzahl von Zeichen auf der rechten Seite einer Zeichenkette enthält. Bla = right({Zeichenfolge oder Variablenname},{Länge})
Gibt eine Zeichenkette zurück, bei der führende und nachfolgende Leerzeichen abgeschnitten sind. Bla = trim({String oder Variable })
Gibt die String-Darstellung einer Zahl zurück. Bla = str({Zahl oder Variable})
Gibt eine Zeichenkette zurück, nachdem der Suchtext durch den Ersatztext ersetzt wurde.Bla = replace({String oder Variable},{String, nach dem gesucht wird},{Ersatz-String})
Gibt ein Zeichen für die angegebene Zahl zurück. Bla = chr({Zeichenfolge oder Variable})
Gibt eine Zahl für das erste
Zeichen in einer Zeichenkette zurück.
Bla = asc({String
oder Variable })
Gibt die übergebene Zeichenkette in GROSSBUCHSTABEN zurück. Bla = upper({String oder Variable })
Gibt die übergebene Zeichenkette in Kleinbuchstaben zurück. Bla = lower({String oder var name})
Diese Funktion gibt das n-te Wort in der Zeichenkette, der String-Variablen oder dem String-Ausdruck zurück. Das Trennzeichen für die Zeichenkette ist optional. Wenn es nicht verwendet wird, dient das Leerzeichen als Trennzeichen. Bla = word( {Originalzeichenkette}, {Zahl}, {optionales Trennzeichen, Standard ist Leerzeichen} ) Beispiel: word("Der schlaue braune Fuchs sprang über den faulen Hund", 5) gibt "sprang" zurück
Liefert formatierte Zeichenketten numerischer Variablen in Anlehnung an
die printf()-Funktion in C.
format({String
oder var name},{num(s) or var(s)}. Bis zu vier Variablen werden berücksichtigt.
Beispiel: print
format("%5.2f",3.1415)
Funktionen können anstelle von Variablen aufgerufen werden und geben in der Regel einen Wert zurück. Bei Funktionsnamen wird nicht zwischen Groß- und Kleinschreibung unterschieden, d. h. Sqr() und sqr() sind beide gültig. In der Regel folgen dem Funktionsnamen Klammern.
Gibt die Quadratwurzel zurück. sqr({Wert oder Variablenname})
Gibt den Sinus eines Winkels zurück. sin({Wert oder var name})
Gibt den Kosinus eines Winkels zurück. cos({Wert oder Vari-Name})
Gibt den Tangens eines Winkels zurück. tan({Wert oder var name})
Gibt den Logarithmus des angegebenen Wertes zurück. log({Wert oder Vari-Name})
Gibt eine Zufallszahl bis zu dem angegebenen Wert zurück. rnd({Wert oder var name})
Gibt die Anzahl der Millisekunden seit dem Bootvorgang zurück. millis()
Gibt einen Integer-Wert zurück. int({String oder var name})
Gibt einen Wert aus einer Zeichenkette zurück. Funktioniert auch mit "&h", "0x" und "0b". val({String oder var name}), Beispiel: print val("0b10101010“)
Gibt den oct-Wert einer Ganzzahl zurück. oct({String oder var name})
Gibt den Hex-Wert einer ganzen Zahl zurück. Ein optionales 2. Argument definiert die Anzahl der Ziffern. hex({string oder var name},{nb_of_digits})
print hex(12) -> c
print hex(12, 2) -> 0c
print hex(2170) -> 87a
print hex(2170, 4) -> 087a
print hex(2170, 6) -> 00087a
Gibt einen Integer-Wert aus einem Hex-Wert zurück. hextoint({String oder var name})
Gibt einen Integer-Wert aus einem Binär-Wert zurück. bintoint({String oder var name})
Gibt die Menge des freien Speichers in Bytes zurück. ramfree()
Gibt die Menge an freiem Flash in Bytes zurück. Dies gilt nur für Flash, das für das Dateisystem vorgesehen ist. flashfree()
Entspricht der Arduino-Funktion und liefert den verhältnisgleichen NeuWert aus dem übergebenen Wert zurück. Nützlich bei Dreisatzproblemen: y = map(127, 0, 255, 0, 5) -> 2.5
Liefert den Kleineren von zwei Werten zurück.
Liefert den Größeren von zwei Werten zurück.
Vom Parser geerbte Funktion (C++-Stil)
Gibt x hochgezählt als Potenz von y zurück.
Gibt den Wert von e in der x-ten Potenz zurück.
Gibt den Arcussinus von x im Bogenmaß zurück.
Gibt den Arcus-Cosinus von x im Bogenmaß zurück.
Gibt den Arcustangens von x im Bogenmaß zurück.
Gibt den Arcustangens von y/x im Bogenmaß zurück, wobei die Vorzeichen beider Werte zur Bestimmung des richtigen Quadranten herangezogen werden.
Gibt den absoluten Wert von x umgewandelt in Ganzzahl zurück.
Gibt den absoluten Wert von x zurück.
Gibt den größten ganzzahligen Wert zurück, der kleiner oder gleich x ist.
Gibt den kleinsten ganzzahligen Wert zurück, der größer oder gleich x ist.
Gibt den ganzzahligen Wert zurück, der x am nächsten liegt, wobei in der Hälfte der Fälle von Null abgerundet wird, unabhängig von der aktuellen Rundungsrichtung.
Gibt den Wert der Zahl Pi zrück (nur esp32x)
Regressionen*
Gibt das Ergebnis für eine linerare Funktion als String zurück
Gibt das Ergebnis für eine Log-Funktion als String zurück
Gibt das Ergebnis für eine Pot-Funktion als String zurück
Gibt das Ergebnis für eine Exp-Funktion als String zurück
Gibt das Datum und die Uhrzeit als String zurück. Optional kann das Format angegeben werden, in dem das Ergebnis zurückgegeben werden soll. Optionen: Monat, Tag, Stunde, Min, Sek, Jahr, Dow (Wochentag, z. B. fri): Print time("time") 'time("hour:min:sec")
Erlaubt die Umwandlung von Datum/Uhrzeit vom Unix-Format (eine Zahl) in Text. Gibt das Datum und die Uhrzeit als String zurück. Optional kann das Format angegeben werden, das zurückgegeben werden soll. Optionen: month, date, hour, min, sec, year, dow (Wochentag, z.B. fri)
unixtime({Zahl} , {Optionale Angabe des Formats}).
Print unixtime(1459681200, "year")
Richtet die Zeitzone und das Sommerzeitattribut ein.
time.setup({Zahl oder var für Zeitzone},{Zahl oder var für dst},{optional server})
Gibt die Anzahl der Millisekunden seit dem Start zurück: Print millis()
Mit dem Befehl Timer ist es möglich, periodisch eine Verzweigung auszuführen. Die Verzweigung muss mit dem Befehl wait beendet werden. Wird der Timer auf 0 gesetzt, ist er deaktiviert. Um Timer zu setzen: timer {Wert oder var für Wartezeit in Millisekunden}, {Sprungmarke}. Um den Timer zu deaktivieren: timer 0.
Mit dem Befehl TimerCB (Call Branch) kann man regelmäßig ein Unterprogramm (Gosub) ausführen und den aktuell laufenden Code unterbrechen. Sobald die TimerCB-Routine ausgeführt wurde, wird sie mit der letzten Codezeile fortgesetzt, so dass eine Unterverzweigung ausgeführt werden kann, auch wenn sich das Programm in einer Schleife befindet. Die Verzweigung muss mit dem Return-Befehl abgeschlossen werden. Wird der TimerCB auf 0 gesetzt, ist er deaktiviert. Um den Timer zu setzen: timercb {Wert oder var für Wartezeit in Millisekunden}, {Verzweigungsbezeichnung}. Um den Timer zu deaktivieren: timercb 0.
Initialisiert die Zeit durch setzten der Zeitzone. ZeitzoneStrings entsprechen der Tabelle unter https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv#L374. Die Nummer L374 gilt für Mitteleuropa und lautet . Timezone stellt die neue Zeitzone sofort ein, speichert sie und legt sie zusätzlich in den Optionen ab. Sie bleibt auch nach einem Reset erhalten.
Liefert die aktuell wirkende Zeitzone als Zeichenkette (String).
Initialisiert die Zeit durch setzten der Zeitzone und Synchronisation mit pool.ntp.org. Ohne Zeitzone gilt CET, sie kann mit timezone() abgerufen werden.
Liefert lesbare Zeitangaben entsprechend der c-Funktion strftime. Die angegebene Tabelle stammt von https://cplusplus.com/reference/ctime/strftime/
Spec |
Replaced by |
Example |
%a |
Abbreviated weekday name * |
Thu |
%A |
Full weekday name * |
Thursday |
%b |
Abbreviated month name * |
Aug |
%B |
Full month name * |
August |
%c |
Date and time representation * |
Thu Aug 23 14:55:02 2001 |
%C |
Year divided by 100 and truncated to integer (00-99) |
20 |
%d |
Day of the month, zero-padded (01-31) |
23 |
%D |
Short MM/DD/YY date, equivalent to %m/%d/%y |
08/23/01 |
%e |
Day of the month, space-padded ( 1-31) |
23 |
%F |
Short YYYY-MM-DD date, equivalent to %Y-%m-%d |
2001-08-23 |
%g |
Week-based year, last two digits (00-99) |
01 |
%G |
Week-based year |
2001 |
%h |
Abbreviated month name * (same as %b) |
Aug |
%H |
Hour in 24h format (00-23) |
14 |
%I |
Hour in 12h format (01-12) |
02 |
%j |
Day of the year (001-366) |
235 |
%m |
Month as a decimal number (01-12) |
08 |
%M |
Minute (00-59) |
55 |
%n |
New-line character ('\n') |
|
%p |
AM or PM designation |
PM |
%r |
12-hour clock time * |
02:55:02 pm |
%R |
24-hour HH:MM time, equivalent to %H:%M |
14:55 |
%S |
Second (00-61) |
02 |
%t |
Horizontal-tab character ('\t') |
|
%T |
ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S |
14:55:02 |
%u |
ISO 8601 weekday as number with Monday as 1 (1-7) |
4 |
%U |
Week number with the first Sunday as the first day of week one (00-53) |
33 |
%V |
ISO 8601 week number (01-53) |
34 |
%w |
Weekday as a decimal number with Sunday as 0 (0-6) |
4 |
%W |
Week number with the first Monday as the first day of week one (00-53) |
34 |
%x |
Date representation * |
08/23/01 |
%X |
Time representation * |
14:55:02 |
%y |
Year, last two digits (00-99) |
01 |
%Y |
Year |
2001 |
%z |
ISO 8601 offset from UTC in timezone (1 minute=1, 1 hour=100) |
+100 |
%Z |
Timezone name or abbreviation * |
CDT |
%% |
A % sign |
% |
Stellt die interne Uhr, falls kein Internet-Zugang verfügbar ist. Bei Internet-Zugang stellt synchronisiert die Uhr nach einer Weile mit dem Time-Server
Stellt die Uhr wie oben mit Berücksichtigung einer möglichen Sommerzeit
Setzt Datum und Uhrzeit entsprechend der Zeichenkette "2024-04-08T10:13:24"
datetimepicker dt
button "ok",ende
wait
ende:
print dt
Liefert den UNIX-Zeitstempel
Liefert den UNIX-Zeitstempel des angegebenen Datums
Liefert den UNIX-Zeitstempel entsprechend der Zeichenkette "2024-04-08T10:13:24"
Liefert die Differenz in Sekunden von Zeichenketten der Art "2024-04-08T10:13:24". Die auf timestamp basierende Funktion liefert bis 2038 entsprechende Ergebnisse
Das Kommando wartet für ms Millisekunden und erlaubt während der Wartezeit die Darstellung neuer GUI-Elemente im Browser-Fenster. Auch nützlich zur Darstellung von Print-Ausgaben vor längeren Aktionen. Vergleichbar mit doEvents() in VBA. Der Browser bleibt ansprechbar im Gegensatz zu delay ms. Pause kann nicht zusammen mit Timer verwendet werden.
Schaltet den ESP für eine bestimmte Anzahl von Sekunden in den Ruhezustand. Dies spart Strom und ermöglicht eine längere Nutzung bei Batteriebetrieb. Zu beachten: Der Ruhemodus führt zu einem vollständigen Neustart des ESP (reboot). Das Gerät führt das Standardprogramm von Anfang an aus. Es dauert 30 Sekunden, bevor das Gerät nach dem Neustart das Standardprogramm default.bas startet.
print "testing sleep in 5 seconds for 10 seconds"
timer 5000,[tm]
wait
[tm]
sleep 10
wait
Schaltet das Gerät in den Ruhezustand. Es kann nur durch ein externes Signal erneut starten. Dies spart Strom und ermöglicht eine längere Nutzung im Batteriebetrieb. Zu beachten: Der Ruhemodus führt beim Erwachen durch ein Spannungspegel level am gpio zu einem vollständigen Neustart des Geräts. Das Standardprogramm wird von Anfang an ausgefürt. Es dauert 30 Sekunden, bevor das Gerät nach dem Neustart das Standardprogramm default.bas startet. Nicht alle gpio sind erlaubt. Sleep.info?
print "Sleep External"
sleepext 30,1
print "hi"
end
Oder mit PRG-Taster an GPIO 0 des ESP32-S3:
print "Sleep External"
sleepext 0,0
Es ist möglich, ein " oder ein | als String-Literale zu verwenden; dies erlaubt es, das " oder | in einen String einzuschließen;
A = |dies ist eine Zeichenkette|
B = "dies ist eine Zeichenkette"
Das '=' oder '==' liefert das gleiche Ergebnis für String und Zahlen. Die Zeichenkette kann auch mit >, <, etc. verglichen werden.
Die klassischen "einfachen" binären Operatoren sind verfügbar:
and, or, xor, not
Beispiel:
print 255 and 15;
let a = 255 xor 15;
let b = not 15;
let c = a or b
Es gibt die Operatoren '<<' und '>>' zum Verschieben nach
links und rechts. Beispiel:
print 15 <<
3;
let c = a >> 4
Der Modulo-Operator '%' ist verfügbar. Beispiel: print 10 % 3
Alle booleschen Operatoren können in dem Befehl 'if' verwendet werden:
If a = b and c<>d then .....
Alle Vergleiche können in Ausdrücken verwendet werden. Wenn das Ergebnis true ist, wird der Wert -1 sein, 0 ist false. Beispiel
let a = 5 <> 3 '⇒ -1
print 5+3 = 8 '⇒ -1
print 5-4 = 2 '⇒ 0
Leerzeichen sind irrelevant:
A = 5 + 3 ist dasselbe wie a=5+3
Löscht den Bildschirm (Browser) und den GUI-Puffer: cls
Druckt Text nur in den Web-Browser. Der Text wird nach dem Wartebefehl wait an den Browser gesendet. Es erfolgt kein Zeilenvorschub. Ein "<br>" erfüllt diesen Zweck, ein "<hr>" fügt zusätzlich eine horizontale Linie ein. Auch alle PRINT-Ausgabe erscheinen erst nach einem wait im Browser-Fenster. Abhilfe schafft der Befehl Pause. wprint {value oder var}: Html "Hallo Welt<hr>"
Html |Hallo Welt<br>Neue Zeile|
Um eine dynamische Variable zu platzieren, die bei jeder Aktualisierung der Seite mit dem aktuellen Inhalt dieser Variable aktualisiert wird, verwenden man die Funktion htmlvar. Jedes Mal, wenn der Browser aktualisiert wird, wird der aktuelle Inhalt der Variablen in die Seite eingefügt. wprint htmlvar({var name}).
a = 2*4
wprint " Variable a ist: " & htmlvar(a)
Fügt ein Bild in die Web-Seite ein. Die Bilddatei sollte mit dem Dateimanager auf das Gerät hochgeladen worden sein. Wenn der Bilddateiname mit http:// oder https//* beginnt, können Sie auf ein Bild verweisen, das auf einem Webserver gespeichert ist, um Platz im ESP-Dateisystem zu sparen. Image {Bilddateiname}
image "http://hjberndt.de/book/200PICOW.jpg"
Funktioniert wie ein goto-Befehl. Wird bei einem wait-Befehl an den Browser gesendet. Springt zur Verzweigungsbezeichnung, wenn er im Browser angeklickt wird.
Button {Wert oder var}, {Verzweigungsbezeichnung}
1 Print "Bowser-Input-Test...<hr>"
2 Print "Hi, I'm Eliza. Tell me about your problem.<form>"
3 a = "I'm so tired."
4 textbox a
5 button "Enter", ok, focus
6 html "</form>" ' Eingabe-Taste
7 wait
8 ok:
9 if a = "" then print "Looser" else print a
Funktioniert wie ein goto-Befehl Wird bei einem wait-Befehl an den Browser gesendet. Springt zur Verzweigungsbezeichnung, wenn er im Browser angeklickt wird. Die Bilddatei muss mit dem Dateimanager auf das Gerät hochgeladen worden sein, kann aber auch wie ein Image direkt aus dem Netz kommen*. ImageButton {Bilddateiname}, {Verzweigungsbezeichnung}. Beispiel für eine spektakulär aussehende Bild-Schaltfläche:
url ="https://www.galeriemode.de/wp-content/uploads/2019/03/94f01d51b31b.jpg"
imagebutton url, go
wait
go:
cls
end
Der Text innerhalb der Texteingabe wird mit dem Inhalt der Variablen
gefüllt. Wird im Browser beim wait-Befehl oder pause-Befehl angezeigt.
textbox {var
name}
a = pi()
textbox a
pause 3000
end
Der Text in der Passworteingabe
wird mit dem Inhalt der Variablen gefüllt. Wird beim wait-Befehl oder pause-Befehl im
Browser angezeigt.
passwortbox
{var name}
Der Schieberegler wird mit einem
Höchst- und einem Mindestwert erstellt.
slider {Var
name}, {min Wert}, {max Wert}
a = 5
slider a, 0, 10
Das ausgewählte Element wird der angegebene Variablen
zugewiesen.
dropdown
{Var name}, {Elementliste durch Kommas getrennt}
Beispiel: dropdown
bla, "Eins, Zwei, Drei"
bla = "Zwei"
dropdown bla, "Eins, Zwei, Drei"
pause 4000
print bla
Das ausgewählte Element wird der angegebenen Variablen zugewiesen.
listbox {var
name}, {Elementliste durch Kommas getrennt}, {Höhe in Elementen}
Beispiel: listbox bla, "Eins,Zwei,Drei", 5
bla = "Zwei"
listbox bla, "Eins,Zwei,Drei", 5
onchange change
wait
change:
print bla
end
Fügt ein HTML-Meter-Element in die Seite ein. Wird aktualisiert, wenn
die Variable geändert wird. meter
{var name}, {min Wert}, {max Wert} [, {low* Wert}, {high* Wert}, {optimum*
Wert}]
x = 50
Meter x, 0, 100
Fügt ein HTML-Checkbox-Element in die Seite ein. Wird aktualisiert, wenn die Variable geändert wird. checkbox {var name}
c = 1
checkbox c
print c
onchange changed
wait
changed:
print c
end
Fügt ein HTML-Radio-Button-Element in die Seite ein. Es wird aktualisiert, wenn die Variable geändert wird. radio {var name}
c = 0
radio c
print c
onchange changed
wait
changed:
print c
end
Fügt ein HTML-Timepicker-Element in die Seite ein.
timepicker
{var name}
Fügt ein HTML Datetime-Element in die Seite ein. Wird aktualisiert, wenn der Picker geändert wird. datetimepicker {var name}
Filepicker*:
Fügt ein HTML Filepicker-Element in die Seite ein. Wird aktualisiert,
wenn die Variable geändert wird.
Colorpicker*:
Fügt ein HTML Colorpicker-Element in die Seite ein. Wird aktualisiert,
wenn die Variable geändert wird.
colorpicker c
textbox c
wait
OnLoad:
Optionale Verzweigung, die jedes Mal ausgeführt wird, wenn eine Seite geladen
wird. Dieser Code wird ausgeführt, bevor die Seite zurückgegeben wird, aber
nach allen Verzweigungen für Schaltflächen. Die Verzweigung muss mit dem Befehl
wait
abgeschlossen werden.
onload
{Verzweigungsbezeichnung}
Sendet alle aufgelaufenen Befehle der Benutzeroberfläche an
den Browser. Der Browser wird angezeigt, sobald dieser Befehl ausgeführt wird.
Der ESP wird in einen Wartezustand versetzt, damit Benutzerinteraktionen wie
das Drücken von Schaltflächen im Browser oder Pin-Interrupt-Funktionen
ausgeführt werden können. Das Programm hält an, wenn eine Benutzerinteraktion
stattfindet.
wait
Sendet alle gesammelten GUI-Befehle an den Browser. Der Browser-Inhalt wird angezeigt, sobald dieser Befehl ausgeführt wurde. Das Programm fährt mit der Ausführung der nächsten Zeilen nach diesem Befehl fort. Dieser Befehl aktualisiert den gesamten Inhalt des Browser-Fensters mit allen Aktualisierungen oder Änderungen, die mit der Funktion htmlvar() an Variablen vorgenommen wurden: returngui
Die Funktion html_id() gibt die zufällig generierte ID für das zuletzt erstellte GUI-Objekt zurück. Nützlich für Javascript-Interaktionsmöglichkeiten: id = htmlid()
Guioff löscht den Html-Speicher und verhindert, dass zusätzliche Daten mit Gui-Befehlen wie print, wprint, html, button ect. hinzugefügt werden. Deaktiviert auch die Web-Sockets. Gut für Programme, die sehr schnelle Antworten von Interrupts etc. benötigen: GUIoff
Schaltet die GUI-Funktionen wieder ein, wenn sie mit GUIOFF deaktiviert wurden: GUIon
Der Befehl cssid wendet css auf das gewünschte Element nach der ID an. Er sollte unmittelbar nach der Erstellung eines GUI-Objekts ausgeführt werden: cssid htmlid(), "background-color: yellow"
CSSCLASS:
Der Befehl cssclass wendet CSS auf die gewünschte Klasse von
GUI-Objekten an. Alle Schaltflächen werden auf die Farbe Gelb gesetzt: cssclass
"button", "background-color: yellow;"
JAVASCRIPT:
Ermöglicht es, Javascript-Dateien in einer Seite einzubinden. Die Datei muss
mit dem Dateimanager zuvor hochgeladen worden sein.
javascript
{Dateiname}
CSS:
Ermöglicht es, CSS-Dateien in die Seite einzubinden. Die Datei muss mit dem
Dateimanager zuvor hochgeladen worden sein.
css {Dateiname}
JSCALL:
Ermöglicht die Ausführung von Javascript im Webbrowser, um eine Funktion
aufzurufen, die in einer Javascript-Datei (Flash) enthalten ist, die mit dem
Befehl javascript aufgerufen wird.
jscall
{Funktionsname}, Beispiel:
Javascript "beep.js" 'schließt die js-Datei in die Webseite ein
Jscall "beep" 'Aufruf der Beep-Funktion aus dem in die Seite geladenen Javascript.
Farben sind optional. Wenn keine Farbe angegeben wird, ist
die Standardfarbe Schwarz. Beispiele finden Sie unter /graphics-example.html
und /graphic-clock-example.html.
Farbpalette
0 = Schwarz
1 = Marineblau
2 = Grün
3 = Türkis
4 = Kastanienbraun
5 = Violett
6 = Olivgrün
7 = Silber
8 = Grau
9 = Blau
10 = Limette
11 = Wasserfarben
12 = Rot
13 = Fuchsie
14 = Gelb
15 = Weiß
Fügt der Seite ein grafisches Element hinzu. Jeder Parameter
kann eine Variable oder ein Wert sein.
graphics
{Breite}, {Höhe}
Löscht den Grafikpuffer.
gcls
Erzeugt eine Linie als Grafikelement. Jeder Parameter kann
eine Variable oder ein Wert sein.
line {x1}, {y1}, {x2}, {y2}, {color}
Erzeugt einen Kreis als
Grafikelement. Jeder Parameter kann eine Variable oder ein Wert sein.
circle {x1},
{y1}, {Radius}, {Farbe}
Erzeugt eine Ellipse als
Grafikelement. Jeder Parameter kann eine Variable oder ein Wert sein.
ellipse {x1},
{y1}, {radiusX}, {radiusY}, {Farbe}
Erzeugt ein Rechteck als Grafikelement. Jeder Parameter kann
eine Variable oder ein Wert sein.
rect
{x1}, {y1}, {radiusX}, {radiusY}, {Farbe}
Erzeugt Text als Grafikelement. Jeder Parameter kann eine Variable oder
ein Wert sein.
text {x1},
{y1}, {Anzuzeigender Text}, {Winkel}, {Farbe}
Internet-Funktionen:
Holt den HTML-Inhalt einer Webseite und gibt ihn als String zurück. Kein "http://" vor der URL. Standardmäßig wird Port 80 verwendet, wenn keiner angegeben wird.
wget({String oder var name für url},{Optionale Portnummer})
Holt den HTML-Inhalt einer (kleinen!) https-Webseite und gibt ihn als String zurück. Kein "https://" vor die URL. Beispiel: print len(wgets("www.jogis-roehrenbude.de/"))
wgets({String oder var name für url})
Gibt eine 1 zurück, wenn der Endpunkt erreichbar ist, und eine 0, wenn nicht.
Bla = ping("192.168.1.1")
Bla = ping("google.com")
Gibt die IP-Adresse des Geräts als String zurück.
ip()
Michael Moulinari entwickelte ein UniversalPinIO-System indem alle einfachen Pin-Ein- und Ausgaben zentral über die io()-Funktion stattfinden. Alternative* Aufrufe bewirken Gleiches.
Digital I/O
Po (port out) erlaubt es, den Gpio-Pin auf high oder low zu setzen. Vgl. digitalWrite: Beispiel: io(po,2,1)
PinOut erlaubt es, den Gpio-Pin auf high oder low zu setzen. Beispiel: pinout 2,1 ruft intern io(po,2,1) auf.
Pi (port in) liefert den Zustand eines Gpio Pins pin als 0 oder 1. Beispiel: x = io(pi,0)
Nützlich zum Lesen von Drucktasten und anderen digitalen Eingängen.
Pu (port in pulldown) liefert den Zustand eines Gpio Pins pin als 0 oder 1. Der Eingang wird mit einem PullUp-Widerstand initialisiert, so dass offene Eingänge eine 1 liefern. Beispiel: x = io(pu,0)
Nützlich zum Lesen von Drucktasten und anderen digitalen Eingängen.
PinIn liefert den Zustand eines Gpio Pins pin als 0 oder 1 entsprechend x = io(pu,0): x = PinIn(0)
Pd (port in pulldown) liefert den Zustand eines Gpio Pins pin als 0 oder 1. Der Eingang wird mit einem PullDown-Widerstand initialisiert, so dass offene Eingänge eine 0 liefern. Beispiel: x = io(pd,0)
Nützlich zum Lesen von Drucktasten und anderen digitalen Eingängen.
Digital Out gibt einen Wert (Byte) an den mit dout anfang, anzahl festgelegten Digitalausgängen parallel aus (üblicherweise bis 8 Pins). Nützlich für Digitalzähler und Lauflichter mit LED oder zum Aufbau eines eigenen DAC: dout 7
Legt den Anfangs-GPIO zur parallelen Ausgabe fest. Der zweite Wert legt die Anzahl fest: dout 1,4
Liefert einen Wert (Byte) an den mit din anfang, anzahl festgelegten parallelen Digitaleingängen. Aufruf als Funktion: x = din()
Legt den Anfangs-Gpio zur parallelen Eingabe fest. Der zweite Wert legt die Anzahl fest: din 5,4
Digital PWM I/O
Pwo (PWM Out) legt ein PWM-Signal an den angegebenen Pin: io(pwo,3,127)
PWMOut ist eine alternative Schreibweise für PWM-Ausgaben. Beispiel: pwmOut 2,127 ruft intern io(pwo,2,127) auf.
PWMOut** ist ein experimentelles pulseOut: Duration in
Mikrosekunden. Mit pwmfreq
40000, sendet pwmout 13,127,200 theoretisch 8 Perioden aus
(Ultraschall).
Liefert den PWM-Wert des
angegebenen Pins:
io(pwo,6,100) 'Pin6
mit Pin7 verbunden
print io(pwi,7) '-> 99
Legt die Frequenz des PWM-Signals fest. Voreinstellung ist 1 kHz: pwmFreq 1000
Legt die Bereich des PWM-Signals fest. Voreinstellung ist 255: pwmRange 1024
Legt die Auflösung in Bit des PWM-Signals fest. Voreinstellung ist 8: pwmRes 10
Erzeugt einen PWM-Ton am Pin mit Frequenz und Dauer: tone 4,1000,100
Beendet sofort die Tonausgabe am Pin: notone 4
Liefert die Impulsdauer am Pin in Mikrosekunden. Warten auf eine abfallende Flanke ab Pin 3: us = pulseIN(3,0). Das Default-Timeout ist 5 Sekunden, wie: us = PulseIN(2,0,5e6)
Liefert die Impulsdauer am Pin in Mikrosekunden. Kurzform von PulseIN(pin,1,5e6).
Liefert die Impulsdauer am Pin in Mikrosekunden. Kurzform von PulseIN(pin,0,5e6).
Liefert die Anzahl der Impulse am Pin, die Während der Tor-Zeit auftreten. Ohne Angaben beträgt die Tor-Zeit eine Sekunde (1e6) in Mikrosekunden: N = Counter(2).
Startet einen Timer und erzeugt einen PWM-Ton am outPin mit Frequenz/Hz und Dauer/ms, wie tone. Dann wird mit pulseIn gewartet, bis am inPin eine positive Flanke auftaucht. Die Zeitdifferenz wird in Mikrosekunden zurück geliefert. dt = echo(22,40000,25,27) ' CYD
Setzt den Winkel eines an den GPIO-Pin angeschlossenen 180°-Servos. Der Winkel muss zwischen 0 und 180 liegen. Servo-Speisespannung beachten. Alternativ als Funktion aufrufbar: io(servo,2,90)
Setzt den Winkel eines an den GPIO-pin angeschlossenen Servos. Der Winkel muss zwischen 0 und 180 liegen. Servo 2,90 ; Alternativer Befehl zu: io(servo,2,90)
Diese Funktion liefert den zuletzt gesetzten Status eines Pins, z. B. eines Interrupts, und behält den Wert bei, bis er sich bei einem anderen Abfrageereignis erneut ändert. Außerdem kann man damit den letzten Wert überprüfen, der an einen Pin für Servo, Pwm oder Po gesendet wurde. Insbesondere nützlich bei Steuerungen über das Internet: x = io(laststat,5)
Analog I/O
Fragt den ersten Analogeingang des ESP-Chips ab. Nützlich zum Abrufen von Analogwerten von Fotowiderständen und anderen Gleichspannungsgebern: adc = io(ai)
Liefert eine Zeichenkette mit den GPIO von unterstützten Analogeingängen der jeweiligen ESP-Variante.
Fragt weitere vier Analogeingänge (n = 0…4) des ESP-Chips ab. Die Pins sind dem jeweiligen Pinout des verwendeten Boards zu entnehmen. Nützlich zum Abrufen von Analogwerten von Fotowiderständen und anderen Gleichspannungsgebern: a = io(a4)
Liefert Zahlenwerte eines kapazitiven Touch-Sensors. t = touch(2)
Alternativer Aufruf von io(an) mit n von 0 bis 4: d = ain(0)
Liefert den Spannungswert in Volt entsprechend ain bezogen auf 3,3 V: u = vin(0)
Liefert den Arithmetischen
Mittelwert am angegebenen Eingang: u = uar(1)
Optional kann ein Offset übergeben werden zur Verschiebung der
‚Nullinie‘.
Liefert den Effektiv-Wert (True
RMS) am angegebenen Eingang: u
= ueff(1)
Optional kann ein Offset übergeben werden zur Verschiebung der
‚Nullinie‘.
Integrierte DAC in ESP32 und ESP32-S2:
Gibt eine reine Analogspannung am ersten DAC eines ESP mit integriertem DAC aus: io(dac,127)
Gibt eine reine Analogspannung am ersten DAC eines ESP mit integriertem DAC aus: io(dac1,127)
Gibt eine reine Analogspannung am zweiten DAC eines ESP mit integriertem DAC aus: io(dac2,127)
Nur ESP32
Liefert Zahlenwerte des in einem ESP32 verbauten Hall-Sensors. Der Hall Señor wird nur vom Ur-ESP32 unterstützt. h = io(hall)
Initialisiert das Sampling-Modul. Voreingestellt ist ADC0. Ein ADC_Channel entspricht nicht immer dem Analogeingang ADC, hier GPIO 35 des CYD: capture.begin(7)
Deaktiviert das Sampling-Modul: capture.end()
Liefert 100 Samples des Analogeingangs bei eingestallter Sampling-Rate in einem String. Die Werte sind durch Komma getrennt: a = capture()
Legt die Messungen pro Sekunde fest: capture.rate(10000)
Legt die Triggerschwelle der Messdaten fest. Level 0 schaltet die Triggerung aus: capture.level(128)
Liefert den niedrigsten Wert der Sampledaten: min = capture.min()
Liefert den höchsten Wert der Sampledaten: max = capture.max()
Generiert am internen 8-Bit-DAC2 eine Sinusschwingung in Bereich 135 bis 135000 Hz. Am CYD-ESP32-Board liegt DAC2 am Verstärker-Eingang. Das Wechselspannungs-Signal kann verstärkt am Lautsprecher-Anschluss abgegriffen werden: DacGen 1000
Stellt die Amplitude in Teilen der DAC-Schwingung ein: Werte 1, 2, 4, 8. (8 -> 1/8 usw.)
Gibt nur Text oder eine Variable auf der seriellen Schnittstelle aus. Es wird kein Zeilevorschub oder Wagenrücklauf hinzugefügt.
Gibt nur Text oder eine Variable über die serielle Schnittstelle aus. Endet mit einem Zeilenvorschub.
Setzt die Baudrate für die serielle Kommunikation.
Fordert Eingaben über die serielle Schnittstelle vom Benutzer an und speichert sie in einer Variablen. Die Variable muss vor der Abfrage nicht deklariert werden.
Liefert alle über die serielle Schnittstelle empfangenen Daten in die Variable. Nützlich in Kombination mit dem Befehl serialbranch (siehe Beispiel unten)
Löscht den seriellen Eingabepuffer. Verwirft alle im Puffer gespeicherten Zeichen.
Bewirkt, dass der Eingabebefehl den gesamten Inhalt des seriellen Puffers zurückgibt, auch wenn kein CR LF vorhanden ist. Die Angabe eines Wertes von 0 deaktiviert den seriellen Timeout. Jeder Wert ungleich Null ist die Anzahl der Millisekunden, die gewartet wird, bevor ein Eingabebefehl ausgelöst wird. Voreinstellung ist 0 (deaktiviert!)
Gibt ein einzelnes Zeichen aus dem seriellen Puffer als Ganzzahl zurück. Nächstes Zeichen wird bei jeder Verwendung erfasst: Bla = serial.read.int()
Gibt ein einzelnes Zeichen aus dem seriellen Puffer als String zurück. Greift bei jeder Verwendung das nächste Zeichen: Bla = serial.read.chr()
Gibt die Anzahl der Zeichen im Puffer zurück: Bla = serial.available()
SERIELLER ANSCHLUSS 2:
Ein vollständiger serieller Port #2 ist neben USB-Serial verfügbar. Der Port verwendet vorgegebene RX/TX Anschlüsse des jeweiligen Boards, die meist auch geändert werden können. Die Geschwindigkeit kann ein beliebiger Wert bis zu 115200 sein. Das Format ist auf 8N1 festgelegt.
Öffnet die serielle Schnittstelle 2 mit 8N1 der festgelegten Baudrate. Es ist optional möglich, die mit TX und RX verbundenen Pins zu definieren: serial2begin 115200,5,4
Ein letzter Parameter kann die Übertragungsart festlegen, so wie bei der RP2040 Variante: Serial2Begin kennt noch einen vierten Parameter als Konfiguration, der Parität, Anzahl der Bits und Länge der Stoppbits festlegt. Die Implementierung ist experimentell und verwendet folgend hexadezimale Tabelle.
DATA_5 0x100 |
STOP_BIT_1 0x10 |
PARITY_EVEN 0x1 |
DATA_6 0x200 |
STOP_BIT_1_5 0x20 |
PARITY_ODD 0x2 |
DATA_7 0x300 |
STOP_BIT_2 0x30 |
PARITY_NONE 0x3 |
DATA_8 0x400 |
|
PARITY_MARK 0x4 |
|
|
PARITY_SPACE 0x5 |
Die drei Hex-Zahlen werden addiert und als Wert übergeben. Standard ist
8N1 mit 0x413. Soll die Übertragung mit 1200,7,N,2 laufen, so führt Serial2begin
1200, RX, TX, Val("0x333“) zum Ziel.
Schließt die serielle Schnittstelle 2.
Gibt nur Text oder eine Variable auf der seriellen Schnittstelle aus. Es wird kein Zeilevorschub oder Wagenrücklauf hinzugefügt.
Gibt nur Text oder eine Variable über die serielle Schnittstelle aus. Endet mit einem Zeilenvorschub.
Liefert alle von der seriellen Schnittstelle 2 empfangenen Daten an die Variable.
Nützlich in Kombination mit dem Befehl serial2branch.
Definiert eine Verzweigung, die ausgeführt wird, wenn eine serielle Eingabe empfangen wird: serialbranch [serialin]
wait
[serialin]
serialinput zz$
serialprint "empfangen:"
serialprintln zz$
return
Definiert eine Verzweigung, die ausgeführt wird, wenn eine serielle Eingabe an Anschluss Nr. 2 empfangen wird:
serial2branch [serial2in]
wait
[serial2in]
serial2input zz$
serial2print "empfangen:"
serial2println zz$
return
Liefert eine Zeichenkette mit Informationen zu den i2c-Anschlüssen.
Beginnt die Übertragung an das I2C-Gerät mit der gewünschten Adresse.
Ändert die Standard-Pins für die I2C-Schnittstelle.
Sendet ein einzelnes Zeichen bzw. Wert (1 Byte) an das I2C-Gerät.
Beendet die i2c-Kommunikation mit einem bestimmten Gerät.
Fordert eine Anzahl von Bytes vom Gerät an.
Gibt die Anzahl der Bytes zurück, die zum Abruf mit i2c.read() zur Verfügung stehen.
Gibt ein einzelnes Zeichen als Ganzzahl zurück. Das zurückgegebene Zeichen ist das nächste aus dem Puffer.
Liefert eine Zeichenkette mit Dezimal-Adressen angeschlossener Geräte an den Pins SCL/SDA
Liefert einen Wert ungleich 0, wenn ein Gerät an der angegebenen Adresse (ID) reagiert.
Konstante mit voreingestelltem I2c-Pin des verwendeten Chips.
Konstante mit voreingestelltem I2c-Pin des verwendeten Chips.
Verwendet wird der erste SPI-Anschluss des jeweiligen Chips. Über die Konstanten der SPI-Schnittstelle lassen sich die vorgegebenen Anschlüsse erfragen.
Liefert eine Zeichenkette mit Informationen zu den SPI-Anschlüssen.
Konstante des Daten-Ausgangs (Master-Ausgang, Slave-Eingang)
Konstante des Daten-Eingangs (Master Input, Slave Output)
Konstante des Pins für den SPI-Takt (Clock)
Konstante für den voreingestellten Chip-Select-Pin des jeweiligen Chips. Der CS-Pin kann auch ein beliebiger Pin sein. (gesteuert durch das Benutzerprogramm)
Öffnet den SPI-Port und stellt die Geschwindigkeit ein. Es ist möglich,
optional den SPI_MODE und die Bitfolge zu definieren. Standardmäßig sind diese
Werte SPI_MODE0 und MSB_FIRST.
spi.setup()* ->
Voreinstellungen werden benutzt
spi.setup(1000000) -> 1Mbit/sec, Modus 0, MSB_FIRST
spi.setup(500000, 1, 1) -> 500Kb/sec, Modus 1, MSB_FIRST
spi.setup(100000, 1, 0) -> 100Kb/sec, Modus 1, LSB_FIRST
Schreiben und Empfangen von Bytes zur gleichen Zeit (die Argumente sind Zahlen)
Der empfangene und der gesendete Wert sind Zahlen (Byte). Kann als Befehl verwendet werden, wenn das empfangene Argument nicht benötigt wird. Register nur lesen:
spi.byte(register)
datum = spi.byte(0)
Schreiben und Empfangen einer Zeichenkette mit len Zeichen: dat$ = spi.string("Hallo Welt!", 12)
Schreiben und Empfangen eines Strings mit einer hexadezimalen Nachricht, die len Bytes entspricht: dat$ = spi.hex("a1b2c3d4e5f6", 6) -> 6 Bytes senden (Folge von a1, b2, c3, d1, e5, f6) und in dat$ empfangen.
Ermöglicht das Ändern von spi-MODE (0/1/2/3) im laufenden Betrieb, nachdem die spi.setup-Funktion verwendet wurde.
Ermöglicht das Ändern von spi-LSB/MSB (0/1) im laufenden Betrieb, nachdem die spi.setup-Funktion verwendet wurde.
Ermöglicht die fliegende Änderung der spi-Frequenz, nachdem die spi.setup-Funktion verwendet wurde.
1 PRINT SPI.info()
2 PinOut CS,1
3 spi.setup(500000,0,1) 'spi.setup()
4 PinOut CS,0
5 spi.byte(val("0x42")) 'REGISTER SX1278
6 id = spi.byte(0) 'ID readonly
7 PinOut CS,1
8 PRINT "0x" & hex(id)
Default GPIO: MISO 13 MOSI 11 SS 10 SCK 12
0x12
Done.
Verbindet mit dem WLAN-Netzwerk (Router) unter Verwendung der SSID
und des Passworts. Optional können die IP-Adresse, das Gateway und die
Subnetzmaske für eine statische IP angeben werden.
Nur SSID: wifi.connect(
{SSID} )
SSID und PASSWORT: wifi.connect( {SSID}, {Passwort})
Statische IP: wifi.connect( {SSID}, {Passwort}, {ip}, {gateway}, {netmask} )
Erstellt einen Zugangspunkt (Access Point, HotSpot) mit dem angegebenen
Namen und Passwort. Wenn das Passwort nicht angegeben wird, handelt es sich um
ein offenes Netzwerk.
Offenes Netzwerk: wifi.ap(
{SSID} )
SSID und PASSWORT: wifi.ap( {SSID}, {Passwort})
Schaltet das gesamte Netzwerk für den STA- und AP-Modus aus.
Der WiFioff-Befehl kann aufgerufen werden, um das gesamte Netzwerk zu
deaktivieren. Der Befehl AP oder CONNECT, wenn er nach WiFioff
ausgeführt wird, aktiviert den jeweiligen WiFi-Modus. Mit jedem dieser Befehle lassen
sich beide Modi jederzeit wieder einschalten.
Wifioff
Ermöglicht die gleichzeitige
Verwendung der Befehle connect und ap, um eine Verbindung zu
einem Netzwerk herzustellen und gleichzeitig einen Zugangspunkt zu erstellen.
wifiapsta
Gibt die Anzahl der verfügbaren Wifi-Netzwerke zurück. NumberOfNetworks = wifi.scan()
Gibt den Netzwerknamen für das
ausgewählte Netzwerk zurück. Muss zuerst einen wifi.scan() ausführen.
wifi.ssid({Var
für Netzwerknummer})
Gibt die Signalstärke für das
ausgewählte Netzwerk zurück. Muss zuerst einen wifi.scan() ausführen.
wifi.rssi({Var
für Netzwerknummer})
Gibt die Mac-Adresse für das
ausgewählte Netzwerk zurück. Muss zuerst einen wifi.scan() ausführen.
wifi.bssid({Var
für Netzwerknummer})
Gibt den Status der Netzwerkverbindung als numerischen Wert zurück.
x = wifi.status()
Msg-Handler-Ereignisse werden nur übergeben, wenn eine Anfrage an die URL http://device ip/msg? verwendet wird. Siehe Beispiel https://www.esp8266basic.com/examples.html für weitere Informationen.
Legt den Zweig für die Behandlung von msg input urls fest. Dieser Zweig wird ausgeführt, wenn die URL "http://device ip/msg?" aufgerufen wird. Alternative: onServer*
Ruft ein Url-Argument ab und legt es in einer Variablen ab. Beispiel: Ruft das URL-Argument "color" ab und platziert es in myColorVar. Verwenden Sie die Adresszeile im Browser, um auf "ip/msg?farbe=blau" zuzugreifen: myColorVar = msgget("farbe")
Setzt den Text, der vom Server zurückgegeben werden soll. Es wird kein zusätzliches HTML bereitgestellt, nur Text. Überschreibt den vorherigen Rückgabetext, wenn er mehr als einmal aufgerufen wird. Der Text wird zurückgegeben, wenn der Interpreter auf den Befehl wait stößt.
Startet einen UDP-Server, der auf dem angegebenen Port lauscht. Localport ist eine Nummer (z.B. 1234): udpbegin 4300
Stoppt den UDP-Server. Funktioniert für UdpBegin und UdpBeginMulticast
Startet einen UDP-Server-Multicast, der an der angegebenen Adresse und dem angegebenen Port lauscht. Die Multicast-IP muss im Bereich 224.0.0.0 bis 239.255.255.255 liegen: udpbeginmulticast "224.0.0.67", 4567
Schreiben eines Strings an eine entfernte IP und einen Port. ip_address ist eine Zeichenkette (z.B. "192.168.1.123"), message ist eine Zeichenkette (z.B.: "Dies ist eine gültige Nachricht"), udpwrite {ip_address}, {port}, {message}, port ist eine Zahl (z.B.: 5000): udpwrite "192.168.1.12", 3000, "Nachricht OK"
Schreiben eines Strings an eine Multicast-IP und einen Port, ip_address ist eine Zeichenkette (z.B.: "224.0.0.50"), message ist eine Zeichenkette (z.B.: "Dies ist eine gültige Nachricht"), port ist eine Zahl (z.B.: 6000): udpwritemulticast "224.0.0.55", 3100, "Nachricht NICHT zugestellt!"
Sendet eine UDP-Nachricht zurück an den ursprünglichen Sender. Erlaubt eine direkte Antwort ohne Angabe der IP und des Ports. Nachricht ist eine Zeichenkette (z. B.: "Dies ist eine gültige Nachricht"): udpreply "Nachricht erhalten"
Liest eine empfangene UDP-Nachricht vom Client. Um zu funktionieren, muss der UDP-Server geöffnet sein (Befehle UdpBegin oder UdpBeginMultiCast): let rec = udpread()
Lesen der IP-Adresse und des Ports der empfangenen Nachricht. Um zu funktionieren, muss der UDP-Server geöffnet sein (Befehle udpBegin oder udpBeginMultiCast): let rem = udpremote()
Das Ergebnis wird in Form von IP:Port ausgegeben: Beispiel (192.200.150.7:4568)
Definition einer Verzweigungsbezeichnung, die den Ort festlegt, an dem das Programm fortgesetzt wird, sobald eine UDP-Nachricht empfangen wird. Sobald der Return-Befehl gefunden wird, wird das Programm an der unterbrochenen Stelle fortgesetzt. Um zu funktionieren, muss der UDP-Server geöffnet sein (Befehle udpBegin oder udpBeginMultiCast): Beispiel:
udpbegin 4567
udpBranch [udp.received]
wait
[udp.received]
let rec = udpread()
let rem = udpremote()
Serialprint "Nachricht erhalten " & rec & " von " & rem
udpreply "OK"
return
Server-Beispiel für ersten ESP:
1 port = 8080
2 print "UDP-Server "&ip()&":"&port
3 udpbegin port
4 udpbranch client
5 textbox clientmsg
6 wait
7 client:
8 clientmsg = udpread() & " (" & word(udpremote(),1,":") & ")"
9 udpreply "OK"
10 return
Client-Beispiel für zweiten ESP:
1 serverIP = "192.168.178.65"
2 port = 8080
3 print "Client for " & serverIP & " on Port " & port
4 textbox msg
5 button "send", send
6 wait
7 send:
8 udpwrite serverIP, port, msg & chr(10)
9 wait
Richtet einen Telnet-Client mit der angegebenen IP-Adresse und dem Port
ein. Wenn kein Port angegeben wird, ist der Standardwert 23. Gibt bei Erfolg
eine 1 zurück, andernfalls eine 0.
Bla =
telnet.client.connect({ip address of server}, {optional port no})
Bla = telnet.client.connect("192.168.1.100", 1234)
Bla = telnet.client.connect("192.168.1.100") 'defaults to port 23
Gibt die Anzahl der im Puffer empfangenen Zeichen zurück. Bla = telnet.client.available()
Liest ein einzelnes Zeichen aus dem Puffer. Bla = telnet.client.read.chr()
Liest den gesamten Inhalt des
Puffers in eine Zeichenkette ein.
Bla =
telnet.client.read.str()
Sendet eine Zeichenkette an den Server. Liefert eine 1 für Erfolg, 0 für Misserfolg: telnet.client.write({String to send}) : Bla = telnet.client.write("Hello world")
Trennt die Verbindung zum Server: telnet.client.stop()
Gibt eine Verzweigung an, die gestartet wird, wenn der ESP Zeichen vom
Server empfängt. Der Zweig muss mit dem Befehl wait enden. Telnetbranch [branch]
Libraries/Bibliotheken
Einige Bibliotheken wurden zur Zeit der Kompilierung des Interpreters fest eingebunden und stehen somit dem Anwender sofort zur Verfügung. Insbesondere einige bekannte Sensoren und Anzeigen erweitern die Anwendungsmöglichkeit dieser Skriptsprache auf einem ESP32 und erlauben besonders kurze und einfache Programme.
Thingspeak, E-Mail, Openweather, Mqtt, Telegram, Dallas DS18B20, DHTxx, NeoPixel, Remote IR, OLED-1306, LCD-1602, TFT-ILI9341, BME-280, ADS-1115, MCP-4725, MAX-7218, SD-Card, MCP-410xx, AD9833, USB-Key/Mouse, BLE-Key/Mouse/Multimeter und LoRa.
(MathWorks Library)
Um mit Thingspeak zu beginnen, besucht man die Website https://thingspeak.com/. Es muss ein Konto und einen Kanal/Api-Schlüssel eingerichtet werden. Diese Funktionen funktionieren nur, wenn der esp mit einem Netzwerk mit Internetanschluss verbunden ist.
Sendet den Inhalt der Felder an den Thingspeak-Dienst. Es müssen der Thingspeak-Schlüssel und die Feldnummer verwendet werden.
Gibt den zuletzt veröffentlichten Wert für das gewünschte Feld zurück. Muss den Thingspeak-Schlüssel, die Kanal-ID und die Feld-Nummer verwenden.
Die OpenWeather-Funktion readopenweather() aus dem Original ist nicht mehr enthalten. Mit Hilfe der Funktionen wget() und json() lassen sich auf einfache Weise diese Wetterdaten lesen.
Man benötigt einen SMTP-Server wie z. B. http://www.smtp2go.com/, SMTP-Server: mail.smtp2go.com, Port: 2525. Für den Versand von SMS-Nachrichten an Telefone suchen Sie das SMS-Gateway Ihres Anbieters: http://martinfitzpatrick.name/list-of-email-to-sms-gateways/
Konfiguriert den E-Mail-Server. Benötigt den Server, den Port, den Benutzernamen und das Passwort.
Versendet eine E-Mail unter Verwendung der Absender- und Empfängeradresse sowie des Betreffs und des Textes.
**) not implemented or tested for a reason
(Nick O'Leary, PubSubClient Library)
Begin der Verbindung mit einem Broker.
Subcription öffnen.
Liefert Mqtt Meldung als Zeichenkette (Branch).
Daten hochladen.
Mqtt beenden.
Mqtt-Ereignis Sprung festlegen.
(Brian Lough. Universal Telegram Bot Library)
Initialisierung und Anmeldung bei Telegram. Alternativ: Telegram TokenString, ChatIDString**
Senden einer Textmeldung. Alternativer Befehl: TelegramSend MessageText**
Liefert Zahl vorliegender Meldungen.
Liefert die empfangene Textmeldung Nummer n.
Liefert den Absendernamen.
Liefert die AbsendrID.
memclear
'tg.begin("xxxxx:xxxxx-xxxxx-xxxx","12345678","This is espScript32 on " & cpu.type())
tg.begin("xxxxx:xxxxx-xxxxx-xxxx","12345678")
textbox in
textbox out
button "send", send
timer 1000,rec
rec:
n = tg.available()
if n > 0 then in = tg.read(0)
wait
send:
tg.send(eval(out))
wait
(Miles Burton, Rob Tillaart, DallasTemperature Library)
Ruft Temperatursensorwerte oder Sensor-ROM-Codes von bestimmten
1-Draht-Geräten ab, die an Pin 2 angeschlossen sind. Ohne Argumente werden alle
angeschlossenen ROM-Codes als durch Leerzeichen getrennter String
zurückgegeben. Wenn das Argument numerisch ist, wird der Messwert vom N-ten
angeschlossenen Gerät zurückgegeben. Ist das Argument ein 16-stelliger
ROM-Code (als String), wird ein Messwert von diesem Sensor zurückgegeben:
Print
temp(0) -> 23.787
Romcode = temp()
Als Widerstand kann auch der interne PullUp von Pin 2 dienen mit vorher: io(pu,2)
(Adafruit Library)
Funktionen zur Verbindung mit dem DHT Temp/Humidity-Modul.
Ermöglicht die Angabe des Modells (11, 21, 22) und des Pins für den DHT-Sensor: dht.setup(22,1)
Gibt den Temperaturwert in Celsius vom Sensor zurück: Print dht.temp()
Liefert die Luftfeuchtigkeit in Prozent: Print dht.hum()
Berechnet die „gefühlte“ Temperatur in Celsius: Print dht.heatindex()
(Adafruit NeoPixel Library)
Um NEO-Pixelstreifen zu verwenden, wird das Signal als Voreinstellung an GPIO 21 eingestellt, da bei einem ESP32-S3 Zero dort die RGB-LED angeschlossen ist.
Konfiguriert den Ausgangs-Pin auf einen anderen als den Standard-Pin. Ist ein zweiter Parameter nicht 0, so wird Rot und Grün getauscht: neo.setup(1)
Setzt die gewünschte Pixel-LED# auf die mit einem RGB-Wert (Rot,
Grün, Blau) angegebene Farbe. Man kann optional das sofortige
Schreiben an den Neo-Pixel deaktivieren, indem man eine 1 im letzten Parameter
verwendet. Dadurch können viele Pixel auf einmal geändert werden. Andernfalls
wird die Funktion sofort ausgeführt.
neo(0,250,250,250) '
sofortiges Schreiben in Pixel 0
neo(0,250,250,250,1) ' Hinzufügen zum Puffer, der an die Neopixel gesendet wird.
Schaltet alle Leds auf dem Streifen aus.
Setzt einen Bereich von Leds auf die gewünschte Farbe.
Zeigt einen Verschiebungseffekt an. Verschiebt alle Pixel von 0 bis 20 um eins nach oben. Dies ermöglicht einige nette Scrolling-Animationen mit sehr wenig Aufwand.
Das Beispiel verwendet die Zeichenkette, beginnt am Anfang der Zeichenkette und kopiert sie an den Anfang der Neopixelanzeige, kopiert 2 Pixel, bei 10% Helligkeit: neo.hex("400fff",0,0,2,10)
Zeigt einen Regenbogeneffekt aus der NeoPixel-Bibliothek für alle Pixel am Ausgang. Ein ESP32-S3-Zero mit seiner RGB-LED an Pin 21: neo.rainbow(0,255,64) nach neo.setup(21)
while true
for firstPixelHue = 0 to 65536 step 512
neo.rainbow(firstPixelHue,255,128)
pause 20
next
wend
(SensorsIot, Definitive-Guide-to-IR Library)
IR-EMPFÄNGER:
Mehrere Kodierungen werden unterstützt; siehe die Bibliothek
für weitere Details. Der Empfänger kann ein VS1838B oder ähnlich sein; dies ist
sehr preiswert Ein gehackter IR-Empfänger kann in einem TV, alten
Videorekorder, etc…
Gibt eine Verzweigung an, die ausgeführt werden soll, wenn ein Infrarot-Code erkannt wird. Die Verzweigung muss mit dem Return-Befehl enden.
Setzt den Pin, der für den IR-Empfang verwendet wird (IR-Empfänger an den Pin angeschlossen): ir.recv.setup(5) 'setze den Pin 5
Liefert den empfangenen Code; der Code ist ein String im Hex-Format: let r = ir.recv.get() -> 4907d8c5
Liefert den empfangenen Code und das Format Und Anzahl der verwendeten Bits. Dies ist nützlich, um die Art der Fernsteuerung zu identifizieren und die Größe der Nachricht: let r = ir.recv.full() -> 4907d8c5:NEC:32
Ruft den empfangenen Code ab, die empfangene Nachricht wird über die serielle Schnittstelle ausführlich ausgegeben. Wahrscheinlich ist dies während der Fehlersuche nützlicher: let r = ir.recv.dump()
IR-SENDER
Sony- und NEC-Kodierung werden für die Übertragung unterstützt.
Setzt den Pin, der für die IR-Übertragung verwendet wird (IR-LED evtl. über einen Widerstand mit GND verbunden): ir.send.setup(4) 'setzt den Pin 4
Sendet den Code (String), der aus nb_bits Bits besteht: ir.send.nec("4907d8c5", 32)
Den Code (String) senden, der aus nb_bits Bits besteht: ir.send.sony("910", 12)
(Kevin Harrington, John K. Bennett, ESP32Servo Library)
Die Ansteuerung von Servomotoren ist entsprechend dem Original Bestandteil des UniversalPinIO-Systems und ist dort wie folgt aufgeführt:
Setzt den Winkel eines an den gpio-Pin angeschlossenen Servos. Der Winkel muss zwischen 0 und 180 liegen. Alternativ als Funktion: io(servo,2,90)
(Arduino, Stepper Library)
Die Routinen steuern mittels Treiber-IC L293D (Quadruple-Half-Bridge) einen Schrittmotor an, der an den Anschlüssen 1Y, 2Y, 3Y und 4 Y des Treibers angeschlossen ist.
Legt die Schritte pro Umdrehung fest, sowie die GPIO für die Treiber-Eingänge.
Steuert den Motor mit steps Schritten. Das Vorzeichen gibt die Richtung an.
Bestimmt die Geschwindigkeit des Motors
Liefert eine Zeichenkette mit den Voreinstellungen für die jeweilige ESP32-Variante
while true
stepper.step(200)
pause 500
stepper.step(-200)
pause 500
wend
(Daniel Eichhorn, Fabrice Weinberg SSD1306Wire-Library)
Ein OLED-Display mit 128x64-Auflösung an der voreingestellten I2C-Schnittstelle mit SDA/SCL. Siehe auch i2c.setup und oled.setup.
Setzt die Farbe für das nächste Element, das auf dem Bildschirm erstellt wird.
Löscht den Bildschirm auf dem oled-Display
Zeichnet eine Linie vom Punkt (x1,y1) zum Punkt (x2,y2): oled.line(10,10,20,20)
Zeichnet ein Rechteck vom Punkt (x,y) mit der Breite 'w' und der Höhe 'h': oled.rect(10,10,20,20)
Zeichnet ein gefülltes Rechteck vom Punkt (x,y) mit der Breite 'w' und der Höhe 'h': oled.rect.fill(10,10,20,20)
Zeichnet einen Kreis mit Zentrum in (x,y), Radius 'rad': oled.circle(50,120,20)
Zeichnet einen gefüllten Kreis mit Zentrum in (x,y), Radius 'rad': oled.circle.fill(50,50,20)
Setzt die Schriftgröße auf 10, 16 oder 24. Alternativ kann size 0, 1, 2 sein.
Schreibt Text auf dem Display an der angegebenen Stelle: oled.print("Hallo Welt", 1,1)
Legt die GPIO für das OLED-Display mit einer Adresse 0x3C fest. Ein Heltec-WiFi-Kit V 1 verwendet GPIO 4 und 15, sowie GPIO 16 als Reset:
i2c.setup(4,15) 'HELTEC WiFi Kit 32 V1.0
io(po,16,0)
delay 50
io(po,16,1)
oled.setup(4,15)
Modus direkte Ausgabe wird eingeschaltet (default): oled.showon()
Modus direkte Ausgabe wird ausgeschaltet. Auf dem Display erscheinen keine Änderungen mehr bis ddie Anweisung oled.show() erfolgt. Damit sind quasi gepufferte Ausgaben möglich: oled.showoff()
Aktualisiert die OLED-Anzeige im Modus oled.showoff(): oled.show()
Textausrichtung Links, Mitte, Rechts: oled.align(2)
Gibt
unmgebrochenen Text an der Position x,y aus:
oled.wrap (0,0,"Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore.")
Stellt einen Fortschrittsbalken dar in der angegebenen Position und Ausdehnung. Die Anzeigewerte sin 0 bis 100. Um flackerfreie Anzeigen zu erhalten kann die oled.show*()-Option Verwendung finden: oled.Progress(0, 32, 120, 10, 25)
Helligkeitswert als Byte.
Vertauscht die vertikale Darstellung.
Vertauscht die horizontale Darstellung.
Stellt Orientierung wieder her.
(Matthias Hertel, LiquidCrystal_PCF8574 Library)
An der voreingestellten I2C-Schnittstelle mit SDA/SCL erfolgen Ausgaben auf einem solchen preiswerten Display mit den folgenden Kommandos. Siehe auch i2c.setup.
Druckt auf das OLED-Display an der angegebenen Position. Die X-Position für den Rand des Displays kann bei einigen Modellen abweichen.
Löscht das Display.
Schaltet die Hintergrundbeleuchtung (backlight) ein oder aus. 1 für an, 0 für aus.
Sendet ein Kommando-Byte an das Display. Siehe LCD-Display-Befehlsdokumentation in der Spezifikation des Herstellers: MODUS: 0 = BEFEHL, 1 = DATEN, 2 =
Aufruf der Funktion Blink.
Schaltet die Hintergrundbeleuchtung (backlight) ein oder aus. 1 für an, 0 für aus.
Schaltet den Cursor an.
Positioniert den Cursor.
Schaltet den Cursor aus.
Schaltet das Display ab.
Schaltet das Display ein.
Scrollt die Anzeige nach links.
Scrollt die Anzeige nach rechts.
(Adafruit BME280 Library)
An der voreingestellten I2C-Schnittstelle mit SDA/SCL. Siehe auch i2c.setup.
Liefert eine Zeichenkette mit Temperatur, Rel. Luftfeuchte und Luftdruck, sowie die barorometrische Höhe: Print bme.read()
Liefert die Temperatur in Celsius als numerischen Wert: Print bme.temp()
Liefert die Rel. Luftfeuchte in Prozent als numerischen Wert: Print bme.hum()
Liefert den Luftdruck in mPa als numerischen Wert: Print bme.pres()
Liefert eine Höhe basierend auf dem Normaldruck in Metern als numerischen Wert: Print bme.alt()
(RobTillaart, ADS1X15 Library)
Der Analog-Digital-Wandler an der voreingestellten I2C-Schnittstelle mit SDA/SCL. Siehe auch i2c.setup.
Liefert den Messwert an Eingang A0.
Liefert den Messwert an Eingang A0 bis A4 (0,1,2,3) oder (4,5,6,7) für Differenz-Messungen: Print ads.read(2)
Stellt den Verstärkungsfaktor direkt ein nach Datenblatt (0,1,2,4,8,16).
Stellt den Verstärkungsfaktor als Bereich ein.
(Adafruit, MCP4725 Library)
Der Digital-Analog-Wandler an der voreingestellten I2C-Schnittstelle mit SDA/SCL. Siehe auch i2c.setup.
Erlaubt den Betrieb mit alternativer Adresse. Voreingestellt ist 0x60.
Setzt den Wandlerwert für die Ausgangsspannung entsprechen im Bereich 0 bis 4095: dac.set(2048)
(Christopher Laws, BH1750 Library)
Der Baustein liefert die in Lux angegebene Lichtgröße über die voreingestellte I2C-Schnittstelle mit SDA/SCL. ADDR ist nicht angeschlossen oder an GND. Siehe auch i2c.setup.
Initialisiert den Sensor.
Liefert den numerischen Lichtwert.
Beendet den Sensor und gibt Speicher frei.
1 i2c.setup(6,5) ' ESP32-S3-Zero
2 print "0x" & hex(val(i2c.scan()))
3 lux.begin()
4 textbox lux
5 pause 1000
6 lux = lux.read()
(Electro707, Simple-LED-Matrix-Library)
An der ersten SPI-Schnittstelle eines ESP32 kann eine Matrix mit vier Segmenten als Anzeige und Laufschrift fungieren. Der Aufruf spi.info() liefert die jeweiligen GPIO des ESP. Auch die Konstanten MOSI, MISO, SCK und CS sind abrufbar und je nach Chip unterschiedlich.
Setzt einen anderen als den voreingestellten CS-Pin und erlaubt die Anpassung der Orientierung: matrix.setup(4,1)
Stellt die Helligkeit der gesamten Matrix ein: matrix.brightness(5)
Setzt einen Punkt bzw. schaltet eine einzelne LED an Position x,y: matrix.plot(4,4)
Schaltet eine einzelne LED an Position x,y aus: matrix.unplot(4,4)
Schaltet alle LED aus: matrix.cls()
Schaltet alle LED an: matrix.fill()
Zeigt Text auf unterschiedliche Art. Ist delay nicht 0, scrollt der Text entsprechend dem Vorzeichen und der Zeit in ms: matrix.print("Hallo Welt",-20,16)
(SD; Arduino, SparkFun Library)
An der ersten SPI-Schnittstelle eines ESP32 kann ein SD-Card-Reader angeschlossen sein. Der Aufruf spi.info() liefert die jeweiligen GPIO des ESP. Auch die Konstanten MOSI, MISO, SCK und CS sind abrufbar und je nach Chip unterschiedlich voreingestellt.
Liefert den Inhalt einer Datei als Zeichenkette: a = sd.read("readme.txt")
Speichert die Zeichenkette in der Variablen unter dem Dateinamen sd.write("test.txt", a)
Setzt einen anderen als den vorgegebenen CS-Pin für den Reader: sd.cs(5)
(sleemanj, MCP41_Simple Library)
An der ersten SPI-Schnittstelle eines ESP32 kann ein Digital-Potentiometer der Reihe MCP410xx angeschlossen sein. Der Aufruf spi.info() liefert die jeweiligen GPIO des ESP. Auch die Konstanten MOSI, MISO, SCK und CS sind abrufbar und je nach Chip unterschiedlich voreingestellt.
Setzt einen anderen als den vorgegebenen CS-Pin für das Potentiometer: pot.setup(5)
Setzt der Wiper auf den angegebenen Digitalwert: pot.set(3.5/10*255)
(Billwilliams1952, AD9833 Library)
An der ersten SPI-Schnittstelle eines ESP32 kann ein Funktionsgenerator AD9833 mit MCP41010 Potentiometer angeschlossen sein. Der Aufruf spi.info() liefert die jeweiligen GPIO des ESP. Auch die Konstanten MOSI, MISO, SCK und CS sind abrufbar und je nach Chip unterschiedlich voreingestellt.
Setzt einen anderen als den vorgegebenen CS-Pin: gen.setup(4)
Stellt Frequenz und optional eine von vier Schwingungsform ein: gen.set(5000,1)
(Sandeep Mistry, LoRa Library)
Getestet mit SX1278 auf 433 MHz*
Sendefrequenz in Hertz: LoRa 433000000 LoRa 433E6
Schaltet LoRa aus.
Sendet eine Zeichenkette: LoRaPrint "Hallo"
Ereignis gesteuerter Unterprogrammaufruf am Label zum Empfang: LoRaBranch [rx]
Setzten neuer GPIO für das Lora-Board mit numerischen Werten.
Stellt die Verstärkung des LNA ein bei Empfang: LoRaRain 2
Stellt die Sendeleistung ein als numerischen Wert: LorRaPower 1 'default
Stellt den Spreading-Factor ein als numerischen Wert: LorRaSF 7 'default
Stellt die Bandbreite ein als numerischen Wert: LorRaBW 125000 'default
Liefert eine Zeichenkette mit den eingestellten GPIO.
Liefert die Zeichenkette des letzten Empfangs: message = LoRaRead()
Liefert die Signalstärke als numerischen Wert: rssi = LorRa.RSSI()
Liefert die Signalqualität als numerischen Wert: snr = LorRa.SNR()
Liefert den eingestellten Spreading-Factor als numerischen Wert: sf = LorRa.SF()
Liefert die eingestellte Bandbreite als numerischen Wert: bw = LorRa.BW()
1 LoRa 433000000
2 TextBox s
3 TextBox r
4 LoRaBranch [rx]
5 Wait
6 [rx]
7 s = LoRa.Read()
8 r = LoRa.RSSI() & " dB"
9 Return
(Bodmer, TFT_eSPI Library)
An der ersten SPI-Schnittstelle eines ESP32 kann ein TFT IL9341 SPI-Display angeschlossen werden. Dieses Display hat eine Auflösung von 320x240 mit 16bits Farbe. Das Display benötigt mindestens 5 Pins: 4 für SPI mit vorgegebenem CS und einen weiteren Pin für D/C. Der Aufruf tft.info() liefert die jeweiligen GPIO des verwendeten ESP. Es kann zurzeit dieser Niederschrift aufgrund der verwendeten Bibliothek keine andere Pinbelegung gewählt werden.
Liefert eine Zeichenkette mit der jeweiligen Pinbelegung des verwendeten ESP-Chips: tft.info()
Initialisierung der Anzeige. Alle Parameter werden ignoriert. Der Aufruf bewirkt nichts und dient nur der Rückwärtskompatibilität zum Original.
liefert die 16-Bit-Konvertierung der Farben Rot, Grün und Blau. Rot, Grün und Blau liegen im Bereich 0 – 255: let col = tft.rgb(255,0,0)
Füllt den Bildschirm mit der Farbe color.
tft.fill(0) ' füllt den
Bildschirm mit Schwarz
tft.fill(color) ' Füllen des Bildschirms mit der Farbe;
tft.fill(tft.rgb(0,255,0)) ' füllt den Bildschirm mit Grün
Löscht den Bildschirm des TFT-Displays.
Kopiert den Bildschirminhalt in die Datei /screenshot.bmp
Zeichnet eine Linie vom Punkt (x1,y1) zum Punkt (x2,y2) mit der Farbe 'col': tft.line(10,10,20,20,tft.rgb(255,0,0))
Zeichnet ein Rechteck vom Punkt (x,y) mit der Breite 'w' und der Höhe 'h' mit der Farbe 'col': tft.rect(10,10,20,20,tft.rgb(0,0,255))
Zeichnet ein gefülltes Rechteck vom Punkt (x,y) mit der Breite 'w' und der Höhe 'h' mit der Farbe 'col': tft.rect.fill(10,10,20,20,tft.rgb(0,0,255))
Zeichnet ein abgerundetes Rechteck vom Punkt (x,y) mit Breite 'w' und Höhe 'h', Radius 'rad' und mit Farbe 'col': tft.rect.round(10,10,100,100,5,tft.rgb(0,0,255))
Zeichnett ein abgerundetes gefülltes Rechteck vom Punkt (x,y) mit der Breite 'w' und der Höhe 'h', dem Radius 'rad' und der Farbe 'col': tft.rect.round.fill(10,10,100,100,5,tft.rgb(0,0,255))
Zeichnet ein Rechteck vom Punkt (x,y) mit der Breite 'w' und der Höhe 'h' mit einem horizontalen Farbverlauf von Farbe 'col1' zu 'col2': tft.rect.fill.H(10,10,20,20,0,tft.rgb(0,0,255))
Zeichnet ein Rechteck vom Punkt (x,y) mit der Breite 'w' und der Höhe 'h' mit einem vertikalen Farbverlauf von Farbe 'col1' zu 'col2': tft.rect.fill.V(10,10,20,20,0,tft.rgb(0,0,255))
Zeichnet einen Kreis mit Mittelpunkt (x,y), Radius 'rad' und Farbe 'col': tft.circle(160,120,50,65535)
Zeichne einen gefüllten Kreis mit Zentrum in (x,y), Radius 'rad' und Farbe 'col': tft.circle.fill(160,120,50,65535)
Liefert den TFT-Farbwert der angegebenen Koordinate.
Definiert die Farbe für den Text und optional die Hintergrundfarbe.
Definiert die Position des Cursors, an der der Text ausgegeben werden soll.
Legt die Größe des Textes fest; sie kann zwischen 1 und 8 liegen (die Schriftart ist immer dieselbe).
Liefert die Breite des Textes in Pixel des aktuellen Zeichensatzes.
Liefert die Höhe des aktuellen Zeichensatzes.
Gibt den Text auf dem Bildschirm aus mit der Farbe, Position und Größe, die mit den vorherigen Befehlen festgelegt wurden.
Wie tft.print() mit nachfolgendem Zeilenvorschub:
tft.text.color(tft.rgb(255,255,0))
tft.text.cursor(0,50)
tft.text.size(2)
tft.print("This is
")
tft.println("print
")
tft.println("second
line")
tft.println("third
line")
Auswahl der Schriftart, die für den Befehl print on TFT verwendet werden soll. Die Schriftartnummer kann sein:
0 : Standardschriftart mit fester Größe 5x7
1 : Standardschriftart mit fester Größe 5x7
2 : Standardschriftart 12 Punkt
3 : Antialiasing fixed 15 Punkt falls im Flash (/uploads/NotoSansBold15.vlw)
4 : Free Serif Bold 24 Punkt
5 : Antialiasing fixed 36 Punkt falls im Flash /uploads/NotoSansBold36.vlw)
tft.text.font(1)
Zeigt eine Bitmap auf dem TFT-Bildschirm an. Vor der Verwendung muss die Datei über das Menü [File] hochgeladen werden. Es können nur Dateien der Endung *.bmp und *.jpg verwendet werden (kein gif, kein png). Die Größe des Bildes muss kleiner oder gleich der Größe des Bildschirms sein (die maximal zulässige Größe ist 320 x 240). Wenn x und y nicht definiert sind, beginnt die Position des Bildes bei 0,0: tft.bmp("/uploads/hund.bmp") oder tft.bmp("/uploads/d.jpg", 50,50, 0)
Schaltet in den Terminal-Modus für die Textausgabe.
Gibt den Text im TTY-Modus aus. Es wird automatsch gescrollt.
Zeigt ein analoges Messwerk der Bibliothek mit sechs weiteren linearen Anzeigen an.
Legt den Text im Messwerk fest.
Bewegt den analogen Zeiger auf die angegebene Position.
Stellt die lineare Anzeige nummer (0..5) auf den Wert percent.
Übersetzung aus dem Original.
Es ist möglich, einige GUI-Objekte auf dem TFT zu implementieren. Diese Objekte werden direkt vom Interpreter verwaltet und können mit nur wenigen Zeilen Code definiert und verändert werden. Sie können auch mit den Touchscreen-Ereignissen verknüpft werden. Alle Objekte haben einen gemeinsamen Satz von Eigenschaften:
X, Y: Bildschirmposition
Width, Height: Breite und Höhe des Objekts
Forecolor: Vordergrundfarbe, Voreinstellung: tft.rgb(255,255,0) - Gelb -
Backcolor: Hintergrundfarbe, Voreinstelleung: tft.rgb(100,100,100) - Grau -
Label: Text, der dem Objekt zugeordnet ist
Textsize: Größe des Textes (Multiplikator der Standardschrift): 1 bedeutet normale Größe, 2 doppelte Größe, und so weiter ...
Checked: Eigenschaft, die mit Schaltflächen/Radio/Kontrollkästchen verbunden ist. Kann wahr oder unwahr sein
Value: Eigenschaft, die dem Bar zugeordnet ist. Es ist ein numerischer Wert, der von 0 bis 100 reichen kann
Icon1, icon2: Eigenschaften, die mit dem Toggle-Objekt verbunden sind. Definieren Sie die Dateinamen der Bilder, die mit dem Objekt verbunden sind. Icon1 definiert das Bild, wenn die Eigenschaft Checked false ist, Icon2 definiert das Bild, wenn die Eigenschaft Checked true ist
Scale: Eigenschaft, die mit dem Toggle-Objekt verbunden ist. Definieren Sie die Skalierung (Zoom) der Icons. 1 bedeutet normale Größe, 2 doppelte Größe und so weiter ...
Die Objekte werden einfach mit Funktionen wie folgt erstellt:
but1 = tft.obj.button("PUSH", 5,5,120,50,3,-1,0)
Alle Funktionen geben die Kennung des erstellten Objekts zurück (in diesem Beispiel but1). Diese Kennung ist nützlich, wenn die Eigenschaften des Objekts geändert werden oder wenn es im Touchscreen-Ereignis identifiziert wird.
Zeichnet eine Schaltfläche auf dem TFT. Die Funktion gibt die
Bezeichnung des Objekts zurück:
but2 =
tft.obj.button("Zahl2", 155,5,100,50)
Zeichnet ein Label auf dem TFT.
Die Funktion gibt die Bezeichnung des Objekts zurück.
lab2 = tft.obj.label("19:41:16",218,220,100,18,
2, tft.rgb(0,255,0))
Zeichnet ein Kontrollkästchen auf dem TFT. Die Funktion gibt den Ident
des Objekts zurück.
chk1 =
tft.obj.checkbox("Check Me", 5,60,40,1, 3, 65535, 0)
Die Eigenschaft checked (1 in diesem Beispiel) definiert den Zustand der Checkbox.
Zeichnet ein Radio-Button auf dem TFT. Die Funktion gibt die
Bezeichnung des Objekts zurück.
rad1 =
tft.obj.radio("Radio", 5,110,40,1, 3)
Die Eigenschaft checked (1 in diesem Beispiel) definiert den Zustand
des Radio-Buttons.
Zeichnet einen Balken auf dem TFT. Die Funktion gibt die
Bezeichnung des Objekts zurück. Der Balken (Fortschrittsbalken) ist ein Objekt,
das einen farbigen Balken in einem rechteckigen Rahmen anzeigt, dessen Größe
von der Eigenschaft 'Wert' abhängt. Der Wert kann von 0 bis 100 gehen.
bar1 =
tft.obj.bar("Analog",150,100,160,30, 2, 65535, tft.rgb(0,25,255))
Bei der Erstellung ist der Wert des Balkens immer 0.
Zeichnet ein Toggle-Element auf dem TFT. Die Funktion gibt den Ident des Objekts zurück. Das Toggle ist ein Objekt, das 2 Icons enthält, eines für den Status an und ein anderes für den Status aus. tog2 = tft.obj.toggle("/uploads/powgreen.bmp", "/uploads/powred.bmp", 100,170, 1)
Die Eigenschaft checked (1 in diesem Beispiel) definiert den Zustand des Toggles. Auch Bilder mit der Endung* .jpg werden erkannt.
Ändern Sie die Eigenschaften der TFT-GUI-Objekte:
Nach der Erstellung von Objekten können deren Eigenschaften mit den folgenden Funktionen geändert werden:
Ändert das Label eines beliebigen
Objekts. Der obj_ident ist der Wert, der von den Erzeugungsfunktionen
zurückgegeben wird.
tft.obj.setlabel(lab2,
mid(time(),12,8))
Ändern Sie den Wert der Balkenobjekte. Der obj_ident ist der
Wert, der von den Erstellungsfunktionen zurückgegeben wird. Der Wert kann
zwischen 0 und 100 liegen.
tft.obj.setvalue(bar1,
io(ai)/10)
Ändert die Eigenschaft checked der Objekte. Der obj_ident
ist der Wert, der von den Objekterstellungsfunktionen zurückgegeben wird.
tft.obj.setchecked(but2,
1) -> setzt den Button in den gedrückten Zustand
tft.obj.setchecked(tog2, 0) -> setzt den Toggle in den Zustand false
Invertiert die Eigenschaft checked der Objekte. Der
obj_ident ist der Wert, der von den Objekterstellungsfunktionen zurückgegeben
wird.
tft.obj.invert(but2)
-> invertiert den Zustand der Schaltfläche
tft.obj.invert(tog2) -> invertiert den Zustand des Schalters
Gibt die Label-Eigenschaft eines beliebigen Objekts zurück.
Der obj_ident ist der Wert, der von den Objekterstellungsfunktionen
zurückgegeben wird.
l =
tft.obj.getlabel(lab2)
Gibt den Wert der Balkenobjekte zurück. Der obj_ident ist
der Wert, der von den Erstellungsfunktionen zurückgegeben wird. Der Wert kann
zwischen 0 und 100 liegen.
v =
tft.obj.getvalue(bar1)
Gibt die checked Eigenschaft der Objekte zurück. Der
obj_ident ist der Wert, der von den Objekterstellungsfunktionen zurückgegeben
wird.
C =
tft.obj.setchecked(but2)
Es besteht die Möglichkeit, den im ILI9341 TT enthaltenen Touchscreen-Controller zu aktivieren. Dieser Controller basiert auf dem Chip XPT2046 und verwendet SPI zur Kommunikation mit dem ESP-Modul. Der Touchscreen-Controller ist im CYD fest verschaltet und verwendet VSPI mit den Pins 36, 32, 39, 25 und 33.
Liefert eine Zeichenkette mit der jeweiligen Pinbelegung des verwendeten ESP-Chips.
Aktiviert die Touchscreen-Funktionalität. Die T_CS-Pin-Angabe wird beim CYD ignoriert, kann auch entfallen: tft.touch.setup(33)
Gibt die X-Position der berührten Stelle auf dem TFT-Bildschirm zurück: X = tft.touchx()
Gibt die Y-Position der berührten Stelle auf dem TFT-Bildschirm zurück: Y = tft.touchy()
Gibt die Z-Position (Druck) der berührten Stelle auf dem TFT-Bildschirm zurück: Z = tft.touchz()
Gibt ein True (-1) zurück, wenn der aktuelle Touch (touchbranch) innerhalb des angegebenen Rechtecks liegt.
Liefert die Kennung des GUI-Objekts, das berührt wurde. Wenn die berührte Position nicht innerhalb eines definierten Objekts liegt, ist das Ergebnis -1. Diese Funktion ist sehr nützlich in Kombination mit dem Befehl touchbranch: t = tft.checktouch()
Definiert eine Verzweigung zu einem Unterprogramm, welches ausgeführt wird, wenn der Bildschirm berührt wird. Der aufgerufene Programmteil muss mit dem Befehl return beendet werden: touchbranch [touchme]
Liefert -1 oder 0 zurück als logischen Wert: if(tft.touched())then end
Gibt die Rohdaten der X-Position der berührten Stelle auf dem TFT-Bildschirm zurück.
Gibt die Rohdaten der Y-Position der berührten Stelle auf dem TFT-Bildschirm zurück.
Beispiel:
tft.setup(16, 4, 3)
tft.touch.setup(15)
but1 = tft.obj.button("PUSH", 5,5,120,50,2)
chk1 = tft.obj.checkbox("Check Me", 5,100,40,1,2)
lab1 = tft.obj.label("press", 0,190,200,24,2)
touchbranch [touchme]
wait
[touchme]
touch_obj = tft.checktouch()
serialprintln "checktouch " & touch_obj
if touch_obj = but1 then
tft.obj.invert(but1)
tft.obj.setlabel(lab1, "button")
endif
if touch_obj = chk1 then
tft.obj.setlabel(lab1, "checkbox")
tft.obj.invert(chk1)
endif
return
Ereignisse, deren Zeitpunkt des Eintreffens unbekannt ist, müssen nicht dauernd von Programmierenden abgefragt werden, dies erledigen die sogenannten Branches oder Verzweigungen. Es sind Programmteile, die aufgerufen werden, sobald das Ereignis eintritt. Sie sind vergleichbar mit Interrupt-Routinen anderer Programmiersprachen. Diese Branches werden mit einem entsprechenden Befehl festgelegt, dessen zweiter Parameter ein Label bzw. eine Sprungmarke ist. Diese Programmteile werden wie Unterprogramme behandelt und enden in der Regel mit einem Return. Ein Ereignis wird nur verfolgt, wenn es den entsprechenden Befehl mit einer Sprungmarke gibt. Für den Messenger Telegram ist kein Branch vorgesehen.
· SerialBranch (onSerial)*
· Serial2Branch (onSerial2)*
· SerialBTBranch (onSertialBT)**
· UDPBranch (onUDP)*
· TelnetBranch (onTelnet)* -> Wait!
· MSGBranch (onServer)*
· IRBranch (onIR)*
· MeterBranch (onMeter)*
· MQTTBranch (onMQTT)*
· TimerCB (onTimerCB)*
· WebSockChangeBranch (onChange)**
· WebSockEventBranch (onEvent)**
· TouchBranch (onTouch)**
· LoRaBranch (onLoRa)**
· Interrupt (onInterrupt)**
· Timer (onTimer)* -> Wait!
**) not implemented or tested, *) alternative
Liefert eine Zeichenkette mit dem Ergebnis des internen Expression-Evaluators. Die Übergebene Zeichenkette wird ausgewertet wie bei Funktionen. Nützlich, um z. B. aus der Ferne Funktionen wie io(po,pin,pegel) aufzurufen, oder die Temperatur zu ermitteln: eval("17+4“) -> 21, eval("cpu.temp()")
Interpretiert den angegebenen Ausdruck wie eine Programmzeile: basic(Print „Hallo“)
Liefert eine Zeichenkette mit dem gefundenen Prozessor. Print cpu.type() -> ESP32-S3
Liefert die Kern-Temperatur in Celsius.
Liefert die Taktfrequenz in MHz.
Liefert eine Zeichenkette mit der ID des Chips (mac)
Liefert einen Zahlenwert zur Reboot-Reason.
Reset = "UNKNOWN,POWERON,EXT,SW,PANIC,WDT,TASK_WDT,RST_WDT,DEEPSLEEP,BROWNOUT,SDIO"
Print "Last Reset Reason: " & Word(Reset,reason()+1,",")
Liefert einen Zahlenwert zur Wakeup-Reason von sleep und sleepgpio.
Aktiviert den 'Wachhund' des ESP. Wird innerhalb von timeout kein watchdog ohne Parameter aufgerufen (Kommando), startet das System neu. Timeout kann bis zu 60 Sekunden betragen. Der Wachhund bleibt auch nach einem Programm-Stop aktiv. Nur watchdog 0 schaltet ihn ab.
Resettet den Wachhund bis zum nächsten timeout. Üblicherweise gehört der Aufruf in eine Schleife, um ein Reset zu vermeiden. Der Programmierer ist dafür verantwortlich den Wachhund nach Unterbrechung eines Programmlaufs zu deaktivieren!
Deaktiviert den Wachhund.
Erlaubt den Zugriff (0, 1) der seriellen Konsole während der Laufzeit.
Setzt den Sprung (Label) für ein Unterprogramm, welches auf Änderungen von Web-Objekten reagieren kann.
Liefert das auf der Browser-Seite (GUI) geänderten JavaScript-Elemente (WebSockChangeBranch bzw. onChange) in einer CSV-Zeichenkette: name, value, id. Das Unterprogramm endet mit Return!
Liefert eine Zeichenkette mit den vorhandenen Dateien des Flash-Datei-Systems.
Gibt die vorhandenen Dateien des Flash-Datei-Systems aus.
Listing des aktuellen Programms mit Zeilennummern im Direktmodus.
Gibt alle(!) vorhandenen Dateien des Wurzelverzeichnisses und deren Inhalt über die serielle Schnittstelle als Text aus. Erlaubt das schnelle Sichern aller Listings in einer Log-Datei eines seriellen Terminalprogramms.
Lösch die angegebene Datei aus dem Flash-Dateisystem, falls sie nicht gerade editiert wird.
Nur für ESP32-Varianten mit USB-HID-Funktion
Aktiviert den ESP als USB-HID-Keyboard.
Gibt die angegeben Zeichenkette als Tastenanschläge aus.
Gibt die angegeben Zeichenkette als Tastenanschläge mit abschließendem Zeilenvorschub aus.
Gibt den angegeben Tastaturcode aus.
Gibt den angegeben Tastaturcode als gedrückte Taste aus (Steuerungstasten).
Das Gegenstück zu press (Steuerungstasten).
Gibt alle Tasten als unbestätigt an.
Beendet den USB-Tastatur-Modus des ESP.
Nur für ESP32-Varianten mit USB-HID-Funktion
Aktiviert den ESP als USB-HID-Mouse.
Führt einen Maus-Klick aus. Taste 1, 2, 4: L/R/M oder kombiniert.
Betätigt eine Maus-Taste; 1, 2, 4: L/R/M oder kombiniert.
Bewirkt das Loslassen einer Maus-Taste; 1, 2, 4: L/R/M oder kombiniert.
Relative Bewegung und Maus-Rad (wheel).
Deaktiviert die USB-Maus.
Setzt ESP32-Variante mit Bluetooth Low Energy voraus
Aktiviert den Bluetooth Low Energie Client im ESP und leitet den Scann-Modus ein. Ergebnisse über USB-Serial, falls von Interesse. Die Verbindung erfolgt automatisch und funktioniert am einfachsten, wenn das Messgerät vor dem Aufruf eingeschaltet ist.
Deaktiviert den Bluetooth Low Energie Client im ESP und beendet den Scann-Modus.
Liefert einen numerischen Wert zum Verbindungsstatus.
Liefert die Anzeige als Zeichenkette.
Liefert den reinen numerischen Zahlenwert des Messwertes.
Setzt die Sprungmarke für eine Meter-Event-Routine.
Nur für ESP32-Varianten mit Bluetooth Low Energy
Aktiviert den ESP als BLE-HID-Keyboard.
Gibt die angegeben Zeichenkette als Tastenanschläge aus.
Gibt die angegeben Zeichenkette als Tastenanschläge mit abschließendem Zeilenvorschub aus.
Gibt den angegeben Tastaturcode aus.
Gibt den angegeben Tastaturcode als gedrückte Taste aus (Steuerungstasten).
Das Gegenstück zu press (Steuerungstasten).
Gibt alle Tasten als unbetätigt an.
Beendet den USB-Tastatur-Modus des ESP.
Gibt den prozentualen Ladezustand (Akku) der BLE-Tastatur an.
Nur für ESP32-Varianten mit Bluetooth Low Energy
Aktiviert den ESP als BLE-HID-Mouse.
Führt einen Maus-Klick aus. Taste 1, 2, 4: L/R/M oder kombiniert.
Betätigt eine Maus-Taste; 1, 2, 4: L/R/M oder kombiniert.
Loslassen einer Maus-Taste; 1, 2, 4: L/R/M oder kombiniert.
Relative Bewegung und Maus-Rad (wheel).
Gibt den prozentualen Ladezustand (Akku) der BLE-Maus an.
10.06.2024