├── .github └── workflows │ ├── render-registry.yml │ └── validate-yaml.yml ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── description.md ├── micropython-lib.yaml ├── package-list.yaml ├── registry-renderer ├── index.js ├── package-lock.json └── package.json ├── schema.yml ├── tools ├── create-index.mjs ├── find-broken-packages.mjs ├── find-license.mjs ├── package-lock.json └── package.json └── yamllint-config.yml /.github/workflows/render-registry.yml: -------------------------------------------------------------------------------- 1 | name: Render Registry 2 | on: 3 | push: 4 | branches: 5 | - main 6 | jobs: 7 | render: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v3 11 | with: 12 | fetch-depth: 0 13 | ref: ${{ github.event.pull_request.head.ref }} 14 | - uses: actions/setup-node@v2 15 | with: 16 | node-version: 14 17 | cache: "npm" 18 | cache-dependency-path: "**/package-lock.json" 19 | - name: Install dependencies 20 | run: cd registry-renderer; npm i 21 | - name: Render list 22 | run: node ./registry-renderer/index.js 23 | - name: Commit list 24 | run: | 25 | git --no-pager branch 26 | git config --global user.name 'Arduino' 27 | git config --global user.email 'ft.content@arduino.cc' 28 | git commit -am "Automated rendering of registry" || true 29 | git push -------------------------------------------------------------------------------- /.github/workflows/validate-yaml.yml: -------------------------------------------------------------------------------- 1 | name: 'YAML Validation' 2 | on: 3 | - pull_request 4 | jobs: 5 | validate: 6 | name: 'Validate YAML' 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: 'Checkout' 10 | uses: actions/checkout@master 11 | - name: 'Run Yamllint' 12 | uses: karancode/yamllint-github-action@master 13 | with: 14 | yamllint_file_or_dir: 'package-list.yaml' 15 | yamllint_strict: false 16 | yamllint_comment: true 17 | yamllint_config_filepath: 'yamllint-config.yml' 18 | env: 19 | GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }} 20 | - name: 'Schema Validation' 21 | run: | 22 | npm i -g yaml-schema-validator 23 | schema validate -e -f package-list.yaml -s schema.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules/** 2 | .DS_Store 3 | build/** 4 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Arduino MicroPython Package Index 2 | ​ 3 | ## Adding a package to the MicroPython Package Index 4 | ​ 5 | If you would like to make a package available for installation via the MicroPython Package Index, just submit a 6 | [pull request](https://docs.github.com/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests) 7 | that adds the repository URL to [the list](package-list.yaml). You are welcome to add multiple packages at once. 8 | ​ 9 | See below for detailed instructions on how to do this via the GitHub web interface. 10 | ​ 11 | ### Instructions 12 | ​ 13 | 1. Open this link to fork this repository and edit the list via the 14 | GitHub web interface: https://github.com/arduino/package-index-py/edit/main/package-list.yaml 15 | 1. Click the Fork this repository button. 16 | 1. Add the an [aptly formatted](#package-entry-example) section at the bottom of `package-list.yaml`. 17 | 1. Check that indentation follows the previous sections. 18 | 1. Click the Commit changes button. 19 | 1. In the **"Comparing changes"** window that opens, click the Create pull request button. 20 | 1. Add a meaningful title. 21 | 1. Fill in the description which will be used for review. 22 | 1. Click the Create pull request button. 23 | ​ 24 | ​ 25 | ### Package entry example 26 | ```yaml 27 | - name: Arduino Modulino 28 | url: https://github.com/arduino/arduino-modulino-mpy 29 | author: Arduino 30 | description: A MicroPython library to control Arduino Modulinos. 31 | docs: https://github.com/arduino/arduino-modulino-mpy/blob/main/docs/api.md 32 | tags: ["sensors", "actuators"] 33 | license: Mozilla Public License Version 2.0 34 | ``` 35 | ​ 36 | ​ 37 | Your entry will be automatically checked for correct formatting as soon as the pull request is submitted. If no problems were found, the pull request will be reviewed as quickly as possible. 38 | Please allow for a bit of time on our end since this process is currently manual. 39 | ​ 40 | If there are any formatting errors, they will be reported in the Pull Request thread. 41 | Please check your entry if this is the case. 42 | ​ 43 | ​ 44 | ## Changing the URL of a package already in MicroPython Package Index 45 | ​ 46 | Submit a pull request that changes the URL as desired in [package-list.yaml](package-list.yaml). This can be done by 47 | following [the instructions above](#instructions). 48 | ​ 49 | Since this type of request must be reviewed by a human maintainer, please write an explanation in the pull request 50 | description, making it clear that the URL is intentionally being changed. 51 | ​ 52 | ## Removing a package from MicroPython Package Index 53 | ​ 54 | Submit a pull request that removes the URL from [package-list.yaml](package-list.yaml). This can be done by following 55 | [the instructions above](#instructions). 56 | ​ 57 | Since this type of request must be reviewed by a human maintainer, please write an explanation in the pull request 58 | description, making it clear that the URL is intentionally being removed or changed. 59 | ​ 60 | ## Report a problem with MicroPython Package Index 61 | ​ 62 | This repository is not an appropriate place to request support or report problems with a package. Check the package's 63 | own documentation for instructions. 64 | ​ 65 | If the problem is about something else, please submit an issue report [here](https://github.com/arduino/package-index-py/issues/new). 66 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🐍 MicroPython Package Index 2 | 3 | A list of useful MicroPython packages that can be used with the compatible Arduino products. 4 | 5 | ## 🤲 Contributing 6 | 7 | Please read the [contribution guidelines](./CONTRIBUTING.md) to learn how to add your MicroPython packages to the MicroPython Package Index. 8 | 9 | 10 | ## 📦 Packages 11 | ### [Arduino Modulino](https://github.com/arduino/arduino-modulino-mpy) 12 | 13 | A MicroPython library to control Arduino Modulinos. 14 | 15 |
Details 16 | 22 |
23 | 24 |
25 | 26 | ### [Arduino Nicla Sense Env](https://github.com/arduino/arduino-nicla-sense-env-mpy) 27 | 28 | A MicroPython library to control the Arduino Nicla Sense Env. 29 | 30 |
Details 31 | 37 |
38 | 39 |
40 | 41 | ### [Arduino Runtime for MicroPython](https://github.com/arduino/arduino-runtime-mpy) 42 | 43 | Easily build sketches with setup/loop and use familiar Arduino APIs in MicroPython. 44 | 45 |
Details 46 | 52 |
53 | 54 |
55 | 56 | ### [BME280](https://github.com/robert-hh/BME280) 57 | 58 | MicroPython driver for the BME280 sensor, target platform Pycom devices. 59 | 60 |
Details 61 | 66 |
67 | 68 |
69 | 70 | ### [BME680-Micropython](https://github.com/robert-hh/BME680-Micropython) 71 | 72 | Micropython Driver for a BME680 breakout. The driver uses the I2C interface. 73 | 74 |
Details 75 | 84 |
85 | 86 |
87 | 88 | ### [HT16K33-Python](https://github.com/smittytone/HT16K33-Python) 89 | 90 | Python drivers for the Holtek HT16K33 controller chip and various display devices based upon it, such as the Adafruit 0.8-inch 8x16 LED Matrix FeatherWing and the Raspberry Pi Pico. The drivers support both CircuitPython and MicroPython applications. They communicate using I²C. 91 | 92 |
Details 93 | 104 |
105 | 106 |
107 | 108 | ### [MAX30102-MicroPython-driver](https://github.com/n-elia/MAX30102-MicroPython-driver) 109 | 110 | A port of the SparkFun driver for Maxim MAX30102 sensor to MicroPython. 111 | 112 |
Details 113 | 119 |
120 | 121 |
122 | 123 | ### [MicroPython-Button](https://github.com/ubidefeo/MicroPython-Button) 124 | 125 | An easy-to-use MicroPython library to handle buttons and other devices with digital (LOW/HIGH) output. 126 | 127 |
Details 128 | 137 |
138 | 139 |
140 | 141 | ### [SH1106](https://github.com/robert-hh/SH1106) 142 | 143 | MicroPython driver for the SH1106 OLED controller 144 | 145 |
Details 146 | 152 |
153 | 154 |
155 | 156 | ### [ads1x15](https://github.com/robert-hh/ads1x15) 157 | 158 | MicroPython driver for the ADS1x15 ADCs 159 | 160 |
Details 161 | 166 |
167 | 168 |
169 | 170 | ### [arduino-iot-cloud-py](https://github.com/arduino/arduino-iot-cloud-py) 171 | 172 | A Python client for the Arduino IoT cloud, which runs on both CPython and MicroPython. 173 | 174 |
Details 175 | 185 |
186 | 187 |
188 | 189 | ### [micropython-DS3231-AT24C32](https://github.com/pangopi/micropython-DS3231-AT24C32) 190 | 191 | MicroPython driver for DS3231 RTC and AT24C32 EEPROM module. 192 | 193 |
Details 194 | 200 |
201 | 202 |
203 | 204 | ### [micropython-dfplayer](https://github.com/ubidefeo/micropython-dfplayer) 205 | 206 | Micropython implementation of DFPlayer control over UART 207 | 208 |
Details 209 | 219 |
220 | 221 |
222 | 223 | ### [micropython-i2c-lcd](https://github.com/ubidefeo/micropython-i2c-lcd) 224 | 225 | This library is designed to support a MicroPython interface for i2c LCD character screens. It is designed around the Pycom implementation of MicroPython 226 | 227 |
Details 228 | 234 |
235 | 236 |
237 | 238 | ### [micropython-i2c-lcd-monochrome](https://github.com/brainelectronics/micropython-i2c-lcd) 239 | 240 | Micropython package to control HD44780 LCD displays 1602 and 2004 via I2C 241 | 242 |
Details 243 | 248 |
249 | 250 |
251 | 252 | ### [micropython-ir-rx](https://github.com/peterhinch/micropython_ir/ir_rx) 253 | 254 | Nonblocking device drivers to receive from IR (infra red) remotes. 255 | 256 |
Details 257 | 263 |
264 | 265 |
266 | 267 | ### [micropython-ir-tx](https://github.com/peterhinch/micropython_ir/ir_tx) 268 | 269 | Nonblocking device drivers for IR (infra red) blaster apps. 270 | 271 |
Details 272 | 278 |
279 | 280 |
281 | 282 | ### [micropython-max7219](https://github.com/mcauser/micropython-max7219) 283 | 284 | A MicroPython library for the MAX7219 8x8 LED matrix driver, SPI interface, supports cascading and uses framebuf. 285 | 286 |
Details 287 | 293 |
294 | 295 |
296 | 297 | ### [micropython-mcp23017](https://github.com/mcauser/micropython-mcp23017) 298 | 299 | A MicroPython library for the MCP23017 16-bit I/O Expander with I2C Interface. 300 | 301 |
Details 302 | 308 |
309 | 310 |
311 | 312 | ### [micropython-mlx90614](https://github.com/mcauser/micropython-mlx90614) 313 | 314 | A MicroPython library for interfacing with a Melexis MLX90614 IR temperature sensor. 315 | 316 |
Details 317 | 323 |
324 | 325 |
326 | 327 | ### [micropython-modbus](https://github.com/brainelectronics/micropython-modbus) 328 | 329 | MicroPython ModBus TCP and RTU library supporting client and host mode 330 | 331 |
Details 332 | 338 |
339 | 340 |
341 | 342 | ### [micropython-mpr121](https://github.com/mcauser/micropython-mpr121) 343 | 344 | MicroPython driver for MPR121 capacitive touch keypads and breakout boards. 345 | 346 |
Details 347 | 353 |
354 | 355 |
356 | 357 | ### [micropython-my9221](https://github.com/mcauser/micropython-my9221) 358 | 359 | A MicroPython library for 10 segment LED bar graph modules using the MY9221 LED driver. 360 | 361 |
Details 362 | 371 |
372 | 373 |
374 | 375 | ### [micropython-rotary](https://github.com/miketeachman/micropython-rotary) 376 | 377 | MicroPython driver to read a rotary encoder. Works with Pyboard, Raspberry Pi Pico, ESP8266, and ESP32 development boards. This is a robust implementation providing effective debouncing of encoder contacts. It uses two GPIO pins configured to trigger interrupts, ... 378 | 379 |
Details 380 | 390 |
391 | 392 |
393 | 394 | ### [micropython-thermal-printer](https://github.com/ayoy/micropython-thermal-printer) 395 | 396 | This is the MicroPython port of Python Thermal Printer by Adafruit. 397 | 398 |
Details 399 | 404 |
405 | 406 |
407 | 408 | ### [micropython-tm1637](https://github.com/mcauser/micropython-tm1637) 409 | 410 | A MicroPython library for quad 7-segment LED display modules using the TM1637 LED driver. For example, the Grove - 4 Digit Display module http://wiki.seeed.cc/Grove-4-Digit_Display/ 411 | 412 |
Details 413 | 422 |
423 | 424 |
425 | 426 | ### [micropython_ahtx0](https://github.com/targetblank/micropython_ahtx0) 427 | 428 | MicroPython driver for the AHT10 and AHT20 temperature and humidity sensors. 429 | 430 |
Details 431 | 437 |
438 | 439 |
440 | 441 | ### [micropython_servo_pdm](https://github.com/TTitanUA/micropython_servo_pdm) 442 | 443 | A MicroPython library for controlling servos using PDM (Pulse Density Modulation) on the Raspberry Pi Pico. 444 | 445 |
Details 446 | 456 |
457 | 458 |
459 | 460 | ### [pi_pico_neopixel](https://github.com/blaz-r/pi_pico_neopixel) 461 | 462 | A library for using WS2812b and SK6812 LEDs (aka neopixels) with Raspberry Pi Pico. 463 | 464 |
Details 465 | 471 |
472 | 473 |
474 | 475 | ### [picoservo](https://github.com/sandbo00/picoservo) 476 | 477 | A simple class for controlling a 9g servo with the Raspberry Pi Pico. 478 | 479 |
Details 480 | 486 |
487 | 488 |
489 | 490 | ### [sh1107-micropython](https://github.com/nemart69/sh1107-micropython) 491 | 492 | Micropython driver for SH1107-based OLED display (64 x 128) 493 | 494 |
Details 495 | 500 |
501 | 502 |
503 | 504 | ### [ucPack-mpy](https://github.com/arduino/ucPack-mpy) 505 | 506 | A MicroPython porting of the ucPack library. 507 | 508 |
Details 509 | 515 |
516 | 517 | -------------------------------------------------------------------------------- /description.md: -------------------------------------------------------------------------------- 1 | # 🐍 MicroPython Package Index 2 | 3 | A list of useful MicroPython packages that can be used with the compatible Arduino products. 4 | 5 | ## 🤲 Contributing 6 | 7 | Please read the [contribution guidelines](./CONTRIBUTING.md) to learn how to add your MicroPython packages to the MicroPython Package Index. 8 | -------------------------------------------------------------------------------- /micropython-lib.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | packages: 3 | - name: aioespnow 4 | docs: >- 5 | https://github.com/micropython/micropython-lib/tree/master/micropython/aioespnow 6 | index: https://micropython.org/pi/v2 7 | author: MicroPython 8 | description: Extends the micropython espnow module with methods to support asyncio. 9 | - name: aiorepl 10 | docs: >- 11 | https://github.com/micropython/micropython-lib/tree/master/micropython/aiorepl 12 | index: https://micropython.org/pi/v2 13 | author: MicroPython 14 | description: >- 15 | Provides an asynchronous REPL that can run concurrently with an asyncio, 16 | also allowing await expressions. 17 | - name: aioble 18 | docs: >- 19 | https://github.com/micropython/micropython-lib/tree/master/micropython/bluetooth/aioble 20 | index: https://micropython.org/pi/v2 21 | author: MicroPython 22 | - name: aioble-central 23 | docs: >- 24 | https://github.com/micropython/micropython-lib/tree/master/micropython/bluetooth/aioble-central 25 | index: https://micropython.org/pi/v2 26 | author: MicroPython 27 | - name: aioble-client 28 | docs: >- 29 | https://github.com/micropython/micropython-lib/tree/master/micropython/bluetooth/aioble-client 30 | index: https://micropython.org/pi/v2 31 | author: MicroPython 32 | - name: aioble-core 33 | docs: >- 34 | https://github.com/micropython/micropython-lib/tree/master/micropython/bluetooth/aioble-core 35 | index: https://micropython.org/pi/v2 36 | author: MicroPython 37 | - name: aioble-l2cap 38 | docs: >- 39 | https://github.com/micropython/micropython-lib/tree/master/micropython/bluetooth/aioble-l2cap 40 | index: https://micropython.org/pi/v2 41 | author: MicroPython 42 | - name: aioble-peripheral 43 | docs: >- 44 | https://github.com/micropython/micropython-lib/tree/master/micropython/bluetooth/aioble-peripheral 45 | index: https://micropython.org/pi/v2 46 | author: MicroPython 47 | - name: aioble-security 48 | docs: >- 49 | https://github.com/micropython/micropython-lib/tree/master/micropython/bluetooth/aioble-security 50 | index: https://micropython.org/pi/v2 51 | author: MicroPython 52 | - name: aioble-server 53 | docs: >- 54 | https://github.com/micropython/micropython-lib/tree/master/micropython/bluetooth/aioble-server 55 | index: https://micropython.org/pi/v2 56 | author: MicroPython 57 | - name: bundle-networking 58 | docs: >- 59 | https://github.com/micropython/micropython-lib/tree/master/micropython/bundles/bundle-networking 60 | index: https://micropython.org/pi/v2 61 | author: MicroPython 62 | description: >- 63 | Common networking packages for all network-capable deployments of 64 | MicroPython. 65 | - name: onewire 66 | docs: >- 67 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/bus/onewire 68 | index: https://micropython.org/pi/v2 69 | author: MicroPython 70 | description: Onewire driver. 71 | - name: wm8960 72 | docs: >- 73 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/codec/wm8960 74 | index: https://micropython.org/pi/v2 75 | author: MicroPython 76 | description: WM8960 codec. 77 | - name: lcd160cr 78 | docs: >- 79 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/display/lcd160cr 80 | index: https://micropython.org/pi/v2 81 | author: MicroPython 82 | description: LCD160CR driver. 83 | - name: ssd1306 84 | docs: >- 85 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/display/ssd1306 86 | index: https://micropython.org/pi/v2 87 | author: MicroPython 88 | description: SSD1306 OLED driver. 89 | - name: bmi270 90 | docs: >- 91 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/imu/bmi270 92 | index: https://micropython.org/pi/v2 93 | author: MicroPython 94 | description: BOSCH BMI270 IMU driver. 95 | - name: bmm150 96 | docs: >- 97 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/imu/bmm150 98 | index: https://micropython.org/pi/v2 99 | author: MicroPython 100 | description: BOSCH BMM150 magnetometer driver. 101 | - name: lsm6dsox 102 | docs: >- 103 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/imu/lsm6dsox 104 | index: https://micropython.org/pi/v2 105 | author: MicroPython 106 | description: ST LSM6DSOX imu driver. 107 | - name: lsm9ds1 108 | docs: >- 109 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/imu/lsm9ds1 110 | index: https://micropython.org/pi/v2 111 | author: MicroPython 112 | description: Driver for ST LSM9DS1 IMU. 113 | - name: neopixel 114 | docs: >- 115 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/led/neopixel 116 | index: https://micropython.org/pi/v2 117 | author: MicroPython 118 | description: WS2812/NeoPixel driver. 119 | - name: nrf24l01 120 | docs: >- 121 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/radio/nrf24l01 122 | index: https://micropython.org/pi/v2 123 | author: MicroPython 124 | description: nrf24l01 2.4GHz radio driver. 125 | - name: dht 126 | docs: >- 127 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/sensor/dht 128 | index: https://micropython.org/pi/v2 129 | author: MicroPython 130 | description: DHT11 & DHT22 temperature/humidity sensor driver. 131 | - name: ds18x20 132 | docs: >- 133 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/sensor/ds18x20 134 | index: https://micropython.org/pi/v2 135 | author: MicroPython 136 | description: DS18x20 temperature sensor driver. 137 | - name: hs3003 138 | docs: >- 139 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/sensor/hs3003 140 | index: https://micropython.org/pi/v2 141 | author: MicroPython 142 | description: Renesas HS3003 Humidity and Temperature sensor driver. 143 | - name: hts221 144 | docs: >- 145 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/sensor/hts221 146 | index: https://micropython.org/pi/v2 147 | author: MicroPython 148 | description: HTS221 temperature/humidity sensor driver. 149 | - name: lps22h 150 | docs: >- 151 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/sensor/lps22h 152 | index: https://micropython.org/pi/v2 153 | author: MicroPython 154 | description: LPS22H temperature/pressure sensor driver. 155 | - name: mhz19 156 | docs: >- 157 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/sensor/mhz19 158 | index: https://micropython.org/pi/v2 159 | author: MicroPython 160 | description: Driver for MH-Z19 CO2 sensor. 161 | - name: sdcard 162 | docs: >- 163 | https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/storage/sdcard 164 | index: https://micropython.org/pi/v2 165 | author: MicroPython 166 | description: SDCard block device driver. 167 | - name: espflash 168 | docs: >- 169 | https://github.com/micropython/micropython-lib/tree/master/micropython/espflash 170 | index: https://micropython.org/pi/v2 171 | author: MicroPython 172 | description: Provides a minimal ESP32 bootloader protocol implementation. 173 | - name: lora 174 | docs: >- 175 | https://github.com/micropython/micropython-lib/tree/master/micropython/lora/lora 176 | index: https://micropython.org/pi/v2 177 | author: MicroPython 178 | - name: lora-async 179 | docs: >- 180 | https://github.com/micropython/micropython-lib/tree/master/micropython/lora/lora-async 181 | index: https://micropython.org/pi/v2 182 | author: MicroPython 183 | - name: lora-stm32wl5 184 | docs: >- 185 | https://github.com/micropython/micropython-lib/tree/master/micropython/lora/lora-stm32wl5 186 | index: https://micropython.org/pi/v2 187 | author: MicroPython 188 | - name: lora-sx126x 189 | docs: >- 190 | https://github.com/micropython/micropython-lib/tree/master/micropython/lora/lora-sx126x 191 | index: https://micropython.org/pi/v2 192 | author: MicroPython 193 | - name: lora-sx127x 194 | docs: >- 195 | https://github.com/micropython/micropython-lib/tree/master/micropython/lora/lora-sx127x 196 | index: https://micropython.org/pi/v2 197 | author: MicroPython 198 | - name: lora-sync 199 | docs: >- 200 | https://github.com/micropython/micropython-lib/tree/master/micropython/lora/lora-sync 201 | index: https://micropython.org/pi/v2 202 | author: MicroPython 203 | - name: mip 204 | docs: https://github.com/micropython/micropython-lib/tree/master/micropython/mip 205 | index: https://micropython.org/pi/v2 206 | author: MicroPython 207 | description: On-device package installer for network-capable boards 208 | - name: mip-cmdline 209 | docs: >- 210 | https://github.com/micropython/micropython-lib/tree/master/micropython/mip-cmdline 211 | index: https://micropython.org/pi/v2 212 | author: MicroPython 213 | description: Optional support for running `micropython -m mip` 214 | - name: ntptime 215 | docs: >- 216 | https://github.com/micropython/micropython-lib/tree/master/micropython/net/ntptime 217 | index: https://micropython.org/pi/v2 218 | author: MicroPython 219 | description: NTP client. 220 | - name: webrepl 221 | docs: >- 222 | https://github.com/micropython/micropython-lib/tree/master/micropython/net/webrepl 223 | index: https://micropython.org/pi/v2 224 | author: MicroPython 225 | description: WebREPL server. 226 | - name: senml 227 | docs: >- 228 | https://github.com/micropython/micropython-lib/tree/master/micropython/senml 229 | index: https://micropython.org/pi/v2 230 | author: MicroPython 231 | description: SenML serialisation for MicroPython. 232 | - name: uaiohttpclient 233 | docs: >- 234 | https://github.com/micropython/micropython-lib/tree/master/micropython/uaiohttpclient 235 | index: https://micropython.org/pi/v2 236 | author: MicroPython 237 | description: HTTP client module for MicroPython asyncio module 238 | - name: ucontextlib 239 | docs: >- 240 | https://github.com/micropython/micropython-lib/tree/master/micropython/ucontextlib 241 | index: https://micropython.org/pi/v2 242 | author: MicroPython 243 | description: Minimal subset of contextlib for MicroPython low-memory ports 244 | - name: udnspkt 245 | docs: >- 246 | https://github.com/micropython/micropython-lib/tree/master/micropython/udnspkt 247 | index: https://micropython.org/pi/v2 248 | author: MicroPython 249 | description: Make and parse DNS packets (Sans I/O approach). 250 | - name: umqtt.robust 251 | docs: >- 252 | https://github.com/micropython/micropython-lib/tree/master/micropython/umqtt.robust 253 | index: https://micropython.org/pi/v2 254 | author: MicroPython 255 | - name: umqtt.simple 256 | docs: >- 257 | https://github.com/micropython/micropython-lib/tree/master/micropython/umqtt.simple 258 | index: https://micropython.org/pi/v2 259 | author: MicroPython 260 | description: Lightweight MQTT client for MicroPython. 261 | - name: upysh 262 | docs: >- 263 | https://github.com/micropython/micropython-lib/tree/master/micropython/upysh 264 | index: https://micropython.org/pi/v2 265 | author: MicroPython 266 | description: Minimalistic file shell using native Python syntax. 267 | - name: urequests 268 | docs: >- 269 | https://github.com/micropython/micropython-lib/tree/master/micropython/urequests 270 | index: https://micropython.org/pi/v2 271 | author: MicroPython 272 | - name: urllib.urequest 273 | docs: >- 274 | https://github.com/micropython/micropython-lib/tree/master/micropython/urllib.urequest 275 | index: https://micropython.org/pi/v2 276 | author: MicroPython 277 | - name: usb-device 278 | docs: >- 279 | https://github.com/micropython/micropython-lib/tree/master/micropython/usb/usb-device 280 | index: https://micropython.org/pi/v2 281 | author: MicroPython 282 | - name: usb-device-cdc 283 | docs: >- 284 | https://github.com/micropython/micropython-lib/tree/master/micropython/usb/usb-device-cdc 285 | index: https://micropython.org/pi/v2 286 | author: MicroPython 287 | - name: usb-device-hid 288 | docs: >- 289 | https://github.com/micropython/micropython-lib/tree/master/micropython/usb/usb-device-hid 290 | index: https://micropython.org/pi/v2 291 | author: MicroPython 292 | - name: usb-device-keyboard 293 | docs: >- 294 | https://github.com/micropython/micropython-lib/tree/master/micropython/usb/usb-device-keyboard 295 | index: https://micropython.org/pi/v2 296 | author: MicroPython 297 | - name: usb-device-midi 298 | docs: >- 299 | https://github.com/micropython/micropython-lib/tree/master/micropython/usb/usb-device-midi 300 | index: https://micropython.org/pi/v2 301 | author: MicroPython 302 | - name: usb-device-mouse 303 | docs: >- 304 | https://github.com/micropython/micropython-lib/tree/master/micropython/usb/usb-device-mouse 305 | index: https://micropython.org/pi/v2 306 | author: MicroPython 307 | - name: xmltok 308 | docs: >- 309 | https://github.com/micropython/micropython-lib/tree/master/micropython/xmltok 310 | index: https://micropython.org/pi/v2 311 | author: MicroPython 312 | description: Simple XML tokenizer 313 | - name: aiohttp 314 | docs: >- 315 | https://github.com/micropython/micropython-lib/tree/master/python-ecosys/aiohttp 316 | index: https://micropython.org/pi/v2 317 | author: MicroPython 318 | description: HTTP client module for MicroPython asyncio module 319 | - name: cbor2 320 | docs: >- 321 | https://github.com/micropython/micropython-lib/tree/master/python-ecosys/cbor2 322 | index: https://micropython.org/pi/v2 323 | author: MicroPython 324 | - name: iperf3 325 | docs: >- 326 | https://github.com/micropython/micropython-lib/tree/master/python-ecosys/iperf3 327 | index: https://micropython.org/pi/v2 328 | author: MicroPython 329 | - name: pyjwt 330 | docs: >- 331 | https://github.com/micropython/micropython-lib/tree/master/python-ecosys/pyjwt 332 | index: https://micropython.org/pi/v2 333 | author: MicroPython 334 | - name: requests 335 | docs: >- 336 | https://github.com/micropython/micropython-lib/tree/master/python-ecosys/requests 337 | index: https://micropython.org/pi/v2 338 | author: MicroPython 339 | - name: abc 340 | docs: >- 341 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/abc 342 | index: https://micropython.org/pi/v2 343 | author: MicroPython 344 | - name: argparse 345 | docs: >- 346 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/argparse 347 | index: https://micropython.org/pi/v2 348 | author: MicroPython 349 | - name: base64 350 | docs: >- 351 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/base64 352 | index: https://micropython.org/pi/v2 353 | author: MicroPython 354 | - name: binascii 355 | docs: >- 356 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/binascii 357 | index: https://micropython.org/pi/v2 358 | author: MicroPython 359 | - name: bisect 360 | docs: >- 361 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/bisect 362 | index: https://micropython.org/pi/v2 363 | author: MicroPython 364 | - name: cmd 365 | docs: >- 366 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/cmd 367 | index: https://micropython.org/pi/v2 368 | author: MicroPython 369 | - name: collections 370 | docs: >- 371 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/collections 372 | index: https://micropython.org/pi/v2 373 | author: MicroPython 374 | - name: collections-defaultdict 375 | docs: >- 376 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/collections-defaultdict 377 | index: https://micropython.org/pi/v2 378 | author: MicroPython 379 | - name: contextlib 380 | docs: >- 381 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/contextlib 382 | index: https://micropython.org/pi/v2 383 | author: MicroPython 384 | description: Port of contextlib for micropython 385 | - name: copy 386 | docs: >- 387 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/copy 388 | index: https://micropython.org/pi/v2 389 | author: MicroPython 390 | - name: curses.ascii 391 | docs: >- 392 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/curses.ascii 393 | index: https://micropython.org/pi/v2 394 | author: MicroPython 395 | - name: datetime 396 | docs: >- 397 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/datetime 398 | index: https://micropython.org/pi/v2 399 | author: MicroPython 400 | - name: errno 401 | docs: >- 402 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/errno 403 | index: https://micropython.org/pi/v2 404 | author: MicroPython 405 | - name: fnmatch 406 | docs: >- 407 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/fnmatch 408 | index: https://micropython.org/pi/v2 409 | author: MicroPython 410 | - name: functools 411 | docs: >- 412 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/functools 413 | index: https://micropython.org/pi/v2 414 | author: MicroPython 415 | - name: gzip 416 | docs: >- 417 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/gzip 418 | index: https://micropython.org/pi/v2 419 | author: MicroPython 420 | - name: hashlib 421 | docs: >- 422 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/hashlib 423 | index: https://micropython.org/pi/v2 424 | author: MicroPython 425 | - name: hashlib-core 426 | docs: >- 427 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/hashlib-core 428 | index: https://micropython.org/pi/v2 429 | author: MicroPython 430 | - name: hashlib-sha224 431 | docs: >- 432 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/hashlib-sha224 433 | index: https://micropython.org/pi/v2 434 | author: MicroPython 435 | description: Adds the SHA224 hash algorithm to hashlib. 436 | - name: hashlib-sha256 437 | docs: >- 438 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/hashlib-sha256 439 | index: https://micropython.org/pi/v2 440 | author: MicroPython 441 | description: Adds the SHA256 hash algorithm to hashlib. 442 | - name: hashlib-sha384 443 | docs: >- 444 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/hashlib-sha384 445 | index: https://micropython.org/pi/v2 446 | author: MicroPython 447 | description: Adds the SHA384 hash algorithm to hashlib. 448 | - name: hashlib-sha512 449 | docs: >- 450 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/hashlib-sha512 451 | index: https://micropython.org/pi/v2 452 | author: MicroPython 453 | description: Adds the SHA512 hash algorithm to hashlib. 454 | - name: heapq 455 | docs: >- 456 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/heapq 457 | index: https://micropython.org/pi/v2 458 | author: MicroPython 459 | - name: hmac 460 | docs: >- 461 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/hmac 462 | index: https://micropython.org/pi/v2 463 | author: MicroPython 464 | - name: html 465 | docs: >- 466 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/html 467 | index: https://micropython.org/pi/v2 468 | author: MicroPython 469 | - name: inspect 470 | docs: >- 471 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/inspect 472 | index: https://micropython.org/pi/v2 473 | author: MicroPython 474 | - name: io 475 | docs: >- 476 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/io 477 | index: https://micropython.org/pi/v2 478 | author: MicroPython 479 | - name: itertools 480 | docs: >- 481 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/itertools 482 | index: https://micropython.org/pi/v2 483 | author: MicroPython 484 | - name: keyword 485 | docs: >- 486 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/keyword 487 | index: https://micropython.org/pi/v2 488 | author: MicroPython 489 | - name: locale 490 | docs: >- 491 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/locale 492 | index: https://micropython.org/pi/v2 493 | author: MicroPython 494 | - name: logging 495 | docs: >- 496 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/logging 497 | index: https://micropython.org/pi/v2 498 | author: MicroPython 499 | - name: operator 500 | docs: >- 501 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/operator 502 | index: https://micropython.org/pi/v2 503 | author: MicroPython 504 | - name: os 505 | docs: >- 506 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/os 507 | index: https://micropython.org/pi/v2 508 | author: MicroPython 509 | - name: os-path 510 | docs: >- 511 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/os-path 512 | index: https://micropython.org/pi/v2 513 | author: MicroPython 514 | - name: pathlib 515 | docs: >- 516 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/pathlib 517 | index: https://micropython.org/pi/v2 518 | author: MicroPython 519 | - name: pickle 520 | docs: >- 521 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/pickle 522 | index: https://micropython.org/pi/v2 523 | author: MicroPython 524 | - name: pkg_resources 525 | docs: >- 526 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/pkg_resources 527 | index: https://micropython.org/pi/v2 528 | author: MicroPython 529 | - name: pkgutil 530 | docs: >- 531 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/pkgutil 532 | index: https://micropython.org/pi/v2 533 | author: MicroPython 534 | - name: pprint 535 | docs: >- 536 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/pprint 537 | index: https://micropython.org/pi/v2 538 | author: MicroPython 539 | - name: quopri 540 | docs: >- 541 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/quopri 542 | index: https://micropython.org/pi/v2 543 | author: MicroPython 544 | - name: random 545 | docs: >- 546 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/random 547 | index: https://micropython.org/pi/v2 548 | author: MicroPython 549 | - name: shutil 550 | docs: >- 551 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/shutil 552 | index: https://micropython.org/pi/v2 553 | author: MicroPython 554 | - name: ssl 555 | docs: >- 556 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/ssl 557 | index: https://micropython.org/pi/v2 558 | author: MicroPython 559 | - name: stat 560 | docs: >- 561 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/stat 562 | index: https://micropython.org/pi/v2 563 | author: MicroPython 564 | - name: string 565 | docs: >- 566 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/string 567 | index: https://micropython.org/pi/v2 568 | author: MicroPython 569 | - name: struct 570 | docs: >- 571 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/struct 572 | index: https://micropython.org/pi/v2 573 | author: MicroPython 574 | - name: tarfile 575 | docs: >- 576 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/tarfile 577 | index: https://micropython.org/pi/v2 578 | author: MicroPython 579 | description: Read-only implementation of Python's tarfile. 580 | - name: tarfile-write 581 | docs: >- 582 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/tarfile-write 583 | index: https://micropython.org/pi/v2 584 | author: MicroPython 585 | description: Adds write (create/append) support to tarfile. 586 | - name: tempfile 587 | docs: >- 588 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/tempfile 589 | index: https://micropython.org/pi/v2 590 | author: MicroPython 591 | - name: textwrap 592 | docs: >- 593 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/textwrap 594 | index: https://micropython.org/pi/v2 595 | author: MicroPython 596 | - name: threading 597 | docs: >- 598 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/threading 599 | index: https://micropython.org/pi/v2 600 | author: MicroPython 601 | - name: time 602 | docs: >- 603 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/time 604 | index: https://micropython.org/pi/v2 605 | author: MicroPython 606 | - name: traceback 607 | docs: >- 608 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/traceback 609 | index: https://micropython.org/pi/v2 610 | author: MicroPython 611 | - name: types 612 | docs: >- 613 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/types 614 | index: https://micropython.org/pi/v2 615 | author: MicroPython 616 | - name: unittest 617 | docs: >- 618 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/unittest 619 | index: https://micropython.org/pi/v2 620 | author: MicroPython 621 | - name: unittest-discover 622 | docs: >- 623 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/unittest-discover 624 | index: https://micropython.org/pi/v2 625 | author: MicroPython 626 | - name: uu 627 | docs: >- 628 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/uu 629 | index: https://micropython.org/pi/v2 630 | author: MicroPython 631 | - name: venv 632 | docs: >- 633 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/venv 634 | index: https://micropython.org/pi/v2 635 | author: MicroPython 636 | description: >- 637 | Support for creating MicroPython virtual environments using `micropython 638 | -m venv` 639 | - name: warnings 640 | docs: >- 641 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/warnings 642 | index: https://micropython.org/pi/v2 643 | author: MicroPython 644 | - name: zlib 645 | docs: >- 646 | https://github.com/micropython/micropython-lib/tree/master/python-stdlib/zlib 647 | index: https://micropython.org/pi/v2 648 | author: MicroPython 649 | description: Compression and decompression using the deflate algorithm 650 | -------------------------------------------------------------------------------- /package-list.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | packages: 3 | - name: Arduino Nicla Sense Env 4 | url: https://github.com/arduino/arduino-nicla-sense-env-mpy 5 | author: Arduino, Sebastian Romero 6 | description: A MicroPython library to control the Arduino Nicla Sense Env. 7 | tags: ["sensors", "environment"] 8 | license: Mozilla Public License Version 2.0 9 | - name: Arduino Modulino 10 | url: https://github.com/arduino/arduino-modulino-mpy 11 | author: Arduino, Sebastian Romero 12 | description: A MicroPython library to control Arduino Modulinos. 13 | docs: https://github.com/arduino/arduino-modulino-mpy/blob/main/docs/api.md 14 | tags: ["sensors", "actuators"] 15 | license: Mozilla Public License Version 2.0 16 | - name: micropython-mpr121 17 | url: https://github.com/mcauser/micropython-mpr121 18 | author: Mike Causer 19 | description: MicroPython driver for MPR121 capacitive touch keypads and breakout boards. 20 | tags: ["sensor", "touch"] 21 | license: MIT License 22 | package_descriptor: 23 | urls: 24 | - [mpr121.py, github:mcauser/micropython-mpr121/mpr121.py] 25 | - name: ads1x15 26 | url: https://github.com/robert-hh/ads1x15 27 | author: Robert Hammelrath 28 | description: MicroPython driver for the ADS1x15 ADCs 29 | tags: ["ADC"] 30 | package_descriptor: 31 | urls: 32 | - [ads1x15.py, github:robert-hh/ads1x15/ads1x15.py] 33 | - name: micropython-mcp23017 34 | url: https://github.com/mcauser/micropython-mcp23017 35 | author: Mike Causer 36 | description: A MicroPython library for the MCP23017 16-bit I/O Expander with I2C Interface. 37 | tags: ["I/O", "expander"] 38 | license: MIT License 39 | package_descriptor: 40 | urls: 41 | - [mcp23017.py, github:mcauser/micropython-mcp23017/mcp23017.py] 42 | - name: micropython-mlx90614 43 | url: https://github.com/mcauser/micropython-mlx90614 44 | author: Mike Causer 45 | description: A MicroPython library for interfacing with a Melexis MLX90614 IR temperature sensor. 46 | tags: ["sensor", "temperature"] 47 | license: MIT License 48 | package_descriptor: 49 | urls: 50 | - [mlx90614.py, github:mcauser/micropython-mlx90614/mlx90614.py] 51 | - name: micropython-modbus 52 | url: https://github.com/brainelectronics/micropython-modbus 53 | author: brainelectronics 54 | description: MicroPython ModBus TCP and RTU library supporting client and host mode 55 | tags: ["modbus"] 56 | license: GNU General Public License 57 | - name: arduino-iot-cloud-py 58 | url: https://github.com/arduino/arduino-iot-cloud-py 59 | author: Arduino 60 | description: A Python client for the Arduino IoT cloud, which runs on both CPython and MicroPython. 61 | tags: ["cloud", "iot"] 62 | required_runtime_version: ">=1.22.0" 63 | verification: 64 | - fqbn: "arduino:mbed_portenta:envie_m7" 65 | library_version: "0.0.7" 66 | runtime_version: "1.19.1" 67 | tester: "arduino" 68 | license: Mozilla Public License Version 2.0 69 | - name: BME680-Micropython 70 | url: https://github.com/robert-hh/BME680-Micropython 71 | author: Robert Hammelrath 72 | description: Micropython Driver for a BME680 breakout. The driver uses the I2C interface. 73 | tags: ["sensor"] 74 | package_descriptor: 75 | urls: 76 | - [bme680.py, github:robert-hh/BME680-Micropython/bme680.py] 77 | - [bme680i.py, github:robert-hh/BME680-Micropython/bme680i.py] 78 | verification: 79 | - fqbn: "arduino:mbed_nano:nanorp2040connect" 80 | library_version: null 81 | runtime_version: "1.19.1" 82 | tester: "arduino" 83 | - name: micropython-my9221 84 | author: Mike Causer 85 | url: https://github.com/mcauser/micropython-my9221 86 | description: A MicroPython library for 10 segment LED bar graph modules using the MY9221 LED driver. 87 | tags: ["LED"] 88 | package_descriptor: 89 | urls: 90 | - [micropython-my9221/my9221.py, github:mcauser/micropython-my9221/my9221.py] 91 | verification: 92 | - fqbn: "arduino:mbed_nano:nanorp2040connect" 93 | library_version: null 94 | runtime_version: "1.19.1" 95 | tester: "arduino" 96 | - name: micropython-rotary 97 | url: https://github.com/miketeachman/micropython-rotary 98 | author: miketeachman 99 | description: MicroPython driver to read a rotary encoder. Works with Pyboard, Raspberry Pi Pico, ESP8266, and ESP32 development boards. This is a robust implementation providing effective debouncing of encoder contacts. It uses two GPIO pins configured to trigger interrupts, ... 100 | tags: ["encoder"] 101 | verification: 102 | - fqbn: "arduino:mbed_nano:nanorp2040connect" 103 | library_version: null 104 | runtime_version: "1.19.1" 105 | tester: "arduino" 106 | license: MIT License 107 | - name: micropython_servo_pdm 108 | author: Taras Prokofiev 109 | url: https://github.com/TTitanUA/micropython_servo_pdm 110 | description: A MicroPython library for controlling servos using PDM (Pulse Density Modulation) on the Raspberry Pi Pico. 111 | tags: ["servo"] 112 | package_descriptor: 113 | urls: 114 | - [micropython_servo_pdm/__init__.py, github:TTitanUA/micropython_servo_pdm/micropython_servo_pdm/__init__.py] 115 | - [micropython_servo_pdm/servo_pdm.py, github:TTitanUA/micropython_servo_pdm/micropython_servo_pdm/servo_pdm.py] 116 | - [micropython_servo_pdm/servo_pdm_rp2.py, github:TTitanUA/micropython_servo_pdm/micropython_servo_pdm/servo_pdm_rp2.py] 117 | - [micropython_servo_pdm/smooth_servo_simple.py, github:TTitanUA/micropython_servo_pdm/micropython_servo_pdm/smooth_servo_simple.py] 118 | - [micropython_servo_pdm/version.py, github:TTitanUA/micropython_servo_pdm/micropython_servo_pdm/version.py] 119 | verification: 120 | - fqbn: "arduino:mbed_nano:nanorp2040connect" 121 | library_version: null 122 | runtime_version: "1.19.1" 123 | tester: "arduino" 124 | license: MIT License 125 | - name: picoservo 126 | url: https://github.com/sandbo00/picoservo 127 | author: sandbo00 128 | description: A simple class for controlling a 9g servo with the Raspberry Pi Pico. 129 | tags: ["servo"] 130 | package_descriptor: 131 | urls: 132 | - [servo.py, github:sandbo00/picoservo/servo.py] 133 | license: MIT License 134 | - name: micropython-DS3231-AT24C32 135 | url: https://github.com/pangopi/micropython-DS3231-AT24C32 136 | author: pangopi 137 | description: MicroPython driver for DS3231 RTC and AT24C32 EEPROM module. 138 | tags: ["time", "RTC"] 139 | package_descriptor: 140 | urls: 141 | - [ds3231.py, github:pangopi/micropython-DS3231-AT24C32/ds3231.py] 142 | license: MIT License 143 | - name: micropython_ahtx0 144 | url: https://github.com/targetblank/micropython_ahtx0 145 | author: targetblank 146 | description: MicroPython driver for the AHT10 and AHT20 temperature and humidity sensors. 147 | tags: ["sensors", "temperature", "humidity"] 148 | package_descriptor: 149 | urls: 150 | - [ahtx0.py, github:targetblank/micropython_ahtx0/ahtx0.py] 151 | license: MIT License 152 | - name: micropython-dfplayer 153 | url: https://github.com/ubidefeo/micropython-dfplayer 154 | author: Ubi de Feo 155 | description: Micropython implementation of DFPlayer control over UART 156 | tags: ["audio", "mp3"] 157 | verification: 158 | - fqbn: "arduino:mbed_nano:nanorp2040connect" 159 | library_version: null 160 | runtime_version: "1.19.1" 161 | tester: "arduino" 162 | license: MIT License 163 | - name: MAX30102-MicroPython-driver 164 | url: https://github.com/n-elia/MAX30102-MicroPython-driver 165 | author: n-elia 166 | description: A port of the SparkFun driver for Maxim MAX30102 sensor to MicroPython. 167 | tags: ["sensors"] 168 | license: MIT License 169 | - name: micropython-i2c-lcd 170 | url: https://github.com/ubidefeo/micropython-i2c-lcd 171 | author: Ubi de Feo 172 | description: This library is designed to support a MicroPython interface for i2c LCD character screens. It is designed around the Pycom implementation of MicroPython 173 | tags: ["display", "LCD", "RGB"] 174 | license: MIT License 175 | - name: micropython-i2c-lcd-monochrome 176 | url: https://github.com/brainelectronics/micropython-i2c-lcd 177 | author: brainelectronics 178 | description: Micropython package to control HD44780 LCD displays 1602 and 2004 via I2C 179 | license: MIT 180 | - name: sh1107-micropython 181 | url: https://github.com/nemart69/sh1107-micropython 182 | author: nemart69 183 | description: Micropython driver for SH1107-based OLED display (64 x 128) 184 | tags: ["display", "OLED"] 185 | package_descriptor: 186 | urls: 187 | - [sh1107.py, github:nemart69/sh1107-micropython/sh1107.py] 188 | - name: SH1106 189 | url: https://github.com/robert-hh/SH1106 190 | author: Robert Hammelrath 191 | description: MicroPython driver for the SH1106 OLED controller 192 | tags: ["display", "OLED"] 193 | package_descriptor: 194 | urls: 195 | - [sh1106.py, github:robert-hh/SH1106/sh1106.py] 196 | license: MIT License 197 | - name: micropython-ir-rx 198 | url: https://github.com/peterhinch/micropython_ir/ir_rx 199 | author: Peter Hinch 200 | description: Nonblocking device drivers to receive from IR (infra red) remotes. 201 | tags: ["IR"] 202 | license: MIT 203 | - name: micropython-ir-tx 204 | url: https://github.com/peterhinch/micropython_ir/ir_tx 205 | author: Peter Hinch 206 | description: Nonblocking device drivers for IR (infra red) blaster apps. 207 | tags: ["IR"] 208 | license: MIT 209 | - name: pi_pico_neopixel 210 | url: https://github.com/blaz-r/pi_pico_neopixel 211 | author: blaz-r 212 | description: A library for using WS2812b and SK6812 LEDs (aka neopixels) with Raspberry Pi Pico. 213 | tags: ["LED"] 214 | package_descriptor: 215 | urls: 216 | - [neopixel.py, github:blaz-r/pi_pico_neopixel/neopixel.py] 217 | license: MIT License 218 | - name: micropython-thermal-printer 219 | url: https://github.com/ayoy/micropython-thermal-printer 220 | author: ayoy 221 | description: This is the MicroPython port of Python Thermal Printer by Adafruit. 222 | tags: ["printer"] 223 | package_descriptor: 224 | urls: 225 | - [Adafruit_Thermal.py, github:ayoy/micropython-thermal-printer/Adafruit_Thermal.py] 226 | - name: micropython-tm1637 227 | url: https://github.com/mcauser/micropython-tm1637 228 | author: Mike Causer 229 | description: A MicroPython library for quad 7-segment LED display modules using the TM1637 LED driver. For example, the Grove - 4 Digit Display module http://wiki.seeed.cc/Grove-4-Digit_Display/ 230 | tags: ["display"] 231 | verification: 232 | - fqbn: "arduino:mbed_nano:nanorp2040connect" 233 | library_version: "1.3.0" 234 | runtime_version: "1.19.1" 235 | tester: "arduino" 236 | - name: MicroPython-Button 237 | author: Ubi de Feo 238 | url: https://github.com/ubidefeo/MicroPython-Button 239 | description: An easy-to-use MicroPython library to handle buttons and other devices with digital (LOW/HIGH) output. 240 | tags: ["input", "button"] 241 | verification: 242 | - fqbn: "arduino:mbed_nano:nanorp2040connect" 243 | library_version: null 244 | runtime_version: "1.19.1" 245 | tester: "arduino" 246 | - name: micropython-max7219 247 | url: https://github.com/mcauser/micropython-max7219 248 | author: Mike Causer 249 | description: A MicroPython library for the MAX7219 8x8 LED matrix driver, SPI interface, supports cascading and uses framebuf. 250 | tags: ["LED", "matrix"] 251 | license: Licensed under the MIT License. 252 | package_descriptor: 253 | urls: 254 | - [max7219.py, github:mcauser/micropython-max7219/max7219.py] 255 | - name: BME280 256 | url: https://github.com/robert-hh/BME280 257 | description: MicroPython driver for the BME280 sensor, target platform Pycom devices. 258 | author: Robert Hammelrath 259 | tags: ["pressure", "temperature", "humidity"] 260 | package_descriptor: 261 | urls: 262 | - [bme280_int.py, github:robert-hh/BME280/bme280_int.py] 263 | - [bme280_float.py, github:robert-hh/BME280/bme280_float.py] 264 | - name: HT16K33-Python 265 | url: https://github.com/smittytone/HT16K33-Python 266 | author: smittytone 267 | description: Python drivers for the Holtek HT16K33 controller chip and various display devices based upon it, such as the Adafruit 0.8-inch 8x16 LED Matrix FeatherWing and the Raspberry Pi Pico. The drivers support both CircuitPython and MicroPython applications. They communicate using I²C. 268 | tags: ["LED", "matrix", "segment", "adafruit"] 269 | license: Licensed under the MIT License. 270 | verification: 271 | - fqbn: "arduino:esp32:nano_nora" 272 | library_version: "3.4.2" 273 | runtime_version: "1.20.0" 274 | tester: "arduino" 275 | - fqbn: "esp32:esp32:esp32s3" 276 | library_version: "3.4.2" 277 | runtime_version: "1.20.0" 278 | tester: "arduino" 279 | - name: ucPack-mpy 280 | url: https://github.com/arduino/ucPack-mpy 281 | author: Arduino, Giovanni di Dio Bruno, Lucio Rossi 282 | description: A MicroPython porting of the ucPack library. 283 | tags: ["communication"] 284 | license: Mozilla Public License Version 2.0 285 | - name: Arduino Runtime for MicroPython 286 | url: https://github.com/arduino/arduino-runtime-mpy 287 | author: Arduino, Ubi de Feo, Sebastian Romero 288 | description: Easily build sketches with setup/loop and use familiar Arduino APIs in MicroPython. 289 | docs: https://github.com/arduino/arduino-runtime-mpy/blob/main/README.md 290 | tags: ["arduino", "programming", "helpers"] 291 | license: Mozilla Public License Version 2.0 292 | -------------------------------------------------------------------------------- /registry-renderer/index.js: -------------------------------------------------------------------------------- 1 | import { load } from 'js-yaml'; 2 | import { readFileSync, writeFileSync } from 'fs'; 3 | 4 | const REGISTRY_FILE_PATH = "./package-list.yaml"; 5 | const REPO_DESCRIPTION_PATH = "./description.md"; 6 | const TARGET_PATH = "./README.md"; 7 | 8 | /** 9 | * Reads the package list from the YAML file and returns it as a JavaScript object. 10 | * @param {String} path 11 | * @returns an Object representing the package list 12 | */ 13 | function getPackageListFromYaml(path) { 14 | try { 15 | let libraries = load(readFileSync(path, 'utf8')).packages; 16 | 17 | // Sort libraries by name alphabetically 18 | libraries.sort((a, b) => { 19 | if (a.name < b.name) { return -1; } 20 | if (a.name > b.name) { return 1; } 21 | return 0; 22 | }); 23 | 24 | return libraries; 25 | } catch (e) { 26 | console.log(e); 27 | } 28 | } 29 | 30 | /** 31 | * Turns the properties of the library list into a Markdown string. 32 | * @param {Object} packageList 33 | * @returns A string containing the library list in Markdown format 34 | */ 35 | function getMarkdownFromPackageList(packageList) { 36 | const libraryData = packageList.map(aPackage => { 37 | let entry = `### [${aPackage.name}](${aPackage.url})\n\n`; 38 | 39 | if (aPackage.description) { 40 | entry += `${aPackage.description} \n\n`; 41 | } 42 | 43 | entry += "
Details\n"; 44 | entry += "\n"; 69 | entry += "
\n\n"; 70 | 71 | return entry; 72 | 73 | }).join("
\n\n"); 74 | return `## 📦 Packages\n${libraryData}`; 75 | } 76 | 77 | 78 | /** 79 | * Merges the repo description and the library list into a 80 | * single Markdown string and writes it to the target file. 81 | * @param {String} descriptionPath 82 | * @param {String} targetPath 83 | * @param {Object} markdownLibraryList 84 | */ 85 | function writeMarkdownFile(descriptionPath, targetPath, markdownLibraryList) { 86 | const registryDescription = readFileSync(descriptionPath, 'utf8'); 87 | const content = `${registryDescription}\n\n${markdownLibraryList}`; 88 | writeFileSync(targetPath, content); 89 | } 90 | 91 | console.log("📚 Rendering package list..."); 92 | const packageList = getPackageListFromYaml(REGISTRY_FILE_PATH); 93 | const markdownLibraryList = getMarkdownFromPackageList(packageList); 94 | writeMarkdownFile(REPO_DESCRIPTION_PATH, TARGET_PATH, markdownLibraryList); 95 | console.log("✅ Done"); 96 | -------------------------------------------------------------------------------- /registry-renderer/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "registry-renderer", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "argparse": { 8 | "version": "2.0.1", 9 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 10 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 11 | }, 12 | "js-yaml": { 13 | "version": "4.1.0", 14 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 15 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 16 | "requires": { 17 | "argparse": "^2.0.1" 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /registry-renderer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "registry-renderer", 3 | "version": "1.0.0", 4 | "description": "A simple tool to render a markdown version of the library registry.", 5 | "type": "module", 6 | "main": "index.js", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "Sebastian Romero @sebromero", 11 | "license": "ISC", 12 | "dependencies": { 13 | "js-yaml": "^4.1.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /schema.yml: -------------------------------------------------------------------------------- 1 | --- 2 | packages: 3 | - name: 4 | type: string 5 | required: true 6 | url: 7 | type: string 8 | required: true 9 | description: 10 | type: string 11 | required: true 12 | author: 13 | type: string 14 | required: true 15 | tags: 16 | - type: string 17 | required_runtime_version: 18 | type: string 19 | license: 20 | type: string 21 | docs: 22 | type: string 23 | package_descriptor: 24 | urls: 25 | - - type: string 26 | verification: 27 | - fqbn: 28 | type: string 29 | library_version: 30 | type: string 31 | runtime_version: 32 | type: string 33 | tester: 34 | type: string -------------------------------------------------------------------------------- /tools/create-index.mjs: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import { execSync } from 'child_process'; 4 | import yaml from 'js-yaml'; 5 | 6 | /** 7 | * Clones a Git repository to a specified directory 8 | * @param {string} url The URL of the Git repository 9 | * @param {string} directory The target directory to clone the repository to 10 | * @returns 11 | */ 12 | const cloneRepository = (url, directory) => { 13 | try { 14 | // Clone the repository 15 | execSync(`git clone ${url} ${directory}`); 16 | return true; 17 | } catch (error) { 18 | console.error(`Error cloning repository: ${error.message}`); 19 | return false; 20 | } 21 | }; 22 | 23 | /** 24 | * Gets the GitHub URL of a Git repository from the local filesystem 25 | * @param {string} rootPath The root path of the Git repository 26 | * @returns {string} The GitHub URL of the repository 27 | * @returns {null} If an error occurs 28 | */ 29 | const getGitHubUrl = (rootPath) => { 30 | try { 31 | // Get the GitHub repository URL 32 | const remoteUrl = execSync('git config --get remote.origin.url', { cwd: rootPath, encoding: 'utf-8' }).trim(); 33 | 34 | // Convert SSH format to HTTPS format 35 | const httpsUrl = remoteUrl.replace(/^git@github\.com:/, 'https://github.com/').replace(/\.git$/, ''); 36 | 37 | return httpsUrl; 38 | } catch (error) { 39 | console.error(`Error getting GitHub repository URL: ${error.message}`); 40 | return null; 41 | } 42 | }; 43 | 44 | /** 45 | * Gets the current Git branch of a local repository 46 | * @param {string} rootPath The root path of the Git repository 47 | * @returns {string} The name of the current branch 48 | * @returns {null} If an error occurs 49 | */ 50 | const getCurrentBranch = (rootPath) => { 51 | try { 52 | // Get the current branch name 53 | const branchName = execSync('git branch --show-current', { cwd: rootPath, encoding: 'utf-8' }).trim(); 54 | return branchName; 55 | } catch (error) { 56 | console.error(`Error getting current branch: ${error.message}`); 57 | return null; 58 | } 59 | }; 60 | 61 | /** 62 | * Gets the root folder of a Git repository (the one containing the .git folder) 63 | * @param {string} aPath The path to a file or directory within the repository 64 | * @returns {string} The root folder of the repository 65 | * @returns {null} If an error occurs 66 | */ 67 | const getRepositoryRoot = (aPath) => { 68 | try { 69 | // Get the root folder of the repository 70 | const repositoryRoot = execSync('git rev-parse --show-toplevel', { cwd: aPath, encoding: 'utf-8' }).trim(); 71 | return repositoryRoot; 72 | } catch (error) { 73 | console.error(`Error getting repository root: ${error.message}`); 74 | return null; 75 | } 76 | }; 77 | 78 | /** 79 | * Constructs a GitHub URL for a specific directory in a Git repository. 80 | * @param {string} baseUrl The base URL of the GitHub repository 81 | * @param {string} branch The current branch of the repository 82 | * @param {string} repositoryRoot The root folder of the repository 83 | * @param {string} dirPath The path to the directory within the repository 84 | * @returns {string} The GitHub URL for the directory 85 | */ 86 | const constructGitHubUrl = (baseUrl, branch, repositoryRoot, dirPath) => { 87 | const relativePath = path.relative(repositoryRoot, dirPath); 88 | const normalizedPath = relativePath.replace(/\\/g, '/'); // Normalize path separators for Windows 89 | 90 | return `${baseUrl}/tree/${branch}/${normalizedPath}`; 91 | }; 92 | 93 | /** 94 | * Extracts the description from a manifest.py file 95 | * @param {string} filePath The path to the manifest.py file 96 | * @returns {string} The description extracted from the file 97 | * @returns {null} If an error occurs 98 | */ 99 | function extractDescription(filePath) { 100 | try { 101 | const content = fs.readFileSync(filePath, 'utf8'); 102 | const descriptionMatch = /description="(.*?)"/.exec(content); 103 | 104 | if (descriptionMatch && descriptionMatch[1]) { 105 | return descriptionMatch[1]; 106 | } 107 | } catch (error) { 108 | console.error(`Error reading ${filePath}: ${error.message}`); 109 | return null; 110 | } 111 | } 112 | 113 | /** 114 | * Generates a list of packages from directories containing a package.json file 115 | * @param {string} directory The starting directory to search for packages 116 | * @param {string} indexUrl The URL of the package index to be assigned to each package 117 | * @param {RegExp} excludePattern A regular expression to exclude certain directories 118 | * @returns {string} A YAML representation of the package list as a string 119 | */ 120 | const generatePackageList = (directory, indexUrl, excludePattern) => { 121 | const result = { packages: [] }; 122 | 123 | const repositoryRoot = getRepositoryRoot(directory); 124 | console.log(`Repository root: ${repositoryRoot} from ${directory}`); 125 | const gitHubUrl = getGitHubUrl(repositoryRoot); 126 | const currentBranch = getCurrentBranch(repositoryRoot); 127 | 128 | if (!repositoryRoot || !gitHubUrl || !currentBranch) { 129 | return; 130 | } 131 | 132 | const collectPackages = (dir, rootPath) => { 133 | const files = fs.readdirSync(dir); 134 | 135 | for (const file of files) { 136 | const filePath = path.join(dir, file); 137 | const isDirectory = fs.statSync(filePath).isDirectory(); 138 | 139 | if (isDirectory) { 140 | collectPackages(filePath, rootPath); 141 | } else { 142 | const isPackageJson = file === 'package.json'; 143 | const isManifestPy = file === 'manifest.py'; 144 | const packageName = path.basename(dir); 145 | 146 | if (excludePattern && excludePattern.test(dir)) { 147 | continue; // Skip excluded packages 148 | } 149 | 150 | if(packageName.startsWith("_")) { 151 | continue; // Skip "private" packages 152 | } 153 | 154 | if (isPackageJson || isManifestPy) { 155 | const packageInfo = { 156 | name: packageName, 157 | docs: constructGitHubUrl(gitHubUrl, currentBranch, repositoryRoot, dir), 158 | index: indexUrl, 159 | author: 'MicroPython', 160 | }; 161 | 162 | if (isManifestPy) { 163 | const description = extractDescription(filePath, packageInfo, file); 164 | packageInfo.description = description; 165 | } 166 | 167 | result.packages.push(packageInfo); 168 | } 169 | } 170 | } 171 | }; 172 | 173 | collectPackages(directory, repositoryRoot); 174 | return yaml.dump(result); 175 | }; 176 | 177 | // Check if command line arguments are provided 178 | if (process.argv.length < 3) { 179 | // Note: Official MicroPython lib index is: https://micropython.org/pi/v2 180 | // Example usage: node create-index.mjs micropython-lib.yml 181 | console.error('Usage: node create-index.mjs '); 182 | } else { 183 | // Make build directory if it doesn't exist 184 | if (!fs.existsSync('build')) { 185 | fs.mkdirSync('build'); 186 | } 187 | 188 | if(!fs.existsSync('build/micropython-lib')) { 189 | cloneRepository("git@github.com:micropython/micropython-lib.git", "build/micropython-lib"); 190 | } 191 | const directory = "build/micropython-lib"; 192 | const indexUrl = "https://micropython.org/pi/v2"; 193 | const outputFilename = process.argv[2]; 194 | const excludePattern = /\/unix-ffi\//; // Skip Unix-specific packages 195 | 196 | const packageList = generatePackageList(directory, indexUrl, excludePattern); 197 | try { 198 | fs.writeFileSync(outputFilename, `---\n${packageList}`); 199 | console.log(`YAML file saved to ${outputFilename}`); 200 | } catch (error) { 201 | console.error(`Error writing YAML file: ${error.message}`); 202 | } 203 | } 204 | -------------------------------------------------------------------------------- /tools/find-broken-packages.mjs: -------------------------------------------------------------------------------- 1 | // This script helps to find packages in the Arduino package index that are missing the package.json file. 2 | // Without the package.json file, the package cannot be installed using mpremote or the Arduino Package Installer. 3 | 4 | import yaml from 'js-yaml'; 5 | 6 | function convertToRawURL(url, suffix = null) { 7 | url = url.replace('https://github.com/', ''); 8 | const parts = url.split('/'); 9 | const owner = parts[0]; 10 | const repoName = parts[1]; 11 | const branch = 'HEAD'; 12 | let path = parts[2] ? "/" + parts[2] : ''; 13 | if (suffix) { 14 | path += "/" + suffix; 15 | } 16 | return `https://raw.githubusercontent.com/${owner}/${repoName}/${branch}${path}`; 17 | } 18 | 19 | const indexURL = "https://raw.githubusercontent.com/arduino/package-index-py/refs/heads/main/package-list.yaml"; 20 | const data = await fetch(indexURL); 21 | const doc = yaml.load(await data.text()); 22 | 23 | // Filter packages that have the package_descriptor field 24 | // which overrides the package.json file 25 | doc.packages = doc.packages.filter(pkg => pkg.package_descriptor == undefined); 26 | doc.packages.map(pkg => { 27 | // Convert the URLs to https://raw.githubusercontent.com/... format 28 | pkg.rawURL = convertToRawURL(pkg.url, 'package.json'); 29 | return pkg; 30 | }); 31 | 32 | let incompletePackages = []; 33 | 34 | // Check the existence of the package.json file for each package 35 | for (const aPackage of doc.packages) { 36 | const response = await fetch(aPackage.rawURL); 37 | if (!response.ok) { 38 | incompletePackages.push(aPackage.url); 39 | console.log(`❌ Package file ${aPackage.rawURL} not found.`); 40 | } else { 41 | console.log(`✅ Package file ${aPackage.rawURL} found.`); 42 | } 43 | } 44 | 45 | console.log("\n👀 Packages with missing package.json:"); 46 | console.log(incompletePackages); 47 | const message = ` 48 | Consider making pull requests to add a package.json file to these repositories 49 | or add the package_descriptor field to the package in the package-list.yaml file 50 | `; 51 | console.log(message); -------------------------------------------------------------------------------- /tools/find-license.mjs: -------------------------------------------------------------------------------- 1 | function convertToRawURL(url, suffix = null) { 2 | url = url.replace('https://github.com/', ''); 3 | const parts = url.split('/'); 4 | const owner = parts[0]; 5 | const repoName = parts[1]; 6 | const branch = 'HEAD'; 7 | let path = parts[2] ? "/" + parts[2] : ''; 8 | if (suffix) { 9 | path += "/" + suffix; 10 | } 11 | return `https://raw.githubusercontent.com/${owner}/${repoName}/${branch}${path}`; 12 | } 13 | 14 | async function findLicenseURL(url) { 15 | const licenseFileURL = convertToRawURL(url, 'LICENSE'); 16 | // Fetch the license file 17 | const licenseResponse = await fetch(licenseFileURL); 18 | if (licenseResponse.ok) { 19 | const licenseText = await licenseResponse.text(); 20 | // Get the first line of the license file 21 | const license = licenseText.split('\n')[0]; 22 | return license; 23 | } 24 | return null; 25 | } 26 | 27 | if(process.argv.length < 3) { 28 | console.error('Usage: node find-license.mjs '); 29 | process.exit(1); 30 | } 31 | 32 | const license = await findLicenseURL(process.argv[2]); 33 | if (license) console.log(license); -------------------------------------------------------------------------------- /tools/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tools", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "tools", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "js-yaml": "^4.1.0" 13 | } 14 | }, 15 | "node_modules/argparse": { 16 | "version": "2.0.1", 17 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 18 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 19 | "license": "Python-2.0" 20 | }, 21 | "node_modules/js-yaml": { 22 | "version": "4.1.0", 23 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 24 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 25 | "license": "MIT", 26 | "dependencies": { 27 | "argparse": "^2.0.1" 28 | }, 29 | "bin": { 30 | "js-yaml": "bin/js-yaml.js" 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /tools/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tools", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1" 7 | }, 8 | "author": "", 9 | "license": "ISC", 10 | "description": "", 11 | "dependencies": { 12 | "js-yaml": "^4.1.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /yamllint-config.yml: -------------------------------------------------------------------------------- 1 | extends: default 2 | 3 | rules: 4 | line-length: disable --------------------------------------------------------------------------------