MicroPython-Firmware schmirgeln (240er)

MicroPython-Firmware schmirgeln (150er) [1] ist schon recht lang geworden, deswegen gehts hier frisch weiter.

Vielen Dank an @clemens an dieser Stelle – wie immer ganz nah an der Usability und unermüdlich in der Berichterstattung.


  1. image
    Sandpaper - Wikipedia ↩︎

Update der MicroPython-Software funktioniert nicht bei laufender Software mit deep sleep

Gestern wollte ich mit make install das neueste framework der hiveeyes-MicroPython-Firmware auf einen FiPy spielen, auf dem bereits älterer code lief, der einen deep sleep aktiviert hatte.

Es war nicht möglich die neueste Version hochzuladen, der Prozess brach immer wieder replizierbar ab, manchmal nur so:

.venv3/bin/rshell --port /dev/ttyS16 --buffer-size 2048 --timing mkdir /flash/dist-packages
Using buffer-size of 2048
Connecting to /dev/ttyS16 (buffer-size 2048)...
Trying to connect to REPL ....... connected
Testing if ubinascii.unhexlify exists ... b'\n>>> \r\n>>> \r\n>>> \r\n>>> \r\n>>> \r\n>>> \r\n>>> \r\n>>> \r\n>>> '
Traceback (most recent call last):
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1255, in connect
    ip_address = socket.gethostbyname(port)
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".venv3/bin/rshell", line 10, in <module>
    sys.exit(main())
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/command_line.py", line 4, in main
    rshell.main.main()
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 2843, in main
    real_main()
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 2805, in real_main
    connect(args.port, baud=args.baud, wait=args.wait, user=args.user, password=args.password)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1261, in connect
    connect_serial(port, baud=baud, wait=wait)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1285, in connect_serial
    dev = DeviceSerial(port, baud, wait)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1565, in __init__
    Device.__init__(self, pyb)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1339, in __init__
    unhexlify_exists = self.remote_eval(test_unhexlify)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1459, in remote_eval
    return eval(self.remote(func, *args, **kwargs))
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1437, in remote
    self.pyb.enter_raw_repl()
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/pyboard.py", line 187, in enter_raw_repl
    raise PyboardError('could not enter raw repl')
rshell.pyboard.PyboardError: could not enter raw repl
Makefile:133: recipe for target 'install-requirements' failed
make: *** [install-requirements] Error 1
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware#

… und manchmal auch mit einem Guru Meditation Error (bei Windows würde man blue screen sagen):

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make install
.venv3/bin/rshell --port /dev/ttyS16 --buffer-size 2048 --timing mkdir /flash/dist-packages
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 ... Jun 28, 2019 14:39:02
Evaluating board_name ... pyboard
Retrieving time epoch ... Jan 01, 1970
Unable to create /flash/dist-packages
took 0.304 seconds
.venv3/bin/rshell --port /dev/ttyS16 --buffer-size 2048 --timing rsync dist-packages /flash/dist-packages
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 ... Jun 28, 2019 14:39:04
Evaluating board_name ... pyboard
Retrieving time epoch ... Jan 01, 1970
b'Guru Meditation Error: Core  1 panic\'ed (LoadProhibited). Exception was unhandled.\r\nCore 1 register dump:\r\nPC      : 0x40098967  PS      : 0x00060033  A0      : 0x800969b5  A1      : 0x3ffc1370  \r\nA2      : 0x3ffdc514  A3      : 0x00060023  A4      : 0x3ffc5ad4  A5      : 0x00000001  \r\nA6      : 0x000000fe  A7      : 0x3f40e23c  A8      : 0x00000000  A9      : 0x3ffdc514  \r\nA10     : 0x3ffdc514  A11     : 0x00000000  A12     : 0x800f91d6  A13     : 0x3ffe2e40  \r\nA14     : 0x00000000  A15     : 0x3ffe2f20  SAR     : 0x00000003  EXCCAUSE: 0x0000001c  \r\nEXCVADDR: 0x00000004  LBEG    : 0x4009dc28  LEND    : 0x4009dc33  LCOUNT  : 0x00000000  \r\nCore 1 was running in ISR context:\r\nEPC1    : 0x40098967  EPC2    : 0x00000000  EPC3    : 0x00000000  EPC4    : 0x4008b78e\r\n\r\nBacktrace: 0x40098967:0x3ffc1370 0x400969b2:0x3ffc1390 0x400953a1:0x3ffc13b0 0x4008cff5:0x3ffc13d0 0x40083b01:0x3ffc1410 0x400f22ff:0x3ffe2dd0 0x400f252d:0x3ffe2df0 0x400fe713:0x3ffe2e10 0x401018a7:0x3ffe2e40 0x400f91d3:0x3ffe2f20 0x40104139:0x3ffe2f60 0x400fc160:0x3ffe3000 0x400f8879:0x3ffe3070 0x40103df3:0x3ffe3090 0x400fc160:0x3ffe3130 0x400f8879:0x3ffe31a0 0x400f88a6:0x3ffe31c0 0x400df252:0x3ffe31e0 0x400df4c5:0x3ffe3280 0x400de0ba:0x3ffe32a0\r\n\r\n================= CORE DUMP START =================\r\nlC8AAA8AAABsAQAA\r\nLNH7P1A1+z9wN/s/\r\nUDX7PxA3+z+hKQAAmFf8P5hX/D8s0fs/kFf8PxMAAAB/YujcQknoYSzR+z8AAAAA\r\nBgAAAHQn+z9Mb1JhABItci4bAZlgnncAAQAAAHA3+z8AAAAAIQAGAAYAAAAAAAAA\r\nAAAAAAAAAAAAAAAAAAAAAAAAAAAo0f0/kNH9P/jR/T8AAAAAAAAAAAEAAAAAAAAA
[...]
/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\nAAAAAA==\r\n================= CORE DUMP END =================\r\nE (14860) esp_core_dump: Skipped 1 tasks with bad TCB!\r\nE (14865) esp_core_dump: Crashed task has been skipped!\r\nRebooting...\r\nets Jun  8 2016 00:22:57\r\n\r\nrst:0xc (SW_CPU_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)\r\nconfigsip: 0, SPIWP:0xee\r\nclk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00\r\nmode:DIO, clock div:1\r\nload:0x3fff8028,len:8\r\nload:0x3fff8030,len:2156\r\nho 0 tail 12 room 4\r\nload:0x4009fa00,len:19208\r\nentry 0x400a05f4\r\nInitializing filesystem as LittleFS!\r\n[boot.py] INFO: Python module search path is: [\'\', \'/flash\', \'/flash/lib\', \'dist-packages\']\r\n\r\n    7.9761 [terkin.configuration     ] INFO   : Configuration settings:\r\n    8.0060 [terkin.configuration     ] INFO   : Section "telemetry": {"targets": [{"enabled": true, "topology": "mqttkit", "endpoint": "mqtt://swarm.hiveeyes.org", "address": {"network": "testdrive", "gateway": "area-005", "node": "fipy-cg-01", "realm": "hiveeyes"}}, {"enabled": true, "topology": "beep-bob", "endpoint": "https://bee-observer.org/api/sensors", "data": {"key": "BwEWJXBWUX3tzkBR"}}, {"enabled": false, "endpoint": "https://daq.example.org/api", "address": {"network": "testdrive", "gateway": "area-42", "node": "node-01-http-json", "realm": "workbench"}}, {"encode": "base64", "format": "lpp", "address": {"network": "testdrive", "gateway": "area-42", "node": "node-01-mqtt-lpp", "realm": "workbench"}, "enabled": false, "endpoint": "mqtt://daq.example.org"}]}\r\n    8.0860 [terkin.configuration     ] INFO   : Section "networking": {"wifi": {"stations": [{"ssid": "Frau Doktor", "password": "## redacted ##"}], "timeout": 15000}, "lora": {"otaa": {"application_eui": "<REGISTRATION NEEDED>", "datarate": 0, "frequency": 868100000, "region": "LoRa.EU868", "application_key": "## redacted ##", "device_eui": "<GENERATED_FROM_LORA_MAC>"}, "antenna_attached": false}}\r\n    8.1370 [terkin.configuration     ] INFO   : Section "sensors": {"system": {"vcc": {"resistor_sum": 12, "resistor_pin": 2}}, "busses": [{"number": 0, "family": "i2c", "pin_sda": "P9", "enabled": true, "pin_scl": "P10"}, {"enabled": true, "pin_data": "P11", "number": 0, "family": "onewire"}], "registry": {"bme280": {"bus": "i2c:0", "address": 119}, "ds18x20": {"bus": "onewire:0"}, "hx711": {"offset": -136903.0, "pin_dout": "P22", "pin_pdsck": "P21", "address": 0, "scale": -22385.0}}}\r\n    8.1856 [terkin.configuration     ] INFO   : Section "main": {"interval": 60.0, "deepsleep": true}\r\n    8.2063 [terkin.configuration     ] INFO   : Section "sensor_telemetry_map": {"temperature.28ff641d8fd833ac.onewire:0": "t_i_3", "pressure.0x77.i2c:0": "p", "weight.0": "weight", "_version": "1.0.0", "temperature.28ff641d8fd4d5d5.onewire:0": "t_i_2", "system.temperature": "t_i_5", "temperature.28ff641d8fd922ab.onewire:0": "t_i_5", "temperature.0x77.i2c:0": "t", "temperature.28ff641d8fd18ab0.onewire:0": "t_i_1", "humidity.0x77.i2c:0": "h", "temperature.28ff641d8fd8778b.onewire:0": "t_i_4"}\r\n    8.2938 [terkin.datalogger        ] INFO   : Starting BOB MicroPython Datalogger 0.4.0\r\n    8.3043 [terkin.device            ] INFO   : Reset cause and wakeup reason: {\'reset_cause\': {\'code\': 0, \'message\': \'PWRON\'}, \'wakeup_reason\': {\'code\': 0, \'message\': \'PWRON\'}}\r\n---------------------------------------------\r\nSystem memory info (in bytes)\r\n---------------------------------------------\r\nMPTask stack water mark: 3908\r\nServersTask stack water mark: 3684\r\nLoRaTask stack water mark: 3436\r\nSigfoxTask stack water mark: 2932\r\nTimerTask stack water mark: 2160\r\nIdleTask stack water mark: 600\r\nSystem free heap: 349552\r\n---------------------------------------------\r\n    8.3960 [terkin.device            ] INFO   : \r\n\r\n================================\r\nBOB MicroPython Datalogger 0.4.0\r\n================================\r\nCPU freq     160.0 MHz\r\nDevice id    807d3ac337b0\r\n\r\n\r\nPython  : 3.4.0\r\nlorawan : 1.0.2\r\nmachine : FiPy with ESP32\r\nnodename: FiPy\r\nrelease : 1.20.0.rc11\r\nsigfox  : 1.0.1\r\nsysname : FiPy\r\nversion : v1.9.4-0a38f88 on 2019-05-14\r\n\r\n\r\n\r\n    8.4277 [terkin.device            ] INFO   : Starting networking\r\n    8.5537 [terkin.radio             ] INFO   : WiFi STA: Networks configured: [\'Frau Doktor\']\r\n    8.5657 [terkin.radio             ] INFO   : WiFi STA: Starting interface\r\n    8.5759 [terkin.radio             ] INFO   : WiFi STA: Scanning for networks\r\n   11.0901 [terkin.radio             ] INFO   : WiFi STA: Networks available: [\'Frau Doktor\', \'Frau Doktor Gastzugang\']\r\n   11.1012 [terkin.radio             ] INFO   : WiFi STA: Network candidates: [\'Frau Doktor\']\r\n   11.1149 [terkin.radio             ] INFO   : WiFi STA: Attempting to connect to network "Frau Doktor"\r\n   11.1302 [terkin.radio             ] INFO   : WiFi STA: Starting connection to "Frau Doktor" with timeout of 15.0 seconds\r\n   11.1469 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   12.1615 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   13.1780 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   14.1922 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   15.2072 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   16.2212 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   17.2352 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   18.2486 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   19.2625 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   20.2754 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   21.2885 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   22.3014 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   23.3146 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   24.3273 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   25.3405 [terkin.radio             ] INFO   : WiFi STA: Waiting for network "Frau Doktor".\r\n   26.3588 [terkin.radio             ] ERROR  : WiFi STA: Connecting to "Frau Doktor" failed\r\nTraceback (most recent call last):\r\n  File "/flash/lib/terkin/radio.py", line 120, in start_wifi\r\n  File "/flash/lib/terkin/radio.py", line 190, in wifi_connect_station\r\nTimeoutError: Connection to AP Timeout!\r\n\r\n   26.3904 [terkin.radio             ] ERROR  : WiFi STA: Connecting to any network candidate failed. Please check your WiFi configuration for one of the 1 station candidates in your neighbourhood.\r\n   26.4056 [terkin.radio             ] WARNING: Todo: We might want to switch to AP mode here or alternatively buffer telemetry data to flash to be scheduled for transmission later.\r\n   26.4220 [terkin.device            ] ERROR  : Network connectivity not available, WiFi failed\r\n   26.4409 [terkin.device            ] INFO   : [LoRa] Disabling LoRa interface as no antenna has been attached. ATTENTION: Running LoRa without antenna will wreck your device.\r\n   26.4615 [terkin.sensor.core       ] INFO   : Starting all busses [{\'pin_scl\': \'P10\', \'number\': 0, \'enabled\': True, \'family\': \'i2c\', \'pin_sda\': \'P9\'}, {\'enabled\': True, \'pin_data\': \'P11\', \'number\': 0, \'family\': \'onewire\'}]\r\n   26.5083 [terkin.sensor.core       ] INFO   : Found 0 I2C devices: [].\r\n   26.5207 [terkin.sensor.core       ] INFO   : Registering bus "i2c:0"\r\n   27.8944 [terkin.sensor.core       ] INFO   : Found 0 OneWire (DS18x20) devices: [].\r\n   27.9070 [terkin.sensor.core       ] INFO   : Registering bus "onewire:0"\r\n   27.9173 [terkin.datalogger        ] INFO   : Registering Terkin sensors\r\n   27.9434 [hiveeyes.datalogger      ] INFO   : Registering Hiveeyes sensors\r\n   28.5092 [hiveeyes.sensor_hx711    ] INFO   : Selected HX711 hardware driver "heisenberg"\r\n   28.5278 [hiveeyes.sensor_hx711    ] INFO   : Initializing HX711 sensor with pin_dout=P22, pin_pdsck=P21, gain=128, scale=-22385.0, offset=-136903.0\r\n   28.5477 [terkin.sensor.core       ] INFO   : Trying to find bus by name "onewire:0"\r\n   28.5585 [terkin.sensor.core       ] INFO   : Found bus by name "onewire:0": <OneWireBus object at 3f993fa0>\r\n   28.5787 [terkin.sensor.core       ] INFO   : Trying to find bus by name "i2c:0"\r\n   28.5892 [terkin.sensor.core       ] INFO   : Found bus by name "i2c:0": <I2CBus object at 3f993ab0>\r\n   28.6068 [hiveeyes.sensor_bme280   ] ERROR  : BME280 hardware driver failed\r\nTraceback (most recent call last):\r\n  File "/flash/lib/hiveeyes/sensor_bme280.py", line 38, in start\r\n  File "dist-packages/bme280.py", line 74, in __init__\r\nOSError: I2C bus error\r\n\r\n   28.6288 [terkin.datalogger        ] INFO   : --- loop ---\r\n   28.6395 [terkin.datalogger        ] INFO   : Reading 8 sensor ports\r\n   28.7605 [terkin.sensor.system     ] DEBUG  : Reading battery level with voltage divider 12/2\r\n   28.8589 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: Mean of ADC readings (0-4095) = 4095.0002670288086\r\n   28.8718 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: Mean of ADC voltage readings (0-1866mV) = 1866.0000801086426\r\n   28.8848 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: Variance of ADC readings = 0.0000000000000\r\n   28.8977 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: 10**6*Variance/(Mean**2) of ADC readings = 0.0000000000000\r\n   28.9119 [terkin.sensor.system     ] DEBUG  : Battery level: 11.196\r\n   28.9277 [hx711                    ] INFO   : HX711 power up\r\n   28.9379 [hx711                    ] INFO   : Initialization started\r\n   29.4686 [terkin.datalogger        ] ERROR  : Reading sensor "HX711Sensor" failed\r\nTraceback (most recent call last):\r\n  File "/flash/lib/terkin/datalogger.py", line 170, in read_sensors\r\n  File "/flash/lib/hiveeyes/sensor_hx711.py", line 80, in read\r\n  File "/flash/lib/hx711_heisenberg.py", line 95, in get_reading\r\n  File "/flash/lib/hx711_heisenberg.py", line 76, in read_median\r\n  File "/flash/lib/hx711.py", line 123, in read_average\r\n  File "/flash/lib/hx711.py", line 97, in read\r\n  File "/flash/lib/hx711.py", line 59, in initialize\r\n  File "/flash/lib/hx711.py", line 72, in wait_ready\r\nDeviceNotFound: HX711 not ready\r\n\r\n   29.5276 [hiveeyes.sensor_ds18x20  ] WARNING: No data from any DS18X20 devices on bus onewire:0\r\n   29.5409 [terkin.datalogger        ] INFO   : Sensor data:  {\'system.runtime\': 22, \'system.time\': 31, \'system.uptime\': 47.08, \'system.memfree\': 2246880, \'system.temperature\': 47.04349, \'system.wifi.country\': \'CN\', \'system.wifi.bandwidth\': 2, \'system.wifi.max_tx_power\': 78, \'system.wifi.channel\': 0, \'system.voltage\': 11.196}\r\n   29.5707 [terkin.datalogger        ] WARNING: Telemetry disabled\r\n   29.6946 [terkin.sensor.system     ] INFO   : Turning off ADC\r\n   29.7050 [hiveeyes.sensor_hx711    ] INFO   : Turning off HX711\r\n   29.7152 [hx711                    ] INFO   : HX711 power down\r\n   29.7306 [terkin.sensor.core       ] INFO   : Turning off I2C bus i2c:0\r\n   29.7414 [terkin.radio             ] INFO   : Turning off WiFi\r\n   29.7629 [terkin.radio             ] INFO   : Turning off LTE modem on boot\r\n   29.7742 [terkin.device            ] INFO   : Preparing deep sleep\r\n   29.7874 [terkin.device            ] INFO   : Entering deep sleep for 60.0 seconds\r\n'
Traceback (most recent call last):
  File ".venv3/bin/rshell", line 10, in <module>
    sys.exit(main())
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/command_line.py", line 4, in main
    rshell.main.main()
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 2843, in main
    real_main()
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 2826, in real_main
    shell.cmdloop(cmd_line)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1689, in cmdloop
    stop = self.onecmd(line)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1722, in onecmd
    self.onecmd_exec("".join(group))
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1728, in onecmd_exec
    result = cmd.Cmd.onecmd(self, line)
  File "/usr/lib/python3.5/cmd.py", line 217, in onecmd
    return func(arg)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 2609, in do_rsync
    print_func=pf, recursed=False, sync_hidden=args.all)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 906, in rsync
    print_func=print_func, recursed=True, sync_hidden=sync_hidden)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 858, in rsync
    dst_files = auto(listdir_stat, dst_dir, show_hidden=sync_hidden)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 586, in auto
    return dev.remote_eval(func, dev_filename, *args, **kwargs)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1459, in remote_eval
    return eval(self.remote(func, *args, **kwargs))
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1437, in remote
    self.pyb.enter_raw_repl()
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/pyboard.py", line 199, in enter_raw_repl
    raise PyboardError('could not enter raw repl')
rshell.pyboard.PyboardError: could not enter raw repl
Makefile:133: recipe for target 'install-requirements' failed
make: *** [install-requirements] Error 1

This. This.

Grund war also der deep sleep, der während make install einfach dafür sorgt, dass der Hahn zugedreht wird und nichts mehr geht!

Mögliche Gegenmaßnahmen:

  • entweder allen Programmcode vor make install löschen, z.B. mit make format-flash oder als Option beim flashen der Firmware “erase during update” oder per FTP
  • oder den Programmcode mit deaktivierter deep sleep-Funktion laufen lassen und dann erst installieren.

Du solltest auch mit Ctrl - c den Code vorher anhalten können. Das macht die Übertragung sowieso einiges stabiler.

1 Like

Wo muss ich dafür sein? In der REPL oder rshell?

Gute Frage weiß jetzt gar nicht wie ich in der WSL Sandbox mit der repl ins aktuelle logging hin komme, es sei denn ich habe gerade frisch aufgespielt.
make connect
Vielleicht.
In Atom einfach auf das aktive logging und dann strg c.
Benutze aktuell Atom und die Sandbox zusammen (proggen in Atom aufspielen in WSL). Klappt prima, werde heute Abend Mal eine Anleitung dazu schreiben.

Vielen Dank für die Meldung, wir konnten das Verhalten bei uns ebenfalls schon erleben. Wir haben uns kurzzeitig beholfen, indem wir entweder a) die Firmware per CTRL+C aus der REPL-Shell heraus angehalten haben, wie @MKO vorschlägt oder b) die Schlafdauer hochgestellt oder deep sleep kurzzeitig ganz abgestellt haben.

Wir versuchen, uns bei der nächsten Softwareiteration um eine komfortablere Lösung des Problems zu kümmern.

Das funktioniert im Linux-System unter Windows (WSL) nicht:

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make install-pycom-firmware
wget --no-clobber --unlink --output-document=./dist-firmwares/FiPy-1.20.0.rc11.tar.gz https://software.pycom.io/downloads/FiPy-1.20.0.rc11.tar.gz | true
--2019-07-19 11:57:29--  https://software.pycom.io/downloads/FiPy-1.20.0.rc11.tar.gz
Resolving software.pycom.io (software.pycom.io)... 18.195.202.40
Connecting to software.pycom.io (software.pycom.io)|18.195.202.40|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1171395 (1.1M) [application/octet-stream]
Saving to: ‘./dist-firmwares/FiPy-1.20.0.rc11.tar.gz’

./dist-firmwares/FiPy-1.20.0. 100%[=================================================>]   1.12M  1.93MB/s    in 0.6s

2019-07-19 11:57:30 (1.93 MB/s) - ‘./dist-firmwares/FiPy-1.20.0.rc11.tar.gz’ saved [1171395/1171395]

Install Pycom firmware "FiPy-1.20.0.rc11.tar.gz" on the device connected to "/dev/ttyS16" [y/n]?
Installing firmware FiPy-1.20.0.rc11.tar.gz
/bin/sh: 5: --verbose: not found
tools/pycom.mk:48: recipe for target 'install-pycom-firmware' failed
make: *** [install-pycom-firmware] Error 127
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# cd tools
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/tools# ls
clean.rshell  micropython.mk  reset.rshell  upload-all.lftprc        upload-sketch.rshell
core.mk       pycom.mk        setup.mk      upload-framework.rshell  upload-terkin.rshell
help.mk       release.mk      terkin.py     upload-ratrack.rshell

Merci Clemens.

Er findet vermutlich wie erwartet die pycom-fwtool-cli.exe nicht. Das kann drei Gründe haben, die sich nicht ausschließen.

  1. Pfad semantisch falsch angegeben. Falscher Ort.
  2. Pfad syntaktisch falsch angegeben. Backslashes, Spaces, Klammern. Alles vorhanden und will richtig escaped werden.
  3. Programmierfehler.
$(eval pycom_fwtool_cli_windows := c:\\Program\ Files\ (x86)\\Pycom\\Pycom\ Firmware\ Update\\pycom-fwtool-cli.exe)

[1] https://github.com/hiveeyes/hiveeyes-micropython-firmware/blob/master/tools/pycom.mk#L5


Es wäre spitze wenn Du das überprüfen könntest, zumindest 1. und 2., ggf. auch 3. Hier ist in der näheren Umgebung leider kein Windows zu sehen.

Pfad an sich scheint zu passen, bei mir gibt es

C:\Program Files (x86)\Pycom\Pycom Firmware Update\pycom-fwtool.exe

und dort auch

C:\Program Files (x86)\Pycom\Pycom Firmware Update\pycom-fwtool-cli.exe

Dann vielleicht anders/mehr/besser escapen, evtl. weiß die Suchemaschine was. Vielleicht kann @MKO auch mal drauf sehen. Ansonsten ist es nicht super tragisch, da es dafür ja auch Alternativen gibt, wie das Programm interaktiv zu bedienen. Von dem Makefile Gedöns wird sich eh viel in Luft auflösen, also nicht zu viel Liebesmüh reinstecken – unter Python bekommt man das besser automatisiert.


Wenn Du willst, leg doch ne kleine tools/pycom-fwtool-cli.bat dazu und kapsle darin den Aufruf zum Stiefkind. Das wird meistens im Internet empfohlen, wenn es um solche Dinge geht. Das wäre sinnvoll und vermutlich schneller zu machen, als sich mit der Frage zu beschäftigen, wie man Windows Pfad-Escaping innerhalb eines Makefiles richtig machen kann. Richtig wäre vermutlich am besten: Gar nicht.

Ich schau mir das heute Abend an.
Hab noch einen Recht interessanten Link über Updates direkt via GitHub direkt auf dem Node gefunden, so in der Art können wir uns später bestimmt den ganzen Rattenschwanz sparen, den wir uns jetzt aus der “Not” heraus anhängen.

Gruß Michael

$(eval pycom_fwtool_cli_windows := /mnt/c/Program\ Files\ \(x86\)/Pycom/Pycom\ Firmware\ Update/pycom-fwtool-cli.exe)

sollte richtig sein.
Leider funktioniert es immer noch nicht.
Der Com Port meckert.

user@Werkstatt:/mnt/c/test/hiveeyes-micropython-firmware$ make install-pycom-firmware
wget --no-clobber --unlink --output-document=./dist-firmwares/FiPy-1.20.0.rc11.tar.gz 
https://software.pycom.io/downloads/FiPy-1.20.0.rc11.tar.gz | true
File ‘./dist-firmwares/FiPy-1.20.0.rc11.tar.gz’ already there; not retrieving.
Install Pycom firmware "FiPy-1.20.0.rc11.tar.gz" on the device connected to "/dev/ttyS8" [y/n]?
Installing firmware FiPy-1.20.0.rc11.tar.gz
Invalid serial port /dev/ttyS8! Use list command to show valid ports.

tippe mal da die pycom-fwtool-cli.exe ein Windows-Tool ist will sie den echten COM-Port und nicht den gemappten, wie er für die WSL passt.


Zum Testen ob es überhaupt geht habe ich jetzt mal auf die schnelle
image
voila!

kenne mich jetzt leider nicht mit .mk Files aus wie man dort Strings bearbeiten kann. Man müßte jetzt bei Windows alle Zeichen bis auf die zahlen aus /dev/ttyS8 entfernen und COM davor schreiben.

wenn ich von vorne rein

export MCU_SERIAL_PORT=COM8

mache geht es übrigens nicht. Denke mal der Porttyp wird dann nicht erkannt

2 Likes

Hab es denke ich hin bekommen. Einfacher als gedacht.

pycom_firmware_port :=$(subst /dev/ttyS, COM, $(mcu_port))

Pull request ist raus.

3 Likes

Hi Michael,

danke dass Du da Zeit reinstecken konntest um die Probleme bei der hemdsärmligen Basisimplementierung zu erkennen und dass Du den ausgezeichneten Patch bei Make "make install-pycom-firmware" work on Windows by MKO1640 · Pull Request #15 · hiveeyes/terkin-datalogger · GitHub zur Verfügung gestellt hast, um die entsprechenden Stellen aufzumöbeln.

:warning: Note to self: Wir sind hier wie gewünscht im Kontext des WSL unterwegs und müssen dabei natürlich beim Zusammenstecken der Einzelteile berücksichtigen, dass es jenseits der Grenze des gelobten Landes gerade bei der Adressierung von Betriebssystemressourcen anders zugeht - Andere Länder — andere Sitten. Das hatten wir bei der Basisimplementierung gar nicht entsprechend berücksichtigt.

Pfad zum Programm

So true. Thanks.

COM-Port zur seriellen Schnittstelle

Thanks for spotting this!

Beschreibung der Implementierung

pycom_firmware_port :=$(subst /dev/ttyS, COM, $(mcu_port)) berechnet nun die richtige serielle Schnittstelle für die entsprechende Adressierung des Geräts aus der Perspektive des nativen Windows-Subsystems und die Variable $(pycom_firmware_port) leitet diese Information nun überall dorthin weiter, wo $(pycom_fwtool_cli) tatsächlich verwendet wird. Daher wird nun vermutlich auch "make chip_id", "make format-flash" sowie "make erase-fs" ebenso unter Windows funktionieren. Perfekt.

Vielen Dank fürs richtig rum aufs Pony setzen, Michael.

Herzliche Grüße,
Andreas.

2 Likes

Wie muss denn der COM-Port jetzt angegeben werden?? Alte Methode funktioniert nicht (meht):

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# export MCU_PORT=/dev/ttyS16
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make list-boards
Device port: usb => /dev/ttyS16
failed to access /dev/ttyS16
tools/micropython.mk:15: recipe for target 'list-boards' failed
make: *** [list-boards] Error 1

Neue auch nicht, die wird COM16 als IP interpretiert:

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# export MCU_PORT=COM16
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make list-boards
Device port: ip => COM16
failed to access COM16
tools/micropython.mk:15: recipe for target 'list-boards' failed
make: *** [list-boards] Error 1

Das signalisiert, dass das Sandbox-Tooling denkt, es wäre ein IP-basierter Port. Das könnte hier die Ursache sein und man müsste die Erkennung entsprechend nachziehen. Es muss allerdings nicht so sein: Vielleicht ist das in Wahrheit kein Problem und der Fehler liegt woanders.

git pull und make setup habe ich vorher gemacht