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.
Files changed (400) hide show
  1. env/driver_cp210x/.DS_Store +0 -0
  2. env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
  3. env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +17 -1
  4. micrOS/micropython/esp32-20251209-v1.27.0.bin +0 -0
  5. micrOS/micropython/esp32c3-20251209-v1.27.0.bin +0 -0
  6. micrOS/micropython/esp32c6-20251209-v1.27.0.bin +0 -0
  7. micrOS/micropython/esp32s2-20251209-v1.27.0.bin +0 -0
  8. micrOS/micropython/esp32s2-LOLIN_MINI-20251209-v1.27.0.bin +0 -0
  9. micrOS/micropython/esp32s3-4MBflash-20241129-v1.24.1.bin +0 -0
  10. micrOS/micropython/esp32s3-8MBflash-20251209-v1.27.0.bin +0 -0
  11. micrOS/micropython/esp32s3_spiram_oct-20251209-v1.27.0.bin +0 -0
  12. micrOS/micropython/rpi-pico-w-20251209-v1.27.0.uf2 +0 -0
  13. micrOS/micropython/tinypico-20251209-v1.27.0.bin +0 -0
  14. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +191 -151
  15. micrOS/source/Auth.py +37 -0
  16. micrOS/source/Common.py +376 -102
  17. micrOS/source/Config.py +55 -25
  18. micrOS/source/Debug.py +54 -193
  19. micrOS/source/Espnow.py +404 -0
  20. micrOS/source/Files.py +207 -0
  21. micrOS/source/Hooks.py +88 -16
  22. micrOS/source/InterConnect.py +130 -46
  23. micrOS/source/Interrupts.py +8 -8
  24. micrOS/source/Logger.py +131 -0
  25. micrOS/source/Network.py +41 -21
  26. micrOS/source/Notify.py +74 -198
  27. micrOS/source/Pacman.py +326 -0
  28. micrOS/source/Scheduler.py +18 -55
  29. micrOS/source/Server.py +84 -217
  30. micrOS/source/Shell.py +103 -93
  31. micrOS/source/Tasks.py +239 -173
  32. micrOS/source/Time.py +21 -22
  33. micrOS/source/Types.py +89 -54
  34. micrOS/source/Web.py +485 -0
  35. micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  36. micrOS/source/__pycache__/Debug.cpython-312.pyc +0 -0
  37. micrOS/source/__pycache__/Files.cpython-312.pyc +0 -0
  38. micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  39. micrOS/source/__pycache__/Scheduler.cpython-312.pyc +0 -0
  40. micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
  41. micrOS/source/__pycache__/Shell.cpython-312.pyc +0 -0
  42. micrOS/source/__pycache__/replhelper.cpython-312.pyc +0 -0
  43. micrOS/source/helpers.py +132 -0
  44. micrOS/source/micrOS.py +25 -21
  45. micrOS/source/micrOSloader.py +14 -23
  46. micrOS/source/microIO.py +94 -57
  47. toolkit/simulator_lib/LP_darwin.py → micrOS/source/modules/IO_esp32.py +22 -11
  48. micrOS/source/{IO_esp32c3.py → modules/IO_esp32c3.py} +6 -1
  49. micrOS/source/modules/IO_esp32c6.py +38 -0
  50. micrOS/source/{IO_esp32s2.py → modules/IO_esp32s2.py} +6 -1
  51. micrOS/source/{IO_esp32s3.py → modules/IO_esp32s3.py} +43 -2
  52. micrOS/source/modules/IO_m5stamp.py +86 -0
  53. micrOS/source/{IO_qtpy.py → modules/IO_qtpy.py} +28 -18
  54. micrOS/source/{IO_tinypico.py → modules/IO_tinypico.py} +48 -3
  55. micrOS/source/modules/LM_L298N.py +161 -0
  56. {toolkit/workspace/precompiled → micrOS/source/modules}/LM_L9110_DCmotor.py +4 -4
  57. micrOS/source/{LM_OV2640.py → modules/LM_OV2640.py} +53 -42
  58. micrOS/source/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
  59. micrOS/source/{LM_aht10.py → modules/LM_aht10.py} +12 -4
  60. micrOS/source/{LM_bme280.py → modules/LM_bme280.py} +13 -25
  61. micrOS/source/{LM_buzzer.py → modules/LM_buzzer.py} +42 -40
  62. micrOS/source/{LM_cct.py → modules/LM_cct.py} +22 -27
  63. micrOS/source/modules/LM_cluster.py +255 -0
  64. micrOS/source/{LM_co2.py → modules/LM_co2.py} +13 -6
  65. micrOS/source/{LM_dht11.py → modules/LM_dht11.py} +13 -29
  66. micrOS/source/{LM_dht22.py → modules/LM_dht22.py} +13 -28
  67. micrOS/source/{LM_dimmer.py → modules/LM_dimmer.py} +19 -16
  68. micrOS/source/modules/LM_distance.py +135 -0
  69. micrOS/source/{LM_ds18.py → modules/LM_ds18.py} +12 -4
  70. micrOS/source/{LM_esp32.py → modules/LM_esp32.py} +16 -4
  71. micrOS/source/modules/LM_espnow.py +53 -0
  72. micrOS/source/modules/LM_fileserver.py +265 -0
  73. micrOS/source/{LM_gameOfLife.py → modules/LM_gameOfLife.py} +5 -5
  74. micrOS/source/{LM_genIO.py → modules/LM_genIO.py} +49 -35
  75. micrOS/source/modules/LM_haptic.py +111 -0
  76. micrOS/source/modules/LM_i2c.py +61 -0
  77. micrOS/source/{LM_i2s_mic.py → modules/LM_i2s_mic.py} +20 -23
  78. micrOS/source/{LM_ld2410.py → modules/LM_ld2410.py} +3 -3
  79. micrOS/source/{LM_light_sensor.py → modules/LM_light_sensor.py} +22 -26
  80. micrOS/source/modules/LM_mh_z19c.py +198 -0
  81. micrOS/source/modules/LM_neoeffects.py +284 -0
  82. micrOS/source/{LM_neopixel.py → modules/LM_neopixel.py} +26 -31
  83. micrOS/source/{LM_oled.py → modules/LM_oled.py} +28 -20
  84. micrOS/source/{LM_oled_sh1106.py → modules/LM_oled_sh1106.py} +28 -24
  85. micrOS/source/{LM_oled_ui.py → modules/LM_oled_ui.py} +132 -174
  86. micrOS/source/modules/LM_pacman.py +320 -0
  87. micrOS/source/{LM_presence.py → modules/LM_presence.py} +24 -36
  88. micrOS/source/modules/LM_qmi8658.py +204 -0
  89. micrOS/source/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
  90. micrOS/source/modules/LM_rest.py +81 -0
  91. micrOS/source/{LM_rgb.py → modules/LM_rgb.py} +25 -34
  92. micrOS/source/{LM_rgbcct.py → modules/LM_rgbcct.py} +5 -5
  93. micrOS/source/{LM_roboarm.py → modules/LM_roboarm.py} +37 -45
  94. micrOS/source/modules/LM_robustness.py +137 -0
  95. micrOS/source/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
  96. micrOS/source/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
  97. micrOS/source/{LM_servo.py → modules/LM_servo.py} +4 -4
  98. micrOS/source/modules/LM_sound_event.py +751 -0
  99. micrOS/source/{LM_stepper.py → modules/LM_stepper.py} +8 -8
  100. micrOS/source/{LM_switch.py → modules/LM_switch.py} +21 -18
  101. micrOS/source/{LM_system.py → modules/LM_system.py} +96 -59
  102. micrOS/source/modules/LM_tcs3472.py +187 -0
  103. micrOS/source/modules/LM_telegram.py +388 -0
  104. micrOS/source/modules/LM_trackball.py +287 -0
  105. micrOS/source/modules/LM_veml7700.py +159 -0
  106. micrOS/source/modules/LM_web.py +38 -0
  107. micrOS/source/urequests.py +204 -91
  108. {toolkit/workspace/precompiled → micrOS/source/web}/dashboard.html +9 -4
  109. micrOS/source/web/editor.js +440 -0
  110. micrOS/source/web/filesui.html +178 -0
  111. micrOS/source/web/filesui.js +338 -0
  112. micrOS/source/{index.html → web/index.html} +44 -2
  113. micrOS/source/web/uapi.js +103 -0
  114. micrOS/source/web/udashboard.js +129 -0
  115. micrOS/source/web/ustyle.css +55 -0
  116. micrOS/source/web/uwidgets.js +172 -0
  117. micrOS/source/web/uwidgets_pro.js +99 -0
  118. micrOS/utests/__init__.py +0 -0
  119. micrOS/utests/test_scheduler.py +435 -0
  120. {micrOSDevToolKit-2.1.5.data → microsdevtoolkit-2.26.1.data}/scripts/devToolKit.py +47 -4
  121. {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/METADATA +392 -279
  122. microsdevtoolkit-2.26.1.dist-info/RECORD +396 -0
  123. {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/WHEEL +1 -1
  124. toolkit/DevEnvCompile.py +63 -33
  125. toolkit/DevEnvOTA.py +72 -22
  126. toolkit/DevEnvUSB.py +147 -77
  127. toolkit/Gateway.py +9 -9
  128. toolkit/LM_to_compile.dat +12 -4
  129. toolkit/MicrOSDevEnv.py +129 -51
  130. toolkit/WebRepl.py +73 -0
  131. toolkit/dashboard_apps/BackupRestore.py +171 -0
  132. toolkit/dashboard_apps/CCTDemo.py +12 -17
  133. toolkit/dashboard_apps/CCTTest.py +20 -24
  134. toolkit/dashboard_apps/CamStream.py +2 -6
  135. toolkit/dashboard_apps/CatGame.py +14 -16
  136. toolkit/dashboard_apps/Dimmer.py +11 -21
  137. toolkit/dashboard_apps/GetVersion.py +11 -19
  138. toolkit/dashboard_apps/MicrophoneTest.py +2 -7
  139. toolkit/dashboard_apps/NeoEffectsDemo.py +22 -35
  140. toolkit/dashboard_apps/NeopixelTest.py +20 -25
  141. toolkit/dashboard_apps/PresenceTest.py +2 -8
  142. toolkit/dashboard_apps/QMI8685_GYRO.py +68 -0
  143. toolkit/dashboard_apps/RGBTest.py +20 -24
  144. toolkit/dashboard_apps/RoboArm.py +24 -32
  145. toolkit/dashboard_apps/SED_test.py +10 -14
  146. toolkit/dashboard_apps/SensorsTest.py +61 -0
  147. toolkit/dashboard_apps/SystemTest.py +219 -117
  148. toolkit/dashboard_apps/Template_app.py +12 -19
  149. toolkit/dashboard_apps/_app_base.py +34 -0
  150. toolkit/dashboard_apps/_gyro_visualizer.py +78 -0
  151. toolkit/dashboard_apps/uLightDemo.py +15 -24
  152. toolkit/index.html +6 -5
  153. toolkit/lib/LocalMachine.py +6 -1
  154. toolkit/lib/MicrosFiles.py +46 -0
  155. toolkit/lib/Repository.py +64 -0
  156. toolkit/lib/TerminalColors.py +4 -0
  157. toolkit/lib/macroScript.py +371 -0
  158. toolkit/lib/micrOSClient.py +124 -51
  159. toolkit/lib/micrOSClientHistory.py +156 -0
  160. toolkit/lib/pip_package_installer.py +31 -4
  161. toolkit/micrOSdashboard.py +16 -21
  162. toolkit/micrOSlint.py +28 -10
  163. toolkit/simulator_lib/.DS_Store +0 -0
  164. micrOS/source/IO_esp32.py → toolkit/simulator_lib/IO_darwin.py +3 -0
  165. toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
  166. toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
  167. toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc +0 -0
  168. toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
  169. toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
  170. toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
  171. toolkit/simulator_lib/__pycache__/mip.cpython-312.pyc +0 -0
  172. toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
  173. toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
  174. toolkit/simulator_lib/__pycache__/sim_common.cpython-312.pyc +0 -0
  175. toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
  176. toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
  177. toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
  178. toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
  179. toolkit/simulator_lib/__pycache__/urandom.cpython-312.pyc +0 -0
  180. toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
  181. toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
  182. toolkit/simulator_lib/aioespnow.py +28 -0
  183. toolkit/simulator_lib/camera.py +84 -0
  184. toolkit/simulator_lib/dht.py +1 -1
  185. toolkit/simulator_lib/framebuf.py +49 -1
  186. toolkit/simulator_lib/machine.py +32 -2
  187. toolkit/simulator_lib/micropython.py +3 -3
  188. toolkit/simulator_lib/mip.py +165 -0
  189. toolkit/simulator_lib/neopixel.py +3 -2
  190. toolkit/simulator_lib/network.py +2 -1
  191. toolkit/simulator_lib/node_config.json +2 -3
  192. toolkit/simulator_lib/ntptime.py +1 -1
  193. toolkit/simulator_lib/{sim_console.py → sim_common.py} +2 -3
  194. toolkit/simulator_lib/simgc.py +6 -2
  195. toolkit/simulator_lib/simulator.py +138 -46
  196. toolkit/simulator_lib/uasyncio.py +34 -3
  197. toolkit/simulator_lib/uos.py +147 -0
  198. toolkit/simulator_lib/urandom.py +4 -0
  199. toolkit/simulator_lib/usocket.py +5 -1
  200. toolkit/simulator_lib/view01.jpg +0 -0
  201. toolkit/simulator_lib/view02.jpg +0 -0
  202. toolkit/socketClient.py +43 -23
  203. toolkit/user_data/webhooks/generic.py +1 -1
  204. toolkit/user_data/webhooks/macro.py +44 -0
  205. toolkit/user_data/webhooks/template.macro +20 -0
  206. toolkit/user_data/webhooks/template.py +1 -1
  207. toolkit/workspace/precompiled/Auth.mpy +0 -0
  208. toolkit/workspace/precompiled/Common.mpy +0 -0
  209. toolkit/workspace/precompiled/Config.mpy +0 -0
  210. toolkit/workspace/precompiled/Debug.mpy +0 -0
  211. toolkit/workspace/precompiled/Espnow.mpy +0 -0
  212. toolkit/workspace/precompiled/Files.mpy +0 -0
  213. toolkit/workspace/precompiled/Hooks.mpy +0 -0
  214. toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  215. toolkit/workspace/precompiled/Interrupts.mpy +0 -0
  216. toolkit/workspace/precompiled/Logger.mpy +0 -0
  217. toolkit/workspace/precompiled/Network.mpy +0 -0
  218. toolkit/workspace/precompiled/Notify.mpy +0 -0
  219. toolkit/workspace/precompiled/Pacman.mpy +0 -0
  220. toolkit/workspace/precompiled/Scheduler.mpy +0 -0
  221. toolkit/workspace/precompiled/Server.mpy +0 -0
  222. toolkit/workspace/precompiled/Shell.mpy +0 -0
  223. toolkit/workspace/precompiled/Tasks.mpy +0 -0
  224. toolkit/workspace/precompiled/Time.mpy +0 -0
  225. toolkit/workspace/precompiled/Types.mpy +0 -0
  226. toolkit/workspace/precompiled/Web.mpy +0 -0
  227. toolkit/workspace/precompiled/_mpy.version +1 -1
  228. toolkit/workspace/precompiled/config/_git.keep +0 -0
  229. toolkit/workspace/precompiled/helpers.mpy +0 -0
  230. toolkit/workspace/precompiled/micrOS.mpy +0 -0
  231. toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  232. toolkit/workspace/precompiled/microIO.mpy +0 -0
  233. toolkit/workspace/precompiled/modules/IO_esp32.mpy +0 -0
  234. toolkit/workspace/precompiled/modules/IO_esp32c3.mpy +0 -0
  235. toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
  236. toolkit/workspace/precompiled/modules/IO_esp32s2.mpy +0 -0
  237. toolkit/workspace/precompiled/modules/IO_esp32s3.mpy +0 -0
  238. toolkit/workspace/precompiled/modules/IO_m5stamp.mpy +0 -0
  239. toolkit/workspace/precompiled/modules/IO_qtpy.mpy +0 -0
  240. toolkit/workspace/precompiled/modules/IO_rp2.mpy +0 -0
  241. toolkit/workspace/precompiled/modules/IO_tinypico.mpy +0 -0
  242. toolkit/workspace/precompiled/modules/LM_L298N.mpy +0 -0
  243. {micrOS/source → toolkit/workspace/precompiled/modules}/LM_L9110_DCmotor.py +4 -4
  244. toolkit/workspace/precompiled/modules/LM_OV2640.mpy +0 -0
  245. toolkit/workspace/precompiled/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
  246. toolkit/workspace/precompiled/modules/LM_aht10.mpy +0 -0
  247. toolkit/workspace/precompiled/modules/LM_bme280.mpy +0 -0
  248. toolkit/workspace/precompiled/{LM_buzzer.mpy → modules/LM_buzzer.mpy} +0 -0
  249. toolkit/workspace/precompiled/modules/LM_cct.mpy +0 -0
  250. toolkit/workspace/precompiled/modules/LM_cluster.mpy +0 -0
  251. toolkit/workspace/precompiled/modules/LM_co2.mpy +0 -0
  252. toolkit/workspace/precompiled/modules/LM_dht11.mpy +0 -0
  253. toolkit/workspace/precompiled/modules/LM_dht22.mpy +0 -0
  254. toolkit/workspace/precompiled/modules/LM_dimmer.mpy +0 -0
  255. toolkit/workspace/precompiled/modules/LM_distance.mpy +0 -0
  256. toolkit/workspace/precompiled/modules/LM_ds18.mpy +0 -0
  257. toolkit/workspace/precompiled/{LM_esp32.py → modules/LM_esp32.py} +16 -4
  258. toolkit/workspace/precompiled/modules/LM_espnow.py +53 -0
  259. toolkit/workspace/precompiled/modules/LM_fileserver.mpy +0 -0
  260. toolkit/workspace/precompiled/{LM_gameOfLife.mpy → modules/LM_gameOfLife.mpy} +0 -0
  261. toolkit/workspace/precompiled/modules/LM_genIO.mpy +0 -0
  262. toolkit/workspace/precompiled/modules/LM_haptic.mpy +0 -0
  263. toolkit/workspace/precompiled/modules/LM_i2c.py +61 -0
  264. toolkit/workspace/precompiled/modules/LM_i2s_mic.mpy +0 -0
  265. toolkit/workspace/precompiled/{LM_ld2410.mpy → modules/LM_ld2410.mpy} +0 -0
  266. toolkit/workspace/precompiled/modules/LM_light_sensor.mpy +0 -0
  267. toolkit/workspace/precompiled/modules/LM_mh_z19c.py +198 -0
  268. toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
  269. toolkit/workspace/precompiled/modules/LM_neopixel.mpy +0 -0
  270. toolkit/workspace/precompiled/modules/LM_oled.mpy +0 -0
  271. toolkit/workspace/precompiled/modules/LM_oled_sh1106.mpy +0 -0
  272. toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
  273. toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
  274. toolkit/workspace/precompiled/modules/LM_presence.mpy +0 -0
  275. toolkit/workspace/precompiled/modules/LM_qmi8658.py +204 -0
  276. toolkit/workspace/precompiled/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
  277. toolkit/workspace/precompiled/modules/LM_rest.mpy +0 -0
  278. toolkit/workspace/precompiled/modules/LM_rgb.mpy +0 -0
  279. toolkit/workspace/precompiled/{LM_rgbcct.mpy → modules/LM_rgbcct.mpy} +0 -0
  280. toolkit/workspace/precompiled/modules/LM_roboarm.mpy +0 -0
  281. toolkit/workspace/precompiled/modules/LM_robustness.py +137 -0
  282. toolkit/workspace/precompiled/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
  283. toolkit/workspace/precompiled/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
  284. toolkit/workspace/precompiled/{LM_servo.mpy → modules/LM_servo.mpy} +0 -0
  285. toolkit/workspace/precompiled/modules/LM_sound_event.mpy +0 -0
  286. toolkit/workspace/precompiled/{LM_stepper.mpy → modules/LM_stepper.mpy} +0 -0
  287. toolkit/workspace/precompiled/modules/LM_switch.mpy +0 -0
  288. toolkit/workspace/precompiled/modules/LM_system.mpy +0 -0
  289. toolkit/workspace/precompiled/modules/LM_tcs3472.py +187 -0
  290. toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
  291. toolkit/workspace/precompiled/{LM_tinyrgb.mpy → modules/LM_tinyrgb.mpy} +0 -0
  292. toolkit/workspace/precompiled/modules/LM_trackball.mpy +0 -0
  293. toolkit/workspace/precompiled/modules/LM_veml7700.mpy +0 -0
  294. toolkit/workspace/precompiled/modules/LM_web.mpy +0 -0
  295. toolkit/workspace/precompiled/urequests.mpy +0 -0
  296. {micrOS/source → toolkit/workspace/precompiled/web}/dashboard.html +9 -4
  297. toolkit/workspace/precompiled/web/editor.js +440 -0
  298. toolkit/workspace/precompiled/web/filesui.html +178 -0
  299. toolkit/workspace/precompiled/web/filesui.js +338 -0
  300. toolkit/workspace/precompiled/{index.html → web/index.html} +44 -2
  301. toolkit/workspace/precompiled/web/uapi.js +103 -0
  302. toolkit/workspace/precompiled/web/udashboard.js +129 -0
  303. toolkit/workspace/precompiled/web/ustyle.css +55 -0
  304. toolkit/workspace/precompiled/web/uwidgets.js +172 -0
  305. toolkit/workspace/precompiled/web/uwidgets_pro.js +99 -0
  306. env/driver_cp210x/CH34XSER_MAC/CH34X_DRV_INSTALL_INSTRUCTIONS.pdf +0 -0
  307. env/driver_cp210x/CH34XSER_MAC/CH34xVCPDriver.pkg +0 -0
  308. micrOS/micropython/esp32-20231005-v1.21.0.bin +0 -0
  309. micrOS/micropython/esp32c3-GENERIC-20240105-v1.22.1.bin +0 -0
  310. micrOS/micropython/esp32c3-GENERIC-20240222-v1.22.2.bin +0 -0
  311. micrOS/micropython/esp32s2-GENERIC-20240105-v1.22.1.bin +0 -0
  312. micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
  313. micrOS/micropython/esp32s3-GENERIC-20240105-v1.22.1.bin +0 -0
  314. micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
  315. micrOS/micropython/rpi-pico-w-20231005-v1.21.0.uf2 +0 -0
  316. micrOS/micropython/tinypico-20231005-v1.21.0.bin +0 -0
  317. micrOS/micropython/tinypico-usbc-UM-20240105-v1.22.1.bin +0 -0
  318. micrOS/source/LM_L298N_DCmotor.py +0 -86
  319. micrOS/source/LM_catgame.py +0 -74
  320. micrOS/source/LM_dashboard_be.py +0 -37
  321. micrOS/source/LM_demo.py +0 -85
  322. micrOS/source/LM_distance.py +0 -88
  323. micrOS/source/LM_i2c.py +0 -44
  324. micrOS/source/LM_intercon.py +0 -57
  325. micrOS/source/LM_keychain.py +0 -318
  326. micrOS/source/LM_lmpacman.py +0 -126
  327. micrOS/source/LM_neoeffects.py +0 -327
  328. micrOS/source/LM_pet_feeder.py +0 -76
  329. micrOS/source/LM_ph_sensor.py +0 -51
  330. micrOS/source/LM_rest.py +0 -40
  331. micrOS/source/LM_robustness.py +0 -73
  332. micrOS/source/LM_telegram.py +0 -96
  333. micrOS/source/reset.py +0 -11
  334. micrOS/source/uapi.js +0 -76
  335. micrOS/source/udashboard.js +0 -137
  336. micrOS/source/ustyle.css +0 -28
  337. micrOS/source/uwidgets.js +0 -179
  338. micrOSDevToolKit-2.1.5.dist-info/RECORD +0 -337
  339. toolkit/dashboard_apps/AirQualityBME280.py +0 -36
  340. toolkit/dashboard_apps/AirQualityDHT22_CO2.py +0 -36
  341. toolkit/lib/file_extensions.py +0 -16
  342. toolkit/simulator_lib/__pycache__/LP_darwin.cpython-312.pyc +0 -0
  343. toolkit/simulator_lib/__pycache__/LP_darwin.cpython-38.pyc +0 -0
  344. toolkit/simulator_lib/__pycache__/LP_darwin.cpython-39.pyc +0 -0
  345. toolkit/simulator_lib/__pycache__/sim_console.cpython-312.pyc +0 -0
  346. toolkit/simulator_lib/__pycache__/sim_console.cpython-38.pyc +0 -0
  347. toolkit/simulator_lib/__pycache__/sim_console.cpython-39.pyc +0 -0
  348. toolkit/workspace/precompiled/IO_esp32.mpy +0 -0
  349. toolkit/workspace/precompiled/IO_esp32c3.mpy +0 -0
  350. toolkit/workspace/precompiled/IO_esp32s2.mpy +0 -0
  351. toolkit/workspace/precompiled/IO_esp32s3.mpy +0 -0
  352. toolkit/workspace/precompiled/IO_qtpy.mpy +0 -0
  353. toolkit/workspace/precompiled/IO_rp2.mpy +0 -0
  354. toolkit/workspace/precompiled/IO_tinypico.mpy +0 -0
  355. toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy +0 -0
  356. toolkit/workspace/precompiled/LM_OV2640.mpy +0 -0
  357. toolkit/workspace/precompiled/LM_aht10.mpy +0 -0
  358. toolkit/workspace/precompiled/LM_bme280.mpy +0 -0
  359. toolkit/workspace/precompiled/LM_catgame.py +0 -74
  360. toolkit/workspace/precompiled/LM_cct.mpy +0 -0
  361. toolkit/workspace/precompiled/LM_co2.mpy +0 -0
  362. toolkit/workspace/precompiled/LM_dashboard_be.py +0 -37
  363. toolkit/workspace/precompiled/LM_demo.py +0 -85
  364. toolkit/workspace/precompiled/LM_dht11.mpy +0 -0
  365. toolkit/workspace/precompiled/LM_dht22.mpy +0 -0
  366. toolkit/workspace/precompiled/LM_dimmer.mpy +0 -0
  367. toolkit/workspace/precompiled/LM_distance.py +0 -88
  368. toolkit/workspace/precompiled/LM_ds18.mpy +0 -0
  369. toolkit/workspace/precompiled/LM_genIO.mpy +0 -0
  370. toolkit/workspace/precompiled/LM_i2c.py +0 -44
  371. toolkit/workspace/precompiled/LM_i2s_mic.mpy +0 -0
  372. toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
  373. toolkit/workspace/precompiled/LM_keychain.mpy +0 -0
  374. toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
  375. toolkit/workspace/precompiled/LM_lmpacman.mpy +0 -0
  376. toolkit/workspace/precompiled/LM_neoeffects.mpy +0 -0
  377. toolkit/workspace/precompiled/LM_neopixel.mpy +0 -0
  378. toolkit/workspace/precompiled/LM_oled.mpy +0 -0
  379. toolkit/workspace/precompiled/LM_oled_sh1106.mpy +0 -0
  380. toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
  381. toolkit/workspace/precompiled/LM_pet_feeder.py +0 -76
  382. toolkit/workspace/precompiled/LM_ph_sensor.py +0 -51
  383. toolkit/workspace/precompiled/LM_presence.mpy +0 -0
  384. toolkit/workspace/precompiled/LM_rest.mpy +0 -0
  385. toolkit/workspace/precompiled/LM_rgb.mpy +0 -0
  386. toolkit/workspace/precompiled/LM_roboarm.mpy +0 -0
  387. toolkit/workspace/precompiled/LM_robustness.py +0 -73
  388. toolkit/workspace/precompiled/LM_switch.mpy +0 -0
  389. toolkit/workspace/precompiled/LM_system.mpy +0 -0
  390. toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
  391. toolkit/workspace/precompiled/reset.mpy +0 -0
  392. toolkit/workspace/precompiled/uapi.js +0 -76
  393. toolkit/workspace/precompiled/udashboard.js +0 -137
  394. toolkit/workspace/precompiled/ustyle.css +0 -28
  395. toolkit/workspace/precompiled/uwidgets.js +0 -179
  396. /toolkit/user_data/node_config_archive/.include → /micrOS/source/config/_git.keep +0 -0
  397. /micrOS/source/{IO_rp2.py → modules/IO_rp2.py} +0 -0
  398. /micrOS/source/{LM_tinyrgb.py → modules/LM_tinyrgb.py} +0 -0
  399. {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info/licenses}/LICENSE +0 -0
  400. {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
+
@@ -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'
@@ -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'
@@ -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'
@@ -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'