@MKO hat sich das ganze mal angesehen und der Weg könnte sein:
Dragonfly mit ulab pimpen?
Source code zur Dragonfly firmware verwenden (nicht verwirren lassen, der branch heißt squirrel beinhaltet aber den latest and greates dragonfly Stand):
Im Endeffekt brauchen wir, so hoffe ich, nur noch diesen commit:
… und den code zum ulab-Modul hier:
Anleitungen dazu hat @MKO auch gefunden, um daraus wieder eine Firmware zu klöppeln. Wär auf alle Fälle einen Versuch wert.
I2S in die aktuelle firmware mit ulab integrieren?
Noch ein Nachtrag zur Idee das anders rum zu machen, die ulab-PyCom-Firmware mit I2S anzureichern:
ulab hat eine neuere Version als unsere home brewed dragonfly als Grundlage. Hier Pycom · master · Roberto Colistete Junior / MicroPython Firmwares · GitLab schreibt ulab 1.20.2.rc10, Andreas hat als Grundlage 1.20.2.rc6 verwendet. Uns bringt die neueste PyCom firmware aber nichts, wenn die Nachbesserungen von Andreas zu onewire, LTE, core panics … wie hier beschrieben nicht drinnen sind. :-( also bleibt nur der Weg oben.
Habe jetzt mal versucht beide Zweige zu verbinden, was auch geklappt haben müsste, so hoffe ich.
Ich versuche jetzt mit WSL2 die firmware zu Compilen. Zum testen erstmal ohne das ulab Modul.
Allerdings habe ich ein paar Probleme.
Ich bin strikt nach der Anleitung der README.md vorgegangen.
musste allerdings trotzdem den IDF Hasch im Makefile anpassen.
Irgendwas stimmt aber anscheinend mit meinem WSL nicht.
auf xtensa-esp32-elf-gcc wird der Zugriff verweigert.
Hmm, liegt es am aktuellen code oder an der Maschinerie? Du versuchst testweise den den alten Stand von Andreas zu compilieren, ja? Dann dürfte es nicht am neuen code liegen, sondern an der Firmware-Maschine.
das einzige was mir noch einfallen würde ich habe die 32Bit version von Xtensa genommen, da die 64Bit Version wegen Fehlern nicht entpackt werden konnte. Weiß nicht ob Linux da empfindlich ist.
Dir fehlen die Rechte, um den gcc zu starten.
Mach mal folgendes:
cd /home/user/xtensa-esp32-elf
chmod -R a+rwx *
Das ist der Holzhammer, der Dir alle Rechte (lesen, schreiben, ausführen) an allen Dateien unterhalb des Verzeichnisses gibt.
Falls da auch Permission denied kommt, hast Du das vermutlich als root installiert. Dann musst Du root werden (‘su’ + passwort). Dann in demselben Verzeichnis ‘chown -R user *’. Danach gehören alle Dateien dem user ‘user’. Danach mit CTRL-d wieder von root zu user wechseln.
leider war ich etwas ungeduldig und habe mein wsl zurückgesetzt und nochmal komplett neu aufgesetzt.
er kompiliert jetzt auch. bricht dann aber ab. Es fehlt ihn nun anscheinend pyserial
1407640 223256 54756 1685652 19b894 build/WIPY/release/application.elf
Building partitions from lib/partitions_4MB.csv...
Building partitions from lib/partitions_8MB.csv...
IMAGE build/WIPY/release/wipy.bin
Pyserial is not installed for /usr/bin/python. Check the README for installation instructions.
Traceback (most recent call last):
File "/home/user/pycom-esp-idf/components/esptool_py/esptool/esptool.py", line 37, in <module>
import serial
ImportError: No module named serial
make: *** [application.mk:681: build/WIPY/release/wipy.bin] Error 1
Leider brauche ich für die instalation von pyserial pip.
Pip läßt sich aber nicht mehr installieren.
Hab es hinbekommen er compiled jetzt zumindest schon mal “sqirrel”
mit dem gebasteltem Branch gibt es aktuell leider noch probleme in der ftp/ftp.c
schau mir das gerade an.
user@Werkstatt:~/pycom-micropython/esp32$ make BOARD=FIPY USER_C_MODULES=/home/user/micropython-ulab CFLAGS_EXTRA=-ulab_ENABLED=1 all
Use make SECURE=on [optionally SECURE_KEY ?= secure_boot_signing_key.pem] to enable Secure Boot and Flash Encryption mechanisms.
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
Including User C Module from /home/user/micropython-ulab/code
BASE Variant
IDF Version OK! c61fe64
mkdir -p build/FIPY/release/bootloader/
CC bootloader/bootloader.c
CC bootloader/bootmgr.c
CC bootloader/mperror.c
CC bootloader/gpio.c
AR build/FIPY/release/bootloader/bootloader.a
LINK xtensa-esp32-elf-gcc *** -nostdlib -Wl,-Map=build/FIPY/release/bootloader/bootloader.map -Wl,--no-check-sections -u call_user_start_cpu0 -Wl,-static -Wl,--undefined=uxTopUsedPriority -Wl,--gc-sections -T esp32.bootloader.ld -T esp32.rom.ld -T esp32.peripherals.ld -T esp32.bootloader.rom.ld -T esp32.rom.spiram_incompatible_fns.ld *** -Wl,--start-group -Lbootloader/lib -Lbootloader -Lbuild/FIPY/release/bootloader -L/home/user/pycom-esp-idf/components/esp32/ld -L/home/user/pycom-esp-idf/components/esp32/lib -llog -lcore -lbootloader_support -lspi_flash -lsoc -lmicro-ecc -lgcc -lstdc++ -lgcov -lefuse build/FIPY/release/bootloader/bootloader.a -Wl,--end-group -Wl,-EL -o build/FIPY/release/bootloader/bootloader.elf
text data bss dec hex filename
19822 2148 32 22002 55f2 build/FIPY/release/bootloader/bootloader.elf
IMAGE build/FIPY/release/bootloader/bootloader.bin
esptool.py v2.8
mkdir -p build/FIPY/release/genhdr
Create build/FIPY/release/genhdr/pins.h
GEN build/FIPY/release/genhdr/mpversion.h
GEN build/FIPY/release/genhdr/moduledefs.h
GEN build/FIPY/release/genhdr/qstr.i.last
GEN build/FIPY/release/genhdr/qstr.split
GEN build/FIPY/release/genhdr/qstrdefs.collected.h
QSTR updated
GEN build/FIPY/release/genhdr/qstrdefs.generated.h
mkdir -p build/FIPY/release/build/FIPY/release/
mkdir -p build/FIPY/release/can/
mkdir -p build/FIPY/release/code/
mkdir -p build/FIPY/release/code/approx/
mkdir -p build/FIPY/release/code/compare/
mkdir -p build/FIPY/release/code/fft/
mkdir -p build/FIPY/release/code/filter/
mkdir -p build/FIPY/release/code/linalg/
mkdir -p build/FIPY/release/code/numerical/
mkdir -p build/FIPY/release/code/poly/
mkdir -p build/FIPY/release/code/user/
mkdir -p build/FIPY/release/code/vector/
mkdir -p build/FIPY/release/drivers/sx127x/sx1272/
mkdir -p build/FIPY/release/extmod/
mkdir -p build/FIPY/release/fatfs/src/drivers/
mkdir -p build/FIPY/release/ftp/
mkdir -p build/FIPY/release/hal/
mkdir -p build/FIPY/release/lib/embed/
mkdir -p build/FIPY/release/lib/libm/
mkdir -p build/FIPY/release/lib/lora/mac/
mkdir -p build/FIPY/release/lib/lora/mac/region/
mkdir -p build/FIPY/release/lib/lora/system/
mkdir -p build/FIPY/release/lib/lora/system/crypto/
mkdir -p build/FIPY/release/lib/mp-readline/
mkdir -p build/FIPY/release/lib/netutils/
mkdir -p build/FIPY/release/lib/oofatfs/
mkdir -p build/FIPY/release/lib/timeutils/
mkdir -p build/FIPY/release/lib/utils/
mkdir -p build/FIPY/release/littlefs/
mkdir -p build/FIPY/release/lora/
mkdir -p build/FIPY/release/lte/
mkdir -p build/FIPY/release/mods/
mkdir -p build/FIPY/release/ports/stm32/
mkdir -p build/FIPY/release/py/
mkdir -p build/FIPY/release/telnet/
mkdir -p build/FIPY/release/util/
CC ../py/mpstate.c
CC ../py/nlr.c
CC ../py/nlrx86.c
CC ../py/nlrx64.c
CC ../py/nlrthumb.c
CC ../py/nlrxtensa.c
CC ../py/nlrsetjmp.c
CC ../py/malloc.c
CC ../py/gc.c
CC ../py/pystack.c
CC ../py/qstr.c
CC ../py/vstr.c
CC ../py/mpprint.c
CC ../py/unicode.c
CC ../py/mpz.c
CC ../py/reader.c
CC ../py/lexer.c
CC ../py/parse.c
CC ../py/scope.c
CC ../py/compile.c
CC ../py/emitcommon.c
CC ../py/emitbc.c
CC ../py/asmbase.c
CC ../py/asmx64.c
CC ../py/emitnx64.c
CC ../py/asmx86.c
CC ../py/emitnx86.c
CC ../py/asmthumb.c
CC ../py/emitnthumb.c
CC ../py/emitinlinethumb.c
CC ../py/asmarm.c
CC ../py/emitnarm.c
CC ../py/asmxtensa.c
CC ../py/emitnxtensa.c
CC ../py/emitinlinextensa.c
CC ../py/formatfloat.c
CC ../py/parsenumbase.c
CC ../py/parsenum.c
CC ../py/emitglue.c
CC ../py/persistentcode.c
CC ../py/runtime.c
CC ../py/runtime_utils.c
CC ../py/scheduler.c
CC ../py/nativeglue.c
CC ../py/stackctrl.c
CC ../py/argcheck.c
CC ../py/warning.c
CC ../py/map.c
CC ../py/obj.c
CC ../py/objarray.c
CC ../py/objattrtuple.c
CC ../py/objbool.c
CC ../py/objboundmeth.c
CC ../py/objcell.c
CC ../py/objclosure.c
CC ../py/objcomplex.c
CC ../py/objdeque.c
CC ../py/objdict.c
CC ../py/objenumerate.c
CC ../py/objexcept.c
CC ../py/objfilter.c
CC ../py/objfloat.c
CC ../py/objfun.c
CC ../py/objgenerator.c
CC ../py/objgetitemiter.c
CC ../py/objint.c
CC ../py/objint_longlong.c
CC ../py/objint_mpz.c
CC ../py/objlist.c
CC ../py/objmap.c
CC ../py/objmodule.c
CC ../py/objobject.c
CC ../py/objpolyiter.c
CC ../py/objproperty.c
CC ../py/objnone.c
CC ../py/objnamedtuple.c
CC ../py/objrange.c
CC ../py/objreversed.c
CC ../py/objset.c
CC ../py/objsingleton.c
CC ../py/objslice.c
CC ../py/objstr.c
CC ../py/objstrunicode.c
CC ../py/objstringio.c
CC ../py/objtuple.c
CC ../py/objtype.c
CC ../py/objzip.c
CC ../py/opmethods.c
CC ../py/sequence.c
CC ../py/stream.c
CC ../py/binary.c
CC ../py/builtinimport.c
CC ../py/builtinevex.c
CC ../py/builtinhelp.c
CC ../py/modarray.c
CC ../py/modbuiltins.c
CC ../py/modcollections.c
CC ../py/modgc.c
CC ../py/modio.c
CC ../py/modmath.c
CC ../py/modcmath.c
CC ../py/modmicropython.c
CC ../py/modstruct.c
CC ../py/modsys.c
CC ../py/moduerrno.c
CC ../py/modthread.c
CC ../py/vm.c
CC ../py/bc.c
CC ../py/showbc.c
CC ../py/repl.c
CC ../py/smallint.c
CC ../py/frozenmod.c
CC ../extmod/moductypes.c
CC ../extmod/modujson.c
CC ../extmod/modure.c
CC ../extmod/moduzlib.c
CC ../extmod/moduheapq.c
CC ../extmod/modutimeq.c
CC ../extmod/moduhashlib.c
CC ../extmod/moducryptolib.c
CC ../extmod/modubinascii.c
CC ../extmod/virtpin.c
CC ../extmod/machine_mem.c
CC ../extmod/machine_pinbase.c
CC ../extmod/machine_signal.c
CC ../extmod/machine_pulse.c
CC ../extmod/machine_i2c.c
CC ../extmod/machine_spi.c
CC ../extmod/modussl_axtls.c
CC ../extmod/modussl_mbedtls.c
CC ../extmod/modurandom.c
CC ../extmod/moduselect.c
CC ../extmod/moduwebsocket.c
CC ../extmod/modwebrepl.c
CC ../extmod/modframebuf.c
CC ../extmod/modonewire.c
CC ../extmod/vfs.c
CC ../extmod/vfs_reader.c
CC ../extmod/vfs_posix.c
CC ../extmod/vfs_posix_file.c
CC ../extmod/vfs_fat.c
CC ../extmod/vfs_fat_diskio.c
CC ../extmod/vfs_fat_file.c
CC ../extmod/utime_mphal.c
CC ../extmod/uos_dupterm.c
CC ../lib/embed/abort_.c
CC ../lib/utils/printf.c
MPY frozen/Base/_boot.py
MPY frozen/Base/_main.py
MPY frozen/LTE/sqnsbrz.py
MPY frozen/LTE/sqnscodec.py
MPY frozen/LTE/sqnscrc.py
MPY frozen/LTE/sqnstp.py
MPY frozen/LTE/sqnsupgrade.py
GEN build/FIPY/release/frozen_mpy.c
CC build/FIPY/release/frozen_mpy.c
CC lora/utilities.c
CC lora/timer-board.c
CC lora/gpio-board.c
CC lora/spi-board.c
CC lora/sx1276-board.c
CC lora/sx1272-board.c
CC lora/board.c
CC ../lib/lora/mac/LoRaMac.c
CC ../lib/lora/mac/LoRaMacCrypto.c
CC ../lib/lora/mac/region/Region.c
CC ../lib/lora/mac/region/RegionAS923.c
CC ../lib/lora/mac/region/RegionAU915.c
CC ../lib/lora/mac/region/RegionCommon.c
CC ../lib/lora/mac/region/RegionEU868.c
CC ../lib/lora/mac/region/RegionUS915.c
CC ../lib/lora/mac/region/RegionCN470.c
CC ../lib/lora/mac/region/RegionEU433.c
CC ../lib/lora/mac/region/RegionIN865.c
CC ../lib/lora/system/delay.c
CC ../lib/lora/system/gpio.c
CC ../lib/lora/system/timer.c
CC ../lib/lora/system/crypto/aes.c
CC ../lib/lora/system/crypto/cmac.c
CC ../drivers/sx127x/sx1272/sx1272.c
CC mods/modlora.c
CC mods/modsigfox_api.c
CC lte/lteppp.c
CC mods/modlte.c
CC main.c
CC mptask.c
CC serverstask.c
CC fatfs_port.c
CC pycom_config.c
CC mpthreadport.c
CC hal/esp32_mphal.c
CC ../lib/libm/math.c
CC ../lib/libm/fmodf.c
CC ../lib/libm/roundf.c
CC ../lib/libm/ef_sqrt.c
CC ../lib/libm/kf_rem_pio2.c
CC ../lib/libm/kf_sin.c
CC ../lib/libm/kf_cos.c
CC ../lib/libm/kf_tan.c
CC ../lib/libm/ef_rem_pio2.c
CC ../lib/libm/sf_sin.c
CC ../lib/libm/sf_cos.c
CC ../lib/libm/sf_tan.c
CC ../lib/libm/sf_frexp.c
CC ../lib/libm/sf_modf.c
CC ../lib/libm/sf_ldexp.c
CC ../lib/libm/asinfacosf.c
CC ../lib/libm/atanf.c
CC ../lib/libm/atan2f.c
CC ../lib/mp-readline/readline.c
CC ../lib/netutils/netutils.c
CC ../lib/utils/pyexec.c
CC ../lib/utils/interrupt_char.c
CC ../lib/utils/sys_stdio_mphal.c
CC ../lib/oofatfs/ff.c
CC ../lib/oofatfs/ffunicode.c
CC ../lib/timeutils/timeutils.c
CC mods/machuart.c
CC mods/machpin.c
CC mods/machrtc.c
CC mods/pybflash.c
CC mods/machspi.c
CC mods/machine_i2c.c
CC mods/machine_i2s.c
CC mods/machpwm.c
CC mods/machcan.c
CC mods/modmachine.c
CC mods/moduos.c
CC mods/modusocket.c
CC mods/modnetwork.c
CC mods/network_ppp.c
CC mods/modwlan.c
CC mods/modutime.c
CC mods/modpycom.c
CC mods/moduqueue.c
CC mods/moduhashlib.c
CC mods/moducrypto.c
CC mods/machtimer.c
CC mods/machtimer_alarm.c
CC mods/machtimer_chrono.c
CC mods/analog.c
CC mods/pybadc.c
CC mods/pybdac.c
CC mods/pybsd.c
CC mods/modussl.c
CC mods/modbt.c
CC mods/modled.c
CC mods/machwdt.c
CC mods/machrmt.c
CC mods/lwipsocket.c
CC mods/machtouch.c
CC mods/modcoap.c
CC mods/modmdns.c
CC ../ports/stm32/bufhelper.c
CC /home/user/micropython-ulab/code/ndarray.c
CC /home/user/micropython-ulab/code/ulab_create.c
CC /home/user/micropython-ulab/code/linalg/linalg.c
CC /home/user/micropython-ulab/code/vector/vectorise.c
CC /home/user/micropython-ulab/code/poly/poly.c
CC /home/user/micropython-ulab/code/fft/fft.c
CC /home/user/micropython-ulab/code/numerical/numerical.c
CC /home/user/micropython-ulab/code/filter/filter.c
CC /home/user/micropython-ulab/code/compare/compare.c
CC /home/user/micropython-ulab/code/approx/approx.c
CC /home/user/micropython-ulab/code/user/user.c
CC /home/user/micropython-ulab/code/ulab.c
CC fatfs/src/drivers/sflash_diskio.c
CC fatfs/src/drivers/sd_diskio.c
CC littlefs/lfs.c
CC littlefs/lfs_util.c
CC littlefs/vfs_littlefs.c
CC littlefs/vfs_littlefs_file.c
CC littlefs/sflash_diskio_littlefs.c
CC util/antenna.c
CC util/gccollect.c
CC util/help.c
CC util/mperror.c
CC util/random.c
CC util/mpexception.c
CC util/fifo.c
CC util/socketfifo.c
CC util/mpirq.c
CC util/mpsleep.c
CC util/timeutils.c
CC util/esp32chipinfo.c
CC util/pycom_general_util.c
CC util/str_utils.c
CC telnet/telnet.c
CC ftp/ftp.c
CC ftp/updater.c
CC can/CAN.c
CC build/FIPY/release/pins.c
AR build/FIPY/release/application.a
CPP build/FIPY/release/esp32_out.ld
LINK build/FIPY/release/application.elf
xtensa-esp32-elf-size build/FIPY/release/application.elf
text data bss dec hex filename
1557572 329888 68844 1956304 1dd9d0 build/FIPY/release/application.elf
Building partitions from lib/partitions_4MB.csv...
Building partitions from lib/partitions_8MB.csv...
IMAGE build/FIPY/release/fipy.bin
esptool.py v2.8
user@Werkstatt:~/pycom-micropython/esp32$ make BOARD=FIPY release
Use make SECURE=on [optionally SECURE_KEY ?= secure_boot_signing_key.pem] to enable Secure Boot and Flash Encryption mechanisms.
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
BASE Variant
IDF Version OK! c61fe64
checking size of image
1909664 bytes => Size OK
Creating release package in /home/user/pycom-micropython/esp32/build
Release package FiPy-1.20.2.rc10.tar.gz created successfully.
user@Werkstatt:~/pycom-micropython/esp32$
bin jetzt nur noch nicht sicher ob pycom pybytes drin ist oder wie bei @Andreas Firmware raus ist.
@clemens fehlt noch ein freiwilliger Tester und ein Name
Anleitung und Beispielcodes fürs Ulab Modul gibt es hier: https://micropython-ulab.readthedocs.io/en/latest/
das I2S mit Pycom grundsätzlich funktioniert hat Clemens ja hier in Thread ja schon gezeigt.
Upload klappt auch.
und der Terkin-firmware läst sich auch aufspielen weiter schaffe ich es aktuell nicht zu testen. Verbindungen und Sensoren sind nicht überprüft.
In der Repl läßt sich ulab und I2S auch schon mal importieren.
Nochmal als Hinweis. Achtung! bei den von mir oben geposteten Firmware Images handelt es sich nicht um Offizielle oder Inoffizielle Realease es ist nur ein erster Versuch der Zusammenführung zweier Zweige auf GitHub. Die das beste aus beiden Zweigen vereinigen soll. Insbesondere die I2S und FFT Unterstützung.
Habe es jetzt auch mal mit deinem Beispielcode von Oben und dem INMP441 microphone versucht. Klapt schon mal.
FFT mit dem Ulab konnte ich noch nicht testen, weil ich dort noch nicht im Thema bin und keine entsprechenden Beispielcodes gefunden habe.
Ich sammel hier aber mal die besten Fundstücke:
Python Code unter verwendung von numpy (ulab Ähnliche Bibliothek auf Python)
Sehr interessant wäre es sicher die Firmware mit dem Terkin-Datalogger und der BOB-Firmware zu testen. Gerade im Bereich LTE ist dort auch der ein oder andere Bug behoben worden. Außerdem scheint der ein oder andere commit sich auch dem thema Core Panic (malloc; gc)zu widmen.
Bin gerade dabei alle Änderungen nachzuvollziehen. Und zu schauen, ob bereits implantierte Funktionen wie I2S upgedatet werden können oder müssen.
Der ob rechts oder links ist davon abhängig, mit welcher esp-idf das Build der Firmware gemacht wurde. Ältere IDF Versionen sind rechts und ab ESP-IDF v3.3.1 (14.1.20) Version wird Links gebracht.
@clemens ich bin auf meinen Recherchen auch noch auf das i2stools Modul und dba Modul von Mike Teachman gestoßen i2stools erweitert den i2s um eine swift (Lautstärkeregelung) und eine Kopierfunktion.
Dba errechnet aus einem Stream von Audiodaten die dB.
Die könnte ich auch noch hinzufügen,falls wir sie überhaupt brauchen können. https://forum.micropython.org/viewtopic.php?t=8406
Bin mir nicht sicher ob dB als Sensorwert bei der Übertragung eines Datenloggers überhaupt was taugt. Eine Lautstärke-Änderung ohne jegliche Filter könnte das ganze Volk, eine einzelne Biene direkt vor dem Mic oder ein vorbeifahrendes Auto sein.
Pycom hat kürzlich (3 days ago) die GitHub - pycom/pycom-micropython-sigfox at v1.20.2.r3 rausgetan – kein “release candidate (rc)” mehr! Die r0 erschien am 6. August, die r1 am 9. September und die r2 am 23. November.
Wir sollten also bei Gelegenheit eine neue Squirrel Firmware auf der Basis der 1.20.2.r3 inkl. der entsprechenden Erweiterungen aus der Community bauen.