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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from utime import sleep_ms
|
|
4
4
|
from machine import Pin
|
|
5
|
-
from microIO import
|
|
5
|
+
from microIO import bind_pin, pinmap_search
|
|
6
6
|
STEPPER_INST = None
|
|
7
7
|
|
|
8
8
|
|
|
@@ -30,10 +30,10 @@ class StepperULN2003:
|
|
|
30
30
|
[1, 0, 0, 1]]
|
|
31
31
|
self.delay = 2
|
|
32
32
|
# Init stepper pins
|
|
33
|
-
self.pin1 = Pin(
|
|
34
|
-
self.pin2 = Pin(
|
|
35
|
-
self.pin3 = Pin(
|
|
36
|
-
self.pin4 = Pin(
|
|
33
|
+
self.pin1 = Pin(bind_pin('stppr_1'), Pin.OUT)
|
|
34
|
+
self.pin2 = Pin(bind_pin('stppr_2'), Pin.OUT)
|
|
35
|
+
self.pin3 = Pin(bind_pin('stppr_3'), Pin.OUT)
|
|
36
|
+
self.pin4 = Pin(bind_pin('stppr_4'), Pin.OUT)
|
|
37
37
|
# Initialize all value to 0 - "OFF"
|
|
38
38
|
self.reset()
|
|
39
39
|
|
|
@@ -86,7 +86,7 @@ def __init_stepper(mode='HALF'):
|
|
|
86
86
|
return STEPPER_INST
|
|
87
87
|
|
|
88
88
|
|
|
89
|
-
def
|
|
89
|
+
def load(mode="HALF"):
|
|
90
90
|
"""
|
|
91
91
|
Init stepper motor module
|
|
92
92
|
:param mode: step mode: HALF/FULL
|
|
@@ -141,7 +141,7 @@ def pinmap():
|
|
|
141
141
|
- info which pins to use for this application
|
|
142
142
|
:return dict: pin name (str) - pin value (int) pairs
|
|
143
143
|
"""
|
|
144
|
-
return
|
|
144
|
+
return pinmap_search(['stppr_1', 'stppr_2', 'stppr_3', 'stppr_4'])
|
|
145
145
|
|
|
146
146
|
|
|
147
147
|
def help(widgets=False):
|
|
@@ -154,5 +154,5 @@ def help(widgets=False):
|
|
|
154
154
|
return 'angle dg=+/-360 speed=<ms>',\
|
|
155
155
|
'step st=+/-2 speed=<ms>',\
|
|
156
156
|
'standby',\
|
|
157
|
-
'
|
|
157
|
+
'load mode=<"HALF"/"FULL">', 'pinmap'\
|
|
158
158
|
'Info: stepper: 28byj-48 driver: ULN2003'
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from machine import Pin
|
|
2
|
-
from microIO import
|
|
2
|
+
from microIO import bind_pin, pinmap_search
|
|
3
|
+
from Common import data_dir
|
|
4
|
+
from Types import resolve
|
|
3
5
|
|
|
4
6
|
#########################################
|
|
5
7
|
# DIGITAL IO SWITCH #
|
|
@@ -7,6 +9,7 @@ from microIO import physical_pin, pinmap_dump
|
|
|
7
9
|
__SWITCH_OBJ = [None, None, None, None]
|
|
8
10
|
__PERSISTENT_CACHE = False
|
|
9
11
|
__SWITCH_STATE = [0, 0, 0, 0]
|
|
12
|
+
__FILE_CACHE = data_dir('switch.cache')
|
|
10
13
|
|
|
11
14
|
|
|
12
15
|
#########################################
|
|
@@ -15,7 +18,7 @@ __SWITCH_STATE = [0, 0, 0, 0]
|
|
|
15
18
|
|
|
16
19
|
def __persistent_cache_manager(mode):
|
|
17
20
|
"""
|
|
18
|
-
|
|
21
|
+
File cache
|
|
19
22
|
modes:
|
|
20
23
|
r - recover, s - save
|
|
21
24
|
"""
|
|
@@ -24,12 +27,12 @@ def __persistent_cache_manager(mode):
|
|
|
24
27
|
global __SWITCH_STATE
|
|
25
28
|
if mode == 's':
|
|
26
29
|
# SAVE CACHE
|
|
27
|
-
with open(
|
|
30
|
+
with open(__FILE_CACHE, 'w') as f:
|
|
28
31
|
f.write(','.join([str(k) for k in __SWITCH_STATE]))
|
|
29
32
|
return
|
|
30
33
|
try:
|
|
31
34
|
# RESTORE CACHE
|
|
32
|
-
with open(
|
|
35
|
+
with open(__FILE_CACHE, 'r') as f:
|
|
33
36
|
__SWITCH_STATE = [int(data) for data in f.read().strip().split(',')]
|
|
34
37
|
except:
|
|
35
38
|
pass
|
|
@@ -49,11 +52,11 @@ def __init_switches_state(state=None, ch_init=None):
|
|
|
49
52
|
set_state4(state)
|
|
50
53
|
|
|
51
54
|
|
|
52
|
-
def
|
|
55
|
+
def load(cache=None, ch_init=None):
|
|
53
56
|
"""
|
|
54
57
|
Initiate switch module (4 switch pack)
|
|
55
58
|
:param cache bool: file state machine cache: True/False/None(default: automatic True)
|
|
56
|
-
- Load .
|
|
59
|
+
- Load .cache (state machine cache) for this load module
|
|
57
60
|
- Apply loaded states to gpio pins (boot function)
|
|
58
61
|
:return str: Cache state
|
|
59
62
|
"""
|
|
@@ -81,7 +84,7 @@ def load_n_init(cache=None, ch_init=None):
|
|
|
81
84
|
|
|
82
85
|
def __switch_init():
|
|
83
86
|
if __SWITCH_OBJ[0] is None:
|
|
84
|
-
__SWITCH_OBJ[0] = Pin(
|
|
87
|
+
__SWITCH_OBJ[0] = Pin(bind_pin('switch_1'), Pin.OUT)
|
|
85
88
|
return __SWITCH_OBJ[0]
|
|
86
89
|
|
|
87
90
|
|
|
@@ -117,7 +120,7 @@ def toggle():
|
|
|
117
120
|
|
|
118
121
|
def __switch2_init():
|
|
119
122
|
if __SWITCH_OBJ[1] is None:
|
|
120
|
-
__SWITCH_OBJ[1] = Pin(
|
|
123
|
+
__SWITCH_OBJ[1] = Pin(bind_pin('switch_2'), Pin.OUT)
|
|
121
124
|
return __SWITCH_OBJ[1]
|
|
122
125
|
|
|
123
126
|
|
|
@@ -152,7 +155,7 @@ def toggle2():
|
|
|
152
155
|
|
|
153
156
|
def __switch3_init():
|
|
154
157
|
if __SWITCH_OBJ[2] is None:
|
|
155
|
-
__SWITCH_OBJ[2] = Pin(
|
|
158
|
+
__SWITCH_OBJ[2] = Pin(bind_pin('switch_3'), Pin.OUT)
|
|
156
159
|
return __SWITCH_OBJ[2]
|
|
157
160
|
|
|
158
161
|
|
|
@@ -187,7 +190,7 @@ def toggle3():
|
|
|
187
190
|
|
|
188
191
|
def __switch4_init():
|
|
189
192
|
if __SWITCH_OBJ[3] is None:
|
|
190
|
-
__SWITCH_OBJ[3] = Pin(
|
|
193
|
+
__SWITCH_OBJ[3] = Pin(bind_pin('switch_4'), Pin.OUT)
|
|
191
194
|
return __SWITCH_OBJ[3]
|
|
192
195
|
|
|
193
196
|
|
|
@@ -250,7 +253,7 @@ def pinmap():
|
|
|
250
253
|
- info which pins to use for this application
|
|
251
254
|
:return dict: pin name (str) - pin value (int) pairs
|
|
252
255
|
"""
|
|
253
|
-
return
|
|
256
|
+
return pinmap_search(['switch_1', 'switch_2', 'switch_3', 'switch_4'])
|
|
254
257
|
|
|
255
258
|
|
|
256
259
|
def help(widgets=False):
|
|
@@ -260,10 +263,10 @@ def help(widgets=False):
|
|
|
260
263
|
(widgets=False) list of functions implemented by this application
|
|
261
264
|
(widgets=True) list of widget json for UI generation
|
|
262
265
|
"""
|
|
263
|
-
return 'set_state state=<0,1>', 'toggle',
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
266
|
+
return resolve(('set_state state=<0,1>', 'BUTTON toggle',
|
|
267
|
+
'set_state2 state=<0,1>', 'BUTTON toggle2',
|
|
268
|
+
'set_state3 state=<0,1>', 'BUTTON toggle3',
|
|
269
|
+
'set_state4 state=<0,1>', 'BUTTON toggle4',
|
|
270
|
+
'load cache=None<True/False> ch_init=[1,2,3,4]',
|
|
271
|
+
'status',
|
|
272
|
+
'pinmap'), widgets=widgets)
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
from
|
|
1
|
+
from uos import statvfs, getcwd, uname
|
|
2
2
|
from utime import localtime
|
|
3
|
-
from
|
|
4
|
-
from
|
|
3
|
+
from network import WLAN, STA_IF, AP_IF
|
|
4
|
+
from binascii import hexlify
|
|
5
|
+
from Common import socket_stream, console
|
|
6
|
+
from Network import get_mac, ifconfig as network_config
|
|
5
7
|
from Time import ntp_time, set_time, uptime
|
|
6
8
|
from Tasks import Manager
|
|
9
|
+
from Types import resolve
|
|
10
|
+
from Notify import Notify
|
|
7
11
|
|
|
8
12
|
try:
|
|
9
13
|
from gc import mem_free, mem_alloc, collect
|
|
@@ -51,13 +55,12 @@ def info():
|
|
|
51
55
|
- cpu clock, ram, free fs, upython, board, mac addr, uptime
|
|
52
56
|
"""
|
|
53
57
|
from machine import freq
|
|
54
|
-
from os import uname
|
|
55
58
|
|
|
56
59
|
buffer = top()
|
|
57
60
|
buffer.update({'CPU clock [MHz]': int(freq() * 0.0000001), 'upython': uname()[3],
|
|
58
61
|
'board': uname()[4], 'uptime': uptime()})
|
|
59
62
|
try:
|
|
60
|
-
buffer['mac'] = get_mac()
|
|
63
|
+
buffer['mac'] = hexlify(get_mac(), ':').decode()
|
|
61
64
|
except:
|
|
62
65
|
buffer['mac'] = 'n/a'
|
|
63
66
|
return buffer
|
|
@@ -79,6 +82,7 @@ def heartbeat():
|
|
|
79
82
|
"""
|
|
80
83
|
Test function for built-in led blinking and test reply message
|
|
81
84
|
"""
|
|
85
|
+
console("<3 heartbeat <3")
|
|
82
86
|
return "<3 heartbeat <3"
|
|
83
87
|
|
|
84
88
|
|
|
@@ -120,18 +124,18 @@ def sun(refresh=False):
|
|
|
120
124
|
return Sun.TIME
|
|
121
125
|
|
|
122
126
|
|
|
123
|
-
def setclock(year, month, mday, hour,
|
|
127
|
+
def setclock(year, month, mday, hour, minute, sec):
|
|
124
128
|
"""
|
|
125
129
|
Set Localtime + RTC Clock manually
|
|
126
130
|
:param year
|
|
127
131
|
:param month
|
|
128
132
|
:param mday
|
|
129
133
|
:param hour
|
|
130
|
-
:param
|
|
134
|
+
:param minute
|
|
131
135
|
:param sec
|
|
132
136
|
:return: localtime
|
|
133
137
|
"""
|
|
134
|
-
set_time(year, month, mday, hour,
|
|
138
|
+
set_time(year, month, mday, hour, minute, sec)
|
|
135
139
|
return localtime()
|
|
136
140
|
|
|
137
141
|
|
|
@@ -139,78 +143,109 @@ def rssi():
|
|
|
139
143
|
"""
|
|
140
144
|
Show Wifi RSSI - wifi strength
|
|
141
145
|
"""
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
146
|
+
if ifconfig()[0] == "STA":
|
|
147
|
+
value = WLAN(STA_IF).status('rssi')
|
|
148
|
+
if value > -67:
|
|
149
|
+
return {'Amazing': value}
|
|
150
|
+
if value > -70:
|
|
151
|
+
return {'VeryGood': value}
|
|
152
|
+
if value > -80:
|
|
153
|
+
return {'Okay': value}
|
|
154
|
+
if value > -90:
|
|
155
|
+
return {'NotGood': value}
|
|
156
|
+
return {'Unusable': value}
|
|
157
|
+
return {'Unavailable': -90}
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def list_stations():
|
|
161
|
+
"""
|
|
162
|
+
AccessPoint mode "router"
|
|
163
|
+
- list connected devices
|
|
164
|
+
"""
|
|
165
|
+
if ifconfig()[0] == "AP":
|
|
166
|
+
ap = WLAN(AP_IF)
|
|
167
|
+
stations = ap.status('stations')
|
|
168
|
+
connected_devices = []
|
|
169
|
+
for sta in stations:
|
|
170
|
+
mac_address, mac_rssi = '', ''
|
|
171
|
+
if len(sta) > 0:
|
|
172
|
+
mac_bytes = sta[0]
|
|
173
|
+
mac_address = hexlify(mac_bytes, ':').decode()
|
|
174
|
+
elif len(sta) > 1:
|
|
175
|
+
mac_rssi = sta(1)
|
|
176
|
+
connected_devices.append((mac_address, mac_rssi))
|
|
177
|
+
return connected_devices
|
|
178
|
+
return [("NoAP", '')]
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def pinmap(keys:str=None) -> dict:
|
|
156
182
|
"""
|
|
157
183
|
Get Logical pin by key runtime
|
|
158
|
-
:param
|
|
184
|
+
:param keys: logical pin name or names to resolve
|
|
185
|
+
example: 'builtin irq1 irq2 irq3 irq4'
|
|
159
186
|
:return dict: key map
|
|
160
187
|
"""
|
|
161
|
-
from microIO import
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
188
|
+
from microIO import pinmap_search, pinmap_info
|
|
189
|
+
if keys is None:
|
|
190
|
+
map = pinmap_info(show_all=True) # map, booked, custom, known_maps
|
|
191
|
+
return map
|
|
192
|
+
keys = keys.replace(',', '').split()
|
|
193
|
+
return pinmap_search(keys)
|
|
194
|
+
|
|
165
195
|
|
|
166
196
|
@socket_stream
|
|
167
|
-
def alarms(clean=False,
|
|
197
|
+
def alarms(clean=False, msgobj=None):
|
|
168
198
|
"""
|
|
169
199
|
Show micrOS alarms - system error list
|
|
170
200
|
:param clean bool: clean alarms, default: False
|
|
171
|
-
:param test bool: create test alarms, set True
|
|
172
201
|
:return dict: verdict
|
|
173
202
|
"""
|
|
174
|
-
from
|
|
175
|
-
if test:
|
|
176
|
-
errlog_add('[ERR] TeSt ErRoR')
|
|
203
|
+
from Logger import log_clean, syslog
|
|
177
204
|
if clean:
|
|
178
|
-
|
|
179
|
-
errcnt =
|
|
205
|
+
log_clean(msgobj=msgobj)
|
|
206
|
+
errcnt = -1 if syslog is None else syslog(msgobj=msgobj)
|
|
180
207
|
return {'NOK alarm': errcnt} if errcnt > 0 else {'OK alarm': errcnt}
|
|
181
208
|
|
|
182
209
|
|
|
183
|
-
def
|
|
210
|
+
def ifconfig():
|
|
184
211
|
"""
|
|
185
|
-
|
|
186
|
-
- logged data from LMs
|
|
212
|
+
Show network ifconfig
|
|
187
213
|
"""
|
|
188
|
-
|
|
189
|
-
dats = (f for f in listdir() if f.endswith('.dat'))
|
|
190
|
-
out = {}
|
|
191
|
-
for dat in dats:
|
|
192
|
-
with open(dat, 'r') as f:
|
|
193
|
-
out[dat] = f.read()
|
|
194
|
-
return out
|
|
214
|
+
return network_config()
|
|
195
215
|
|
|
196
216
|
|
|
197
|
-
def
|
|
217
|
+
def hosts():
|
|
198
218
|
"""
|
|
199
|
-
|
|
219
|
+
Dump cached hosts
|
|
220
|
+
- urequests (only memory cache)
|
|
221
|
+
- intercon connection cache
|
|
200
222
|
"""
|
|
201
|
-
from
|
|
202
|
-
|
|
223
|
+
from urequests import host_cache
|
|
224
|
+
from InterConnect import host_cache as ihost_cache
|
|
225
|
+
return {"urequests": host_cache(), "intercon": ihost_cache()}
|
|
203
226
|
|
|
204
227
|
|
|
205
|
-
def
|
|
228
|
+
def notifications(enable=None):
|
|
206
229
|
"""
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
230
|
+
Global notifications control for micrOS
|
|
231
|
+
:param enable: True: Enable notifications / False: Disable notifications
|
|
232
|
+
return: show state verdict and available notification handlers
|
|
210
233
|
"""
|
|
211
|
-
|
|
212
|
-
return host_cache()
|
|
234
|
+
return Notify.notifications(state=enable)
|
|
213
235
|
|
|
236
|
+
def notify(msg, *args, **kwargs):
|
|
237
|
+
"""
|
|
238
|
+
Send notification over registered notification handlers
|
|
239
|
+
:param msg: notification message
|
|
240
|
+
:param channels (optional): select communication interface(s) by class name
|
|
241
|
+
e.g. "Telegram", "MQTT" or an iterable of these.
|
|
242
|
+
If omitted or empty, sends over all available channels.
|
|
243
|
+
:param *: optional interface dependent options (topic, chat_id, etc...)
|
|
244
|
+
Control with:
|
|
245
|
+
system notifications enable=True
|
|
246
|
+
system notifications enable=False
|
|
247
|
+
"""
|
|
248
|
+
return Notify.notify(msg, *args, **kwargs)
|
|
214
249
|
|
|
215
250
|
#######################
|
|
216
251
|
# LM helper functions #
|
|
@@ -223,8 +258,10 @@ def help(widgets=False):
|
|
|
223
258
|
(widgets=False) list of functions implemented by this application
|
|
224
259
|
(widgets=True) list of widget json for UI generation
|
|
225
260
|
"""
|
|
226
|
-
return 'info', 'top', 'gclean', 'heartbeat', 'clock'
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
261
|
+
return resolve(('info', 'TEXTBOX top', 'gclean', 'heartbeat', 'clock',
|
|
262
|
+
'setclock year month mday hour minute sec',
|
|
263
|
+
'ntp', 'rssi', 'list_stations', 'pinmap key="builtin"', 'alarms clean=False',
|
|
264
|
+
'notifications enable=<None,True,False>',
|
|
265
|
+
'notify "msg" *',
|
|
266
|
+
'sun refresh=False', 'ifconfig', 'memory_usage',
|
|
267
|
+
'disk_usage', 'hosts'), widgets=widgets)
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"""
|
|
2
|
+
A MicroPython library for the TCS3472 light sensing chip
|
|
3
|
+
https://github.com/tti0/tcs3472-micropython
|
|
4
|
+
|
|
5
|
+
Copyright (c) 2021 tti0
|
|
6
|
+
Licensed under the MIT License
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from struct import unpack
|
|
10
|
+
from time import sleep
|
|
11
|
+
from machine import I2C, Pin, PWM
|
|
12
|
+
from microIO import bind_pin, pinmap_search
|
|
13
|
+
from Types import resolve
|
|
14
|
+
|
|
15
|
+
from LM_neopixel import load as neo_load, color as neo_color, toggle as neo_toggle # local neopixel light indicator
|
|
16
|
+
from LM_cluster import run as cluster_run # DEMO: neomatrix cluster
|
|
17
|
+
|
|
18
|
+
CURRENT_ANIMATION_INDEX = 0 # DEMO: neomatrix cluster animation
|
|
19
|
+
|
|
20
|
+
class TCS3472:
|
|
21
|
+
INSTANCE = None
|
|
22
|
+
|
|
23
|
+
def __init__(self, address=0x29, led_pin=None):
|
|
24
|
+
self._bus = I2C(sda=Pin(bind_pin('i2c_sda')), scl=Pin(bind_pin('i2c_scl')))
|
|
25
|
+
self._i2c_address = address
|
|
26
|
+
self._bus.writeto(self._i2c_address, b'\x80\x03')
|
|
27
|
+
self._bus.writeto(self._i2c_address, b'\x81\x2b')
|
|
28
|
+
self.led = PWM(Pin(bind_pin('led', led_pin), Pin.OUT), freq=20480)
|
|
29
|
+
self.led_brightness = 20
|
|
30
|
+
TCS3472.INSTANCE = self
|
|
31
|
+
|
|
32
|
+
def scaled(self, saturation=1.5):
|
|
33
|
+
"""
|
|
34
|
+
Normalize by strongest color, then adjust saturation.
|
|
35
|
+
saturation = 1.0 -> normal
|
|
36
|
+
saturation > 1.0 -> more vibrant
|
|
37
|
+
saturation < 1.0 -> more pastel
|
|
38
|
+
"""
|
|
39
|
+
_, r, g, b = self.raw()
|
|
40
|
+
m = max(r, g, b)
|
|
41
|
+
if m == 0:
|
|
42
|
+
return 0.0, 0.0, 0.0
|
|
43
|
+
|
|
44
|
+
# Normalize by strongest channel
|
|
45
|
+
r, g, b = r / m, g / m, b / m
|
|
46
|
+
|
|
47
|
+
# Grayscale = average of channels
|
|
48
|
+
gray = (r + g + b) / 3
|
|
49
|
+
|
|
50
|
+
# Interpolate between gray and color
|
|
51
|
+
r = gray + (r - gray) * saturation
|
|
52
|
+
g = gray + (g - gray) * saturation
|
|
53
|
+
b = gray + (b - gray) * saturation
|
|
54
|
+
|
|
55
|
+
# Clamp to 0..1
|
|
56
|
+
return max(0, min(1, r)), max(0, min(1, g)), max(0, min(1, b))
|
|
57
|
+
|
|
58
|
+
def rgb(self):
|
|
59
|
+
return tuple(int(x * 255) for x in self.scaled())
|
|
60
|
+
|
|
61
|
+
def light(self):
|
|
62
|
+
return self.raw()[0]
|
|
63
|
+
|
|
64
|
+
def brightness(self, level=65.535):
|
|
65
|
+
return int((self.light() / level))
|
|
66
|
+
|
|
67
|
+
def valid(self):
|
|
68
|
+
self._bus.writeto(self._i2c_address, b'\x93')
|
|
69
|
+
return self._bus.readfrom(self._i2c_address, 1)[0] & 1
|
|
70
|
+
|
|
71
|
+
def raw(self):
|
|
72
|
+
self._bus.writeto(self._i2c_address, b'\xb4')
|
|
73
|
+
return unpack("<HHHH", self._bus.readfrom(self._i2c_address, 8))
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
############################ Exposed functions ############################
|
|
77
|
+
|
|
78
|
+
def load(led_pin=20):
|
|
79
|
+
"""
|
|
80
|
+
Load the TCS3472 Color sensor instance.
|
|
81
|
+
"""
|
|
82
|
+
if TCS3472.INSTANCE is None:
|
|
83
|
+
TCS3472(led_pin=led_pin)
|
|
84
|
+
neo_load(ledcnt=1)
|
|
85
|
+
led(False)
|
|
86
|
+
return TCS3472.INSTANCE
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def pinmap():
|
|
90
|
+
"""
|
|
91
|
+
Show used pin mapping for this module.
|
|
92
|
+
"""
|
|
93
|
+
return pinmap_search(['i2c_scl', 'i2c_sda', 'led'])
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def measure():
|
|
97
|
+
"""
|
|
98
|
+
MEASURE sensor
|
|
99
|
+
"""
|
|
100
|
+
sensor = load()
|
|
101
|
+
measurement = {"rgb": sensor.rgb(), "light": sensor.light(), "brightness": sensor.brightness()}
|
|
102
|
+
return measurement
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def led(state:bool=None, br:int=None):
|
|
106
|
+
"""
|
|
107
|
+
SENSOR LED toggle
|
|
108
|
+
:param state: None-automatic, True-ON, False-OFF
|
|
109
|
+
:param br: brightness 0-100
|
|
110
|
+
"""
|
|
111
|
+
def _set_duty(_br):
|
|
112
|
+
_br = sensor.led_brightness if _br is None else _br
|
|
113
|
+
sensor.led.duty(int(_br * 10))
|
|
114
|
+
if _br != 0:
|
|
115
|
+
sensor.led_brightness = _br
|
|
116
|
+
|
|
117
|
+
sensor = load()
|
|
118
|
+
if state is None:
|
|
119
|
+
# INVERT STATE
|
|
120
|
+
led_current_state = sensor.led.duty() > 0
|
|
121
|
+
if led_current_state:
|
|
122
|
+
_set_duty(br)
|
|
123
|
+
_set_duty(0)
|
|
124
|
+
neo_toggle(False)
|
|
125
|
+
else:
|
|
126
|
+
_set_duty(br)
|
|
127
|
+
neo_toggle(True)
|
|
128
|
+
else:
|
|
129
|
+
# SET STATE: ON/OFF
|
|
130
|
+
if state:
|
|
131
|
+
_set_duty(br)
|
|
132
|
+
neo_toggle(True)
|
|
133
|
+
else:
|
|
134
|
+
_set_duty(br)
|
|
135
|
+
_set_duty(0)
|
|
136
|
+
neo_toggle(False)
|
|
137
|
+
return f"LED on, {sensor.led_brightness}%" if sensor.led.duty()>0 else f"LED off"
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def indicator(br=5):
|
|
141
|
+
"""
|
|
142
|
+
Color indicator Neopixel LED update
|
|
143
|
+
:param br: brightness 0-100
|
|
144
|
+
"""
|
|
145
|
+
r, g, b = measure()['rgb']
|
|
146
|
+
br = float(br / 100)
|
|
147
|
+
_r, _g, _b = int(r*br), int(g*br), int(b*br)
|
|
148
|
+
neo_color(_r, _g, _b, smooth=False)
|
|
149
|
+
return r, g, b
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def neomatrix_update():
|
|
153
|
+
"""
|
|
154
|
+
DEMO - Send color codes for all neomatrix devices over espnow cluster
|
|
155
|
+
"""
|
|
156
|
+
r, g, b = indicator()
|
|
157
|
+
command = f"neomatrix color_fill {r} {g} {b}"
|
|
158
|
+
cluster_run(command)
|
|
159
|
+
return {"cmd": command, "cluster": "task show con.espnow.*"}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def neomatrix_animation():
|
|
163
|
+
"""
|
|
164
|
+
DEMO - Set random animation on neomatrix espnow cluster
|
|
165
|
+
"""
|
|
166
|
+
global CURRENT_ANIMATION_INDEX
|
|
167
|
+
animations = ('spiral', 'snake', 'noise')
|
|
168
|
+
|
|
169
|
+
next_animation = CURRENT_ANIMATION_INDEX + 1
|
|
170
|
+
CURRENT_ANIMATION_INDEX = 0 if next_animation >= len(animations) else next_animation
|
|
171
|
+
command = f"neomatrix {animations[CURRENT_ANIMATION_INDEX]}"
|
|
172
|
+
cluster_run(command)
|
|
173
|
+
return {"cmd": command, "cluster": "task show con.espnow.*"}
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def help(widgets=False):
|
|
177
|
+
"""
|
|
178
|
+
TCS3472 Color sensor
|
|
179
|
+
"""
|
|
180
|
+
return resolve(('load led_pin=20',
|
|
181
|
+
'TEXTBOX measure',
|
|
182
|
+
'BUTTON led state=<True,False>',
|
|
183
|
+
'SLIDER led state=True br=<0-100-5>',
|
|
184
|
+
'indicator br=<0-100>',
|
|
185
|
+
'BUTTON neomatrix_update',
|
|
186
|
+
'BUTTON neomatrix_animation',
|
|
187
|
+
'pinmap'), widgets=widgets)
|