=====Mit dem NodeMCU Board ESP32 Impulse zählen um den Durchfluß messen=====
Ablauf:
* Firmware konfigurieren
* Lua Script erstellen
* Board anschließen und konfigurieren
In der ESP32 Lua Lib gibt es eine eigene Implementierung für einen Zähler => https://nodemcu.readthedocs.io/en/dev-esp32/modules/pulsecnt/
Alternativ ist das auch mit dem ESP32 möglihch => [[elektronik:nodemcu_esp8266_impulse_zaehlen|Mit dem NodeMCU Board ESP8266 Impulse zählen - Durchfluß messen]], suche aber nach einer einfachen Lösung das in einem eignen Thread durchzuführen, möglichst unabhängig von der Last auf der CPU.
----
==== Technik ====
Der Sensor verwendet den Hall Effekt um die Drehzahl eines Rades zu bestimmen.
Flowmeter anschließen
* Schwarz => GND
* Rot => 3,3V
* Gelb => D1 => Daten
----
==== Firmware erstellen ====
Um die LUA Firmware zu erstellen gibt es 3 Möglichkeiten
- Unter Windows mit Hilfe eines fertigen Docker Images
- Linux Installation mit alle notwendigen Libraries und dort übersetzen
- Online Cloud Service
===Auf Windows 10 mit Docker Image unter VMWare 16 übersetzen===
Mit der VMware Workstation 16 kann auch ein Docker Container gestartet werden, d.h. es muss Docker gar nicht erst installiert werden.
=== NodeMCU Code von Git laden ===
Git Bash im gewählten Ober-Ordern wie "c:\entwicklung\es32\firmware" öffnen:
git clone --branch dev-esp32 --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git nodemcu-firmware-esp32
Docker Image Anleitung => https://hub.docker.com/r/marcelstoer/nodemcu-build
Docker Image laden:
vctl pull marcelstoer/nodemcu-build
Starten:
vctl system start
Konfigurieren:
vctl run -c 4 -m 16g --rm -it -v C:/entwicklung/esp32/firmware/nodemcu-firmware-esp32:/opt/nodemcu-firmware marcelstoer/nodemcu-build configure-esp32
Über das Konfigurations Menü können nun alle benötigten Eigenschaften eingestellt werden.
{{ :elektronik:nodemcu_config_firmware_dialog_v01.png?700 | Nodemcu firmware config dialog}}
Bauen:
vctl run -c 4 -m 16g --rm -it -v C:/entwicklung/esp32/firmware/nodemcu-firmware-esp32:/opt/nodemcu-firmware marcelstoer/nodemcu-build build
=== Alternativ - In einer eigenen Linux VM ===
tool Chain aufbauen:
Siee => https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-setup-scratch.html
Repos einrichten:
# Repos einrichten
cd /etc/yum.repos.d
vi oraclelinux-codeready-ol8.repo
[OL8_codeready_builder]
name= checkmk dependencies
baseurl=http://yum.oracle.com/repo/OracleLinux/OL8/codeready/builder/x86_64
enabled=1
gpgcheck=0
dnf install oracle-epel-release-el8.x86_64
dnf install oraclelinux-developer-release-el8.x86_64
Tools installieren:
# Tool Chain aufsetzen
dnf group install "Development Tools"
dnf install gcc
dnf install git wget make flex bison
-- debian libncurses-dev
dnf install ncurses-devel
dnf install gperf
-- debain --python python-serial
dnf install python3 python3-pip
dnf install python3-pyserial
dnf install readline-devel.x86_64
ESP32 Build:
mkdir -p /srv/esp32/nodemcu
cd srv/esp32/nodemcu
git clone --branch dev-esp32 --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git nodemcu-firmware-esp32
cd nodemcu-firmware-esp32
make menuconfig
# python3 einstellen!
# Dependencies
/usr/bin/python3 -m pip install --user -r /srv/esp32/nodemcu/nodemcu-firmware-esp32/sdk/esp32-esp-idf/requirements.txt
# -- ================================
make
#prüfen
cd /srv/esp32/nodemcu/nodemcu-firmware-esp32/build
esptool.py --chip esp32 image_info NodeMCU.bin
esptool.py v3.0
Entry point: 40081364
7 segments
Segment 1: len 0x25840 load 0x3f400020 file_offs 0x00000018 [DROM]
........
Checksum: b3 (valid)
Validation Hash: 9ac08378580465978690d5cf5a69725ab94c2fe43e2d2ef62fd650055484d09a (valid)
# -- ================================
# falls der Kontroller angeschloßen ist und erkannt wird
make flash
Siehe => https://www.microdev.it/wp/en/2018/08/17/esp32-nodemcu-firmware-compiling/
Problem:
Connecting........_____....._____....._____....._____....._____....._____....._____
/dev/ttyUSB0 failed to connect: Failed to connect to Espressif device: Invalid head of packet (0x08)
Beim Flaschen über die rechte Taste Controller in den richtigen Status setzen!
=== Online Firmware Image erstellen lassen ===
Über => https://nodemcu-build.com/
Auf ESP32 Beta Build achten!
Gewählte Module:
file gpio net node pulsecnt spi tmr uart wifi.
----
==== Firmware auf den Controller einspielen ====
===Python Setup===
Python 3.8 installieren (z.b. nach C:\python38)
cd C:\python38
-- upgrade pip
cd C:\python38>
.\python.exe -m pip install --upgrade pip
-- ESP Tools installieren
C:\python38>
.\python.exe -m pip install --upgrade esptool
===ESP Tool Setup===
Clone von https://github.com/espressif/esptool.git
cd c:\entwicklung\esp32
mkdir esptool
cd esptool
# über Git Bash falls nicht im Pfad
git clone https://github.com/espressif/esptool.git
Chip ID auslesen:
cd c:\entwicklung\esp32\esptool
C:\Python38\python.exe .\esptool.py chip_id
esptool.py v3.1-dev
Found 2 serial ports
Serial port COM4
Connecting........_____...
Detecting chip type... ESP32
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 24:0a:c4:30:f7:ec
Uploading stub...
Running stub...
Stub running...
Warning: ESP32 has no Chip ID. Reading MAC instead.
MAC: 24:0a:c4:30:f7:ec
Hard resetting via RTS pin...
=== Image auf den Controller schreiben ===
Altes Image zuvor löschen:
C:\Python38\python.exe .\esptool.py --chip esp32 -p COM4 erase_flash
Nun den das Firmware Image auf den Kontroller schreiben mit "esptool.py --chip esp32 -p write_flash -z 0x1000 "
C:\Python38\python.exe .\esptool.py --chip esp32 -p COM4 write_flash -z 0x1000 C:\entwicklung\esp32\firmware\nodemcu-firmware-esp32\nodemcu_dev-esp32_20210304-1641.bin
esptool.py v3.1-dev
Serial port COM4
Connecting........_
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 24:0a:c4:30:f7:ec
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Compressed 1448768 bytes to 926007...
Wrote 1448768 bytes (926007 compressed) at 0x00001000 in 82.6 seconds (effective 140.4 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
----
==== Per ESPlorer auf den Controller zugreifen ====
===ESPlorer===
cd /c/entwicklung/nodeMCU
git clone https://github.com/4refr0nt/ESPlorer.git
Oder einfacher direkt als lauffähige Version über https://esp8266.ru/esplorer/
Dokumentation siehe http://esp8266.ru/download/esp8266-doc/Getting%20Started%20with%20the%20ESPlorer%20IDE%20-%20Rui%20Santos.pdf
Nach dem Start (doppel Click auf ESPlorer.jar) haben wir das erste Problemchen, leider habe ich ärgerlicher Weise ein 4K Display => alles viel zu klein ..... 8-o
In der Bat Datei den direkten Pfad zur Java Exe angeben und die "Java dpi awarene" ausschalten:
Find java.exe and/or javaw.exe likely found in C:\Program Files\Java\jre(version#)\bin.
Right click on it and select -> Properties.
Go to Compatibility tab.
Check Override high DPI scaling behavior.
Choose System for Scaling performed by:
Click OK.
Quelle Google
Nun kann auch ohne Lupe mit dem Tool gearbeitet werden.
{{ :elektronik:esplorer_nodemcu.png?600 | NodeMcu ESplorer}}
Probleme ...
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
ets_main.c 371
Laut Dokumentation "The "flash read err, 1000" indicates that the ESP32 didn't find a bootloader binary at offset 0x1000."
Image testen:
cd C:\entwicklung\esp32\esptool\esptool>
C:\Python38\python.exe .\esptool.py --chip esp32 image_info C:\entwicklung\esp32\firmware\nodemcu-firmware-esp32\nodemcu_dev-esp32_20210304-16
41.bin
esptool.py v3.1-dev
A fatal error occurred: Invalid firmware image magic=0xff
Wie aber muss nun das Image gebaut werden damit es funktioniert? Ein Image aus der Cloud zeigt das gleiche Probem!
Zwei Kontroller nun mit einem fertigen [[elektronik:nodemcu_esp32_micropython|MicroPython]] Image getestet, beide funktionieren!
Test ich jetzt diese Image:
PS C:\entwicklung\esp32\esptool\esptool> C:\Python38\python.exe .\esptool.py --chip esp32 image_info C:\entwicklung\esp32\esp32-idf4-20210202-v1.14.bin
esptool.py v3.1-dev
Image version: 1
Entry point: 40080630
4 segments
Segment 1: len 0x00004 load 0x3fff0018 file_offs 0x00000018 [BYTE_ACCESSIBLE,DRAM,DIRAM_DRAM]
Segment 2: len 0x0141c load 0x3fff001c file_offs 0x00000024 [BYTE_ACCESSIBLE,DRAM,DIRAM_DRAM]
Segment 3: len 0x03250 load 0x40078000 file_offs 0x00001448 [CACHE_APP]
Segment 4: len 0x00d9c load 0x40080400 file_offs 0x000046a0 [IRAM]
Checksum: d7 (valid)
Validation Hash: dfeac035b8b1dd1bb9600420c3939abadee18510b74c897d409c6686e0df195e (valid)
Hmm, nur mit dem Erzeugen des Images über die Linux Lösung ist es mir gelungen ein Image zu erzeugen das sich flashen läßt!
----
==== Pulse Zähler Code ====
pinPulseInput = 2
llim = -32768
hlim = 32767
pcnt = pulsecnt.create(7) -- Use unit 7 (0-7 are allowed)
pcnt:chan0Config(
pinPulseInput, --pulse_gpio_num
pulsecnt.PCNT_PIN_NOT_USED, --ctrl_gpio_num If no control is desired specify PCNT_PIN_NOT_USED
pulsecnt.PCNT_COUNT_INC, --pos_mode PCNT positive edge count mode
pulsecnt.PCNT_COUNT_DIS, --neg_mode PCNT negative edge count mode
pulsecnt.PCNT_MODE_KEEP, --lctrl_mode Ctrl low PCNT_MODE_KEEP, PCNT_MODE_REVERSE, PCNT_MODE_DISABLE
pulsecnt.PCNT_MODE_KEEP, --hctrl_mode Ctrl high PCNT_MODE_KEEP, PCNT_MODE_REVERSE, PCNT_MODE_DISABLE
llim, --counter_l_lim [Range -32768 to 32767]
hlim --counter_h_lim [Range -32768 to 32767]
)
-- Clear counting
pcnt:clear()
-- Poll the pulse counter
print("Current pulse counter val:" .. pcnt:getCnt())
=> https://nodemcu.readthedocs.io/en/dev-esp32/modules/pulsecnt/
===Display anschließen===
Display Anzeige => http://www.robertprice.co.uk/robblog/using-an-i2c-128x64-oled-display-with-lua-on-a-nodemcu/
----
==== Quellen====
* ESP Version identifizieren => https://www.instructables.com/How-to-Check-the-Revision-Level-of-Your-ESP32/
* https://randomnerdtutorials.com/esp32-cam-troubleshooting-guide/