micrOSDevToolKit 2.1.5__py3-none-any.whl → 2.26.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- env/driver_cp210x/.DS_Store +0 -0
- env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
- env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +17 -1
- micrOS/micropython/esp32-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32c3-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32c6-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s2-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s2-LOLIN_MINI-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s3-4MBflash-20241129-v1.24.1.bin +0 -0
- micrOS/micropython/esp32s3-8MBflash-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s3_spiram_oct-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/rpi-pico-w-20251209-v1.27.0.uf2 +0 -0
- micrOS/micropython/tinypico-20251209-v1.27.0.bin +0 -0
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +191 -151
- micrOS/source/Auth.py +37 -0
- micrOS/source/Common.py +376 -102
- micrOS/source/Config.py +55 -25
- micrOS/source/Debug.py +54 -193
- micrOS/source/Espnow.py +404 -0
- micrOS/source/Files.py +207 -0
- micrOS/source/Hooks.py +88 -16
- micrOS/source/InterConnect.py +130 -46
- micrOS/source/Interrupts.py +8 -8
- micrOS/source/Logger.py +131 -0
- micrOS/source/Network.py +41 -21
- micrOS/source/Notify.py +74 -198
- micrOS/source/Pacman.py +326 -0
- micrOS/source/Scheduler.py +18 -55
- micrOS/source/Server.py +84 -217
- micrOS/source/Shell.py +103 -93
- micrOS/source/Tasks.py +239 -173
- micrOS/source/Time.py +21 -22
- micrOS/source/Types.py +89 -54
- micrOS/source/Web.py +485 -0
- micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Debug.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Files.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Scheduler.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Shell.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/replhelper.cpython-312.pyc +0 -0
- micrOS/source/helpers.py +132 -0
- micrOS/source/micrOS.py +25 -21
- micrOS/source/micrOSloader.py +14 -23
- micrOS/source/microIO.py +94 -57
- toolkit/simulator_lib/LP_darwin.py → micrOS/source/modules/IO_esp32.py +22 -11
- micrOS/source/{IO_esp32c3.py → modules/IO_esp32c3.py} +6 -1
- micrOS/source/modules/IO_esp32c6.py +38 -0
- micrOS/source/{IO_esp32s2.py → modules/IO_esp32s2.py} +6 -1
- micrOS/source/{IO_esp32s3.py → modules/IO_esp32s3.py} +43 -2
- micrOS/source/modules/IO_m5stamp.py +86 -0
- micrOS/source/{IO_qtpy.py → modules/IO_qtpy.py} +28 -18
- micrOS/source/{IO_tinypico.py → modules/IO_tinypico.py} +48 -3
- micrOS/source/modules/LM_L298N.py +161 -0
- {toolkit/workspace/precompiled → micrOS/source/modules}/LM_L9110_DCmotor.py +4 -4
- micrOS/source/{LM_OV2640.py → modules/LM_OV2640.py} +53 -42
- micrOS/source/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
- micrOS/source/{LM_aht10.py → modules/LM_aht10.py} +12 -4
- micrOS/source/{LM_bme280.py → modules/LM_bme280.py} +13 -25
- micrOS/source/{LM_buzzer.py → modules/LM_buzzer.py} +42 -40
- micrOS/source/{LM_cct.py → modules/LM_cct.py} +22 -27
- micrOS/source/modules/LM_cluster.py +255 -0
- micrOS/source/{LM_co2.py → modules/LM_co2.py} +13 -6
- micrOS/source/{LM_dht11.py → modules/LM_dht11.py} +13 -29
- micrOS/source/{LM_dht22.py → modules/LM_dht22.py} +13 -28
- micrOS/source/{LM_dimmer.py → modules/LM_dimmer.py} +19 -16
- micrOS/source/modules/LM_distance.py +135 -0
- micrOS/source/{LM_ds18.py → modules/LM_ds18.py} +12 -4
- micrOS/source/{LM_esp32.py → modules/LM_esp32.py} +16 -4
- micrOS/source/modules/LM_espnow.py +53 -0
- micrOS/source/modules/LM_fileserver.py +265 -0
- micrOS/source/{LM_gameOfLife.py → modules/LM_gameOfLife.py} +5 -5
- micrOS/source/{LM_genIO.py → modules/LM_genIO.py} +49 -35
- micrOS/source/modules/LM_haptic.py +111 -0
- micrOS/source/modules/LM_i2c.py +61 -0
- micrOS/source/{LM_i2s_mic.py → modules/LM_i2s_mic.py} +20 -23
- micrOS/source/{LM_ld2410.py → modules/LM_ld2410.py} +3 -3
- micrOS/source/{LM_light_sensor.py → modules/LM_light_sensor.py} +22 -26
- micrOS/source/modules/LM_mh_z19c.py +198 -0
- micrOS/source/modules/LM_neoeffects.py +284 -0
- micrOS/source/{LM_neopixel.py → modules/LM_neopixel.py} +26 -31
- micrOS/source/{LM_oled.py → modules/LM_oled.py} +28 -20
- micrOS/source/{LM_oled_sh1106.py → modules/LM_oled_sh1106.py} +28 -24
- micrOS/source/{LM_oled_ui.py → modules/LM_oled_ui.py} +132 -174
- micrOS/source/modules/LM_pacman.py +320 -0
- micrOS/source/{LM_presence.py → modules/LM_presence.py} +24 -36
- micrOS/source/modules/LM_qmi8658.py +204 -0
- micrOS/source/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
- micrOS/source/modules/LM_rest.py +81 -0
- micrOS/source/{LM_rgb.py → modules/LM_rgb.py} +25 -34
- micrOS/source/{LM_rgbcct.py → modules/LM_rgbcct.py} +5 -5
- micrOS/source/{LM_roboarm.py → modules/LM_roboarm.py} +37 -45
- micrOS/source/modules/LM_robustness.py +137 -0
- micrOS/source/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
- micrOS/source/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
- micrOS/source/{LM_servo.py → modules/LM_servo.py} +4 -4
- micrOS/source/modules/LM_sound_event.py +751 -0
- micrOS/source/{LM_stepper.py → modules/LM_stepper.py} +8 -8
- micrOS/source/{LM_switch.py → modules/LM_switch.py} +21 -18
- micrOS/source/{LM_system.py → modules/LM_system.py} +96 -59
- micrOS/source/modules/LM_tcs3472.py +187 -0
- micrOS/source/modules/LM_telegram.py +388 -0
- micrOS/source/modules/LM_trackball.py +287 -0
- micrOS/source/modules/LM_veml7700.py +159 -0
- micrOS/source/modules/LM_web.py +38 -0
- micrOS/source/urequests.py +204 -91
- {toolkit/workspace/precompiled → micrOS/source/web}/dashboard.html +9 -4
- micrOS/source/web/editor.js +440 -0
- micrOS/source/web/filesui.html +178 -0
- micrOS/source/web/filesui.js +338 -0
- micrOS/source/{index.html → web/index.html} +44 -2
- micrOS/source/web/uapi.js +103 -0
- micrOS/source/web/udashboard.js +129 -0
- micrOS/source/web/ustyle.css +55 -0
- micrOS/source/web/uwidgets.js +172 -0
- micrOS/source/web/uwidgets_pro.js +99 -0
- micrOS/utests/__init__.py +0 -0
- micrOS/utests/test_scheduler.py +435 -0
- {micrOSDevToolKit-2.1.5.data → microsdevtoolkit-2.26.1.data}/scripts/devToolKit.py +47 -4
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/METADATA +392 -279
- microsdevtoolkit-2.26.1.dist-info/RECORD +396 -0
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/WHEEL +1 -1
- toolkit/DevEnvCompile.py +63 -33
- toolkit/DevEnvOTA.py +72 -22
- toolkit/DevEnvUSB.py +147 -77
- toolkit/Gateway.py +9 -9
- toolkit/LM_to_compile.dat +12 -4
- toolkit/MicrOSDevEnv.py +129 -51
- toolkit/WebRepl.py +73 -0
- toolkit/dashboard_apps/BackupRestore.py +171 -0
- toolkit/dashboard_apps/CCTDemo.py +12 -17
- toolkit/dashboard_apps/CCTTest.py +20 -24
- toolkit/dashboard_apps/CamStream.py +2 -6
- toolkit/dashboard_apps/CatGame.py +14 -16
- toolkit/dashboard_apps/Dimmer.py +11 -21
- toolkit/dashboard_apps/GetVersion.py +11 -19
- toolkit/dashboard_apps/MicrophoneTest.py +2 -7
- toolkit/dashboard_apps/NeoEffectsDemo.py +22 -35
- toolkit/dashboard_apps/NeopixelTest.py +20 -25
- toolkit/dashboard_apps/PresenceTest.py +2 -8
- toolkit/dashboard_apps/QMI8685_GYRO.py +68 -0
- toolkit/dashboard_apps/RGBTest.py +20 -24
- toolkit/dashboard_apps/RoboArm.py +24 -32
- toolkit/dashboard_apps/SED_test.py +10 -14
- toolkit/dashboard_apps/SensorsTest.py +61 -0
- toolkit/dashboard_apps/SystemTest.py +219 -117
- toolkit/dashboard_apps/Template_app.py +12 -19
- toolkit/dashboard_apps/_app_base.py +34 -0
- toolkit/dashboard_apps/_gyro_visualizer.py +78 -0
- toolkit/dashboard_apps/uLightDemo.py +15 -24
- toolkit/index.html +6 -5
- toolkit/lib/LocalMachine.py +6 -1
- toolkit/lib/MicrosFiles.py +46 -0
- toolkit/lib/Repository.py +64 -0
- toolkit/lib/TerminalColors.py +4 -0
- toolkit/lib/macroScript.py +371 -0
- toolkit/lib/micrOSClient.py +124 -51
- toolkit/lib/micrOSClientHistory.py +156 -0
- toolkit/lib/pip_package_installer.py +31 -4
- toolkit/micrOSdashboard.py +16 -21
- toolkit/micrOSlint.py +28 -10
- toolkit/simulator_lib/.DS_Store +0 -0
- micrOS/source/IO_esp32.py → toolkit/simulator_lib/IO_darwin.py +3 -0
- toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/mip.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_common.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/urandom.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
- toolkit/simulator_lib/aioespnow.py +28 -0
- toolkit/simulator_lib/camera.py +84 -0
- toolkit/simulator_lib/dht.py +1 -1
- toolkit/simulator_lib/framebuf.py +49 -1
- toolkit/simulator_lib/machine.py +32 -2
- toolkit/simulator_lib/micropython.py +3 -3
- toolkit/simulator_lib/mip.py +165 -0
- toolkit/simulator_lib/neopixel.py +3 -2
- toolkit/simulator_lib/network.py +2 -1
- toolkit/simulator_lib/node_config.json +2 -3
- toolkit/simulator_lib/ntptime.py +1 -1
- toolkit/simulator_lib/{sim_console.py → sim_common.py} +2 -3
- toolkit/simulator_lib/simgc.py +6 -2
- toolkit/simulator_lib/simulator.py +138 -46
- toolkit/simulator_lib/uasyncio.py +34 -3
- toolkit/simulator_lib/uos.py +147 -0
- toolkit/simulator_lib/urandom.py +4 -0
- toolkit/simulator_lib/usocket.py +5 -1
- toolkit/simulator_lib/view01.jpg +0 -0
- toolkit/simulator_lib/view02.jpg +0 -0
- toolkit/socketClient.py +43 -23
- toolkit/user_data/webhooks/generic.py +1 -1
- toolkit/user_data/webhooks/macro.py +44 -0
- toolkit/user_data/webhooks/template.macro +20 -0
- toolkit/user_data/webhooks/template.py +1 -1
- toolkit/workspace/precompiled/Auth.mpy +0 -0
- toolkit/workspace/precompiled/Common.mpy +0 -0
- toolkit/workspace/precompiled/Config.mpy +0 -0
- toolkit/workspace/precompiled/Debug.mpy +0 -0
- toolkit/workspace/precompiled/Espnow.mpy +0 -0
- toolkit/workspace/precompiled/Files.mpy +0 -0
- toolkit/workspace/precompiled/Hooks.mpy +0 -0
- toolkit/workspace/precompiled/InterConnect.mpy +0 -0
- toolkit/workspace/precompiled/Interrupts.mpy +0 -0
- toolkit/workspace/precompiled/Logger.mpy +0 -0
- toolkit/workspace/precompiled/Network.mpy +0 -0
- toolkit/workspace/precompiled/Notify.mpy +0 -0
- toolkit/workspace/precompiled/Pacman.mpy +0 -0
- toolkit/workspace/precompiled/Scheduler.mpy +0 -0
- toolkit/workspace/precompiled/Server.mpy +0 -0
- toolkit/workspace/precompiled/Shell.mpy +0 -0
- toolkit/workspace/precompiled/Tasks.mpy +0 -0
- toolkit/workspace/precompiled/Time.mpy +0 -0
- toolkit/workspace/precompiled/Types.mpy +0 -0
- toolkit/workspace/precompiled/Web.mpy +0 -0
- toolkit/workspace/precompiled/_mpy.version +1 -1
- toolkit/workspace/precompiled/config/_git.keep +0 -0
- toolkit/workspace/precompiled/helpers.mpy +0 -0
- toolkit/workspace/precompiled/micrOS.mpy +0 -0
- toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
- toolkit/workspace/precompiled/microIO.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32c3.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32s2.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32s3.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_m5stamp.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_qtpy.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_rp2.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_tinypico.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_L298N.mpy +0 -0
- {micrOS/source → toolkit/workspace/precompiled/modules}/LM_L9110_DCmotor.py +4 -4
- toolkit/workspace/precompiled/modules/LM_OV2640.mpy +0 -0
- toolkit/workspace/precompiled/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
- toolkit/workspace/precompiled/modules/LM_aht10.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_bme280.mpy +0 -0
- toolkit/workspace/precompiled/{LM_buzzer.mpy → modules/LM_buzzer.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_cct.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_cluster.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_co2.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_dht11.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_dht22.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_dimmer.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_distance.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_ds18.mpy +0 -0
- toolkit/workspace/precompiled/{LM_esp32.py → modules/LM_esp32.py} +16 -4
- toolkit/workspace/precompiled/modules/LM_espnow.py +53 -0
- toolkit/workspace/precompiled/modules/LM_fileserver.mpy +0 -0
- toolkit/workspace/precompiled/{LM_gameOfLife.mpy → modules/LM_gameOfLife.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_genIO.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_haptic.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_i2c.py +61 -0
- toolkit/workspace/precompiled/modules/LM_i2s_mic.mpy +0 -0
- toolkit/workspace/precompiled/{LM_ld2410.mpy → modules/LM_ld2410.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_light_sensor.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_mh_z19c.py +198 -0
- toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_neopixel.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled_sh1106.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_presence.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_qmi8658.py +204 -0
- toolkit/workspace/precompiled/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
- toolkit/workspace/precompiled/modules/LM_rest.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_rgb.mpy +0 -0
- toolkit/workspace/precompiled/{LM_rgbcct.mpy → modules/LM_rgbcct.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_roboarm.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_robustness.py +137 -0
- toolkit/workspace/precompiled/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
- toolkit/workspace/precompiled/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
- toolkit/workspace/precompiled/{LM_servo.mpy → modules/LM_servo.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_sound_event.mpy +0 -0
- toolkit/workspace/precompiled/{LM_stepper.mpy → modules/LM_stepper.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_switch.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_system.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_tcs3472.py +187 -0
- toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
- toolkit/workspace/precompiled/{LM_tinyrgb.mpy → modules/LM_tinyrgb.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_trackball.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_veml7700.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_web.mpy +0 -0
- toolkit/workspace/precompiled/urequests.mpy +0 -0
- {micrOS/source → toolkit/workspace/precompiled/web}/dashboard.html +9 -4
- toolkit/workspace/precompiled/web/editor.js +440 -0
- toolkit/workspace/precompiled/web/filesui.html +178 -0
- toolkit/workspace/precompiled/web/filesui.js +338 -0
- toolkit/workspace/precompiled/{index.html → web/index.html} +44 -2
- toolkit/workspace/precompiled/web/uapi.js +103 -0
- toolkit/workspace/precompiled/web/udashboard.js +129 -0
- toolkit/workspace/precompiled/web/ustyle.css +55 -0
- toolkit/workspace/precompiled/web/uwidgets.js +172 -0
- toolkit/workspace/precompiled/web/uwidgets_pro.js +99 -0
- env/driver_cp210x/CH34XSER_MAC/CH34X_DRV_INSTALL_INSTRUCTIONS.pdf +0 -0
- env/driver_cp210x/CH34XSER_MAC/CH34xVCPDriver.pkg +0 -0
- micrOS/micropython/esp32-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/esp32c3-GENERIC-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32c3-GENERIC-20240222-v1.22.2.bin +0 -0
- micrOS/micropython/esp32s2-GENERIC-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
- micrOS/micropython/esp32s3-GENERIC-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/rpi-pico-w-20231005-v1.21.0.uf2 +0 -0
- micrOS/micropython/tinypico-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/tinypico-usbc-UM-20240105-v1.22.1.bin +0 -0
- micrOS/source/LM_L298N_DCmotor.py +0 -86
- micrOS/source/LM_catgame.py +0 -74
- micrOS/source/LM_dashboard_be.py +0 -37
- micrOS/source/LM_demo.py +0 -85
- micrOS/source/LM_distance.py +0 -88
- micrOS/source/LM_i2c.py +0 -44
- micrOS/source/LM_intercon.py +0 -57
- micrOS/source/LM_keychain.py +0 -318
- micrOS/source/LM_lmpacman.py +0 -126
- micrOS/source/LM_neoeffects.py +0 -327
- micrOS/source/LM_pet_feeder.py +0 -76
- micrOS/source/LM_ph_sensor.py +0 -51
- micrOS/source/LM_rest.py +0 -40
- micrOS/source/LM_robustness.py +0 -73
- micrOS/source/LM_telegram.py +0 -96
- micrOS/source/reset.py +0 -11
- micrOS/source/uapi.js +0 -76
- micrOS/source/udashboard.js +0 -137
- micrOS/source/ustyle.css +0 -28
- micrOS/source/uwidgets.js +0 -179
- micrOSDevToolKit-2.1.5.dist-info/RECORD +0 -337
- toolkit/dashboard_apps/AirQualityBME280.py +0 -36
- toolkit/dashboard_apps/AirQualityDHT22_CO2.py +0 -36
- toolkit/lib/file_extensions.py +0 -16
- toolkit/simulator_lib/__pycache__/LP_darwin.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/LP_darwin.cpython-38.pyc +0 -0
- toolkit/simulator_lib/__pycache__/LP_darwin.cpython-39.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_console.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_console.cpython-38.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_console.cpython-39.pyc +0 -0
- toolkit/workspace/precompiled/IO_esp32.mpy +0 -0
- toolkit/workspace/precompiled/IO_esp32c3.mpy +0 -0
- toolkit/workspace/precompiled/IO_esp32s2.mpy +0 -0
- toolkit/workspace/precompiled/IO_esp32s3.mpy +0 -0
- toolkit/workspace/precompiled/IO_qtpy.mpy +0 -0
- toolkit/workspace/precompiled/IO_rp2.mpy +0 -0
- toolkit/workspace/precompiled/IO_tinypico.mpy +0 -0
- toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy +0 -0
- toolkit/workspace/precompiled/LM_OV2640.mpy +0 -0
- toolkit/workspace/precompiled/LM_aht10.mpy +0 -0
- toolkit/workspace/precompiled/LM_bme280.mpy +0 -0
- toolkit/workspace/precompiled/LM_catgame.py +0 -74
- toolkit/workspace/precompiled/LM_cct.mpy +0 -0
- toolkit/workspace/precompiled/LM_co2.mpy +0 -0
- toolkit/workspace/precompiled/LM_dashboard_be.py +0 -37
- toolkit/workspace/precompiled/LM_demo.py +0 -85
- toolkit/workspace/precompiled/LM_dht11.mpy +0 -0
- toolkit/workspace/precompiled/LM_dht22.mpy +0 -0
- toolkit/workspace/precompiled/LM_dimmer.mpy +0 -0
- toolkit/workspace/precompiled/LM_distance.py +0 -88
- toolkit/workspace/precompiled/LM_ds18.mpy +0 -0
- toolkit/workspace/precompiled/LM_genIO.mpy +0 -0
- toolkit/workspace/precompiled/LM_i2c.py +0 -44
- toolkit/workspace/precompiled/LM_i2s_mic.mpy +0 -0
- toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
- toolkit/workspace/precompiled/LM_keychain.mpy +0 -0
- toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
- toolkit/workspace/precompiled/LM_lmpacman.mpy +0 -0
- toolkit/workspace/precompiled/LM_neoeffects.mpy +0 -0
- toolkit/workspace/precompiled/LM_neopixel.mpy +0 -0
- toolkit/workspace/precompiled/LM_oled.mpy +0 -0
- toolkit/workspace/precompiled/LM_oled_sh1106.mpy +0 -0
- toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
- toolkit/workspace/precompiled/LM_pet_feeder.py +0 -76
- toolkit/workspace/precompiled/LM_ph_sensor.py +0 -51
- toolkit/workspace/precompiled/LM_presence.mpy +0 -0
- toolkit/workspace/precompiled/LM_rest.mpy +0 -0
- toolkit/workspace/precompiled/LM_rgb.mpy +0 -0
- toolkit/workspace/precompiled/LM_roboarm.mpy +0 -0
- toolkit/workspace/precompiled/LM_robustness.py +0 -73
- toolkit/workspace/precompiled/LM_switch.mpy +0 -0
- toolkit/workspace/precompiled/LM_system.mpy +0 -0
- toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
- toolkit/workspace/precompiled/reset.mpy +0 -0
- toolkit/workspace/precompiled/uapi.js +0 -76
- toolkit/workspace/precompiled/udashboard.js +0 -137
- toolkit/workspace/precompiled/ustyle.css +0 -28
- toolkit/workspace/precompiled/uwidgets.js +0 -179
- /toolkit/user_data/node_config_archive/.include → /micrOS/source/config/_git.keep +0 -0
- /micrOS/source/{IO_rp2.py → modules/IO_rp2.py} +0 -0
- /micrOS/source/{LM_tinyrgb.py → modules/LM_tinyrgb.py} +0 -0
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info/licenses}/LICENSE +0 -0
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/top_level.txt +0 -0
micrOS/source/LM_neoeffects.py
DELETED
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
from LM_neopixel import load_n_init, segment, Data, status
|
|
2
|
-
from LM_neopixel import pinmap as pm
|
|
3
|
-
from random import randint
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
#################################
|
|
7
|
-
# NEOPIXEL EFFECT DRAWER CLASS #
|
|
8
|
-
#################################
|
|
9
|
-
|
|
10
|
-
class DrawEffect:
|
|
11
|
-
__instance = None
|
|
12
|
-
|
|
13
|
-
def __new__(cls, pixcnt=24):
|
|
14
|
-
if DrawEffect.__instance is None:
|
|
15
|
-
# SocketServer singleton properties
|
|
16
|
-
DrawEffect.__instance = super().__new__(cls)
|
|
17
|
-
DrawEffect.__instance.pix_cnt = None
|
|
18
|
-
DrawEffect.__instance.index_offset = 0
|
|
19
|
-
DrawEffect.__instance.color_wheel = 0
|
|
20
|
-
DrawEffect.__instance.__init_effect(pixcnt)
|
|
21
|
-
DrawEffect.__instance.offset_gen = None
|
|
22
|
-
DrawEffect.__instance.auto_shift = False
|
|
23
|
-
return DrawEffect.__instance
|
|
24
|
-
|
|
25
|
-
def __init_effect(cls, ledcnt):
|
|
26
|
-
"""
|
|
27
|
-
Set neopixel object & store pixel cnt
|
|
28
|
-
"""
|
|
29
|
-
if Data.NEOPIXEL_OBJ is None:
|
|
30
|
-
load_n_init(ledcnt=ledcnt)
|
|
31
|
-
cls.pix_cnt = Data.NEOPIXEL_OBJ.n
|
|
32
|
-
if cls.pix_cnt is None:
|
|
33
|
-
cls.pix_cnt = Data.NEOPIXEL_OBJ.n
|
|
34
|
-
return cls.pix_cnt
|
|
35
|
-
|
|
36
|
-
def __offset(cls, shift):
|
|
37
|
-
def _gen():
|
|
38
|
-
while True:
|
|
39
|
-
if cls.auto_shift:
|
|
40
|
-
# Step rotation cycle - shift True
|
|
41
|
-
cls.index_offset += 1
|
|
42
|
-
if cls.index_offset > cls.pix_cnt - 1:
|
|
43
|
-
cls.index_offset = 0
|
|
44
|
-
for k in range(cls.index_offset, cls.pix_cnt):
|
|
45
|
-
yield k
|
|
46
|
-
for k in range(0, cls.index_offset):
|
|
47
|
-
yield k
|
|
48
|
-
cls.auto_shift = shift
|
|
49
|
-
if cls.offset_gen is None:
|
|
50
|
-
cls.offset_gen = _gen()
|
|
51
|
-
return cls.offset_gen
|
|
52
|
-
|
|
53
|
-
def draw(cls, iterable, shift=False):
|
|
54
|
-
"""
|
|
55
|
-
DRAW GENERATED COLORS (RGB)
|
|
56
|
-
HELPER FUNCTION with auto shift (offset) sub function
|
|
57
|
-
:param iterable: Colors generator object / iterable
|
|
58
|
-
:param shift: automatic color map rotation
|
|
59
|
-
:return: None
|
|
60
|
-
"""
|
|
61
|
-
offset_gen = cls.__offset(shift=shift)
|
|
62
|
-
r, g, b, i = 0, 0, 0, 0
|
|
63
|
-
for r, g, b in iterable:
|
|
64
|
-
# Handle index offset - rotate effect
|
|
65
|
-
i = next(offset_gen)
|
|
66
|
-
# Write data to neopixel - write / segment :)
|
|
67
|
-
segment(int(r), int(g), int(b), s=i, cache=False, write=False)
|
|
68
|
-
segment(int(r), int(g), int(b), s=i, cache=False, write=True)
|
|
69
|
-
return True
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def __color_input(r, g, b):
|
|
73
|
-
_r, _g, _b, _ = Data.DCACHE
|
|
74
|
-
r = _r if r is None else r
|
|
75
|
-
g = _g if g is None else g
|
|
76
|
-
b = _b if b is None else b
|
|
77
|
-
return r, g, b
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
#################################
|
|
81
|
-
# DEFINE EFFECTS #
|
|
82
|
-
#################################
|
|
83
|
-
|
|
84
|
-
def meteor(r=None, g=None, b=None, shift=True, ledcnt=24):
|
|
85
|
-
"""
|
|
86
|
-
Meteor effect
|
|
87
|
-
:param r int: red value 0-1000
|
|
88
|
-
:param g int: green value 0-1000
|
|
89
|
-
:param b int: blue value 0-1000
|
|
90
|
-
:param shift bool: automatic effect shifting
|
|
91
|
-
:param ledcnt int: number of neopixel elements in chain (default: 24)
|
|
92
|
-
:return str: verdict
|
|
93
|
-
"""
|
|
94
|
-
def __effect(r, g, b, pixel):
|
|
95
|
-
"""
|
|
96
|
-
Describe one full length color map
|
|
97
|
-
:param r: red target color
|
|
98
|
-
:param g: green target color
|
|
99
|
-
:param b: blue target color
|
|
100
|
-
:param pixel: number of led segments
|
|
101
|
-
:return: yield tuple with r,g,b
|
|
102
|
-
"""
|
|
103
|
-
step = float(0.9 / pixel)
|
|
104
|
-
for k in range(0, pixel):
|
|
105
|
-
fade = (k+1) * step
|
|
106
|
-
data = round(r * fade), round(g * fade), round(b * fade)
|
|
107
|
-
yield data
|
|
108
|
-
|
|
109
|
-
# Conditional value load - with neopixel cache
|
|
110
|
-
r, g, b = __color_input(r, g, b)
|
|
111
|
-
|
|
112
|
-
# Init custom params
|
|
113
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
114
|
-
# Create effect data
|
|
115
|
-
cgen = __effect(r, g, b, effect.pix_cnt)
|
|
116
|
-
# Draw effect data
|
|
117
|
-
effect.draw(cgen, shift=shift)
|
|
118
|
-
return 'Meteor R{}:G{}:B{} N:{}'.format(r, g, b, effect.pix_cnt)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
def cycle(r=None, g=None, b=None, shift=True, ledcnt=24):
|
|
122
|
-
"""
|
|
123
|
-
Cycle effect
|
|
124
|
-
:param r int: red value 0-1000
|
|
125
|
-
:param g int: green value 0-1000
|
|
126
|
-
:param b int: blue value 0-1000
|
|
127
|
-
:param shift bool: automatic effect shifting
|
|
128
|
-
:param ledcnt int: number of neopixel elements in chain (default: 24)
|
|
129
|
-
:return str: verdict
|
|
130
|
-
"""
|
|
131
|
-
def __effect(r, g, b, pixel):
|
|
132
|
-
"""
|
|
133
|
-
Describe one full length color map
|
|
134
|
-
:param r: red target color
|
|
135
|
-
:param g: green target color
|
|
136
|
-
:param b: blue target color
|
|
137
|
-
:param pixel: number of led segments
|
|
138
|
-
:return: yield tuple with r,g,b
|
|
139
|
-
"""
|
|
140
|
-
lightrgb = round(r*0.1), round(g*0.1), round(b*0.1)
|
|
141
|
-
yield lightrgb
|
|
142
|
-
yield r, g, b
|
|
143
|
-
yield lightrgb
|
|
144
|
-
for i in range(3, pixel):
|
|
145
|
-
yield 0, 0, 0
|
|
146
|
-
|
|
147
|
-
# Conditional value load - with neopixel cache
|
|
148
|
-
r, g, b = __color_input(r, g, b)
|
|
149
|
-
|
|
150
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
151
|
-
cgen = __effect(r, g, b, effect.pix_cnt)
|
|
152
|
-
effect.draw(cgen, shift=shift)
|
|
153
|
-
return 'Cycle R{}:G{}:B{} N:{}'.format(r, g, b, effect.pix_cnt)
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
def rainbow(step=1, br=50, ledcnt=24):
|
|
157
|
-
"""
|
|
158
|
-
Rainbow effect
|
|
159
|
-
:param step int: color weel resolution in step (default: 1)
|
|
160
|
-
:param br int: brightness in percentage
|
|
161
|
-
:param ledcnt int: number of neopixel elements in chain (default: 24)
|
|
162
|
-
:return str: verdict
|
|
163
|
-
"""
|
|
164
|
-
def __wheel(pos):
|
|
165
|
-
# Input a value 0 to 255 to get a color value.
|
|
166
|
-
# The colours are a transition r - g - b - back to r.
|
|
167
|
-
if pos < 0 or pos > 255:
|
|
168
|
-
return 0, 0, 0
|
|
169
|
-
if pos < 85:
|
|
170
|
-
return 255 - pos * 3, pos * 3, 0
|
|
171
|
-
if pos < 170:
|
|
172
|
-
pos -= 85
|
|
173
|
-
return 0, 255 - pos * 3, pos * 3
|
|
174
|
-
pos -= 170
|
|
175
|
-
return pos * 3, 0, 255 - pos * 3
|
|
176
|
-
|
|
177
|
-
def __effect(cnt, step, br):
|
|
178
|
-
"""
|
|
179
|
-
:param cnt: led segment count
|
|
180
|
-
:param br: max brightness 0-100%
|
|
181
|
-
:param step: step size
|
|
182
|
-
"""
|
|
183
|
-
cw = DrawEffect().color_wheel
|
|
184
|
-
DrawEffect().color_wheel = 0 if cw >= 255 else cw+step
|
|
185
|
-
for i in range(0, cnt):
|
|
186
|
-
rc_index = (i * 256 // cnt) + DrawEffect().color_wheel
|
|
187
|
-
r, g, b = __wheel(rc_index & 255)
|
|
188
|
-
yield round(r*br*0.01), round(g*br*0.01), round(b*br*0.01)
|
|
189
|
-
|
|
190
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
191
|
-
cgen = __effect(effect.pix_cnt, step=step, br=br)
|
|
192
|
-
effect.draw(cgen, shift=True)
|
|
193
|
-
return 'Rainbow'
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
def shader(size=6, offset=0, shift=False, ledcnt=24):
|
|
197
|
-
"""
|
|
198
|
-
Shader for ring lamp
|
|
199
|
-
:param size int: shader size (disabled LEDs)
|
|
200
|
-
:param offset int: rotate shader 0-(ledcnt-1)
|
|
201
|
-
:param shift bool: auto shift shader effect (False)
|
|
202
|
-
:param ledcnt int: number of neopixel elements in chain (default: 24)
|
|
203
|
-
:return str: verdict
|
|
204
|
-
"""
|
|
205
|
-
def __effect(size, offset, pixcnt):
|
|
206
|
-
# Conditional value load - with neopixel cache
|
|
207
|
-
r, g, b, _ = Data.DCACHE
|
|
208
|
-
# calculate 0->24 range
|
|
209
|
-
_slice1 = pixcnt if size + offset > pixcnt else size + offset
|
|
210
|
-
# calculate 24->0-> range (overflow)
|
|
211
|
-
_slice2 = size + offset - pixcnt if size + offset > pixcnt else 0
|
|
212
|
-
for i in range(0, pixcnt):
|
|
213
|
-
if offset < i < _slice1:
|
|
214
|
-
yield 0, 0, 0
|
|
215
|
-
elif 0 <= i < _slice2:
|
|
216
|
-
yield 0, 0, 0
|
|
217
|
-
else:
|
|
218
|
-
yield r, g, b
|
|
219
|
-
|
|
220
|
-
# Init custom params
|
|
221
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
222
|
-
# Create effect data
|
|
223
|
-
if size < effect.pix_cnt:
|
|
224
|
-
cgen = __effect(size, offset, effect.pix_cnt)
|
|
225
|
-
# Draw effect data
|
|
226
|
-
effect.index_offset = 0 # reset auto shift offset
|
|
227
|
-
effect.draw(cgen, shift=shift)
|
|
228
|
-
return 'Shader size: {} ->{} ({})'.format(size, offset, effect.pix_cnt)
|
|
229
|
-
return 'Shader invalid size: {} ({})'.format(size, effect.pix_cnt)
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
def random(max_val=255):
|
|
233
|
-
"""
|
|
234
|
-
Demo function: implements random color change
|
|
235
|
-
:param max_val: set channel maximum generated value: 0-255
|
|
236
|
-
:return str: rgb status - states: R, G, B
|
|
237
|
-
"""
|
|
238
|
-
r = randint(0, max_val)
|
|
239
|
-
g = randint(0, max_val)
|
|
240
|
-
b = randint(0, max_val)
|
|
241
|
-
Data.DCACHE[0] = r
|
|
242
|
-
Data.DCACHE[1] = g
|
|
243
|
-
Data.DCACHE[2] = b
|
|
244
|
-
return "Set random: R:{} G: B:{}".format(r, g, b)
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
def color(r=None, g=None, b=None):
|
|
248
|
-
"""
|
|
249
|
-
Set color buffer - for runtime effect color change
|
|
250
|
-
:param r int: red channel 0-255 (default: None - cached value)
|
|
251
|
-
:param g int: green channel 0-255 (default: None - cached value)
|
|
252
|
-
:param b int: blue channel 0-255 (default: None - cached value)
|
|
253
|
-
:return dict: rgb status - states: R, G, B, S
|
|
254
|
-
"""
|
|
255
|
-
# Conditional value load - with neopixel cache
|
|
256
|
-
r, g, b = __color_input(r, g, b)
|
|
257
|
-
Data.DCACHE[0] = r
|
|
258
|
-
Data.DCACHE[1] = g
|
|
259
|
-
Data.DCACHE[2] = b
|
|
260
|
-
return status()
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
def fire(r=None, g=None, b=None, ledcnt=24):
|
|
264
|
-
|
|
265
|
-
def __effect(r, g, b, pixcnt):
|
|
266
|
-
for _ in range(pixcnt):
|
|
267
|
-
rand_percent = round(randint(1, 200)/100, 2)
|
|
268
|
-
|
|
269
|
-
rgb = [
|
|
270
|
-
r * rand_percent,
|
|
271
|
-
g * rand_percent,
|
|
272
|
-
b * rand_percent
|
|
273
|
-
]
|
|
274
|
-
|
|
275
|
-
for i, color in enumerate(rgb):
|
|
276
|
-
if color > 255:
|
|
277
|
-
rgb[i] = 255
|
|
278
|
-
if color < 0:
|
|
279
|
-
rgb[i] = 0
|
|
280
|
-
yield rgb
|
|
281
|
-
|
|
282
|
-
# Conditional value load - with neopixel cache
|
|
283
|
-
r, g, b = __color_input(r, g, b)
|
|
284
|
-
|
|
285
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
286
|
-
cgen = __effect(r, g, b, effect.pix_cnt)
|
|
287
|
-
effect.draw(cgen, shift=False)
|
|
288
|
-
return 'fire R{}:G{}:B{} N:{}'.format(r, g, b, effect.pix_cnt)
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
#######################
|
|
292
|
-
# LM helper functions #
|
|
293
|
-
#######################
|
|
294
|
-
|
|
295
|
-
def lmdep():
|
|
296
|
-
"""
|
|
297
|
-
Show Load Module dependency
|
|
298
|
-
- List of load modules used by this application
|
|
299
|
-
:return: tuple
|
|
300
|
-
"""
|
|
301
|
-
return 'neopixel'
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
def pinmap():
|
|
305
|
-
"""
|
|
306
|
-
[i] micrOS LM naming convention
|
|
307
|
-
Shows logical pins - pin number(s) used by this Load module
|
|
308
|
-
- info which pins to use for this application
|
|
309
|
-
:return dict: pin name (str) - pin value (int) pairs
|
|
310
|
-
"""
|
|
311
|
-
return pm()
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
def help(widgets=False):
|
|
315
|
-
"""
|
|
316
|
-
[i] micrOS LM naming convention - built-in help message
|
|
317
|
-
:return tuple:
|
|
318
|
-
(widgets=False) list of functions implemented by this application
|
|
319
|
-
(widgets=True) list of widget json for UI generation
|
|
320
|
-
"""
|
|
321
|
-
return 'meteor r=<0-255> g=<0-255> b=<0-255> shift=True ledcnt=24',\
|
|
322
|
-
'cycle r g b shift=True ledcnt=24',\
|
|
323
|
-
'rainbow step=1 br=<5-100> ledcnt=24',\
|
|
324
|
-
'fire r=None g=None b=None ledcnt=24',\
|
|
325
|
-
'shader size=4 offset=0 shift=True ledcnt=24',\
|
|
326
|
-
'random max_val=255',\
|
|
327
|
-
'color r g b', 'pinmap'
|
micrOS/source/LM_pet_feeder.py
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import uasyncio as asyncio
|
|
2
|
-
from LM_servo import sduty, deinit
|
|
3
|
-
from LM_stepper import step
|
|
4
|
-
from Common import micro_task
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class Data:
|
|
8
|
-
TASK_TAG = "pet_feeder.portion"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
async def __portion_task(portion, posmin, posmax):
|
|
12
|
-
# ASYNC TASK ADAPTER [*2] with automatic state management
|
|
13
|
-
# [micro_task->Task] TaskManager access to task internals (out, done attributes)
|
|
14
|
-
with micro_task(tag=Data.TASK_TAG) as my_task:
|
|
15
|
-
for p in range(0, portion):
|
|
16
|
-
# [1]Run pos fill up
|
|
17
|
-
for pos in range(posmin, posmax):
|
|
18
|
-
sduty(pos)
|
|
19
|
-
await asyncio.sleep_ms(15)
|
|
20
|
-
# [2]Wait between fill up / food out
|
|
21
|
-
await asyncio.sleep_ms(500)
|
|
22
|
-
# [3]Run pos food out
|
|
23
|
-
for pos in range(posmax, posmin, -1):
|
|
24
|
-
sduty(pos)
|
|
25
|
-
await asyncio.sleep_ms(20)
|
|
26
|
-
my_task.out = "{}/{} serving".format(p+1, portion)
|
|
27
|
-
deinit()
|
|
28
|
-
my_task.out += ": {} task done".format(Data.TASK_TAG)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def serve(portion=1, posmin=65, posmax=97):
|
|
32
|
-
"""
|
|
33
|
-
Pet feeder - with servo motor
|
|
34
|
-
:param portion: number of portions (min/max positions to repeat)
|
|
35
|
-
:param posmin: servo "start" position
|
|
36
|
-
:param posmax: servo "stop" position
|
|
37
|
-
"""
|
|
38
|
-
# [!] ASYNC TASK CREATION [1*] with async task callback + taskID (TAG) handling
|
|
39
|
-
state = micro_task(tag=Data.TASK_TAG, task=__portion_task(portion=portion, posmin=posmin, posmax=posmax))
|
|
40
|
-
return "Starting" if state else "Already running"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def serve_w_stepper(portion=1, forward=135, back=10):
|
|
44
|
-
"""
|
|
45
|
-
Pet feeder (beta) - with stepper motor
|
|
46
|
-
:param count: number of portions
|
|
47
|
-
:param forward: s
|
|
48
|
-
:param back:
|
|
49
|
-
"""
|
|
50
|
-
for _ in range(portion):
|
|
51
|
-
# portion move
|
|
52
|
-
step(forward)
|
|
53
|
-
# Safety anti-block solution?
|
|
54
|
-
step(-back)
|
|
55
|
-
step(back)
|
|
56
|
-
step(-back)
|
|
57
|
-
step(back)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def lmdep():
|
|
61
|
-
"""
|
|
62
|
-
Show Load Module dependency
|
|
63
|
-
- List of load modules used by this application
|
|
64
|
-
:return: tuple
|
|
65
|
-
"""
|
|
66
|
-
return 'servo', 'stepper'
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def help(widgets=False):
|
|
70
|
-
"""
|
|
71
|
-
[i] micrOS LM naming convention - built-in help message
|
|
72
|
-
:return tuple:
|
|
73
|
-
(widgets=False) list of functions implemented by this application
|
|
74
|
-
(widgets=True) list of widget json for UI generation
|
|
75
|
-
"""
|
|
76
|
-
return 'serve portion=1 \t\t[info] servo control', 'serve_w_stepper portion=1 \t[info] stepper control', 'lmdep'
|
micrOS/source/LM_ph_sensor.py
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
from time import sleep
|
|
2
|
-
from microIO import physical_pin, pinmap_dump
|
|
3
|
-
from Common import SmartADC
|
|
4
|
-
|
|
5
|
-
"""
|
|
6
|
-
https://cimpleo.com/blog/simple-arduino-ph-meter/
|
|
7
|
-
ADC.ATTN_0DB — the full range voltage: 1.2V
|
|
8
|
-
ADC.ATTN_2_5DB — the full range voltage: 1.5V
|
|
9
|
-
ADC.ATTN_6DB — the full range voltage: 2.0V
|
|
10
|
-
ADC.ATTN_11DB — the full range voltage: 3.3V
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def __measure(samples=10):
|
|
15
|
-
adc_obj = SmartADC.get_singleton(physical_pin('ph'))
|
|
16
|
-
mbuf = 0
|
|
17
|
-
for k in range(0, samples):
|
|
18
|
-
mbuf += adc_obj.get()['volt']
|
|
19
|
-
sleep(0.1)
|
|
20
|
-
voltage = round(mbuf / samples, 3)
|
|
21
|
-
return voltage
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def measure():
|
|
25
|
-
data = SmartADC.get_singleton(physical_pin('ph')).get()
|
|
26
|
-
return "ADC data: {}\nAVG V: {}".format(data, __measure())
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
#######################
|
|
30
|
-
# LM helper functions #
|
|
31
|
-
#######################
|
|
32
|
-
|
|
33
|
-
def pinmap():
|
|
34
|
-
"""
|
|
35
|
-
[i] micrOS LM naming convention
|
|
36
|
-
Shows logical pins - pin number(s) used by this Load module
|
|
37
|
-
- info which pins to use for this application
|
|
38
|
-
:return dict: pin name (str) - pin value (int) pairs
|
|
39
|
-
"""
|
|
40
|
-
return pinmap_dump('ph')
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def help(widgets=False):
|
|
44
|
-
"""
|
|
45
|
-
[i] micrOS LM naming convention - built-in help message
|
|
46
|
-
:return tuple:
|
|
47
|
-
(widgets=False) list of functions implemented by this application
|
|
48
|
-
(widgets=True) list of widget json for UI generation
|
|
49
|
-
"""
|
|
50
|
-
return 'measure', 'pinmap'
|
|
51
|
-
|
micrOS/source/LM_rest.py
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
from urequests import get as http_get
|
|
2
|
-
|
|
3
|
-
class Rest:
|
|
4
|
-
GATEWAY_HOST = None
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def load_n_init(gateway_url=None):
|
|
8
|
-
"""
|
|
9
|
-
Set gateway url aka main domain
|
|
10
|
-
:param gateway_url: base url of gateway, like: http://gateway.local:5000
|
|
11
|
-
"""
|
|
12
|
-
if gateway_url is None:
|
|
13
|
-
if Rest.GATEWAY_HOST is None:
|
|
14
|
-
return 'Missing Gateway url'
|
|
15
|
-
return Rest.GATEWAY_HOST
|
|
16
|
-
Rest.GATEWAY_HOST = gateway_url
|
|
17
|
-
return f'Set gateway url: {gateway_url}'
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def url(subdomain):
|
|
21
|
-
"""
|
|
22
|
-
Execute rest call with given subdomain
|
|
23
|
-
:param subdomain: command parameters of url, like: /webhooks/template
|
|
24
|
-
"""
|
|
25
|
-
if Rest.GATEWAY_HOST is None:
|
|
26
|
-
return 'Missing Gateway url'
|
|
27
|
-
if not subdomain.startswith('/'):
|
|
28
|
-
subdomain = '/' + subdomain
|
|
29
|
-
domain = f'{Rest.GATEWAY_HOST}{subdomain}'
|
|
30
|
-
status_code, response = http_get(domain, jsonify=True)
|
|
31
|
-
return {'status': status_code, 'response': response}
|
|
32
|
-
|
|
33
|
-
def help(widgets=False):
|
|
34
|
-
"""
|
|
35
|
-
[i] micrOS LM naming convention - built-in help message
|
|
36
|
-
:return tuple:
|
|
37
|
-
(widgets=False) list of functions implemented by this application
|
|
38
|
-
(widgets=True) list of widget json for UI generation
|
|
39
|
-
"""
|
|
40
|
-
return 'load_n_init gateway_url=<http://gateway.local:5000>', 'url subdomain=</webhooks/template>'
|
micrOS/source/LM_robustness.py
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
from LM_system import memory_usage
|
|
2
|
-
from Common import socket_stream
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
@socket_stream
|
|
6
|
-
def raise_error(msgobj=None):
|
|
7
|
-
"""
|
|
8
|
-
Test function - raise LM exception
|
|
9
|
-
"""
|
|
10
|
-
if msgobj is not None:
|
|
11
|
-
msgobj("Raise test exception")
|
|
12
|
-
raise Exception("Test exception")
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@socket_stream
|
|
16
|
-
def memory_leak(cnt=160, msgobj=None):
|
|
17
|
-
"""
|
|
18
|
-
Test function - allocate lot of memory
|
|
19
|
-
:param cnt: data counter, default 160 iteration
|
|
20
|
-
:return: verdict
|
|
21
|
-
"""
|
|
22
|
-
dict_test = {}
|
|
23
|
-
mem_start = memory_usage()['mem_used']
|
|
24
|
-
for k in range(cnt):
|
|
25
|
-
mem = memory_usage()['percent']
|
|
26
|
-
data = "micrOS memory usage: {} %".format(mem)
|
|
27
|
-
if msgobj is not None:
|
|
28
|
-
msgobj("[{}] gen: {}".format(k, data))
|
|
29
|
-
dict_test[k] = data
|
|
30
|
-
mem_end = memory_usage()['mem_used']
|
|
31
|
-
delta = mem_start - mem_end
|
|
32
|
-
return '[{}] RAM Alloc.: {} kB {} byte'.format(len(dict_test), int(delta / 1024), int(delta % 1024))
|
|
33
|
-
|
|
34
|
-
@socket_stream
|
|
35
|
-
def recursion_limit(limit=14, msgobj=None):
|
|
36
|
-
cnt = 0
|
|
37
|
-
for cnt in range(1, limit+1):
|
|
38
|
-
try:
|
|
39
|
-
_recursion(cnt, msgobj=msgobj)
|
|
40
|
-
except Exception as e:
|
|
41
|
-
msgobj(f"ok error: {e}")
|
|
42
|
-
break
|
|
43
|
-
return f"Recursion limit: {cnt}"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def _recursion(cnt, msgobj=None):
|
|
47
|
-
"""
|
|
48
|
-
Test function - recursion test
|
|
49
|
-
:param cnt: recursion depth
|
|
50
|
-
:return: verdict
|
|
51
|
-
Error example:
|
|
52
|
-
node01 $ robustness recursion_limit 15
|
|
53
|
-
lm_exec LM_robustness->recursion_limit: maximum recursion depth exceeded
|
|
54
|
-
"""
|
|
55
|
-
if cnt > 0:
|
|
56
|
-
remain = _recursion(cnt-1)
|
|
57
|
-
if msgobj is not None:
|
|
58
|
-
msgobj("recalled {}".format(cnt))
|
|
59
|
-
else:
|
|
60
|
-
remain = 0
|
|
61
|
-
return remain
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
def help(widgets=False):
|
|
65
|
-
"""
|
|
66
|
-
[i] micrOS LM naming convention - built-in help message
|
|
67
|
-
:return tuple:
|
|
68
|
-
(widgets=False) list of functions implemented by this application
|
|
69
|
-
(widgets=True) list of widget json for UI generation
|
|
70
|
-
"""
|
|
71
|
-
return 'NOTE: This is a test module to validate system robustness', \
|
|
72
|
-
'raise_error', 'memory_leak cnt=160', 'recursion_limit cnt=14'
|
|
73
|
-
|
micrOS/source/LM_telegram.py
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import uasyncio as asyncio
|
|
2
|
-
from Notify import Telegram
|
|
3
|
-
from Common import micro_task
|
|
4
|
-
from Network import ifconfig
|
|
5
|
-
|
|
6
|
-
#########################################
|
|
7
|
-
# micrOS Notifications #
|
|
8
|
-
#########################################
|
|
9
|
-
|
|
10
|
-
# ENABLE TELEGRAM IF NW IS STA - CONNECTED TO THE WEB
|
|
11
|
-
_ENABLE = True if ifconfig()[0] == "STA" else False
|
|
12
|
-
if _ENABLE:
|
|
13
|
-
TELEGRAM_OBJ = Telegram()
|
|
14
|
-
else:
|
|
15
|
-
# NO NETWORK CONNECTION (STA)
|
|
16
|
-
TELEGRAM_OBJ = None
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def load_n_init():
|
|
20
|
-
"""
|
|
21
|
-
Set custom chat commands for Telegram
|
|
22
|
-
- /ping
|
|
23
|
-
- /cmd module function (params)
|
|
24
|
-
"""
|
|
25
|
-
if TELEGRAM_OBJ is None:
|
|
26
|
-
return "Network unavailable."
|
|
27
|
-
verdict = TELEGRAM_OBJ.set_commands()
|
|
28
|
-
return "Missing telegram bot token" if verdict is None else verdict
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def send(text):
|
|
32
|
-
"""
|
|
33
|
-
Send Telegram message - micrOS notification
|
|
34
|
-
:param text: text to send
|
|
35
|
-
return verdict
|
|
36
|
-
"""
|
|
37
|
-
if TELEGRAM_OBJ is None:
|
|
38
|
-
return "Network unavailable."
|
|
39
|
-
verdict = TELEGRAM_OBJ.send_msg(text)
|
|
40
|
-
return "Missing telegram bot token" if verdict is None else verdict
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def receive():
|
|
44
|
-
"""
|
|
45
|
-
Receive Telegram message
|
|
46
|
-
- if all value None, then no incoming messages
|
|
47
|
-
One successful msg receive is necessary to get chat_id for msg send as well!
|
|
48
|
-
"""
|
|
49
|
-
if TELEGRAM_OBJ is None:
|
|
50
|
-
return "Network unavailable."
|
|
51
|
-
verdict = TELEGRAM_OBJ.get_msg()
|
|
52
|
-
return "Missing telegram bot token" if verdict is None else verdict
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
async def __task():
|
|
56
|
-
cancel_cnt = 0
|
|
57
|
-
with micro_task(tag='telegram._loop') as my_task:
|
|
58
|
-
my_task.out = "[UP] Running"
|
|
59
|
-
while True:
|
|
60
|
-
# Normal task period
|
|
61
|
-
await asyncio.sleep(5)
|
|
62
|
-
try:
|
|
63
|
-
v = TELEGRAM_OBJ.receive_eval()
|
|
64
|
-
my_task.out = "Missing bot token" if v is None else v
|
|
65
|
-
cancel_cnt = 0
|
|
66
|
-
except Exception as e:
|
|
67
|
-
my_task.out = str(e)
|
|
68
|
-
# Auto scale - blocking nature - in case of serial failures (5) - hibernate task (increase async sleep)
|
|
69
|
-
cancel_cnt += 1
|
|
70
|
-
if cancel_cnt > 5:
|
|
71
|
-
my_task.out = f"[DOWN] {e}"
|
|
72
|
-
cancel_cnt = 5
|
|
73
|
-
# SLOW DOWN - hibernate task
|
|
74
|
-
asyncio.sleep(115)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
def receiver_loop():
|
|
78
|
-
"""
|
|
79
|
-
Telegram msg receiver loop - automatic LM execution
|
|
80
|
-
- Only executes module (function) if the module is already loaded
|
|
81
|
-
on the endpoint / micrOS node
|
|
82
|
-
"""
|
|
83
|
-
if TELEGRAM_OBJ is None:
|
|
84
|
-
return "Network unavailable."
|
|
85
|
-
state = micro_task(tag='telegram._loop', task=__task())
|
|
86
|
-
return "Starting" if state else "Already running"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def help(widgets=False):
|
|
90
|
-
"""
|
|
91
|
-
[i] micrOS LM naming convention - built-in help message
|
|
92
|
-
:return tuple:
|
|
93
|
-
(widgets=False) list of functions implemented by this application
|
|
94
|
-
(widgets=True) list of widget json for UI generation
|
|
95
|
-
"""
|
|
96
|
-
return 'send "text"', 'receive', 'receiver_loop', 'load_n_init', 'INFO: Send & Receive messages with Telegram bot'
|