ESP32 Micropython

Gast #5243589
Lesenswert?

Hat jemand schon mal Micropython auf dem ESP32 ausprobiert?

Beim ESP8266 gibt es die NodeMCU. Beim ESP32 habe ich eines auf dem 
"WROOM" drauf steht und so aussieht:

https://cdn.instructables.com/ORIG/FQM/7X6B/J7GGGD9O/FQM7X6BJ7GGGD9O.png

Ich würde gerne wissen, ob das ESP32 zusammen mit Micropython geeignet 
ist, einen HC05 US-Sensor zu nutzen.

LED-Blinken schalten klappt schon mal:
1
import machine
2
pin = machine.Pin(2,machine.Pin.OUT)
3
pin.value(0)
4
pin.value(1)
Gast #5243861
Lesenswert?

Das Blinkbeispiel:
1
import machine
2
import time
3

4
pin = machine.Pin(2,machine.Pin.OUT)
5

6
def toggle(p):
7
 p.value(not p.value())
8

9
while True:
10
 toggle(pin)
11
 time.sleep_ms(100)

simpler HTTP-Server für ESP8266 ( könnte vielleicht auf dem ESP32 laufen 
):
https://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/network_tcp.html

Vielleicht weiß jemand, wie man den ADC oder den DAC anspricht.
Gast #5243872
Lesenswert?

Hier ein Beispiel für die Ansteuerung eines HC-SR04
https://github.com/stefanhoelzl/alarm-clock/blob/master/src/apps/alarm_clock/hal.py
weiß nicht wie groß er Unterschied ist zum HC05

ADC ansteuern:
https://docs.micropython.org/en/latest/esp8266/esp8266/quickref.html#adc-analog-to-digital-conversion
Sollte beim ESP32 genau so funktionieren

Zur eigentlichen Frage:
Ja ich habe micropython auf nem ESP32 (China Nachbau des WROOM) am 
laufen.
Klar gibt es Einschränkungen zum normalen Python aber bin doch sehr 
überrascht was alles geht.
Aber für den Bastler der schnell mal was ausprobieren will und es am 
besten dann auch noch über WLan ansteuern will finde ich es perfekt. Und 
es sollten natürlich keine Timing kritischen Sachen sein.
Gast #5243894
Lesenswert?

Danke für die Antworten.

Was den ADC betrifft, scheint die ESP32 Version ein Problem mit den 
Pin-Definitionen zu haben:
1
MicroPython v1.9.2-445-g84035f0f on 2017-12-05; ESP32 module with ESP32
2
Type "help()" for more information.
3
>>> from machine import ADC
4
>>>
5
>>> adc = ADC(0)            # create ADC object on ADC pin
6
Traceback (most recent call last):
7
  File "<stdin>", line 1, in <module>
8
ValueError: expecting a pin
9
>>>
Gast #5244100
Lesenswert?

Gut zu wissen, daß es µPython auch für den ESP32 gibt; hab hier auch so 
ein Modul rumliegen, daß endlich mal ausprobiert werden will.


chris schrieb:
> ValueError: expecting a pin

Also die Fehlermeldung klingt für mich so, als ob Python ein pin-Objekt 
als Argument erwarten würde, da der ESP32 offenbar (anders als der 
ESP8266) keinen eigenen ADC-Pin hat.
Gast #5244210
Lesenswert?

>Also die Fehlermeldung klingt für mich so, als ob Python ein pin-Objekt
>als Argument erwarten würde,
Daran habe ich auch gedacht, konnte aber den passenden Syntax und eine 
gute Doku finden.

Wenn man es dann weiß, ist es einfach:
1
from machine import ADC
2
from machine import Pin
3
adc=ADC(Pin(36))
4
adc.read()

angeregt von hier:
https://forum.micropython.org/viewtopic.php?t=3769

Vielleicht findest Du ja auch noch ein paar Sachen, die nicht 
dokumentiert sind.
Gast #5279265
Lesenswert?

Die zweite UART scheint rudimentär zu funktionieren:

>>> import machine
>>> u2=machine.UART(2, baudrate=9600, rx=16, tx=17, timeout=10)
I (1576441) uart: ALREADY NULL
I (1576441) uart: queue free spaces: 10
>>> u2.write("Hello, World!\n")

Ich weiß zwar nicht, was die "I" Kommentare bedeuten, aber am Pin17 
kommt das Signal raus.
Gast #5346673
Lesenswert?

Um mal die Geschwindigkeit die DAC-Geschwindigkeit zu testen ..

Das folgende Programm toogled den DAC Ausgang ( im Bild der Anschluss 
mit der Bezeichnung D26)
1
from machine import DAC
2
from machine import Pin
3
dac1 = DAC(Pin(25))
4
dac2 = DAC(Pin(26))
5

6
while 1:
7
     dac2.write(0)
8
     dac2.write(255)

Die DAC-Samplingrate ist ~75kHz mit leichtem Jitter.

In der Quick-Referenz für das Pyboard findet man einige Hinweise für die 
Peripheriebefehle:
http://docs.micropython.org/en/latest/pyboard/pyboard/quickref.html
Angehängte Dateien:
Gast #5346697
Lesenswert?

Folgender Code erzeugt eine Sinusschwingung am DAC im Hörbereich:
1
import math
2
from machine import DAC
3
from machine import Pin
4

5
dac1 = DAC(Pin(25))
6
dac2 = DAC(Pin(26))
7

8
# create a buffer containing a sine-wave
9
buf = bytearray(100)
10
for i in range(len(buf)):
11
 buf[i] = 128 + int(127 * math.sin(2 * math.pi * i / len(buf)))
12

13
while 1:
14
 for i in range(len(buf)):
15
  dac2.write(buf[i])

Die Frequenz beträgt 329Hz, also bei 100 Abtastwerten eine DAC Fs von 
32,900kHz .
Gast #5346744
Lesenswert?

chris schrieb:
> Scheinbar gibt es ESP32 mit 4MB serial Ram Speichererweiterung:


Scheinbar?
Also meine hier sind real... ;)


> Bleibt die Frage, wie schnell das Python damit läuft.


Nicht schneller, aber vieles geht damit erst. Hängt halt von der 
Software ab.
Ohne ist aber kaum RAM übrig für aufwendigere Programme.
Gast #5346758
Lesenswert?

>Nicht schneller, aber vieles geht damit erst. Hängt halt von der
>Software ab.
Ich habe jetzt eher an langsamer gedacht, weil ja die Daten seriell in 
den Prozessor übertragen werden müssen.

>Ohne ist aber kaum RAM übrig für aufwendigere Programme.

Wenn ich richtig gelesen habe, sollte der ESP 440kB Ram haben. Die 
aktuelle Implementierung nutzt aber nur 100kB, es sind also 3/4 des Rams 
ungenutzt.
Kann man nur hoffen, dass es in irgend einer Version geändert wird.
Gast #5346772
Lesenswert?

chris schrieb:
> Ich habe jetzt eher an langsamer gedacht, weil ja die Daten seriell in
> den Prozessor übertragen werden müssen.


Ja, das ist richtig, die Daten werden ja per SPI übertragen. Es werden 
aber 32KB gecachet.


>>Ohne ist aber kaum RAM übrig für aufwendigere Programme.
>
> Wenn ich richtig gelesen habe, sollte der ESP 440kB Ram haben. Die
> aktuelle Implementierung nutzt aber nur 100kB, es sind also 3/4 des Rams
> ungenutzt.
> Kann man nur hoffen, dass es in irgend einer Version geändert wird.


Wenn mal auch sowas wie z.B. Bluetooth vollständig implementiert sind, 
bleibt vom internen RAM nicht mehr viel übrig.
Daher ist PSRAM für Micropython auf dem ESP32 leider Pflicht, wenn es 
denn überhaupt mal vollständig migriert wird.
Gast #5350827
Lesenswert?

Kannst Du den Speicher auf Deinen Modulen mit folgenden Befehlen 
überprüfen?:
1
import micropython 
2
micropython.mem_info()

Bei meinen dem oben abgebildeten erhalte ich:

stack: 736 out of 15360
GC: total: 111168, used: 5360, free: 105808
 No. of 1-blocks: 32, 2-blocks: 9, max blk sz: 264, max free sz: 6604

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren