├── .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 |
17 | - 🌐 URL: https://github.com/arduino/arduino-modulino-mpy
18 | - 👤 Author: Arduino, Sebastian Romero
19 | - 📜 License: Mozilla Public License Version 2.0
20 | - 🏷️ Tags: sensors, actuators
21 |
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 |
32 | - 🌐 URL: https://github.com/arduino/arduino-nicla-sense-env-mpy
33 | - 👤 Author: Arduino, Sebastian Romero
34 | - 📜 License: Mozilla Public License Version 2.0
35 | - 🏷️ Tags: sensors, environment
36 |
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 |
47 | - 🌐 URL: https://github.com/arduino/arduino-runtime-mpy
48 | - 👤 Author: Arduino, Ubi de Feo, Sebastian Romero
49 | - 📜 License: Mozilla Public License Version 2.0
50 | - 🏷️ Tags: arduino, programming, helpers
51 |
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 |
62 | - 🌐 URL: https://github.com/robert-hh/BME280
63 | - 👤 Author: Robert Hammelrath
64 | - 🏷️ Tags: pressure, temperature, humidity
65 |
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 |
76 | - 🌐 URL: https://github.com/robert-hh/BME680-Micropython
77 | - 👤 Author: Robert Hammelrath
78 | - 🏷️ Tags: sensor
79 | - ✅ Verification:
80 |
81 | - Verified with
arduino:mbed_nano:nanorp2040connect
on MicroPython vundefined
82 |
83 |
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 |
94 | - 🌐 URL: https://github.com/smittytone/HT16K33-Python
95 | - 👤 Author: smittytone
96 | - 📜 License: Licensed under the MIT License.
97 | - 🏷️ Tags: LED, matrix, segment, adafruit
98 | - ✅ Verification:
99 |
100 | - Verified v3.4.2 with
arduino:esp32:nano_nora
on MicroPython vundefined
101 | - Verified v3.4.2 with
esp32:esp32:esp32s3
on MicroPython vundefined
102 |
103 |
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 |
114 | - 🌐 URL: https://github.com/n-elia/MAX30102-MicroPython-driver
115 | - 👤 Author: n-elia
116 | - 📜 License: MIT License
117 | - 🏷️ Tags: sensors
118 |
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 |
129 | - 🌐 URL: https://github.com/ubidefeo/MicroPython-Button
130 | - 👤 Author: Ubi de Feo
131 | - 🏷️ Tags: input, button
132 | - ✅ Verification:
133 |
134 | - Verified with
arduino:mbed_nano:nanorp2040connect
on MicroPython vundefined
135 |
136 |
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 |
147 | - 🌐 URL: https://github.com/robert-hh/SH1106
148 | - 👤 Author: Robert Hammelrath
149 | - 📜 License: MIT License
150 | - 🏷️ Tags: display, OLED
151 |
152 |
153 |
154 |
155 |
156 | ### [ads1x15](https://github.com/robert-hh/ads1x15)
157 |
158 | MicroPython driver for the ADS1x15 ADCs
159 |
160 | Details
161 |
162 | - 🌐 URL: https://github.com/robert-hh/ads1x15
163 | - 👤 Author: Robert Hammelrath
164 | - 🏷️ Tags: ADC
165 |
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 |
176 | - 🌐 URL: https://github.com/arduino/arduino-iot-cloud-py
177 | - 👤 Author: Arduino
178 | - 📜 License: Mozilla Public License Version 2.0
179 | - 🏷️ Tags: cloud, iot
180 | - ✅ Verification:
181 |
182 | - Verified v0.0.7 with
arduino:mbed_portenta:envie_m7
on MicroPython vundefined
183 |
184 |
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 |
195 | - 🌐 URL: https://github.com/pangopi/micropython-DS3231-AT24C32
196 | - 👤 Author: pangopi
197 | - 📜 License: MIT License
198 | - 🏷️ Tags: time, RTC
199 |
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 |
210 | - 🌐 URL: https://github.com/ubidefeo/micropython-dfplayer
211 | - 👤 Author: Ubi de Feo
212 | - 📜 License: MIT License
213 | - 🏷️ Tags: audio, mp3
214 | - ✅ Verification:
215 |
216 | - Verified with
arduino:mbed_nano:nanorp2040connect
on MicroPython vundefined
217 |
218 |
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 |
229 | - 🌐 URL: https://github.com/ubidefeo/micropython-i2c-lcd
230 | - 👤 Author: Ubi de Feo
231 | - 📜 License: MIT License
232 | - 🏷️ Tags: display, LCD, RGB
233 |
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 |
244 | - 🌐 URL: https://github.com/brainelectronics/micropython-i2c-lcd
245 | - 👤 Author: brainelectronics
246 | - 📜 License: MIT
247 |
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 |
258 | - 🌐 URL: https://github.com/peterhinch/micropython_ir/ir_rx
259 | - 👤 Author: Peter Hinch
260 | - 📜 License: MIT
261 | - 🏷️ Tags: IR
262 |
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 |
273 | - 🌐 URL: https://github.com/peterhinch/micropython_ir/ir_tx
274 | - 👤 Author: Peter Hinch
275 | - 📜 License: MIT
276 | - 🏷️ Tags: IR
277 |
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 |
288 | - 🌐 URL: https://github.com/mcauser/micropython-max7219
289 | - 👤 Author: Mike Causer
290 | - 📜 License: Licensed under the MIT License.
291 | - 🏷️ Tags: LED, matrix
292 |
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 |
303 | - 🌐 URL: https://github.com/mcauser/micropython-mcp23017
304 | - 👤 Author: Mike Causer
305 | - 📜 License: MIT License
306 | - 🏷️ Tags: I/O, expander
307 |
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 |
318 | - 🌐 URL: https://github.com/mcauser/micropython-mlx90614
319 | - 👤 Author: Mike Causer
320 | - 📜 License: MIT License
321 | - 🏷️ Tags: sensor, temperature
322 |
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 |
333 | - 🌐 URL: https://github.com/brainelectronics/micropython-modbus
334 | - 👤 Author: brainelectronics
335 | - 📜 License: GNU General Public License
336 | - 🏷️ Tags: modbus
337 |
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 |
348 | - 🌐 URL: https://github.com/mcauser/micropython-mpr121
349 | - 👤 Author: Mike Causer
350 | - 📜 License: MIT License
351 | - 🏷️ Tags: sensor, touch
352 |
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 |
363 | - 🌐 URL: https://github.com/mcauser/micropython-my9221
364 | - 👤 Author: Mike Causer
365 | - 🏷️ Tags: LED
366 | - ✅ Verification:
367 |
368 | - Verified with
arduino:mbed_nano:nanorp2040connect
on MicroPython vundefined
369 |
370 |
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 |
381 | - 🌐 URL: https://github.com/miketeachman/micropython-rotary
382 | - 👤 Author: miketeachman
383 | - 📜 License: MIT License
384 | - 🏷️ Tags: encoder
385 | - ✅ Verification:
386 |
387 | - Verified with
arduino:mbed_nano:nanorp2040connect
on MicroPython vundefined
388 |
389 |
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 |
400 | - 🌐 URL: https://github.com/ayoy/micropython-thermal-printer
401 | - 👤 Author: ayoy
402 | - 🏷️ Tags: printer
403 |
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 |
414 | - 🌐 URL: https://github.com/mcauser/micropython-tm1637
415 | - 👤 Author: Mike Causer
416 | - 🏷️ Tags: display
417 | - ✅ Verification:
418 |
419 | - Verified v1.3.0 with
arduino:mbed_nano:nanorp2040connect
on MicroPython vundefined
420 |
421 |
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 |
432 | - 🌐 URL: https://github.com/targetblank/micropython_ahtx0
433 | - 👤 Author: targetblank
434 | - 📜 License: MIT License
435 | - 🏷️ Tags: sensors, temperature, humidity
436 |
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 |
447 | - 🌐 URL: https://github.com/TTitanUA/micropython_servo_pdm
448 | - 👤 Author: Taras Prokofiev
449 | - 📜 License: MIT License
450 | - 🏷️ Tags: servo
451 | - ✅ Verification:
452 |
453 | - Verified with
arduino:mbed_nano:nanorp2040connect
on MicroPython vundefined
454 |
455 |
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 |
466 | - 🌐 URL: https://github.com/blaz-r/pi_pico_neopixel
467 | - 👤 Author: blaz-r
468 | - 📜 License: MIT License
469 | - 🏷️ Tags: LED
470 |
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 |
481 | - 🌐 URL: https://github.com/sandbo00/picoservo
482 | - 👤 Author: sandbo00
483 | - 📜 License: MIT License
484 | - 🏷️ Tags: servo
485 |
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 |
496 | - 🌐 URL: https://github.com/nemart69/sh1107-micropython
497 | - 👤 Author: nemart69
498 | - 🏷️ Tags: display, OLED
499 |
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 |
510 | - 🌐 URL: https://github.com/arduino/ucPack-mpy
511 | - 👤 Author: Arduino, Giovanni di Dio Bruno, Lucio Rossi
512 | - 📜 License: Mozilla Public License Version 2.0
513 | - 🏷️ Tags: communication
514 |
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";
45 |
46 | if (aPackage.url) {
47 | entry += `- 🌐 URL: ${aPackage.url}
\n`;
48 | }
49 | if (aPackage.author) {
50 | entry += `- 👤 Author: ${aPackage.author}
\n`;
51 | }
52 | if (aPackage.license) {
53 | entry += `- 📜 License: ${aPackage.license}
\n`;
54 | }
55 | if (aPackage.tags) {
56 | entry += `- 🏷️ Tags: ${aPackage.tags.join(', ')}
\n`;
57 | }
58 |
59 | if (aPackage.verification) {
60 | entry += "- ✅ Verification:\n
\n";
61 | let verification = aPackage.verification.map(verification => {
62 | const libraryVersion = verification.library_version ? ` v${verification.library_version}` : "";
63 | return `- Verified${libraryVersion} with
${verification.fqbn}
on MicroPython v${verification.micropython_version} `;
64 | }).join("\n");
65 | entry += `${verification}\n
\n`;
66 | }
67 |
68 | 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
--------------------------------------------------------------------------------