Terkin Firmware Builder for ESP32

Per Add firmware builder machinery · hiveeyes/terkin-datalogger@8e24b0c · GitHub gibt es nun einen komfortablen Firmware-Builder, den man mit "make build-firmware-esp32-generic" ansteuern kann, nachdem man über die presets.mk ein paar neue Parameter eingetragen hat.

$ make build-firmware-esp32-generic

Building Genuine MicroPython firmware for esp32 with manifest file /Users/amo/dev/hiveeyes/sources/hiveeyes-micropython-firmware/mpy_manifest.py.

make -j8 --directory=ports/esp32 BOARD=GENERIC_SPIRAM FROZEN_MANIFEST=/Users/amo/dev/hiveeyes/sources/hiveeyes-micropython-firmware/mpy_manifest.py
---------------------------------------------------------------------------------------------------------------------------------------------------

Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
Building with ESP IDF v3

SUCCESS: Firmware image building succeeded.

{"firmware": "/Users/amo/dev/foss/fetched/micropython/ports/esp32/build-GENERIC_SPIRAM/firmware.bin", "application": "/Users/amo/dev/foss/fetched/micropython/ports/esp32/build-GENERIC_SPIRAM/application.elf"}
SUCCESS: Artefacts have been saved into /Users/amo/dev/hiveeyes/sources/hiveeyes-micropython-firmware/dist.
$ ls -l dist/firmware/
ESP32-GENERIC-SPIRAM-v1.12-dirty-Annapurna-0.2.0.bin

Hallo Andreas

Ich versuche terkin auf meinem BOBcad Board mit einem generic ESP32 zum laufen zu bekommen… bist jetzt noch nicht wirklich erfolgreich.
Hatte zuerst die aktuellste MicroPython 1.15 drauf, dann schnell runter auf 1.12 und mit dem letzten terkin release (terkin-datalogger-0.10.0-genuine-mpy-1.12) bekomm ich einen MemoryError:

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:4988
load:0x40078000,len:10404
load:0x40080400,len:5680
entry 0x400806bc
I (519) cpu_start: Pro cpu up.
I (519) cpu_start: Application information:
I (519) cpu_start: Compile time:     Dec 20 2019 07:56:38
I (522) cpu_start: ELF file SHA256:  0000000000000000...
I (528) cpu_start: ESP-IDF:          v4.0-beta1
I (533) cpu_start: Starting app cpu, entry point is 0x40083014
I (526) cpu_start: App cpu up.
I (544) heap_init: Initializing. RAM available for dynamic allocation:
I (551) heap_init: At 3FFAFF10 len 000000F0 (0 KiB): DRAM
I (557) heap_init: At 3FFB6388 len 00001C78 (7 KiB): DRAM
I (563) heap_init: At 3FFB9A20 len 00004108 (16 KiB): DRAM
I (569) heap_init: At 3FFBDB5C len 00000004 (0 KiB): DRAM
I (575) heap_init: At 3FFCC8A0 len 00013760 (77 KiB): DRAM
I (581) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (588) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (594) heap_init: At 40099FB8 len 00006048 (24 KiB): IRAM
I (600) cpu_start: Pro cpu start user code
I (619) spi_flash: detected chip: generic
I (619) spi_flash: flash io: dio
I (619) cpu_start: Chip Revision: 1
W (621) cpu_start: Chip revision is higher than the one configured in menuconfig. Suggest to upgrade it.
I (632) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
[boot.py] INFO: Python module search path is: ['', '/lib']
[boot.py] INFO: Universal MicroPython Application Loader (umal)
[umal]    INFO: Python module search path is: ['/lib', '/dist-packages', '/lib-mpy', '']
[main.py] INFO: Loading settings
[main.py] INFO: Starting logging
[main.py] INFO: Loading Terkin Datalogger
[main.py] INFO: Loading modules
Traceback (most recent call last):
  File "main.py", line 57, in <module>
  File "main.py", line 37, in main
  File "terkin/datalogger.py", line 16, in <module>
  File "terkin/device.py", line 13, in <module>
  File "terkin/telemetry/core.py", line 7, in <module>
  File "urllib/parse.py", line 475, in <module>
  File "urllib/parse.py", line 475, in <dictcomp>
MemoryError: memory allocation failed, allocating 376 bytes
MicroPython v1.12 on 2019-12-20; ESP32 module with ESP32

Du und @poesel hattet da ja auch schon Probleme damit (Portierung des Terkin-Datenlogger auf Genuine MicroPython für ESP32).

Dann bin ich auf diesen Hinweis mit dem build-firmware-esp32-generic gestossen, tu mir aber noch etwas schwer damit. Ich hab auf Windows 10 mit WSL die Sandbox installiert, aber ich find die passenden Pfade für die presets.mk nicht :roll_eyes:. Hast du da ein “konkretes” Beispiel?

# Firmware building
FWB_XTENSA_GCC ?= /path/to/xtensa-esp32-elf-1.22.0-98/bin

# Genuine MicroPython
FWB_MICROPYTHON_GENUINE ?= /path/to/micropython
FWB_ESPIDF_GENUINE ?= /path/to/esp-idf

Ich hab das Build System noch nicht wirklich verstanden… wollte nur sicher gehen, dass ich da nicht in eine Sackgasse gerate.

Oder anders gefragt, was ist aktuell der beste Weg terkin auf einem generic ESP32 zum Laufen zu bekommen?

Besten Dank und GN8!

Ich hab auch mal mit dem Erstellen einer Firmware rumexperimentiert. Das Erstellen war erfolgreich, gebracht hat es aber wenig bis gar nichts.
Bin dann wieder zurück zur Standard uPy Firmware. Von Terkin muss dann eigentlich nur alles unterhalb von /src auf den ESP geschoben werden. Settings.py konfigurieren und dann läuft es eigentlich.

Hi @techanic,

Terkin ist recht speicherhungrig. Wie viel externes SPI PSRAM hat denn das Board? Siehe auch Support for External RAM - ESP32 - — ESP-IDF Programming Guide latest documentation.

Viele Grüße,
Andreas.