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
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// WIDGETS ELEMENTS
|
|
2
|
+
|
|
3
|
+
const widget_indent = '40px';
|
|
4
|
+
const windowWidth = window.innerWidth;
|
|
5
|
+
|
|
6
|
+
function createTitle(command, title_len) {
|
|
7
|
+
return command.split('/').slice(1, title_len + 1).join('-').replace(/=|:range:/g, '').replace(/=|:options:/g, '');
|
|
8
|
+
}
|
|
9
|
+
function paramPythonify(opt) {
|
|
10
|
+
if (opt === "None" || opt === "True" || opt === "False") {return opt;}
|
|
11
|
+
// Check if the input is a valid integer
|
|
12
|
+
if (!isNaN(parseInt(opt, 10)) && String(parseInt(opt, 10)) === opt) {return opt;}
|
|
13
|
+
// Check if the input is a valid float
|
|
14
|
+
if (!isNaN(parseFloat(opt)) && String(parseFloat(opt)) === opt) {return opt;}
|
|
15
|
+
// If not a boolean, integer, or float, return as a quoted string
|
|
16
|
+
return `"${opt}"`;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function sliderWidget(container, command, params={}) {
|
|
20
|
+
const { title_len = 1, range = [0, 100, 5] } = params;
|
|
21
|
+
const [min, max, step] = range;
|
|
22
|
+
const paragraph = document.createElement('p');
|
|
23
|
+
const element = document.createElement('input');
|
|
24
|
+
const valueDisplay = document.createElement('span');
|
|
25
|
+
|
|
26
|
+
paragraph.style.textIndent = widget_indent;
|
|
27
|
+
paragraph.textContent = createTitle(command, title_len);
|
|
28
|
+
element.type = 'range';
|
|
29
|
+
element.min = min;
|
|
30
|
+
element.max = max;
|
|
31
|
+
element.step = step;
|
|
32
|
+
element.value = (max - min) / 2;
|
|
33
|
+
element.style.marginLeft = widget_indent;
|
|
34
|
+
element.style.width = `${Math.min(windowWidth * 0.6, 300)}px`;
|
|
35
|
+
valueDisplay.textContent = element.value;
|
|
36
|
+
|
|
37
|
+
element.addEventListener('input', () => valueDisplay.textContent = element.value);
|
|
38
|
+
element.addEventListener('change', () => {
|
|
39
|
+
const call_cmd = command.includes(':range:') ? command.replace(':range:', element.value) :
|
|
40
|
+
command.endsWith('=') ? `${command}${element.value}` :
|
|
41
|
+
`${command}/${element.value}`;
|
|
42
|
+
console.log(`[API] Slider exec: ${call_cmd}`);
|
|
43
|
+
restAPI(call_cmd);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
containerAppendChild([paragraph, element, valueDisplay], container);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function buttonWidget(container, command, params={}) {
|
|
50
|
+
const { title_len = 1, options = ['None'] } = params;
|
|
51
|
+
const text = createTitle(command, title_len);
|
|
52
|
+
const optsToTextMap = {
|
|
53
|
+
'True': 'ON',
|
|
54
|
+
'False': 'OFF',
|
|
55
|
+
'None': 'Default'
|
|
56
|
+
};
|
|
57
|
+
if (options.length > 1) {
|
|
58
|
+
// Create and append title paragraph for multi-button mode
|
|
59
|
+
const titleParagraph = document.createElement('p');
|
|
60
|
+
titleParagraph.style.textIndent = widget_indent;
|
|
61
|
+
titleParagraph.textContent = text;
|
|
62
|
+
container.appendChild(titleParagraph);
|
|
63
|
+
}
|
|
64
|
+
const paragraph = document.createElement('p');
|
|
65
|
+
paragraph.style.textIndent = widget_indent;
|
|
66
|
+
|
|
67
|
+
// Create buttons for each option
|
|
68
|
+
options.forEach(opt => {
|
|
69
|
+
const element = document.createElement('button');
|
|
70
|
+
element.style.marginRight = '10px';
|
|
71
|
+
element.style.height = '30px';
|
|
72
|
+
element.textContent = options.length === 1 ? text : optsToTextMap[opt] || opt;
|
|
73
|
+
element.addEventListener('click', () => {
|
|
74
|
+
const call_cmd = command.replace(':options:', paramPythonify(opt));
|
|
75
|
+
console.log(`[API] Button clicked: ${call_cmd}`);
|
|
76
|
+
restAPI(call_cmd);
|
|
77
|
+
});
|
|
78
|
+
paragraph.appendChild(element);
|
|
79
|
+
});
|
|
80
|
+
containerAppendChild([paragraph], container);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function textBoxWidget(container, command, params={}) {
|
|
84
|
+
const { title_len = 1, refresh = 5000 } = params;
|
|
85
|
+
const paragraph = document.createElement('p');
|
|
86
|
+
const uniqueId = `textbox-${command}-${Date.now()}`;
|
|
87
|
+
const element = document.createElement('div');
|
|
88
|
+
|
|
89
|
+
paragraph.style.textIndent = widget_indent;
|
|
90
|
+
paragraph.textContent = createTitle(command, title_len);
|
|
91
|
+
|
|
92
|
+
element.id = uniqueId;
|
|
93
|
+
Object.assign(element.style, {
|
|
94
|
+
marginLeft: widget_indent,
|
|
95
|
+
width: `${Math.min(windowWidth * 0.6, 300)}px`,
|
|
96
|
+
padding: '10px',
|
|
97
|
+
boxSizing: 'border-box',
|
|
98
|
+
border: '2px solid #e7e7e7',
|
|
99
|
+
borderRadius: '4px'
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const updateTextbox = () => {
|
|
103
|
+
const call_cmd = command.replace(':range:', 'None');
|
|
104
|
+
restAPI(call_cmd).then(resp => {
|
|
105
|
+
console.log(`[API] textBox[${uniqueId}] call: ${call_cmd}`);
|
|
106
|
+
const content = JSON.stringify(resp.result, null, 4).replace(/,\s*"/g, ',<br>"');
|
|
107
|
+
document.getElementById(uniqueId).innerHTML = content;
|
|
108
|
+
}).catch(error => {
|
|
109
|
+
console.error('[API] Textbox error:', error);
|
|
110
|
+
document.getElementById(uniqueId).textContent = 'Error loading data';
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
updateTextbox();
|
|
115
|
+
if (refresh > 0) {
|
|
116
|
+
const intervalId = setInterval(updateTextbox, refresh);
|
|
117
|
+
container.addEventListener('DOMNodeRemovedFromDocument', () => clearInterval(intervalId));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
containerAppendChild([paragraph, element], container);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function colorPaletteWidget(container, command, params = {}) {
|
|
124
|
+
const hexToRgb = (hex, max = 255) => {
|
|
125
|
+
hex = hex.replace(/^#/, '');
|
|
126
|
+
let bigint = parseInt(hex, 16);
|
|
127
|
+
let r = (bigint >> 16) & 255;
|
|
128
|
+
let g = (bigint >> 8) & 255;
|
|
129
|
+
let b = bigint & 255;
|
|
130
|
+
if (max > 255) {
|
|
131
|
+
const ratio = max / 255;
|
|
132
|
+
r = Math.round(r * ratio);
|
|
133
|
+
g = Math.round(g * ratio);
|
|
134
|
+
b = Math.round(b * ratio);
|
|
135
|
+
}
|
|
136
|
+
return { r, g, b };
|
|
137
|
+
};
|
|
138
|
+
const getRandomColorFromList = () => {
|
|
139
|
+
const colors = ['#542040', '#2b2155', '#4c1e44', '#56213f', '#853366', '#493984', '#6f3487'];
|
|
140
|
+
return colors[Math.floor(Math.random() * colors.length)];
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const { title_len = 1, range = [0, 255] } = params;
|
|
144
|
+
const max_val = range[1];
|
|
145
|
+
const paragraph = document.createElement('p');
|
|
146
|
+
const colorPicker = document.createElement('input');
|
|
147
|
+
const selectedColor = document.createElement('span');
|
|
148
|
+
|
|
149
|
+
paragraph.style.textIndent = widget_indent;
|
|
150
|
+
paragraph.textContent = createTitle(command, title_len);
|
|
151
|
+
colorPicker.type = 'color';
|
|
152
|
+
colorPicker.value = getRandomColorFromList();
|
|
153
|
+
colorPicker.classList.add('custom-color-picker');
|
|
154
|
+
Object.assign(colorPicker.style, {
|
|
155
|
+
width: '60px',
|
|
156
|
+
height: '40px',
|
|
157
|
+
marginLeft: '40px'
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
colorPicker.addEventListener('change', () => {
|
|
161
|
+
const { r, g, b } = hexToRgb(colorPicker.value, max_val);
|
|
162
|
+
const call_cmd = command.replace('r=:range:', `r=${r}`)
|
|
163
|
+
.replace('g=:range:', `g=${g}`)
|
|
164
|
+
.replace('b=:range:', `b=${b}`);
|
|
165
|
+
console.log(`[API] colorPalette exec: ${call_cmd}`);
|
|
166
|
+
restAPI(call_cmd);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
containerAppendChild([paragraph, colorPicker, selectedColor], container);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// sliderWidget
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// PRO WIDGETS ELEMENTS
|
|
2
|
+
|
|
3
|
+
function joystickWidget(container, command, params={}) {
|
|
4
|
+
const { title_len = 1, range = [0, 100, 5] } = params;
|
|
5
|
+
const [min, max, step] = range;
|
|
6
|
+
const paragraph = document.createElement('p');
|
|
7
|
+
const joystickContainer = document.createElement('div');
|
|
8
|
+
const joystick = document.createElement('div');
|
|
9
|
+
const valueDisplay = document.createElement('span');
|
|
10
|
+
|
|
11
|
+
paragraph.style.textIndent = widget_indent;
|
|
12
|
+
paragraph.textContent = createTitle(command, title_len);
|
|
13
|
+
|
|
14
|
+
joystickContainer.style.position = 'relative';
|
|
15
|
+
joystickContainer.style.width = '200px';
|
|
16
|
+
joystickContainer.style.height = '200px';
|
|
17
|
+
joystickContainer.style.border = '1px solid #fff';
|
|
18
|
+
joystickContainer.style.marginLeft = widget_indent;
|
|
19
|
+
joystickContainer.style.backgroundColor = 'transparent';
|
|
20
|
+
|
|
21
|
+
joystick.style.position = 'absolute';
|
|
22
|
+
joystick.style.width = '30px';
|
|
23
|
+
joystick.style.height = '30px';
|
|
24
|
+
joystick.style.background = '#fff';
|
|
25
|
+
joystick.style.borderRadius = '50%';
|
|
26
|
+
joystick.style.left = '50%';
|
|
27
|
+
joystick.style.top = '50%';
|
|
28
|
+
joystick.style.transform = 'translate(-50%, -50%)';
|
|
29
|
+
joystick.style.cursor = 'pointer';
|
|
30
|
+
|
|
31
|
+
valueDisplay.style.textIndent = widget_indent;
|
|
32
|
+
valueDisplay.style.display = 'block';
|
|
33
|
+
|
|
34
|
+
let isDragging = false;
|
|
35
|
+
|
|
36
|
+
const updateValueDisplay = (x, y) => {
|
|
37
|
+
valueDisplay.textContent = `x: ${x}, y: ${y}`;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const constrain = (value, min, max) => {
|
|
41
|
+
if (value < min) return min;
|
|
42
|
+
if (value > max) return max;
|
|
43
|
+
return value;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const startDragging = (event) => {
|
|
47
|
+
isDragging = true;
|
|
48
|
+
event.preventDefault();
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const stopDragging = () => {
|
|
52
|
+
if (isDragging) {
|
|
53
|
+
const rect = joystickContainer.getBoundingClientRect();
|
|
54
|
+
const x = Math.round((parseFloat(joystick.style.left) / rect.width) * (max - min) + min);
|
|
55
|
+
const y = Math.round((parseFloat(joystick.style.top) / rect.height) * (max - min) + min);
|
|
56
|
+
|
|
57
|
+
const call_cmd = command.includes('x=:range:') && command.includes('y=:range:') ?
|
|
58
|
+
command.replace('x=:range:', `x=${x}`).replace('y=:range:', `y=${y}`) :
|
|
59
|
+
`${command}`;
|
|
60
|
+
|
|
61
|
+
console.log(`[API] Joystick exec: ${call_cmd}`);
|
|
62
|
+
restAPI(call_cmd);
|
|
63
|
+
}
|
|
64
|
+
isDragging = false;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const drag = (event) => {
|
|
68
|
+
if (isDragging) {
|
|
69
|
+
const rect = joystickContainer.getBoundingClientRect();
|
|
70
|
+
const offsetX = event.touches ? event.touches[0].clientX - rect.left : event.clientX - rect.left;
|
|
71
|
+
const offsetY = event.touches ? event.touches[0].clientY - rect.top : event.clientY - rect.top;
|
|
72
|
+
const x = constrain(offsetX, 0, rect.width);
|
|
73
|
+
const y = constrain(offsetY, 0, rect.height);
|
|
74
|
+
|
|
75
|
+
joystick.style.left = `${x}px`;
|
|
76
|
+
joystick.style.top = `${y}px`;
|
|
77
|
+
|
|
78
|
+
const xValue = Math.round((x / rect.width) * (max - min) + min);
|
|
79
|
+
const yValue = Math.round((y / rect.height) * (max - min) + min);
|
|
80
|
+
updateValueDisplay(xValue, yValue);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
joystick.addEventListener('mousedown', startDragging);
|
|
85
|
+
joystick.addEventListener('touchstart', startDragging);
|
|
86
|
+
|
|
87
|
+
document.addEventListener('mouseup', stopDragging);
|
|
88
|
+
document.addEventListener('touchend', stopDragging);
|
|
89
|
+
|
|
90
|
+
document.addEventListener('mousemove', drag);
|
|
91
|
+
document.addEventListener('touchmove', drag);
|
|
92
|
+
|
|
93
|
+
joystickContainer.appendChild(joystick);
|
|
94
|
+
containerAppendChild([paragraph, joystickContainer, valueDisplay], container);
|
|
95
|
+
updateValueDisplay((max - min) / 2, (max - min) / 2);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
from machine import Pin, PWM
|
|
2
|
-
from microIO import physical_pin, pinmap_dump
|
|
3
|
-
|
|
4
|
-
#########################################
|
|
5
|
-
# ANALOG DIMMER CONTROLLER PARAMS #
|
|
6
|
-
#########################################
|
|
7
|
-
__L298N_OBJS = []
|
|
8
|
-
# DATA: SPEED (PWM obj), dir pin1, dir pin2
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
#########################################
|
|
12
|
-
# ANALOG DIMMER WITH PWM #
|
|
13
|
-
#########################################
|
|
14
|
-
|
|
15
|
-
def __l298n_init():
|
|
16
|
-
global __L298N_OBJS
|
|
17
|
-
if len(__L298N_OBJS) == 0:
|
|
18
|
-
__L298N_OBJS.append(PWM(Pin(physical_pin('l298speed')), freq=50))
|
|
19
|
-
__L298N_OBJS.append(Pin(physical_pin('l298dir_1'), Pin.OUT))
|
|
20
|
-
__L298N_OBJS.append(Pin(physical_pin('l298dir_2'), Pin.OUT))
|
|
21
|
-
__L298N_OBJS[0].duty(0) # Set default speed (PWM)
|
|
22
|
-
__L298N_OBJS[1].value(0) # Set default direction for dc motor1
|
|
23
|
-
__L298N_OBJS[2].value(1) # Set default direction for dc motor1
|
|
24
|
-
return __L298N_OBJS
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def m1_control(direc=None, speed=None):
|
|
28
|
-
out = {}
|
|
29
|
-
if direc is not None:
|
|
30
|
-
out = set_direction(direc)
|
|
31
|
-
if speed is not None:
|
|
32
|
-
out.update(set_speed(speed))
|
|
33
|
-
return out
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def set_speed(speed=100):
|
|
37
|
-
if 0 <= speed <= 1000:
|
|
38
|
-
print(__l298n_init())
|
|
39
|
-
__l298n_init()[0].duty(speed)
|
|
40
|
-
return {'speed': speed}
|
|
41
|
-
return {'speed': 'value range error'}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def stop():
|
|
45
|
-
return set_speed(0)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def set_direction(direc=0):
|
|
49
|
-
"""
|
|
50
|
-
direc (direction) values:
|
|
51
|
-
0: forward
|
|
52
|
-
1: backward
|
|
53
|
-
"""
|
|
54
|
-
objlist = __l298n_init()
|
|
55
|
-
if direc == 0:
|
|
56
|
-
objlist[1].value(1)
|
|
57
|
-
objlist[2].value(0)
|
|
58
|
-
return {'direction': 'forward'}
|
|
59
|
-
objlist[1].value(0)
|
|
60
|
-
objlist[2].value(1)
|
|
61
|
-
return {'direction': 'backward'}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
#######################
|
|
65
|
-
# LM helper functions #
|
|
66
|
-
#######################
|
|
67
|
-
|
|
68
|
-
def pinmap():
|
|
69
|
-
"""
|
|
70
|
-
[i] micrOS LM naming convention
|
|
71
|
-
Shows logical pins - pin number(s) used by this Load module
|
|
72
|
-
- info which pins to use for this application
|
|
73
|
-
:return dict: pin name (str) - pin value (int) pairs
|
|
74
|
-
"""
|
|
75
|
-
return pinmap_dump(['l298speed', 'l298dir_1', 'l298dir_2'])
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
def help(widgets=False):
|
|
79
|
-
"""
|
|
80
|
-
[i] micrOS LM naming convention - built-in help message
|
|
81
|
-
:return tuple:
|
|
82
|
-
(widgets=False) list of functions implemented by this application
|
|
83
|
-
(widgets=True) list of widget json for UI generation
|
|
84
|
-
"""
|
|
85
|
-
return 'm1_control direc=<0/1> speed=<0-1023>', 'set_speed <0-1023>',\
|
|
86
|
-
'set_direction <0-1>', 'stop', 'pinmap'
|
micrOS/source/LM_catgame.py
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
from random import randint
|
|
2
|
-
from LM_servo import sduty, deinit
|
|
3
|
-
from LM_servo import pinmap as pm
|
|
4
|
-
from utime import sleep_ms
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def game(repeat=10, delta=20):
|
|
8
|
-
"""
|
|
9
|
-
Servo cat toy "mover" - left-right
|
|
10
|
-
:param repeat int: repeat servo pos change
|
|
11
|
-
:param delta int: center(75) +/-delta(35)
|
|
12
|
-
:return str: verdict
|
|
13
|
-
"""
|
|
14
|
-
sduty(75)
|
|
15
|
-
for _ in range(0, repeat):
|
|
16
|
-
sduty(randint(75-delta, 75+delta))
|
|
17
|
-
sleep_ms(randint(20, 1500))
|
|
18
|
-
sduty(75)
|
|
19
|
-
return 'Game action'
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def live_game(chance=10):
|
|
23
|
-
"""
|
|
24
|
-
Generate game
|
|
25
|
-
:param chance int: percent value 0-100
|
|
26
|
-
:return str: verdict (action / no action)
|
|
27
|
-
"""
|
|
28
|
-
action = randint(1, 10)
|
|
29
|
-
if action <= int(chance/10):
|
|
30
|
-
return game(repeat=5)
|
|
31
|
-
return 'No action'
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def stop():
|
|
35
|
-
"""
|
|
36
|
-
Stop game - home position (75) + deinit
|
|
37
|
-
:return str: servo verdict
|
|
38
|
-
"""
|
|
39
|
-
out = sduty(75)
|
|
40
|
-
deinit()
|
|
41
|
-
return out
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
#######################
|
|
45
|
-
# LM helper functions #
|
|
46
|
-
#######################
|
|
47
|
-
|
|
48
|
-
def lmdep():
|
|
49
|
-
"""
|
|
50
|
-
Show Load Module dependency
|
|
51
|
-
- List of load modules used by this application
|
|
52
|
-
:return: tuple
|
|
53
|
-
"""
|
|
54
|
-
return 'servo'
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
def pinmap():
|
|
58
|
-
"""
|
|
59
|
-
[i] micrOS LM naming convention
|
|
60
|
-
Shows logical pins - pin number(s) used by this Load module
|
|
61
|
-
- info which pins to use for this application
|
|
62
|
-
:return dict: pin name (str) - pin value (int) pairs
|
|
63
|
-
"""
|
|
64
|
-
return pm()
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
def help(widgets=False):
|
|
68
|
-
"""
|
|
69
|
-
[i] micrOS LM naming convention - built-in help message
|
|
70
|
-
:return tuple:
|
|
71
|
-
(widgets=False) list of functions implemented by this application
|
|
72
|
-
(widgets=True) list of widget json for UI generation
|
|
73
|
-
"""
|
|
74
|
-
return 'game repeat=10', 'live_game chance=<10-90>', 'stop', 'pinmap', 'lmdep'
|
micrOS/source/LM_dashboard_be.py
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
from Common import rest_endpoint, syslog
|
|
2
|
-
|
|
3
|
-
ENDPOINT_INITED = False
|
|
4
|
-
|
|
5
|
-
def load_n_init():
|
|
6
|
-
return create_dashboard()
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def _dashboard_clb():
|
|
10
|
-
try:
|
|
11
|
-
with open('dashboard.html', 'r') as html:
|
|
12
|
-
html_content = html.read()
|
|
13
|
-
return 'text/html', html_content
|
|
14
|
-
except Exception as e:
|
|
15
|
-
syslog(f"[ERR] dashboard_be: {e}")
|
|
16
|
-
html_content = None
|
|
17
|
-
return 'text/plain', f'html_content error: {html_content}'
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def create_dashboard():
|
|
21
|
-
"""
|
|
22
|
-
Create dashboard endpoint
|
|
23
|
-
"""
|
|
24
|
-
global ENDPOINT_INITED
|
|
25
|
-
ENDPOINT_INITED = True
|
|
26
|
-
rest_endpoint('dashboard', _dashboard_clb)
|
|
27
|
-
return 'Endpoint created: /dashboard'
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def help(widgets=False):
|
|
31
|
-
"""
|
|
32
|
-
[i] micrOS LM naming convention - built-in help message
|
|
33
|
-
:return tuple:
|
|
34
|
-
(widgets=False) list of functions implemented by this application
|
|
35
|
-
(widgets=True) list of widget json for UI generation
|
|
36
|
-
"""
|
|
37
|
-
return 'load_n_init', 'create_dashboard', 'help'
|
micrOS/source/LM_demo.py
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
from random import randint
|
|
2
|
-
from microIO import detect_platform
|
|
3
|
-
from Debug import console_write
|
|
4
|
-
from Time import uptime
|
|
5
|
-
|
|
6
|
-
CNT = 0
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def _debug(func):
|
|
10
|
-
"""
|
|
11
|
-
Debug wrapper
|
|
12
|
-
- console logging
|
|
13
|
-
- handled cmd counter (exec_info to get the value)
|
|
14
|
-
"""
|
|
15
|
-
def __wrapper(*args, **kwargs):
|
|
16
|
-
global CNT
|
|
17
|
-
CNT += 1
|
|
18
|
-
console_write("debug module cmd executed") # + Progress LED
|
|
19
|
-
return func(*args, **kwargs)
|
|
20
|
-
return __wrapper
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@_debug
|
|
24
|
-
def hello(name="MrNobody"):
|
|
25
|
-
return f"Hello {name}! This is a micrOS smart endpoint ☁️, running on {detect_platform()}.\
|
|
26
|
-
\nFor more info call `demo links` function :D"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
@_debug
|
|
30
|
-
def calculator(a, b, op="+"):
|
|
31
|
-
if op.strip() == "+":
|
|
32
|
-
return f"{a} + {b} = {a + b}"
|
|
33
|
-
if op.strip() == "-":
|
|
34
|
-
return f"{a} - {b} = {a - b}"
|
|
35
|
-
if op.strip() == "/":
|
|
36
|
-
return f"{a} / {b} = {round(a / b, 3)}"
|
|
37
|
-
if op.strip() == "*":
|
|
38
|
-
return f"{a} * {b} = {a * b}"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
@_debug
|
|
42
|
-
def dice_cube():
|
|
43
|
-
value = randint(1, 6)
|
|
44
|
-
return f"🎲 {value}"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@_debug
|
|
48
|
-
def yes_no():
|
|
49
|
-
val = randint(0, 1)
|
|
50
|
-
return 'NO👎' if val == 0 else 'YES👍'
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
@_debug
|
|
54
|
-
def links():
|
|
55
|
-
descript = f"Platform: {detect_platform()}\nGITHUB: https://github.com/BxNxM/micrOS\nYOUTUBE: https://www.youtube.com/@micrOSframework\nINSTAGRAM: https://instagram.com/micros_framework"
|
|
56
|
-
return descript
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
@_debug
|
|
60
|
-
def source():
|
|
61
|
-
return 'https://github.com/BxNxM/micrOS/blob/master/micrOS/source/LM_demo.py'
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
@_debug
|
|
65
|
-
def exec_info():
|
|
66
|
-
global CNT
|
|
67
|
-
return f"Under {uptime()}: {CNT} cmd served."
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
@_debug
|
|
71
|
-
def help(widgets=False):
|
|
72
|
-
"""
|
|
73
|
-
[i] micrOS LM naming convention - built-in help message
|
|
74
|
-
:return tuple:
|
|
75
|
-
(widgets=False) list of functions implemented by this application
|
|
76
|
-
(widgets=True) list of widget json for UI generation
|
|
77
|
-
"""
|
|
78
|
-
return 'hello name="MrNobody"',\
|
|
79
|
-
'calculator a b op="+"',\
|
|
80
|
-
'\t=>op: + - / *',\
|
|
81
|
-
'dice_cube - show number, roll a dice',\
|
|
82
|
-
'yes_no - show random yes/no',\
|
|
83
|
-
'links - show micrOS links',\
|
|
84
|
-
'source - show demo module source code',\
|
|
85
|
-
'exec_info - Execution info, demo module usage'
|
micrOS/source/LM_distance.py
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
from machine import Pin, time_pulse_us
|
|
2
|
-
from utime import sleep_us
|
|
3
|
-
from microIO import physical_pin, pinmap_dump
|
|
4
|
-
|
|
5
|
-
__TRIGGER_OBJ = None
|
|
6
|
-
__ECHO_OBJ = None
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def __init_HCSR04():
|
|
10
|
-
global __TRIGGER_OBJ, __ECHO_OBJ
|
|
11
|
-
if __TRIGGER_OBJ is None or __ECHO_OBJ is None:
|
|
12
|
-
trigger_pin = physical_pin('hcsrtrig')
|
|
13
|
-
echo_pin = physical_pin('hcsrecho')
|
|
14
|
-
# Init trigger pin (out)
|
|
15
|
-
__TRIGGER_OBJ = Pin(trigger_pin, mode=Pin.OUT, pull=None)
|
|
16
|
-
__TRIGGER_OBJ.value(0)
|
|
17
|
-
# Init echo pin (in)
|
|
18
|
-
__ECHO_OBJ = Pin(echo_pin, mode=Pin.IN, pull=None)
|
|
19
|
-
return __TRIGGER_OBJ, __ECHO_OBJ
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def __send_pulse_and_wait(echo_timeout_us=1000000):
|
|
23
|
-
trigger_pin, echo_pin = __init_HCSR04()
|
|
24
|
-
trigger_pin.value(0) # Stabilize the sensor
|
|
25
|
-
sleep_us(5)
|
|
26
|
-
trigger_pin.value(1)
|
|
27
|
-
# Send a 10us pulse.
|
|
28
|
-
sleep_us(10)
|
|
29
|
-
trigger_pin.value(0)
|
|
30
|
-
try:
|
|
31
|
-
pulse_time = time_pulse_us(echo_pin, 1, echo_timeout_us)
|
|
32
|
-
return pulse_time
|
|
33
|
-
except OSError as ex:
|
|
34
|
-
if ex.args[0] == 110: # 110 = ETIMEDOUT
|
|
35
|
-
raise OSError('Out of range')
|
|
36
|
-
raise ex
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
#########################
|
|
40
|
-
# Application functions #
|
|
41
|
-
#########################
|
|
42
|
-
|
|
43
|
-
def distance_mm():
|
|
44
|
-
"""
|
|
45
|
-
To calculate the distance we get the pulse_time and divide it by 2
|
|
46
|
-
(the pulse walk the distance twice) and by 29.1 becasue
|
|
47
|
-
the sound speed on air (343.2 m/s), that It's equivalent to
|
|
48
|
-
0.34320 mm/us that is 1mm each 2.91us
|
|
49
|
-
pulse_time // 2 // 2.91 -> pulse_time // 5.82 -> pulse_time * 100 // 582
|
|
50
|
-
"""
|
|
51
|
-
return __send_pulse_and_wait() * 100 // 582
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def distance_cm():
|
|
55
|
-
return (__send_pulse_and_wait() / 2) / 29.1
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def deinit():
|
|
59
|
-
global __TRIGGER_OBJ, __ECHO_OBJ
|
|
60
|
-
trigger_pin, echo_pin = __init_HCSR04()
|
|
61
|
-
trigger_pin.deinit()
|
|
62
|
-
echo_pin.deinit()
|
|
63
|
-
__TRIGGER_OBJ = None
|
|
64
|
-
__ECHO_OBJ = None
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
#######################
|
|
68
|
-
# LM helper functions #
|
|
69
|
-
#######################
|
|
70
|
-
|
|
71
|
-
def pinmap():
|
|
72
|
-
"""
|
|
73
|
-
[i] micrOS LM naming convention
|
|
74
|
-
Shows logical pins - pin number(s) used by this Load module
|
|
75
|
-
- info which pins to use for this application
|
|
76
|
-
:return dict: pin name (str) - pin value (int) pairs
|
|
77
|
-
"""
|
|
78
|
-
return pinmap_dump(['hcsrtrig', 'hcsrecho'])
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
def help(widgets=False):
|
|
82
|
-
"""
|
|
83
|
-
[i] micrOS LM naming convention - built-in help message
|
|
84
|
-
:return tuple:
|
|
85
|
-
(widgets=False) list of functions implemented by this application
|
|
86
|
-
(widgets=True) list of widget json for UI generation
|
|
87
|
-
"""
|
|
88
|
-
return 'distance_mm', 'distance_cm', 'deinit', 'pinmap'
|