Hiverize code läuft auf meinem FiPy nicht

@Andreas, @einsiedlerkrebs, ihr habt doch auch einen FiPy auf der Werkbank, könntet ihr mal den code von GitHub - Hiverize/FiPy herunterladen und auf eine FiPy packen, dann schauen was bei euch passiert.

Ich habe zuerst mit make purge-device (dev-Sandkasten von Andreas) alles auf dem FiPy gelöscht und dann via Atom den code oben hochgeladen, dabei diese settings.json (1.4 KB) verwendet.

Schauen wir!

Ich habe nochmals die Hiveeyes / Andreas’ firmware getestet um sicher zu sein, dass alles korrekt angeschlossen ist und alle Sensoren funktionieren, das ist der Fall (Waage ist nicht justiert, funktioniert aber), auch der Versand via WLAN funktioniert und die Daten kommen auf dem Hiveeyes-Server an:

hiveeyes/testdrive/area-005/fipy-cg-01/data.json 
{
"weight": -136837.5, 

"temperature.28ff641d8fd922ab.onewire:0": 20.4375, 
"temperature.28ff641d8fd833ac.onewire:0": 20.4375, 
"temperature.28ff641d8fd18ab0.onewire:0": 20.375, 
"temperature.28ff641d8fd4d5d5.onewire:0": 20.125, 
"temperature.28ff641d8fd8778b.onewire:0": 20.125, 

"temperature.0x77.i2c:0": 23.31, 
"humidity.0x77.i2c:0": 46.36, 
"pressure.0x77.i2c:0": 994.71, 

"memfree": 2294080
}

Habe gerade nochmal versucht die Firmware zu flashen und dabei auch bei den advanced settings “erase during update” beim file system ausgewählt

2019-05-09%2013_10_34-Pycom%20Upgrade

Dennoch sind die Dateien danach noch da!

auch make purge-device scheint nicht zu funktionieren

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make purge-device
Format /flash on the device? This will delete your program. [y/n]? #.venv3/bin/rshell --port /dev/ttyS16 --buffer-size 2048 --timing --file tools/clean.rshell
Using buffer-size of 2048
Connecting to /dev/ttyS16 (buffer-size 2048)...
Trying to connect to REPL  connected
Testing if ubinascii.unhexlify exists ... Y
Retrieving root directories ... /flash/
Setting time ... May 09, 2019 13:23:31
Evaluating board_name ... pyboard
Retrieving time epoch ... Jan 01, 1970
Entering REPL. Use Control-X to exit.
>
Pycom MicroPython 1.20.0.rc10 [v1.9.4-350eac8] on 2019-04-16; FiPy with ESP32
Type "help()" for more information.
>>>
>>> import os ; os.fsformat(/flash)
Traceback (most recent call last):
  File "<stdin>", line 1
SyntaxError: invalid syntax
>>> took 1.051 seconds
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make rshell
.venv3/bin/rshell --port /dev/ttyS16 --buffer-size 2048 --timing
Using buffer-size of 2048
Connecting to /dev/ttyS16 (buffer-size 2048)...
Trying to connect to REPL  connected
Testing if ubinascii.unhexlify exists ... Y
Retrieving root directories ... /flash/
Setting time ... May 09, 2019 13:24:28
Evaluating board_name ... pyboard
Retrieving time epoch ... Jan 01, 1970
Welcome to rshell. Use Control-D (or the exit command) to exit rshell.
/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware> cd /flash
took 0.806 seconds
/flash> ls
cert/          dist-packages/ lib/           sys/           boot.py        main.py        settings.py
took 1.506 seconds
/flash>

Hi Clemens,

Exakt:

Hmm, sollte laut Doku gehen, und ging ja auch schon mal:

If problems occur within the filesystem or you wish to factory reset your module to remove your code, run following code in the REPL:

>>> import os
>>> os.mkfs('/flash')

das geht auch nicht in der REPL

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'mkfs'
>>>

Geht bestimmt auch, wenn mans richtig macht. Bitte Syntax beachten: os.fsformat(/flash) vs. os.mkfs('/flash'). Bei ersterem Aufruf fehlen die Gänsefüßchen, keine Wunder, dass das deshalb auf die Schnauze fällt. Ich vermute eine Makefile-/rshell-Anomalie unter Windows.

Empfehlung: Ggf. einfach API-kompatibel (fsformat vs. mkfs) von Hand auf der rshell ausführen!

In der PyMakr-Konsole unter Atom

>>> import os
>>> os.mkfs('/flash')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'mkfs'
>>>

sollte es auch über

make rshell

in der dev sandbox gehen?

/flash> import os
Unrecognized command: import os
took 0.002 seconds

Das Löschen von Dateien scheint zu funktionieren

>>> os.unlink('settings.json')

Ist der slash das Problem?

Wie würde das denn aussehen? Von make rshell nach /flash und dann nach / und nun mkfs ?? Oder geht das über make rshell nicht?

rshell und REPL sind zwei paar verschiedene Stiefel, auch wenn beides Shells sind. "os" ist ein (eingebautes) Python Paket und Aufrufe darauf können interaktiv über die REPL vorgenommen werden, in die man per "make repl" gelangt. Hierfür die Eingebaufforderung der rshell selbst zu benutzen, war die falsche Abzweigung.

Ergo:

make repl
>>> import os
>>> os.fsformat('/flash')

oder

>>> os.mkfs('/flash')

Je nachdem, wie es zur Laufzeitumgebung passt - egal was die Doku sagt. Vermutlich geht einmal das eine und einmal das andere, weil die Implementierung geändert wurde oder anderes. Irgendwas ist ja bekanntlich immer.

Viel Erfolg!

1 Like

muss ich das verstehen??

>>> os.mkfs('/flash')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'mkfs'
>>>
>>>
>>> import os
>>> os.fsformat('/flash')
>>>
>>>

passt jedenfalls

/flash> ls
cert/   lib/    sys/    boot.py main.py
took 1.357 seconds

Exzellent!

Die Software läuft nun, am Ende waren es Überreste von Andreas’ code. Eigentlich sollten die mit make purge-device aus dem Entwickler-Sandkasten von hiveeyes gelöscht werden, was aber aus bisher nicht eruierbaren Gründen bei mir unter dem Linux-System auf einem Win10-Rechner nicht funktionierte.

Bei einem Softwareupdate (Code, der die Sensoren ausliest) werden über Atom nur geänderte / neue Dateien hochgeschoben, bereits existierende, die ggf. mit dem neu hochgeladenen code inkompatibel sind oder interferrieren werden dabei nicht gelöscht, hat sicher für manche Anwendungsfälle Vorteile, hier war es gerade richtig Sch…!

Auch wenn ich schon vor 45 Jahren mit Algol und Fortran programmiert habe, muss ich bei der Programmierung mit MicroPython noch einiges üben. Ich habe daher einige kleine Testprogramme erstellt, mit denen man auch als Anfänger die Komponenten des Hiverize einzeln verstehen kann.

Die Software zum Download : BOB-Test1.zip (7,4 KB) läuft auf dem BOB-HAT-V5 der aktuellen Workshops.

Sie wird auf einem PC mit Windows10 entpackt

Dieses Verzeichnis wird mit dem Editor Atom mit Plugin Pymakr geöffnet:

Mit “Connect” verbindet man sich über ein USB-Kabel mit dem Expansion-Board, auf dem der FiPy oder WiPy gesteckt wurde. Im kleinen Fenster sieht man den MicroPython-Prompt >>> und kann sofort Befehle ( z.B. print(“Hallo”) ausführen.

Dann kann man ein Programm öffnen (z.B. 1-Hallo.py ) und es mit “Run” auf dem FiPy laufen lassen.Mit den nächsten Programmen kann man die LEDs und Schalter testen, wenn sie auf der Platine bestückt sind.
Das Programm 5-I2Cscan.py gibt die I2C-Adressen des BME280 und evtl. des Displays aus.

Das Programm bme280-test.py ruft Funktionen aus bme280.py auf und gibt die aktuellen Messwerte für Temperatur, Luftdruck und -feuchte aus.

Für die Programmentwicklung ist es praktisch, die Programme mit Klick auf “Run” zu testen.
Ist man zufrieden, kann der Code in das Programm boot.py oder main.py eingebaut werden.
Diese werden mit Klick auf “Upload” auf den Fipy geladen und nach Reset ausgeführt.

3 Likes

Ist man mit dem Ablauf der Entwicklung vertraut, kann man sich an das eigentliche Projekt wagen. Dazu sucht man auf Github das entsprechende Repository:GitHub - Hiverize/FiPy
und lädt das entsprechende FiPy-master.zip herunter:


Dieses entpackt man wieder:

und öffnet das Verzeichnis FiPy-master im Editor Atom mit dem Plugin Pymakr:

Mit Klick auf “Upload” werden die alten Files auf dem FiPy gelöscht und die aktuellen angelegt.
Nach reboot fängt der Fipy an zu messen, allerdings nicht vollständig, da noch einige Konfigurationen fehlen.
Nach Drucken des Tasters “Flash” (P2) startet der Konfigurationsmodus mit dem Accesspoint “hiverize-accesspoint” und dem Passwort “hiverize” . Jetzt können das WLAN, die Temperatursensoren DS18B20, die Waage und Server: https://bee-observer.org mit Sensor Key: ZV7rxxxxxxxxxxU1J konfiguriert und alle Einstellungen kontrolliert werden.

Wenn alles gut geht, misst der Fipy nach dem “Restart” alle Sensoren und überträgt die Messwerte an die BOB-App

2 Likes

Jetzt kann mit dem Programmieren begonnen werden:

Z.B. macht es keinen Sinn, die Luffeuchte, -Temperatur und -Druck mit 3 Stellen nach dem Komma anzugeben.
Man ergänzt main.py um 3 Zeilen:


Dann main.py speichern ( Ctrl/s ), das Messen stoppen ( in unterem Fenster Ctrl/f ),
Klick auf “Upload” ( nur main.py wird übertragen ), nach restart neue Messwerte

image

Jetzt werden die Messwerte des BME280 mit nur 1 Stelle nach dem Komma angezeigt.

Ich bin noch nicht mit den Messwerten der DS18B20-Temperatursensoren zufrieden, es gibt immer wieder einzelne völlig falsche Werte, z.B. 85.5 oder 236.4 °C, die bei der Darstellung in der BOB-App zu falschen Peaks führen.
image
Ab 15 Uhr bereinige ich die Werte, in dem ich sie mit dem letzten Wert vergleiche. Ist die Abweichung zu groß, nehme ich den letzten Wert.

3 Likes