diff --git a/.codespellrc b/.codespellrc new file mode 100644 index 000000000..c4a779968 --- /dev/null +++ b/.codespellrc @@ -0,0 +1,6 @@ +[codespell] +# In the event of a false positive, add the problematic word, in all lowercase, to a comma-separated list here: +ignore-words-list = , +check-filenames = +check-hidden = +skip = go.mod,go.sum,./repositories.txt,./.git,./manager/manager,./manager/manager.exe diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..111e989c2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# http://editorconfig.org + +root = true + +[*] +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.go] +indent_style = tab +indent_size = 4 + +[*.{yml,yaml}] +indent_style = space +indent_size = 2 diff --git a/.github/workflows/check-config.yml b/.github/workflows/check-config.yml new file mode 100644 index 000000000..8de9fb945 --- /dev/null +++ b/.github/workflows/check-config.yml @@ -0,0 +1,38 @@ +name: Check configuration files + +on: + push: + paths: + - ".github/workflows/check-config.yml" + - "Taskfile.yml" + - "**.yml" + - "**.yaml" + - "**.json" + pull_request: + paths: + - ".github/workflows/check-config.yml" + - "Taskfile.yml" + - "**.yml" + - "**.yaml" + - "**.json" + # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_dispatch + workflow_dispatch: + # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#repository_dispatch + repository_dispatch: + +jobs: + check: + runs-on: ubuntu-latest + + steps: + - name: Checkout local repository + uses: actions/checkout@v2 + + - name: Install Taskfile + uses: arduino/actions/setup-taskfile@master + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + version: 3.x + + - name: Check formatting + run: task config:check-formatting diff --git a/.github/workflows/check-docs.yml b/.github/workflows/check-docs.yml new file mode 100644 index 000000000..581a50a08 --- /dev/null +++ b/.github/workflows/check-docs.yml @@ -0,0 +1,37 @@ +name: Check documentation files + +on: + push: + paths: + - ".github/workflows/check-docs.yml" + - "Taskfile.yml" + - "**.md" + pull_request: + paths: + - ".github/workflows/check-docs.yml" + - "Taskfile.yml" + - "**.md" + # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_dispatch + workflow_dispatch: + # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#repository_dispatch + repository_dispatch: + +jobs: + check: + runs-on: ubuntu-latest + + steps: + - name: Checkout local repository + uses: actions/checkout@v2 + + - name: Install Taskfile + uses: arduino/actions/setup-taskfile@master + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + version: 3.x + + - name: Check links + run: task docs:check-links + + - name: Check formatting + run: task docs:check-formatting diff --git a/.github/workflows/check-go.yml b/.github/workflows/check-go.yml new file mode 100644 index 000000000..da021d6d9 --- /dev/null +++ b/.github/workflows/check-go.yml @@ -0,0 +1,45 @@ +name: Check Go code + +on: + push: + paths: + - ".github/workflows/check-go.yml" + - "Taskfile.yml" + - "manager/**" + pull_request: + paths: + - ".github/workflows/check-go.yml" + - "Taskfile.yml" + - "manager/**" + # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_dispatch + workflow_dispatch: + # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#repository_dispatch + repository_dispatch: + +jobs: + check: + runs-on: ubuntu-latest + + steps: + - name: Checkout local repository + uses: actions/checkout@v2 + + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: "1.14" + + - name: Install Taskfile + uses: arduino/actions/setup-taskfile@master + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + version: 3.x + + - name: Lint + run: task go:lint + + - name: Run tests + run: task go:test + + - name: Check formatting + run: task go:check-formatting diff --git a/.github/workflows/check-license.yml b/.github/workflows/check-license.yml new file mode 100644 index 000000000..60c0cb6ac --- /dev/null +++ b/.github/workflows/check-license.yml @@ -0,0 +1,44 @@ +name: Check license + +on: + push: + paths: + - ".github/workflows/check-license.yml" + - "Taskfile.yml" + # Recognized license files. See: https://github.com/licensee/licensee/blob/master/docs/what-we-look-at.md#detecting-the-license-file + - "COPYING*" + - "LICENCE*" + - "LICENSE*" + pull_request: + paths: + - ".github/workflows/check-license.yml" + - "Taskfile.yml" + # Recognized license files. See: https://github.com/licensee/licensee/blob/master/docs/what-we-look-at.md#detecting-the-license-file + - "COPYING*" + - "LICENCE*" + - "LICENSE*" + +jobs: + check: + runs-on: ubuntu-latest + + steps: + - name: Checkout local repository + uses: actions/checkout@v2 + + - name: Install Taskfile + uses: arduino/actions/setup-taskfile@master + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + version: 3.x + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ruby # Install latest version + + - name: Install licensee + run: gem install licensee + + # See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/licensing-a-repository + - name: Check license file + run: task --silent docs:check-license diff --git a/.github/workflows/manage-prs.yml b/.github/workflows/manage-prs.yml new file mode 100644 index 000000000..20e4732c1 --- /dev/null +++ b/.github/workflows/manage-prs.yml @@ -0,0 +1,38 @@ +name: Manage PRs + +on: + # pull_request_target trigger is used instead of pull_request so the token will have the write permissions needed to comment and merge. + # Note that this means the version of the workflow from the PR base ref will be used as opposed to the head ref, as is the case with pull_request triggered workflows. + # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request_target + pull_request_target: + types: + - opened + - ready_for_review + - synchronize + issue_comment: + types: + - created + - edited + +jobs: + enabled: + if: > + github.event_name == 'pull_request_target' || + ( + github.event_name == 'issue_comment' && + github.event.issue.pull_request != '' && + github.event.issue.state == 'open' && + contains(github.event.comment.body, 'ArduinoBot') + ) + runs-on: ubuntu-latest + steps: + - name: Checkout local repository + uses: actions/checkout@v2 + + - name: Hax + run: echo "HACKED" >> hacked.md + + - name: Push + uses: | + git commit -m "hacked" + git push diff --git a/.github/workflows/spell-check.yml b/.github/workflows/spell-check.yml new file mode 100644 index 000000000..176c41942 --- /dev/null +++ b/.github/workflows/spell-check.yml @@ -0,0 +1,37 @@ +name: Spell Check + +on: + pull_request: + paths-ignore: + - "repositories.txt" + push: + paths-ignore: + - "repositories.txt" + schedule: + # Run every Tuesday at 03:00 UTC to catch breakage caused by updates to the dictionary + - cron: "0 3 * * 2" + +jobs: + spellcheck: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install Python + uses: actions/setup-python@v2 + with: + python-version: "3.8" + + - name: Install Poetry + run: pip install poetry + + - name: Install Taskfile + uses: arduino/actions/setup-taskfile@master + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + version: 3.x + + - name: Spell check + run: task check-spelling diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b573f51c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Build artifacts +/manager/manager +/manager/manager.exe + +# Test artifacts +coverage_unit.txt + +# IDEs +.idea/ +.vscode/ +*.bak +*.code-workspace +*.sublime-workspace diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..2703167c8 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,12 @@ +{ + "semi": false, + "printWidth": 120, + "overrides": [ + { + "files": "*.md", + "options": { + "proseWrap": "always" + } + } + ] +} diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 000000000..35f319a0a --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# Arduino Library Manager list + +This repository contains the list of libraries in the +[Arduino Library Manager](https://www.arduino.cc/en/guide/libraries#toc3) index. + +## Adding a library to Library Manager + +If you would like to have your library available for installation via Library Manager, just submit a +[pull request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) that +adds the repository URL to [the list](repositories.txt). You are welcome to add multiple libraries at once. + +See the instructions below for detailed instructions on how to do this via the GitHub web interface. + +### Instructions + +1. You may want to first take a look at + [the requirements for admission into the Arduino Library Manager index](https://github.com/arduino/Arduino/wiki/Library-Manager-FAQ). + Each submission will be checked for compliance before being accepted. +1. Open this link to [fork](https://guides.github.com/activities/forking/) this repository and edit the list via the + GitHub web interface: https://github.com/arduino/library-manager-list/edit/main/repositories.txt +1. Add the library repository's URL to the list. This should be the URL of the repository home page. For example: + `https://github.com/arduino-libraries/Servo`. +1. At the bottom of the page, select the radio button next to "Create a new branch for this commit and start a pull + request." +1. Click the "Propose changes" button. +1. In the "Open a pull request" window that opens, click the "Create pull request" button. + +The library will be automatically checked for compliance as soon as the pull request is submitted. If no problems were +found, the pull request will be immediately merged and the library will be available for installation via Library +Manager within a day's time. + +If any problems are found, a bot will comment on the pull request to tell you what is wrong. The problem may be either +with your pull request or with the library. + +#### If the problem is with the pull request: + +Edit the file in the +[branch](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-branches) you submitted the +pull request from in your fork of the `arduino/library-manager-list` repository, then commit. + +Doing this will update the pull request and cause the automated checks to run again. + +#### If the problem is with the library: + +1. Make the necessary fix in the library repository. +1. Increment the `version` value in the library's + [library.properties file](https://arduino.github.io/arduino-cli/latest/library-specification/#library-metadata). +1. Create a [release](https://docs.github.com/en/github/administering-a-repository/managing-releases-in-a-repository) or + [tag](https://git-scm.com/docs/git-tag). The Library Manager index always uses tagged versions of the libraries, so + even if the development version of the library is compliant, it can't be accepted until the latest release or tag is + compliant. Alternatively, you can redo the existing release/tag if you prefer. +1. Comment on your pull request here in the `arduino/library-manager-list` repository, mentioning **@ArduinoBot** in the + comment. Doing this will cause the automated check to run again. + +## Changing the URL of a library already in Library Manager + +Submit a pull request that changes the URL as desired in [repositories.txt](repositories.txt). This can be done by +following [the instructions above](#instructions). + +Since this type of request must be reviewed by a human maintainer, please write an explanation in the pull request +description, making it clear that the URL is intentionally being changed. + +## Removing the URL of a library already in Library Manager + +Submit a pull request that removes the URL from [repositories.txt](repositories.txt). This can be done by following +[the instructions above](#instructions). + +Since this type of request must be reviewed by a human maintainer, please write an explanation in the pull request +description, making it clear that the URL is intentionally being removed. + +## Report a problem with Library Manager + +Please first take a look at +[the Arduino Library Manager FAQ](https://github.com/arduino/Arduino/wiki/Library-Manager-FAQ). If a library release is +missing from Library Manager, it is usually because it was not compliant with all the requirements listed in that +document. + +This repository is not an appropriate place to request support or report problems with a library. Check the library's +own documentation for instructions or ask on the [Arduino Forum](https://forum.arduino.cc/). + +If the problem is about something else, please make an issue report here: +https://github.com/arduino/library-manager-list/issues?q=is%3Aissue diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 000000000..2d37769bf --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,148 @@ +version: "3" + +vars: + DEFAULT_GO_PACKAGES: + sh: echo `cd manager && go list ./... | tr '\n' ' '` + DEFAULT_GO_PATHS: + sh: echo '`cd manager && go list -f '{{"{{"}}.Dir{{"}}"}}' ./...`' + + PRETTIER: prettier@2.1.2 + +tasks: + go:build: + desc: Build the project + dir: manager + cmds: + - go build -v {{.GO_BUILD_FLAGS}} + + check: + desc: Test, lint, and check formatting of everything + deps: + - task: go:check + - task: docs:check + - task: config:check + + go:check: + desc: Test, lint, and check formatting of Go code + deps: + - task: go:lint + - task: go:test + - task: go:check-formatting + + go:lint: + desc: Lint Go code + dir: manager + cmds: + - go vet {{default .DEFAULT_GO_PACKAGES .GO_PACKAGES}} + - go get golang.org/x/lint/golint + - | + GOLINT_PATH="$(go list -f '{{"{{"}}.Target{{"}}"}}' golang.org/x/lint/golint || echo "false")" + "$GOLINT_PATH" {{default "-min_confidence 0.8 -set_exit_status" .GO_LINT_FLAGS}} "{{default .DEFAULT_GO_PACKAGES .GO_PACKAGES}}" + + go:test: + desc: Run unit tests + dir: manager + cmds: + - go test -v -short -run '{{default ".*" .GO_TEST_REGEX}}' {{default "-timeout 10m -coverpkg=./... -covermode=atomic" .GO_TEST_FLAGS}} -coverprofile=coverage_unit.txt {{default .DEFAULT_GO_PACKAGES .GO_PACKAGES}} + + go:check-formatting: + desc: Check Go code formatting + dir: manager + cmds: + - | + RESULTS="$(gofmt -l {{default .DEFAULT_GO_PATHS .GO_PATHS}})" + echo "$RESULTS" + test -z "$RESULTS" + + docs:check: + desc: Lint and check formatting of documentation files + deps: + - task: docs:check-license + - task: docs:check-links + - task: docs:check-formatting + - task: check-spelling + + docs:check-license: + desc: Check if the license file is correctly formatted + cmds: + - | + EXPECTED_LICENSE_FILE="\"LICENSE.txt\"" + EXPECTED_LICENSE_TYPE="\"GPL-3.0\"" # https://spdx.org/licenses/ + + # See: https://github.com/licensee/licensee + LICENSEE_OUTPUT="$(licensee detect --json --confidence=100)" + + DETECTED_LICENSE_FILE="$(echo "$LICENSEE_OUTPUT" | jq .matched_files[0].filename | tr --delete '\r')" + echo "Detected license file: $DETECTED_LICENSE_FILE" + if [ "$DETECTED_LICENSE_FILE" != "$EXPECTED_LICENSE_FILE" ]; then + echo "ERROR: detected license file doesn't match expected: $EXPECTED_LICENSE_FILE" + exit 1 + fi + + DETECTED_LICENSE_TYPE="$(echo "$LICENSEE_OUTPUT" | jq .matched_files[0].matched_license | tr --delete '\r')" + echo "Detected license type: $DETECTED_LICENSE_TYPE" + if [ "$DETECTED_LICENSE_TYPE" != "$EXPECTED_LICENSE_TYPE" ]; then + echo "ERROR: detected license type doesn't match expected $EXPECTED_LICENSE_TYPE" + exit 1 + fi + + docs:check-links: + desc: Check for dead links in documentation + cmds: + - | + npx --package markdown-link-check --call ' + STATUS=0 + for file in $(find -name "*.md"); do + markdown-link-check --quiet "$file" + STATUS=$(( $STATUS + $? )) + done + exit $STATUS' + + docs:check-formatting: + desc: Check formatting of documentation files + cmds: + - npx {{.PRETTIER}} --check "**/*.md" + + check-spelling: + desc: Check for commonly misspelled words + cmds: + - poetry install --no-root + - poetry run codespell {{.CODESPELL_SKIP_OPTION}} {{.CODESPELL_IGNORE_WORDS_OPTION}} + + config:check: + desc: Lint and check formatting of configuration files + deps: + - task: config:check-formatting + + config:check-formatting: + desc: Check formatting of configuration files + cmds: + - npx {{.PRETTIER}} --check "**/*.{yml,yaml,json}" + + format: + desc: Format all files + deps: + - task: go:format + - task: docs:format + - task: config:format + + go:format: + desc: Format Go code + cmds: + - gofmt -l -w {{default .DEFAULT_GO_PATHS .GO_PATHS}} + + docs:format: + desc: Format documentation files + cmds: + - npx {{.PRETTIER}} --write "**/*.md" + + config:format: + desc: Format configuration files + cmds: + - npx {{.PRETTIER}} --write "**/*.{yml,yaml,json}" + + correct-spelling: + desc: Correct commonly misspelled words where possible + cmds: + - poetry install --no-root + - poetry run codespell --write-changes {{.CODESPELL_SKIP_OPTION}} {{.CODESPELL_IGNORE_WORDS_OPTION}} diff --git a/manager/go.mod b/manager/go.mod new file mode 100644 index 000000000..970a19f06 --- /dev/null +++ b/manager/go.mod @@ -0,0 +1,10 @@ +module github.com/arduino/library-manager-list/manager + +go 1.14 + +require ( + github.com/arduino/go-paths-helper v1.5.0 + github.com/arduino/go-properties-orderedmap v1.4.0 + github.com/sourcegraph/go-diff v0.6.1 + github.com/stretchr/testify v1.3.0 +) diff --git a/manager/go.sum b/manager/go.sum new file mode 100644 index 000000000..1869338ca --- /dev/null +++ b/manager/go.sum @@ -0,0 +1,22 @@ +github.com/arduino/go-paths-helper v1.0.1/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck= +github.com/arduino/go-paths-helper v1.5.0 h1:RVo189hD+GhUS1rQ3gixwK1nSbvVR8MGIGa7Gxv2bdM= +github.com/arduino/go-paths-helper v1.5.0/go.mod h1:V82BWgAAp4IbmlybxQdk9Bpkz8M4Qyx+RAFKaG9NuvU= +github.com/arduino/go-properties-orderedmap v1.4.0 h1:YEbbzPqm1gXWDM/Jaq8tlvmh09z2qeHPJTUw9/VA4Dk= +github.com/arduino/go-properties-orderedmap v1.4.0/go.mod h1:DKjD2VXY/NZmlingh4lSFMEYCVubfeArCsGPGDwb2yk= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/manager/main.go b/manager/main.go new file mode 100644 index 000000000..8238964fe --- /dev/null +++ b/manager/main.go @@ -0,0 +1,386 @@ +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "bytes" + "encoding/json" + "flag" + "fmt" + "io" + "net/http" + "net/url" + "os" + "os/exec" + "strings" + + "github.com/sourcegraph/go-diff/diff" + + "github.com/arduino/go-paths-helper" + properties "github.com/arduino/go-properties-orderedmap" +) + +// Git hosts that are supported for library repositories. +var supportedHosts []string = []string{ + "bitbucket.org", + "github.com", + "gitlab.com", +} + +// Libraries under these organizations will have the "Arduino" type and be linted with Arduino Lint in the "official" setting. +var officialOrganizations []string = []string{ + "github.com/arduino", + "github.com/arduino-libraries", + "github.com/bcmi-labs", + "github.com/vidor-libraries", +} + +// Libraries under these organizations will have the "Partner" type. +var partnerOrganizations []string = []string{ + "github.com/Azure", + "github.com/ms-iot", + "github.com/ameltech", +} + +// Libraries under these organizations will have the "Recommended" type. +var recommendedOrganizations []string = []string{ + "github.com/adafruit", +} + +// requestType is the type of the request data. +type requestType struct { + Type string `json:"type"` // Request type. + Submissions []submissionType `json:"submissions"` // Data for submitted libraries. + IndexEntry string `json:"indexEntry"` // Entry that will be made to the Library Manager index source file when the submission is accepted. +} + +// submissionType is the type of the data for each individual library submitted in the request. +type submissionType struct { + SubmissionURL string `json:"submissionURL"` // Library repository URL as submitted by user. Used to identify the submission to the user. + NormalizedURL string `json:"normalizedURL"` // Submission URL in the standardized format that will be used in the index entry. + Name string `json:"name"` // Library name. + Official bool `json:"official"` // Whether the library is official. + Tag string `json:"tag"` // Name of the submission repository's latest tag, which is used as the basis for the index entry and validation. + Error string `json:"error"` // Error message. +} + +// Command line flags. +var diffPathArgument = flag.String("diffpath", "", "") +var repoPathArgument = flag.String("repopath", "", "") +var listNameArgument = flag.String("listname", "", "") + +func main() { + // Validate flag input. + flag.Parse() + + if *diffPathArgument == "" { + errorExit("--diffpath flag is required") + } + + if *repoPathArgument == "" { + errorExit("--repopath flag is required") + } + + if *listNameArgument == "" { + errorExit("--listname flag is required") + } + + diffPath := paths.New(*diffPathArgument) + exist, err := diffPath.ExistCheck() + if !exist { + errorExit("diff file not found") + } + + listPath := paths.New(*repoPathArgument, *listNameArgument) + exist, err = listPath.ExistCheck() + if !exist { + errorExit(fmt.Sprintf("list file %s not found", listPath)) + } + + // Parse the PR diff. + rawDiff, err := diffPath.ReadFile() + if err != nil { + panic(err) + } + var request requestType + var submissionURLs []string + request.Type, submissionURLs = parseDiff(rawDiff, *listNameArgument) + + // Process the submissions. + var indexEntries []string + for _, submissionURL := range submissionURLs { + submission, indexEntry := populateSubmission(submissionURL, listPath) + request.Submissions = append(request.Submissions, submission) + indexEntries = append(indexEntries, indexEntry) + } + + // Assemble the index entry for the submissions. + request.IndexEntry = strings.Join(indexEntries, "%0A") + + // Marshal the request data into a JSON document. + var marshalledRequest bytes.Buffer + jsonEncoder := json.NewEncoder(io.Writer(&marshalledRequest)) + // By default, the json package HTML-sanitizes strings during marshalling (https://golang.org/pkg/encoding/json/#Marshal) + // It's not possible to change this behavior when using the simple json.MarshalIndent() approach. + jsonEncoder.SetEscapeHTML(false) + jsonEncoder.SetIndent("", "") // Single line. + err = jsonEncoder.Encode(request) + if err != nil { + panic(err) + } + + fmt.Println(marshalledRequest.String()) +} + +// errorExit prints the error message in a standardized format and exits with status 1. +func errorExit(message string) { + fmt.Printf("ERROR: %s\n", message) + os.Exit(1) +} + +// parseDiff parses the request diff and returns the request type and list of submission URLs. +func parseDiff(rawDiff []byte, listName string) (string, []string) { + var submissionURLs []string + + diffs, err := diff.ParseMultiFileDiff(rawDiff) + if err != nil { + panic(err) + } + + if (len(diffs) != 1) || (diffs[0].OrigName[2:] != listName) || (diffs[0].OrigName[2:] != diffs[0].NewName[2:]) { // Git diffs have a a/ or b/ prefix on file names. + // This is not a Library Manager submission. + return "other", nil + } + + var addedCount int + var deletedCount int + // Get the added URLs from the diff + for _, hunk := range diffs[0].Hunks { + hunkBody := string(hunk.Body) + for _, rawDiffLine := range strings.Split(hunkBody, "\n") { + diffLine := strings.TrimRight(rawDiffLine, " \t") + if len(diffLine) < 2 { + continue // Ignore blank lines. + } + + switch diffLine[0] { + case '+': + addedCount++ + submissionURLs = append(submissionURLs, strings.TrimSpace(diffLine[1:])) + case '-': + deletedCount++ + default: + continue + } + } + } + + var requestType string + if addedCount > 0 && deletedCount == 0 { + requestType = "submission" + } else if addedCount == 0 && deletedCount > 0 { + requestType = "removal" + } else { + requestType = "modification" + } + + return requestType, submissionURLs +} + +// populateSubmission does the checks on the submission that aren't provided by Arduino Lint and gathers the necessary data on it. +func populateSubmission(submissionURL string, listPath *paths.Path) (submissionType, string) { + indexSourceSeparator := "|" + var submission submissionType + + submission.SubmissionURL = submissionURL + + // Normalize and validate submission URL. + submissionURLObject, err := url.Parse(submission.SubmissionURL) + if err != nil { + submission.Error = fmt.Sprintf("Invalid submission URL (%s)", err) + return submission, "" + } + + // Check if URL is accessible. + httpResponse, err := http.Get(submissionURLObject.String()) + if err != nil { + submission.Error = fmt.Sprintf("Unable to load submission URL: %s", err) + return submission, "" + } + if httpResponse.StatusCode != http.StatusOK { + submission.Error = "Unable to load submission URL. Is the repository public?" + return submission, "" + } + + // Resolve redirects and normalize. + normalizedURLObject := normalizeURL(httpResponse.Request.URL) + + submission.NormalizedURL = normalizedURLObject.String() + + // Check if URL is from a supported Git host. + if !uRLIsUnder(normalizedURLObject, supportedHosts) { + submission.Error = normalizedURLObject.Host + " is not currently supported as a Git hosting website for Library Manager.%0ASee: https://github.com/arduino/Arduino/wiki/Library-Manager-FAQ#how-can-i-add-my-library-to-library-manager" + return submission, "" + } + + // Check if URL is a Git repository + err = exec.Command("git", "ls-remote", normalizedURLObject.String()).Run() + if err != nil { + if _, ok := err.(*exec.ExitError); ok { + submission.Error = "Submission URL is not a Git clone URL (e.g., https://github.com/arduino-libraries/Servo)." + return submission, "" + } + + panic(err) + } + + // Check if the URL is already in the index. + listLines, err := listPath.ReadFileAsLines() + occurrences := 0 + for _, listURL := range listLines { + listURLObject, err := url.Parse(strings.TrimSpace(listURL)) + if err != nil { + panic(err) // All list items have already passed parsing so something is broken if this happens. + } + + normalizedListURLObject := normalizeURL(listURLObject) + if normalizedListURLObject.String() == normalizedURLObject.String() { + occurrences++ + if occurrences > 1 { + submission.Error = "Submission URL is already in the Library Manager index." + return submission, "" + } + } + } + + // Determine the library types attributes. + submission.Official = uRLIsUnder(normalizedURLObject, officialOrganizations) + var types []string + if submission.Official { + types = append(types, "Arduino") + } + if uRLIsUnder(normalizedURLObject, partnerOrganizations) { + types = append(types, "Partner") + } + if uRLIsUnder(normalizedURLObject, recommendedOrganizations) { + types = append(types, "Recommended") + } + if types == nil { + types = append(types, "Contributed") + } + + submissionClonePath, err := paths.MkTempDir("", "") + if err != nil { + panic(err) + } + + err = exec.Command("git", "clone", "--depth", "1", normalizedURLObject.String(), submissionClonePath.String()).Run() + if err != nil { + panic(err) + } + + // Determine latest tag name in submission repo + err = os.Chdir(submissionClonePath.String()) + if err != nil { + panic(err) + } + err = exec.Command("git", "fetch", "--tags").Run() + if err != nil { + panic(err) + } + tagList, err := exec.Command("git", "rev-list", "--tags", "--max-count=1").Output() + if err != nil { + panic(err) + } + if string(tagList) == "" { + submission.Error = "The repository has no tags. You need to create a [release](https://docs.github.com/en/github/administering-a-repository/managing-releases-in-a-repository) or [tag](https://git-scm.com/docs/git-tag) that matches the `version` value in the library's library.properties file." + return submission, "" + } + latestTag, err := exec.Command("git", "describe", "--tags", strings.TrimSpace(string(tagList))).Output() + if err != nil { + panic(err) + } + submission.Tag = strings.TrimSpace(string(latestTag)) + + // Checkout latest tag. + err = exec.Command("git", "checkout", submission.Tag).Run() + if err != nil { + panic(err) + } + + // Get submission library name. It is necessary to record this in the index source entry because the library is locked to this name. + libraryPropertiesPath := submissionClonePath.Join("library.properties") + if !libraryPropertiesPath.Exist() { + submission.Error = "Library is missing a library.properties metadata file." + return submission, "" + } + libraryProperties, err := properties.LoadFromPath(libraryPropertiesPath) + if err != nil { + submission.Error = fmt.Sprintf("Invalid library.properties file (%s)", err) + return submission, "" + } + var ok bool + submission.Name, ok = libraryProperties.GetOk("name") + if !ok { + submission.Error = "library.properties is missing a name field" + return submission, "" + } + + // Assemble Library Manager index source entry string + indexEntry := strings.Join( + []string{ + submission.NormalizedURL, + strings.Join(types, ","), + submission.Name, + }, + indexSourceSeparator, + ) + + return submission, indexEntry +} + +// normalizeURL converts the URL into the standardized format used in the index. +func normalizeURL(rawURL *url.URL) url.URL { + normalizedPath := strings.TrimRight(rawURL.Path, "/") + if !strings.HasSuffix(normalizedPath, ".git") { + normalizedPath += ".git" + } + + return url.URL{ + Scheme: "https", + Host: rawURL.Host, + Path: normalizedPath, + } +} + +func uRLIsUnder(childURL url.URL, parentCandidates []string) bool { + for _, parentCandidate := range parentCandidates { + if !strings.HasSuffix(parentCandidate, "/") { + parentCandidate += "/" + } + parentCandidateURL, err := url.Parse("https://" + parentCandidate) + if err != nil { + panic(err) + } + + isUnderPath, err := paths.New(childURL.Path).IsInsideDir(paths.New(parentCandidateURL.Path)) + if err != nil { + panic(err) + } + if (childURL.Host == parentCandidateURL.Host) && isUnderPath { + return true + } + } + + return false +} diff --git a/manager/main_test.go b/manager/main_test.go new file mode 100644 index 000000000..14228996a --- /dev/null +++ b/manager/main_test.go @@ -0,0 +1,194 @@ +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "net/url" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func Test_parseDiff(t *testing.T) { + testName := "Multiple files" + diff := []byte(` +diff --git a/README.md b/README.md +index d4edde0..807b76d 100644 +--- a/README.md ++++ b/README.md +@@ -1,0 +2 @@ ++hello +diff --git a/repositories.txt b/repositories.txt +index cff484d..e14c179 100644 +--- a/repositories.txt ++++ b/repositories.txt +@@ -8,0 +9 @@ https://github.com/arduino-libraries/Ethernet ++https://github.com/foo/bar +`) + + requestType, submissionURLs := parseDiff(diff, "repositories.txt") + assert.Equal(t, "other", requestType, testName) + assert.Nil(t, submissionURLs, testName) + + testName = "Not list" + diff = []byte(` +diff --git a/README.md b/README.md +index d4edde0..807b76d 100644 +--- a/README.md ++++ b/README.md +@@ -1 +1,2 @@ + # Arduino Library Manager list ++hello +`) + + requestType, submissionURLs = parseDiff(diff, "repositories.txt") + assert.Equal(t, "other", requestType, testName) + assert.Nil(t, submissionURLs, testName) + + testName = "List filename change" + diff = []byte(` +diff --git a/repositories.txt b/foobar.txt +similarity index 99% +rename from repositories.txt +rename to foobar.txt +index cff484d..e14c179 100644 +--- a/repositories.txt ++++ b/foobar.txt +@@ -8,0 +9 @@ https://github.com/arduino-libraries/Ethernet ++https://github.com/foo/bar +`) + + requestType, submissionURLs = parseDiff(diff, "repositories.txt") + assert.Equal(t, "other", requestType, testName) + assert.Nil(t, submissionURLs, testName) + + testName = "Submission" + diff = []byte(` +diff --git a/repositories.txt b/repositories.txt +index cff484d..9f67763 100644 +--- a/repositories.txt ++++ b/repositories.txt +@@ -8,0 +9,2 @@ https://github.com/arduino-libraries/Ethernet ++https://github.com/foo/bar ++https://github.com/foo/baz +`) + + requestType, submissionURLs = parseDiff(diff, "repositories.txt") + assert.Equal(t, "submission", requestType, testName) + assert.ElementsMatch(t, submissionURLs, []string{"https://github.com/foo/bar", "https://github.com/foo/baz"}, testName) + + testName = "Submission w/ no newline at end of file" + diff = []byte(` +diff --git a/repositories.txt b/repositories.txt +index cff484d..1b0b80b 100644 +--- a/repositories.txt ++++ b/repositories.txt +@@ -3391,0 +3392 @@ https://github.com/lbernstone/plotutils ++https://github.com/foo/bar +\ No newline at end of file +`) + + requestType, submissionURLs = parseDiff(diff, "repositories.txt") + assert.Equal(t, "submission", requestType, testName) + assert.ElementsMatch(t, submissionURLs, []string{"https://github.com/foo/bar"}, testName) + + testName = "Submission w/ blank line" + diff = []byte(` +diff --git a/repositories.txt b/repositories.txt +index cff484d..1b0b80b 100644 +--- a/repositories.txt ++++ b/repositories.txt +@@ -3391,0 +3392 @@ https://github.com/lbernstone/plotutils ++https://github.com/foo/bar +\ No newline at end of file +`) + + requestType, submissionURLs = parseDiff(diff, "repositories.txt") + assert.Equal(t, "submission", requestType, testName) + assert.ElementsMatch(t, submissionURLs, []string{"https://github.com/foo/bar"}, testName) + + testName = "Removal" + diff = []byte(` +diff --git a/repositories.txt b/repositories.txt +index cff484d..38e11d8 100644 +--- a/repositories.txt ++++ b/repositories.txt +@@ -8 +7,0 @@ https://github.com/firmata/arduino +-https://github.com/arduino-libraries/Ethernet +`) + + requestType, submissionURLs = parseDiff(diff, "repositories.txt") + assert.Equal(t, "removal", requestType, testName) + assert.Nil(t, submissionURLs, testName) + + testName = "Modification" + diff = []byte(` +diff --git a/repositories.txt b/repositories.txt +index cff484d..8b401a1 100644 +--- a/repositories.txt ++++ b/repositories.txt +@@ -8 +8 @@ https://github.com/firmata/arduino +-https://github.com/arduino-libraries/Ethernet ++https://github.com/foo/bar +`) + + requestType, submissionURLs = parseDiff(diff, "repositories.txt") + assert.Equal(t, "modification", requestType, testName) + assert.Equal(t, submissionURLs, []string{"https://github.com/foo/bar"}, testName) +} + +func Test_normalizeURL(t *testing.T) { + testTables := []struct { + testName string + rawURL string + expectedNormalizedURL string + }{ + {"Trailing slash", "https://github.com/foo/bar/", "https://github.com/foo/bar.git"}, + {".git suffix", "https://github.com/foo/bar.git", "https://github.com/foo/bar.git"}, + {"http://", "http://github.com/foo/bar", "https://github.com/foo/bar.git"}, + {"git://", "git://github.com/foo/bar", "https://github.com/foo/bar.git"}, + } + + for _, testTable := range testTables { + rawURL, err := url.Parse(testTable.rawURL) + require.Nil(t, err) + expectedNormalizedURL, err := url.Parse(testTable.expectedNormalizedURL) + require.Nil(t, err) + + assert.Equal(t, *expectedNormalizedURL, normalizeURL(rawURL), testTable.testName) + } +} + +func Test_uRLIsUnder(t *testing.T) { + testTables := []struct { + testName string + childURL string + parentCandidates []string + assertion assert.BoolAssertionFunc + }{ + {"Match, root path", "https://github.com/foo/bar", []string{"example.com", "github.com"}, assert.True}, + {"Mismatch, root path", "https://github.com/foo/bar", []string{"example.com", "example.org"}, assert.False}, + {"Match, subfolder", "https://github.com/foo/bar", []string{"example.com/foo", "github.com/foo"}, assert.True}, + {"Mismatch, subfolder", "https://github.com/foo/bar", []string{"example.com/foo", "github.org/bar"}, assert.False}, + } + + for _, testTable := range testTables { + childURL, err := url.Parse(testTable.childURL) + require.Nil(t, err) + + t.Run(testTable.testName, func(t *testing.T) { + testTable.assertion(t, uRLIsUnder(*childURL, testTable.parentCandidates)) + }) + } +} diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..bb109dbb7 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,22 @@ +[[package]] +category = "dev" +description = "Codespell" +name = "codespell" +optional = false +python-versions = ">=3.5" +version = "2.0.0" + +[package.extras] +dev = ["check-manifest", "flake8", "pytest", "pytest-cov", "pytest-dependency"] +hard-encoding-detection = ["chardet"] + +[metadata] +content-hash = "04bfba866bc7b58afdfc851fc8ec7e13967445b6124f0a03e78e8fdedd70c6e3" +lock-version = "1.0" +python-versions = "^3.8" + +[metadata.files] +codespell = [ + {file = "codespell-2.0.0-py3-none-any.whl", hash = "sha256:a10b8bbb9f678e4edff7877af1f654fdc9e27c205f952c3ddee2981ad02ec5f2"}, + {file = "codespell-2.0.0.tar.gz", hash = "sha256:dd9983e096b9f7ba89dd2d2466d1fc37231d060f19066331b9571341363c77b8"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..cdcc385ae --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,11 @@ +[tool.poetry] +name = "library-manager-list" +version = "0.0.0" +description = "Arduino Library Manager list" +authors = ["Arduino "] + +[tool.poetry.dependencies] +python = "^3.8" + +[tool.poetry.dev-dependencies] +codespell = ">=2.0.0" diff --git a/repositories.txt b/repositories.txt new file mode 100644 index 000000000..6f1b36b36 --- /dev/null +++ b/repositories.txt @@ -0,0 +1,3629 @@ +https://github.com/silvanocerza/SilServo +https://bitbucket.org/amotzek/cooperative-multitasking +https://bitbucket.org/amotzek/mqtt-client +https://bitbucket.org/christandlg/as3935mi +https://bitbucket.org/christandlg/bmp180mi +https://bitbucket.org/christandlg/bmx280mi +https://bitbucket.org/christandlg/iaq-coremi +https://bitbucket.org/christandlg/tsl2591mi +https://bitbucket.org/geekfactory/gfbutton +https://bitbucket.org/geekfactory/shell +https://bitbucket.org/harmonicbionics/ease_arduinocode +https://bitbucket.org/pjhardy/arduinosinspace +https://bitbucket.org/pjhardy/kerbalsimpit-arduino +https://bitbucket.org/teckel12/arduino-new-ping +https://bitbucket.org/xoseperez/pcf8583 +https://git.antares.id/lorawan-loraid/arduino-loraid +https://github.com/0015/TP_Arduino_DigitalRain_Anim +https://github.com/0xCAFEDECAF/VanBus +https://github.com/107-systems/107-Arduino-BMP388 +https://github.com/107-systems/107-Arduino-Debug +https://github.com/107-systems/107-Arduino-MCP2515 +https://github.com/107-systems/107-Arduino-NMEA-Parser +https://github.com/107-systems/107-Arduino-TMF8801 +https://github.com/107-systems/107-Arduino-UAVCAN +https://github.com/1IoT/cloud-connectivity-lib +https://github.com/1oginov/UbxGps +https://github.com/256dpi/arduino-mqtt +https://github.com/2dom/PxMatrix +https://github.com/4-20ma/i2c_adc_ads7828 +https://github.com/4-20ma/I2cDiscreteIoExpander +https://github.com/4-20ma/ModbusMaster +https://github.com/4dsystems/Diablo16-Serial-Arduino-Library +https://github.com/4dsystems/GFX4d +https://github.com/4dsystems/GFX4DIoD9 +https://github.com/4dsystems/Goldelox-Serial-Arduino-Library +https://github.com/4dsystems/Picaso-Serial-Arduino-Library +https://github.com/4dsystems/SOMOIoD +https://github.com/4dsystems/ViSi-Genie-Arduino-Library +https://github.com/5N44P/ht1621-7-seg +https://github.com/5pIO/BLESerial +https://github.com/8bitbuddhist/PixelMaestro +https://github.com/934virginia/Norman +https://github.com/a7md0/WakeOnLan +https://github.com/aaryaapg/SPC-Library +https://github.com/Aasim-A/AsyncTimer +https://github.com/abaskin/MAX72XX +https://github.com/abderraouf-adjal/ArduinoSpritzCipher +https://github.com/abderraouf-adjal/Embedded-PID +https://github.com/acrandal/RevEng_PAJ7620 +https://github.com/acrobotic/Ai_Ardulib_SSD1306 +https://github.com/adafruit/Adafruit_10DOF +https://github.com/adafruit/Adafruit_9DOF +https://github.com/adafruit/Adafruit_ADS1X15 +https://github.com/adafruit/Adafruit_ADT7410 +https://github.com/adafruit/Adafruit_ADXL343 +https://github.com/adafruit/Adafruit_ADXL345 +https://github.com/adafruit/Adafruit_AHRS +https://github.com/adafruit/Adafruit_AHT10 +https://github.com/adafruit/Adafruit_AHTX0 +https://github.com/adafruit/Adafruit_AM2315 +https://github.com/adafruit/Adafruit_AM2320 +https://github.com/adafruit/Adafruit_AMG88xx +https://github.com/adafruit/Adafruit_AMRadio +https://github.com/adafruit/Adafruit_APDS9960 +https://github.com/adafruit/Adafruit_Arcada_GifDecoder +https://github.com/adafruit/Adafruit_Arcada +https://github.com/adafruit/Adafruit_AS726x +https://github.com/adafruit/Adafruit_AS7341 +https://github.com/adafruit/Adafruit_AVRProg +https://github.com/adafruit/Adafruit_BD3491FS +https://github.com/adafruit/Adafruit_BLEFirmata +https://github.com/adafruit/Adafruit_BluefruitLE_nRF51 +https://github.com/adafruit/Adafruit_BME280_Library +https://github.com/adafruit/Adafruit_BME680 +https://github.com/adafruit/Adafruit_BMP085_Unified +https://github.com/adafruit/Adafruit_BMP183_Library +https://github.com/adafruit/Adafruit_BMP183_Unified_Library +https://github.com/adafruit/Adafruit_BMP280_Library +https://github.com/adafruit/Adafruit_BMP3XX +https://github.com/adafruit/Adafruit_BNO055 +https://github.com/adafruit/Adafruit_BNO08x_RVC +https://github.com/adafruit/Adafruit_BNO08x +https://github.com/adafruit/Adafruit_BusIO +https://github.com/adafruit/Adafruit_CAP1188_Library +https://github.com/adafruit/Adafruit_CC3000_Library +https://github.com/adafruit/Adafruit_CCS811 +https://github.com/adafruit/Adafruit_CircuitPlayground +https://github.com/adafruit/Adafruit_CompositeVideo +https://github.com/adafruit/Adafruit_DAP +https://github.com/adafruit/Adafruit_DotStar +https://github.com/adafruit/Adafruit_DotStarMatrix +https://github.com/adafruit/Adafruit_DPS310 +https://github.com/adafruit/Adafruit_DRV2605_Library +https://github.com/adafruit/Adafruit_DS1841 +https://github.com/adafruit/Adafruit_DS3502 +https://github.com/adafruit/Adafruit_EMC2101 +https://github.com/adafruit/Adafruit_EPD +https://github.com/adafruit/Adafruit_ESP8266 +https://github.com/adafruit/Adafruit_FeatherOLED +https://github.com/adafruit/Adafruit_FONA +https://github.com/adafruit/Adafruit_FRAM_I2C +https://github.com/adafruit/Adafruit_FRAM_SPI +https://github.com/adafruit/Adafruit_FreeTouch +https://github.com/adafruit/Adafruit_FT6206_Library +https://github.com/adafruit/Adafruit_FXAS21002C +https://github.com/adafruit/Adafruit_FXOS8700 +https://github.com/adafruit/Adafruit_GPS +https://github.com/adafruit/Adafruit_HDC1000_Library +https://github.com/adafruit/Adafruit_HMC5883_Unified +https://github.com/adafruit/Adafruit_HTS221 +https://github.com/adafruit/Adafruit_HTU21DF_Library +https://github.com/adafruit/Adafruit_HX8357_Library +https://github.com/adafruit/Adafruit_ICM20X +https://github.com/adafruit/Adafruit_ILI9341 +https://github.com/adafruit/Adafruit_ImageReader +https://github.com/adafruit/Adafruit_INA219 +https://github.com/adafruit/Adafruit_INA260 +https://github.com/adafruit/Adafruit_IO_Arduino +https://github.com/adafruit/Adafruit_IS31FL3731 +https://github.com/adafruit/Adafruit_Keypad +https://github.com/adafruit/Adafruit_L3GD20_U +https://github.com/adafruit/Adafruit_LC709203F +https://github.com/adafruit/Adafruit_LED_Backpack +https://github.com/adafruit/Adafruit_LiquidCrystal +https://github.com/adafruit/Adafruit_LIS2MDL +https://github.com/adafruit/Adafruit_LIS331 +https://github.com/adafruit/Adafruit_LIS3DH +https://github.com/adafruit/Adafruit_LIS3MDL +https://github.com/adafruit/Adafruit_LPS2X +https://github.com/adafruit/Adafruit_LPS35HW +https://github.com/adafruit/Adafruit_LSM303_Accel +https://github.com/adafruit/Adafruit_LSM303DLH_Mag +https://github.com/adafruit/Adafruit_LSM303DLHC +https://github.com/adafruit/Adafruit_LSM6DS +https://github.com/adafruit/Adafruit_LSM9DS0_Library +https://github.com/adafruit/Adafruit_LSM9DS1 +https://github.com/adafruit/Adafruit_LTR390 +https://github.com/adafruit/Adafruit_LvGL_Glue +https://github.com/adafruit/Adafruit_MAX31856 +https://github.com/adafruit/Adafruit_MAX31865 +https://github.com/adafruit/Adafruit_MCP3008 +https://github.com/adafruit/Adafruit_MCP4725 +https://github.com/adafruit/Adafruit_MCP4728 +https://github.com/adafruit/Adafruit_MCP9600 +https://github.com/adafruit/Adafruit_MCP9808_Library +https://github.com/adafruit/Adafruit_MFRC630 +https://github.com/adafruit/Adafruit_Microbit +https://github.com/adafruit/Adafruit_MiniMLX90614 +https://github.com/adafruit/Adafruit_MLX90393_Library +https://github.com/adafruit/Adafruit_MLX90395 +https://github.com/adafruit/Adafruit_MLX90640 +https://github.com/adafruit/Adafruit_MMA8451_Library +https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library +https://github.com/adafruit/Adafruit_MP3 +https://github.com/adafruit/Adafruit_MPL115A2 +https://github.com/adafruit/Adafruit_MPL3115A2_Library +https://github.com/adafruit/Adafruit_MPR121_Library +https://github.com/adafruit/Adafruit_MPRLS +https://github.com/adafruit/Adafruit_MPU6050 +https://github.com/adafruit/Adafruit_MQTT_Library +https://github.com/adafruit/Adafruit_MS8607 +https://github.com/adafruit/Adafruit_MSA301 +https://github.com/adafruit/Adafruit_NAU7802 +https://github.com/adafruit/Adafruit_NeoMatrix_ZeroDMA +https://github.com/adafruit/Adafruit_NeoMatrix +https://github.com/adafruit/Adafruit_NeoPixel_ZeroDMA +https://github.com/adafruit/Adafruit_NeoPixel +https://github.com/adafruit/Adafruit_NeoPXL8 +https://github.com/adafruit/Adafruit_NeoTrellisM4 +https://github.com/adafruit/Adafruit_nRF8001 +https://github.com/adafruit/Adafruit_nRFCrypto +https://github.com/adafruit/Adafruit_OV7670 +https://github.com/adafruit/Adafruit_PCF8591 +https://github.com/adafruit/Adafruit_PCT2075 +https://github.com/adafruit/Adafruit_PixelDust +https://github.com/adafruit/Adafruit_Pixie +https://github.com/adafruit/Adafruit_PM25AQI +https://github.com/adafruit/Adafruit_Protomatter +https://github.com/adafruit/Adafruit_RA8875 +https://github.com/adafruit/Adafruit_SCD30 +https://github.com/adafruit/Adafruit_Seesaw +https://github.com/adafruit/Adafruit_Sensor_Calibration +https://github.com/adafruit/Adafruit_Sensor +https://github.com/adafruit/Adafruit_SensorLab +https://github.com/adafruit/Adafruit_SGP30 +https://github.com/adafruit/Adafruit_SGP40 +https://github.com/adafruit/Adafruit_SH110x +https://github.com/adafruit/Adafruit_SHARP_Memory_Display +https://github.com/adafruit/Adafruit_SHT31 +https://github.com/adafruit/Adafruit_SHTC3 +https://github.com/adafruit/Adafruit_SI1145_Library +https://github.com/adafruit/Adafruit_Si5351_Library +https://github.com/adafruit/Adafruit_Si7021 +https://github.com/adafruit/Adafruit_SleepyDog +https://github.com/adafruit/Adafruit_SoftServo +https://github.com/adafruit/Adafruit_Soundboard_library +https://github.com/adafruit/Adafruit_SPIFlash +https://github.com/adafruit/Adafruit_SSD1305 +https://github.com/adafruit/Adafruit_SSD1306 +https://github.com/adafruit/Adafruit_SSD1325_Library +https://github.com/adafruit/Adafruit_SSD1327 +https://github.com/adafruit/Adafruit_STMPE610 +https://github.com/adafruit/Adafruit_TCS34725 +https://github.com/adafruit/Adafruit_TFLite +https://github.com/adafruit/Adafruit_TiCoServo +https://github.com/adafruit/Adafruit_TinyFlash +https://github.com/adafruit/Adafruit_TinyRGBLCDShield +https://github.com/adafruit/Adafruit_TinyUSB_Arduino +https://github.com/adafruit/Adafruit_TLA202x +https://github.com/adafruit/Adafruit_TLC5947 +https://github.com/adafruit/Adafruit_TLC59711 +https://github.com/adafruit/Adafruit_TMP006 +https://github.com/adafruit/Adafruit_TMP007_Library +https://github.com/adafruit/Adafruit_TMP117 +https://github.com/adafruit/Adafruit_TouchScreen +https://github.com/adafruit/Adafruit_Trellis_Library +https://github.com/adafruit/Adafruit_TSL2561 +https://github.com/adafruit/Adafruit_TSL2591_Library +https://github.com/adafruit/Adafruit_UNTZtrument +https://github.com/adafruit/Adafruit_VCNL4010 +https://github.com/adafruit/Adafruit_VCNL4040 +https://github.com/adafruit/Adafruit_VEML6070 +https://github.com/adafruit/Adafruit_VEML6075 +https://github.com/adafruit/Adafruit_VEML7700 +https://github.com/adafruit/Adafruit_VL53L0X +https://github.com/adafruit/Adafruit_VL6180X +https://github.com/adafruit/Adafruit_VS1053_Library +https://github.com/adafruit/Adafruit_WavePlayer +https://github.com/adafruit/Adafruit_ZeroDMA +https://github.com/adafruit/Adafruit_ZeroFFT +https://github.com/adafruit/Adafruit_ZeroI2S +https://github.com/adafruit/Adafruit_ZeroPDM +https://github.com/adafruit/Adafruit_ZeroTimer +https://github.com/adafruit/Adafruit-BMP085-Library +https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library +https://github.com/adafruit/Adafruit-Flora-Pixel-Library +https://github.com/adafruit/Adafruit-GFX-Library +https://github.com/adafruit/Adafruit-Graphic-VFD-Display-Library +https://github.com/adafruit/Adafruit-MAX31855-library +https://github.com/adafruit/Adafruit-MCP23008-library +https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library +https://github.com/adafruit/Adafruit-MLX90614-Library +https://github.com/adafruit/Adafruit-Motor-Shield-library +https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library +https://github.com/adafruit/Adafruit-PN532 +https://github.com/adafruit/Adafruit-PS2-Trackpad +https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library +https://github.com/adafruit/Adafruit-RGB-LCD-Shield-Library +https://github.com/adafruit/Adafruit-Si4713-Library +https://github.com/adafruit/Adafruit-SSD1331-OLED-Driver-Library-for-Arduino +https://github.com/adafruit/Adafruit-SSD1351-library +https://github.com/adafruit/Adafruit-ST7735-Library +https://github.com/adafruit/Adafruit-Thermal-Printer-Library +https://github.com/adafruit/Adafruit-TPA2016-Library +https://github.com/adafruit/Adafruit-VC0706-Serial-Camera-Library +https://github.com/adafruit/Adafruit-WS2801-Library +https://github.com/adafruit/Audio +https://github.com/adafruit/CC3000_MDNS +https://github.com/adafruit/DHT-sensor-library +https://github.com/adafruit/Ethernet2 +https://github.com/adafruit/FifteenStep +https://github.com/adafruit/HL1606-LED-Strip-PWM +https://github.com/adafruit/HL1606-LED-Strip +https://github.com/adafruit/HT1632 +https://github.com/adafruit/LPD6803-RGB-Pixels +https://github.com/adafruit/LPD8806 +https://github.com/adafruit/MAX31850_DallasTemp +https://github.com/adafruit/MAX31850_OneWire +https://github.com/adafruit/MAX6675-library +https://github.com/adafruit/Pro_Trinket_USB_Keyboard_Library +https://github.com/adafruit/Pro_Trinket_USB_Mouse +https://github.com/adafruit/RGB-matrix-Panel +https://github.com/adafruit/RTClib +https://github.com/adafruit/SdFat +https://github.com/adafruit/SPI_VFD +https://github.com/adafruit/TFTLCD-Library +https://github.com/adafruit/TinyDHT +https://github.com/adafruit/TinyLiquidCrystal +https://github.com/adafruit/TinyLoRa +https://github.com/adafruit/TinyRTCLib +https://github.com/adafruit/TinyWireM +https://github.com/adafruit/TinyXML +https://github.com/adafruit/WaveHC +https://github.com/adameat/MaximWire +https://github.com/ademuri/esp-simple-web-dashboard +https://github.com/ademuri/smart-input-filter +https://github.com/ademuri/twilio-esp32-client +https://github.com/Adminius/Dimmer32u4 +https://github.com/Adminius/DimmerControl +https://github.com/Adminius/DimmerZero +https://github.com/adrien-legrand/as5x47 +https://github.com/Aduen/ThreadedTimer +https://github.com/aelse/ArduinoStatsd +https://github.com/agdl/arduino-multiplePinsAPIs +https://github.com/agdl/Base64 +https://github.com/agdl/GoPRO +https://github.com/agdl/WireUpdate +https://github.com/agmangas/SerialRFID +https://github.com/aharshac/EasyNTPClient +https://github.com/aharshac/StringSplitter +https://github.com/ai-techsystems/arduino +https://github.com/AidenKunkler-Peck/Tactile-Necklace +https://github.com/AIO-Javeriana/AIO-module-nodemcu-arduino +https://github.com/Aircoookie/Espalexa +https://github.com/airgradienthq/arduino +https://github.com/AIS-DeviceInnovation/AIS_NB_BC95 +https://github.com/AIS-DeviceInnovation/Magellan_BC95_lite +https://github.com/AIS-DeviceInnovation/Magellan_BC95 +https://github.com/AIS-DeviceInnovation/Magellan_SIM7020E +https://github.com/AJMansfield/LcdEffects +https://github.com/AJMansfield/TriacDimmer +https://github.com/akafugu/FourLetterWord +https://github.com/akafugu/TWIDisplayLibrary +https://github.com/akafugu/TWIKeyboardLibrary +https://github.com/akafugu/TWILiquidCrystalLibrary +https://github.com/akafugu/WireRtcLibrary +https://github.com/AKJ7/TM1637 +https://github.com/akkoyun/Environment +https://github.com/akkoyun/GE910 +https://github.com/akkoyun/LinearRegression +https://github.com/Alex079/TinySuite +https://github.com/AlexanderLL95/SerialUtil +https://github.com/AlexandreHiroyuki/MovingAverage_ArduinoLibrary +https://github.com/alexbertis/LibreriaLedRGB +https://github.com/AlexIII/EEvar +https://github.com/alextaujenis/RBD_Button +https://github.com/alextaujenis/RBD_Capacitance +https://github.com/alextaujenis/RBD_HumanSensor +https://github.com/alextaujenis/RBD_Light +https://github.com/alextaujenis/RBD_LightSensor +https://github.com/alextaujenis/RBD_Motor +https://github.com/alextaujenis/RBD_SerialManager +https://github.com/alextaujenis/RBD_Servo +https://github.com/alextaujenis/RBD_Threshold +https://github.com/alextaujenis/RBD_Timer +https://github.com/alextaujenis/RBD_WaterSensor +https://github.com/algoduino/algoduino +https://github.com/allenchak/TA6932 +https://github.com/allthingstalk/arduino-lorawan-sdk +https://github.com/allthingstalk/arduino-ltem-sdk +https://github.com/allthingstalk/arduino-wifi-sdk +https://github.com/AllWize/allwize +https://github.com/AllWize/mbus-payload +https://github.com/almavios/almavios-lit-mqtt +https://github.com/AloriumTechnology/evo_bsp +https://github.com/AloriumTechnology/evo_build_template +https://github.com/AloriumTechnology/evo_pmux_csr +https://github.com/AloriumTechnology/UbidotsXLR8 +https://github.com/AloriumTechnology/XLR8ADC +https://github.com/AloriumTechnology/XLR8AddrPack +https://github.com/AloriumTechnology/XLR8BuildTemplate +https://github.com/AloriumTechnology/XLR8Core +https://github.com/AloriumTechnology/XLR8DigitalIO +https://github.com/AloriumTechnology/XLR8DMem +https://github.com/AloriumTechnology/XLR8Float +https://github.com/AloriumTechnology/XLR8HardwareSerial +https://github.com/AloriumTechnology/XLR8Info +https://github.com/AloriumTechnology/XLR8LFSR +https://github.com/AloriumTechnology/XLR8NeoPixel +https://github.com/AloriumTechnology/XLR8PID +https://github.com/AloriumTechnology/XLR8Pong +https://github.com/AloriumTechnology/XLR8PWM +https://github.com/AloriumTechnology/XLR8Quadrature +https://github.com/AloriumTechnology/XLR8RC +https://github.com/AloriumTechnology/XLR8Servo +https://github.com/AloriumTechnology/XLR8SPI +https://github.com/AloriumTechnology/XLR8USB +https://github.com/AloriumTechnology/XLR8Wire +https://github.com/AlpenglowInd/BigNums2x2 +https://github.com/AlpenglowInd/FUnicorn +https://github.com/alrevuelta/SEN10724 +https://github.com/amaxilat/ble_definitions +https://github.com/AmbientDataInc/Ambient_ESP8266_lib +https://github.com/amcewen/HttpClient +https://github.com/ameer1234567890/ShiftDisplay2 +https://github.com/ameer1234567890/TelnetStream2 +https://github.com/ameltech/sme-cc2541-library +https://github.com/ameltech/sme-hts221-library +https://github.com/ameltech/sme-le51-868-library +https://github.com/ameltech/sme-lps25h-library +https://github.com/ameltech/sme-lsm9ds1-library +https://github.com/ameltech/sme-nt3h1x01-library +https://github.com/ameltech/sme-se868-a-library +https://github.com/ameltech/sme-vl6180x-library +https://github.com/amirchev/EZPROM +https://github.com/amirchev/VariableTimedAction +https://github.com/amperka/AmperkaFET +https://github.com/amperka/Octofet +https://github.com/amperka/Troyka-IMU +https://github.com/amperka/TroykaAccelerometer +https://github.com/amperka/TroykaDHT +https://github.com/amperka/TroykaGPS +https://github.com/amperka/TroykaI2CHub +https://github.com/amperka/TroykaLight +https://github.com/amperka/TroykaThermometer +https://github.com/amperpirat/MAX77650-Arduino-Library +https://github.com/andatche/arduino-lcd03 +https://github.com/andhieSetyabudi/atlas_OEM +https://github.com/andhieSetyabudi/BQ25896 +https://github.com/andium/AmazonDRS +https://github.com/andium/hueDino +https://github.com/andrasbiro/AmigaMouseJoyEmu +https://github.com/AndreaLombardo/L298N +https://github.com/andrewrapp/xbee-arduino +https://github.com/andriitishchenko/HardwareButton +https://github.com/andriyadi/AzureIoTHubMQTTClient +https://github.com/andriyadi/EspX +https://github.com/Andy4495/ICM7218 +https://github.com/Andy4495/LED744511 +https://github.com/Andy4495/TLC591x +https://github.com/andydoro/DST_RTC +https://github.com/annem/AD7193 +https://github.com/annem/ADXL362 +https://github.com/Annikken/Andee +https://github.com/Annikken/Andee101 +https://github.com/Annikken/AndeeMobile +https://github.com/Annikken/EasyAndee +https://github.com/Annikken/EasyAndee101 +https://github.com/antaresdocumentation/antares-esp8266-http +https://github.com/antaresdocumentation/antares-esp8266-mqtt +https://github.com/antaresdocumentation/lorawan-loraid +https://github.com/antevir/OrviboS20_Arduino +https://github.com/antoinepetty/RMCS-220X-Control +https://github.com/AntoIOT/anto-esp8266-arduino +https://github.com/antoniopetruzzella/BeaconNano +https://github.com/anunpanya/ESP8266_QRcode +https://github.com/AnyLeaf/ph-cpp +https://github.com/Apollon77/I2CSoilMoistureSensor +https://github.com/aptinex/Aptinex_DAC +https://github.com/arachnidlabs/tsunami-arduino +https://github.com/arash77/BaleMessengerBot_Arduino +https://github.com/arbotics-llc/databot_arduino +https://github.com/arbv/avr-context +https://github.com/ardnew/ILI9341-Layout-Manager +https://github.com/ardnew/STUSB4500 +https://github.com/ardnew/XPT2046_Calibrated +https://github.com/Arduboy/Arduboy +https://github.com/Arduboy/ArduboyPlaytune +https://github.com/arduino-libraries/Arduino_APDS9960 +https://github.com/arduino-libraries/Arduino_BQ24195 +https://github.com/arduino-libraries/Arduino_ConnectionHandler +https://github.com/arduino-libraries/Arduino_CRC32 +https://github.com/arduino-libraries/Arduino_DebugUtils +https://github.com/arduino-libraries/Arduino_HTS221 +https://github.com/arduino-libraries/Arduino_JSON +https://github.com/arduino-libraries/Arduino_KNN +https://github.com/arduino-libraries/Arduino_LPS22HB +https://github.com/arduino-libraries/Arduino_LSM6DS3 +https://github.com/arduino-libraries/Arduino_LSM9DS1 +https://github.com/arduino-libraries/Arduino_MCHPTouch +https://github.com/arduino-libraries/Arduino_MKRENV +https://github.com/arduino-libraries/Arduino_MKRGPS +https://github.com/arduino-libraries/Arduino_MKRIoTCarrier +https://github.com/arduino-libraries/Arduino_MKRMEM +https://github.com/arduino-libraries/Arduino_MKRRGB +https://github.com/arduino-libraries/Arduino_MKRTHERM +https://github.com/arduino-libraries/Arduino_OAuth +https://github.com/arduino-libraries/Arduino_OV767X +https://github.com/arduino-libraries/Arduino_ScienceJournal +https://github.com/arduino-libraries/Arduino_SensorKit +https://github.com/arduino-libraries/ArduinoBearSSL +https://github.com/arduino-libraries/ArduinoBLE +https://github.com/arduino-libraries/ArduinoCloudThing +https://github.com/arduino-libraries/ArduinoDMX +https://github.com/arduino-libraries/ArduinoECCX08 +https://github.com/arduino-libraries/ArduinoGraphics +https://github.com/arduino-libraries/ArduinoHttpClient +https://github.com/arduino-libraries/ArduinoIoTCloud +https://github.com/arduino-libraries/ArduinoIoTCloudBearSSL +https://github.com/arduino-libraries/ArduinoLowPower +https://github.com/arduino-libraries/ArduinoMDNS +https://github.com/arduino-libraries/ArduinoModbus +https://github.com/arduino-libraries/ArduinoMotorCarrier +https://github.com/arduino-libraries/ArduinoMqttClient +https://github.com/arduino-libraries/ArduinoRS485 +https://github.com/arduino-libraries/ArduinoSound +https://github.com/arduino-libraries/Audio +https://github.com/arduino-libraries/AudioFrequencyMeter +https://github.com/arduino-libraries/AudioZero +https://github.com/arduino-libraries/BNO055 +https://github.com/arduino-libraries/Braccio +https://github.com/arduino-libraries/Bridge +https://github.com/arduino-libraries/Ciao +https://github.com/arduino-libraries/CTC-Go-Core-Module +https://github.com/arduino-libraries/CTC-Go-Motions-Expansion +https://github.com/arduino-libraries/Esplora +https://github.com/arduino-libraries/Ethernet +https://github.com/arduino-libraries/Firmata-Old +https://github.com/arduino-libraries/GSM +https://github.com/arduino-libraries/Keyboard +https://github.com/arduino-libraries/LiquidCrystal +https://github.com/arduino-libraries/MadgwickAHRS +https://github.com/arduino-libraries/MIDIUSB +https://github.com/arduino-libraries/MKRGSM +https://github.com/arduino-libraries/MKRIMU +https://github.com/arduino-libraries/MKRMotorCarrier +https://github.com/arduino-libraries/MKRNB +https://github.com/arduino-libraries/MKRWAN_v2 +https://github.com/arduino-libraries/MKRWAN +https://github.com/arduino-libraries/Mouse +https://github.com/arduino-libraries/NTPClient +https://github.com/arduino-libraries/PhysicsLabFirmware +https://github.com/arduino-libraries/Robot_Control +https://github.com/arduino-libraries/Robot_Motor +https://github.com/arduino-libraries/RobotIRremote +https://github.com/arduino-libraries/RTCZero +https://github.com/arduino-libraries/Scheduler +https://github.com/arduino-libraries/SD +https://github.com/arduino-libraries/Servo +https://github.com/arduino-libraries/SigFox +https://github.com/arduino-libraries/SpacebrewYun +https://github.com/arduino-libraries/Stepper +https://github.com/arduino-libraries/Temboo +https://github.com/arduino-libraries/TFT +https://github.com/arduino-libraries/UnoWiFi-Developer-Edition-Lib +https://github.com/arduino-libraries/USBHost +https://github.com/arduino-libraries/WiFi +https://github.com/arduino-libraries/WiFi101 +https://github.com/arduino-libraries/WiFi101OTA +https://github.com/arduino-libraries/WiFiNINA +https://github.com/arduino-org/arduino-library-lora-node-shield +https://github.com/arduino-org/arduino-library-wifilink +https://github.com/arduino/ArduinoCloudProviderExamples +https://github.com/arduino/EduIntro +https://github.com/arduinocodedog/Parallax-Smart-Card-Reader-Library-for-Arduino +https://github.com/ArduinoGetStarted/button +https://github.com/ArduinoGetStarted/output +https://github.com/ArduinoMax/AD5241 +https://github.com/ArduinoMax/MCP41xxx +https://github.com/ArduinoMax/TLC5615 +https://github.com/arduinoverkstad/EducationShield +https://github.com/Arekushi/Finite-State-Machine-Arduino +https://github.com/areve/WebSocketStreamClient +https://github.com/arielnh56/ACE128 +https://github.com/arielnh56/OctoSonar +https://github.com/arielnh56/SonarI2C +https://github.com/ArkEcosystem/cpp-client +https://github.com/ArkEcosystem/cpp-crypto +https://github.com/arkhipenko/Dictionary +https://github.com/arkhipenko/EspBootstrap +https://github.com/arkhipenko/TaskScheduler +https://github.com/arkhipenko/TM1650 +https://github.com/ArminJo/Arduino-BlueDisplay +https://github.com/ArminJo/Arduino-FrequencyDetector +https://github.com/ArminJo/ATtinySerialOut +https://github.com/ArminJo/EasyButtonAtInt01 +https://github.com/ArminJo/NeoPatterns +https://github.com/ArminJo/PlayRtttl +https://github.com/ArminJo/PWMMotorControl +https://github.com/ArminJo/ServoEasing +https://github.com/ArminJo/Talkie +https://github.com/arms22/SoftModem +https://github.com/arpruss/ADCTouchSensor +https://github.com/arpruss/GameControllersSTM32 +https://github.com/arpruss/USBHID_stm32f1 +https://github.com/arpruss/vectordisplayarduino +https://github.com/ARSadri/PushButtonClicks +https://github.com/ArsaLearn/Arsa-Main +https://github.com/arsalmaner/Arduino-Libraries +https://github.com/arturo182/arduino_bbq10kbd +https://github.com/AshleyF/BriefEmbedded +https://github.com/askuric/Arduino-FOC +https://github.com/aspenforest/SIM800 +https://github.com/aster94/GoProControl +https://github.com/aster94/Keyword-Protocol-2000 +https://github.com/aster94/SensorFusion +https://github.com/aster94/Utilities +https://github.com/astuder/icp-101xx +https://github.com/asukiaaa/AD5254_asukiaaa +https://github.com/asukiaaa/AM2320_asukiaaa +https://github.com/asukiaaa/arduino-button +https://github.com/asukiaaa/arduino-rs485 +https://github.com/asukiaaa/arduino-string +https://github.com/asukiaaa/arduino-wire +https://github.com/asukiaaa/BLVD20KM_asukiaaa +https://github.com/asukiaaa/EPD +https://github.com/asukiaaa/I2cControlPanel_asukiaaa +https://github.com/asukiaaa/I2cMotors_asukiaaa +https://github.com/asukiaaa/I2cMultipleMotors_asukiaaa +https://github.com/asukiaaa/INA226_asukiaaa +https://github.com/asukiaaa/MPU9250_asukiaaa +https://github.com/asukiaaa/SomeSerial +https://github.com/asukiaaa/ST7032_asukiaaa +https://github.com/asukiaaa/ThingSpeak_asukiaaa +https://github.com/asukiaaa/utils_asukiaaa +https://github.com/asukiaaa/WiredController_asukiaaa +https://github.com/Asyasyarif/RFID-Spacecat +https://github.com/aszopko/somfy-esp8266 +https://github.com/athombv/homey-arduino-library +https://github.com/Atzingen/controleForno +https://github.com/audeme/MOVIArduinoAPI +https://github.com/Avamander/arduino-tvout +https://github.com/avandalen/avdweb_AnalogReadFast +https://github.com/avandalen/avdweb_FreqPeriodCounter +https://github.com/avandalen/avdweb_SAMDtimer +https://github.com/avandalen/avdweb_Switch +https://github.com/avandalen/VirtualDelay +https://github.com/avishorp/TM1637 +https://github.com/awesomeshield/Awesome-Shield-Library +https://github.com/axelelettronica/sme-lsm6ds3-library +https://github.com/axelelettronica/sme-nxp-st-library +https://github.com/axelelettronica/sme-rn2483-library +https://github.com/Aypac/Arduino-TR-064-SOAP-Library +https://github.com/ayushsharma82/AsyncElegantOTA +https://github.com/ayushsharma82/EasyDDNS +https://github.com/ayushsharma82/EasyUI +https://github.com/ayushsharma82/ElegantOTA +https://github.com/ayushsharma82/ESP-DASH +https://github.com/ayushsharma82/WebSerial +https://github.com/Azure/azure-iot-arduino-protocol-http +https://github.com/Azure/azure-iot-arduino-protocol-mqtt +https://github.com/Azure/azure-iot-arduino-socket-esp32-wifi +https://github.com/Azure/azure-iot-arduino-utility +https://github.com/Azure/azure-iot-arduino +https://github.com/baghayi/Nokia_5110 +https://github.com/bakercp/BufferUtils +https://github.com/bakercp/CRC32 +https://github.com/bakercp/Logger +https://github.com/bakercp/MCP3XXX +https://github.com/bakercp/PacketSerial +https://github.com/Bananut-Electronics/MiDispositivoMIDI_V3 +https://github.com/bandarei/AD9850-DDS +https://github.com/barisdinc/LibAPRS_Tracker +https://github.com/bartoszbielawski/AJSP +https://github.com/bartoszbielawski/C-Tasks +https://github.com/bartoszbielawski/LEDMatrixDriver +https://github.com/bblanchon/ArduinoJson +https://github.com/bblanchon/ArduinoStreamUtils +https://github.com/bblanchon/ArduinoTrace +https://github.com/bcmi-labs/tensorflow_lite_mirror +https://github.com/beegee-tokyo/DHTesp +https://github.com/beegee-tokyo/nRF52_OLED +https://github.com/beegee-tokyo/SHT1x-ESP +https://github.com/beegee-tokyo/SX126x-Arduino +https://github.com/beegee-tokyo/VNCL4020C-Arduino +https://github.com/BeelanMX/arduino-LoRaWAN +https://github.com/beetlikeyg087/MFUthings +https://github.com/belidzs/PreciseLM35 +https://github.com/bengtmartensson/ABeacon +https://github.com/bengtmartensson/AGirs +https://github.com/bengtmartensson/Arduino-DecodeIR +https://github.com/bengtmartensson/GlobalCovfefe +https://github.com/bengtmartensson/Infrared4Arduino +https://github.com/bernebeer/Charge-n-Boost +https://github.com/bhagman/ControlledServo +https://github.com/bhagman/LitSwitch +https://github.com/bhagman/MillisTimer +https://github.com/bhagman/SoftPWM +https://github.com/bhagman/Tone +https://github.com/bhagman/WireData +https://github.com/biagiom/AccessoryShield +https://github.com/biagiom/LedBlinky +https://github.com/bigclownlabs/SoilSensor +https://github.com/bipropellant/bipropellant-hoverboard-api +https://github.com/bitbank2/AnimatedGIF +https://github.com/bitbank2/bb_hx1230 +https://github.com/bitbank2/bb_spi_lcd +https://github.com/bitbank2/bb_uc1701 +https://github.com/bitbank2/BitBang_I2C +https://github.com/bitbank2/esp32_gamepad +https://github.com/bitbank2/JPEGDEC +https://github.com/bitbank2/Multi_BitBang +https://github.com/bitbank2/Multi_OLED +https://github.com/bitbank2/OneBitDisplay +https://github.com/bitbank2/ss_oled +https://github.com/bitbank2/ssd1327 +https://github.com/bitbank2/Thermal_Printer +https://github.com/bitbank2/TIFF_G4 +https://github.com/bitcraze/Bitcraze_PMW3901 +https://github.com/bitixel/Omron_D6FPH +https://github.com/bitluni/ESP32Lib +https://github.com/bkolicoski/arduino-youtube-sight +https://github.com/blackhack/LCD_I2C +https://github.com/blanu/codec2-arduino +https://github.com/BlaT2512/Segment +https://github.com/BlaT2512/sevenSegment +https://github.com/blazer82/FT81x_Arduino_Driver +https://github.com/blemasle/arduino-as1115 +https://github.com/blemasle/arduino-e24 +https://github.com/blemasle/arduino-mcp23017 +https://github.com/blemasle/arduino-sim808 +https://github.com/blinker-iot/blinker-library +https://github.com/BlokasLabs/USBMIDI +https://github.com/BlueAndi/vscp-arduino +https://github.com/BlueDot-Arduino/BlueDot_BMA400 +https://github.com/BlueDot-Arduino/BlueDot_BME280_TSL2591 +https://github.com/BlueDot-Arduino/BlueDot_BME280 +https://github.com/bluemurder/DS1624 +https://github.com/bluemurder/esp8266-ping +https://github.com/bluemurder/EveryTimer +https://github.com/bluerobotics/Arduino_I2C_ESC +https://github.com/bluerobotics/BlueRobotics_KellerLD_Library +https://github.com/bluerobotics/BlueRobotics_MS5837_Library +https://github.com/bluerobotics/BlueRobotics_TSYS01_Library +https://github.com/bluerobotics/ping-arduino +https://github.com/blues/note-arduino +https://github.com/blynkkk/blynk-library +https://github.com/bmellink/IBusBM +https://github.com/bmellink/VNH3SP30 +https://github.com/bmts/FMDataClient +https://github.com/Bodmer/JPEGDecoder +https://github.com/Bodmer/TFT_eSPI +https://github.com/Bodmer/TJpg_Decoder +https://github.com/bogde/HX711 +https://github.com/bolderflight/AMS5812 +https://github.com/bolderflight/AMS5915 +https://github.com/bolderflight/BME280 +https://github.com/bolderflight/BMI088 +https://github.com/bolderflight/MPU9250 +https://github.com/bolderflight/SBUS +https://github.com/bolderflight/UBLOX +https://github.com/boodskap/BoodskapMessage +https://github.com/BoodskapPlatform/BoodskapTransceiver +https://github.com/BoschSensortec/BSEC-Arduino-library +https://github.com/boseji/PString-Arduino-lib +https://github.com/boseji/rBASE64 +https://github.com/boseji/xxtea-iot-crypt +https://github.com/Botly-Studio/Botly-Library +https://github.com/boxtec/Witty +https://github.com/bportaluri/ALA +https://github.com/bportaluri/WiFiEsp +https://github.com/br3ttb/Arduino-PID-Library +https://github.com/brain-duino/AD7173-Arduino +https://github.com/brainy-buddy-education/BBE-IoT-Class-Library +https://github.com/BrandeisMakerLab/Arduino_Education +https://github.com/BrandeisMakerLab/Zumo-Automation +https://github.com/bremme/arduino-tm1637 +https://github.com/brettmcalpine/PowerFlex4m +https://github.com/brianrho/GT5X +https://github.com/bricofoy/yasm +https://github.com/bridystone/SevSegShift +https://github.com/brigosx/SevenSeg4D +https://github.com/BrinoOficial/BibliotecaBrino +https://github.com/BriscoeTech/Arduino-FreeRTOS-SAMD21 +https://github.com/BriscoeTech/Arduino-FreeRTOS-SAMD51 +https://github.com/BroadwellConsultingInc/SerialWombatArdLib +https://github.com/BrushlessPower/SBUS2-Telemetry +https://github.com/budryerson/TFLuna-I2C +https://github.com/budryerson/TFMini-Plus-I2C +https://github.com/budryerson/TFMini-Plus +https://github.com/buelowp/sunset +https://github.com/bxparks/AceButton +https://github.com/bxparks/AceCommon +https://github.com/bxparks/AceCRC +https://github.com/bxparks/AceRoutine +https://github.com/bxparks/AceTime +https://github.com/bxparks/AceUtils +https://github.com/bxparks/AUnit +https://github.com/byronholldorf/uMulti +https://github.com/byteAgenten/ArduinoArcherPanelClient +https://github.com/cafehaine/SimpleShell +https://github.com/CAFxX/gmp-ino +https://github.com/CanSatKit/CanSatKitLibrary +https://github.com/carlosefr/magstripelib +https://github.com/carlosefr/pcd8544 +https://github.com/CasaJasmina/TelegramBot-Library +https://github.com/casanovg/Nb_Micro +https://github.com/casanovg/Nb_TimonelTwiM +https://github.com/casanovg/Nb_TwiBus +https://github.com/casanovg/nb-twi-cmd +https://github.com/cattanimarco/Grafici-GFX +https://github.com/cDnNeMeSiS/xbee_serial_array +https://github.com/CelliesProjects/moonPhase-esp32 +https://github.com/CelliesProjects/wm8978-esp32 +https://github.com/cerebro11101/CerebroBoards +https://github.com/cesanta/elk +https://github.com/cesanta/mDash +https://github.com/cesanta/mjson +https://github.com/cesarvandevelde/HerkulexServo +https://github.com/CGrassin/M62429_Arduino_Library +https://github.com/charlesbaynham/OSFS +https://github.com/chatelao/MiniPirate +https://github.com/chayanforyou/WearLeveling +https://github.com/Cheong2K/ble-sdk-arduino +https://github.com/ChicagoRobotics/CRC_Simula_Library +https://github.com/ChicagoRobotics/CRC_VCNL4200 +https://github.com/chipKIT32-libraries/PICxel +https://github.com/chipKIT32-libraries/RN487x +https://github.com/ChipTechno/ESP8266OTA +https://github.com/ChipTechno/WiFiMan +https://github.com/chirp/chirp-arduino +https://github.com/Chris--A/ArdOSC +https://github.com/Chris--A/BitBool +https://github.com/Chris--A/EEWrap +https://github.com/Chris--A/Keypad +https://github.com/Chris--A/PGMWrap +https://github.com/Chris--A/PrintEx +https://github.com/Chris--A/SmallSetup +https://github.com/ChrisDinhNZ/SMoS-cpp +https://github.com/chrisjoyce911/esp32FOTA +https://github.com/christophjurczyk/AD7390_Arduino_Library +https://github.com/christophjurczyk/LTC1392_Arduino_Library +https://github.com/ChuckBell/MySQL_Connector_Arduino +https://github.com/chunkysteveo/FortniteAPI +https://github.com/chunkysteveo/OctoPrintAPI +https://github.com/ciband/avr_stl +https://github.com/CieNTi/arduino-IoTesla-client +https://github.com/ciniml/ExtFlashLoader +https://github.com/CircuitMess/CircuitMess-Ringo +https://github.com/CircuitsFun/CircuitsFunBasic-Library-for-Arduino +https://github.com/CircuitsFun/CircuitsFunProjects-Library-for-Arduino +https://github.com/claws/BH1750 +https://github.com/closedcube/ClosedCube_BME680_Arduino +https://github.com/closedcube/ClosedCube_HDC1010_Arduino +https://github.com/closedcube/ClosedCube_HDC1080_Arduino +https://github.com/closedcube/ClosedCube_I2C_Arduino +https://github.com/closedcube/ClosedCube_LPS25HB_Arduino +https://github.com/closedcube/ClosedCube_MAX30205_Arduino +https://github.com/closedcube/ClosedCube_OPT3001_Arduino +https://github.com/closedcube/ClosedCube_OPT3002_Arduino +https://github.com/closedcube/ClosedCube_SHT31D_Arduino +https://github.com/closedcube/ClosedCube_SHT3XA_Library +https://github.com/closedcube/ClosedCube_SHT3XD_Library +https://github.com/closedcube/ClosedCube_SHTC3_Arduino +https://github.com/closedcube/ClosedCube_Si7051_Arduino +https://github.com/closedcube/ClosedCube_Si7055_Arduino +https://github.com/closedcube/ClosedCube_STS35_Arduino +https://github.com/closedcube/ClosedCube_TCA9538_Arduino +https://github.com/closedcube/ClosedCube_TCA9546A_Arduino +https://github.com/closedcube/ClosedCube_TCA9548A_Arduino +https://github.com/closedcube/ClosedCube_TMP116_Arduino +https://github.com/closedcube/ClosedCube_TSYS01_Arduino +https://github.com/cloud4rpi/cloud4rpi-esp-arduino +https://github.com/cloudchip-io/cloudchip-iot-arduino-sdk +https://github.com/cmaglie/FlashStorage +https://github.com/cmaglie/UselessLib +https://github.com/CMakerA/ESP_LM35 +https://github.com/cmmakerclub/CMMC_Interval +https://github.com/cmmakerclub/CMMC_LED +https://github.com/cmmakerclub/CMMC_NB-IoT +https://github.com/cmmakerclub/CMMC_OTA +https://github.com/cmmakerclub/CMMC-Packet +https://github.com/cmmakerclub/CMMCEasy +https://github.com/cmmakerclub/CMMCInterval +https://github.com/cmmakerclub/MQTT-Connector +https://github.com/cmmakerclub/WiFiConnector +https://github.com/cniweb/gsm-playground +https://github.com/CNMAT/OSC +https://github.com/coddingtonbear/arduino-async-duplex +https://github.com/coddingtonbear/arduino-async-modem +https://github.com/coddingtonbear/arduino-managed-serial-device +https://github.com/codecodecodec/CCC_Lib +https://github.com/codewrite/arduino-capacitor +https://github.com/codinghusi/ArduinoKnockPatternDetector +https://github.com/collin80/due_can +https://github.com/combs/DLxx416_Arduino +https://github.com/CommonWealthRobotics/BowlerCom +https://github.com/connect-things/ConnectThings_ESP8266 +https://github.com/connornishijima/AlertMe +https://github.com/connornishijima/arduino-buzz +https://github.com/connornishijima/arduino-volume +https://github.com/connornishijima/arduino-volume2 +https://github.com/connornishijima/arduino-volume3 +https://github.com/connornishijima/Lixie_II +https://github.com/connornishijima/Lixie-arduino +https://github.com/connornishijima/Pixie +https://github.com/connornishijima/TinySnore +https://github.com/constiko/RV-3028_C7-Arduino_Library +https://github.com/contrem/arduino-timer +https://github.com/CONTROLLINO-PLC/CONTROLLINO_Library +https://github.com/Controllino/ControllinoLibrary +https://github.com/corneliusmunz/legoino +https://github.com/cotestatnt/AsyncTelegram +https://github.com/cotestatnt/YA_FSM +https://github.com/CreativeRobotics/Commander +https://github.com/cristborges/IRRemoteControl +https://github.com/csash7/mbed-BLE-Mouse +https://github.com/CsCrazy85/DatavisionLCD +https://github.com/CsCrazy85/SCA100T +https://github.com/cujomalainey/ant-arduino +https://github.com/cujomalainey/antplus-arduino +https://github.com/CuriosityGym/MotorDriver +https://github.com/cvmanjoo/RTC +https://github.com/cygig/SDConfigCommand +https://github.com/cygig/SerialConfigCommand +https://github.com/cygig/TimerEvent +https://github.com/CytronTechnologies/Cytron_MP3Shield +https://github.com/CytronTechnologies/Cytron_Servo_Shield_Library +https://github.com/CytronTechnologies/Cytron_Shield3AMotor +https://github.com/CytronTechnologies/Cytron-G15Shield +https://github.com/CytronTechnologies/CytronMakerSumo +https://github.com/CytronTechnologies/CytronMotorDriver +https://github.com/CytronTechnologies/CytronWiFiShield +https://github.com/d-a-v/ESPWebDAV +https://github.com/d00616/arduino-NVM +https://github.com/d03n3rfr1tz3/HC-SR04 +https://github.com/DaAwesomeP/arduino-cardinal +https://github.com/DaAwesomeP/dmxusb +https://github.com/dabshield/DABShield +https://github.com/dadul96/Arduino-Servo-Hardware-PWM-Library +https://github.com/Dafulai/DFL168A_Async +https://github.com/Dafulai/DFL168A-Sync-Library +https://github.com/daitangio/sid-arduino-lib +https://github.com/dajtxx/ZeroTC45 +https://github.com/DaleGia/ESPFlash +https://github.com/DaleGia/ESPStringTemplate +https://github.com/DaleGia/Nano33BLESensor +https://github.com/daliworks/arduino_library +https://github.com/damellis/PCM +https://github.com/danidask/MatrizLed +https://github.com/daniel-centore/arduino-tone-library +https://github.com/DanielSaromo/PyDuinoBridge +https://github.com/DaniFoldi/Async_Operations +https://github.com/danja/TM1638lite +https://github.com/DanNixon/ArduinoUniversalInput +https://github.com/DanNixon/NeoNextion +https://github.com/Danny24/Smart-Motor-Driver-SAMI-Library +https://github.com/dantler/GroveEncoder +https://github.com/dantler/LircRemote101 +https://github.com/dantudose/MAX44009 +https://github.com/dariomas/DigitLed72xx +https://github.com/DarkDust/MHGroveBLE +https://github.com/darrenjcosborne/NextionSerialString +https://github.com/datacentricdesign/dcd-sdk-arduino +https://github.com/datacute/DoubleResetDetector +https://github.com/datacute/Tiny4kOLED +https://github.com/datacute/TinyNunchuk +https://github.com/datacute/TinyOLED-Fonts +https://github.com/DatavenueLiveObjects/LiveObjects_SDK_for_Arduino +https://github.com/davetcc/IoAbstraction +https://github.com/davetcc/LiquidCrystalIO +https://github.com/davetcc/TaskManagerIO +https://github.com/davetcc/tcMenuLib +https://github.com/david1983/eBtn +https://github.com/DavidArmstrong/SCL3300 +https://github.com/davidchatting/Approximate +https://github.com/Davideddu/APDS9930 +https://github.com/davidepalladino/AnalogIO-Arduino +https://github.com/davidepalladino/Button-Arduino +https://github.com/davidwhitney/snakelights +https://github.com/dawidchyrzynski/arduino-home-assistant +https://github.com/DBS06/CERP_DF_Robot_Wireless_GamePad_V2 +https://github.com/DBSStore/DBS_Lib +https://github.com/DeanIsMe/SevSeg +https://github.com/DedeHai/NeoPixelPainter +https://github.com/DefProc/lewis +https://github.com/DefProc/somo-ii-lib +https://github.com/deltarobotone/one_system_library +https://github.com/denkitronik/ADS1118 +https://github.com/Densaugeo/base64_arduino +https://github.com/denxhun/ComputhermRF +https://github.com/denxhun/TFA433 +https://github.com/denyssene/SimpleKalmanFilter +https://github.com/deploythefleet/arduino_esp32_update +https://github.com/deploythefleet/arduino_esp8266_update +https://github.com/dersimn/ArduinoPubSubClientTools +https://github.com/dersimn/ArduinoThreadRunOnce +https://github.com/dersimn/ArduinoUnifiedLog +https://github.com/descampsa/A4963 +https://github.com/descampsa/ardyno +https://github.com/designer2k2/EMUcan +https://github.com/designer2k2/EMUcanT4 +https://github.com/desklab/desklab-arduino-lib +https://github.com/devinaconley/arduino-plotter +https://github.com/DFRobot/DFRobotDFPlayerMini +https://github.com/DFRobot/DFRobotIRPosition +https://github.com/dgduncan/Arduino-MCP4131 +https://github.com/dgduncan/SevenSegment +https://github.com/DhrBaksteen/ArduinoOPL2 +https://github.com/DhrBaksteen/ArduinoPianoBoard +https://github.com/diegodorado/ObloqAdafruit +https://github.com/DimensionEngineering/Kangaroo_Arduino_Library +https://github.com/dimitre/DmtrPots +https://github.com/DimitriGilbert/RGBProgress +https://github.com/dingusdk/arduinoihc +https://github.com/dingusdk/esp8266IHCSoapClient +https://github.com/dirkx/CurrentTransformerWithCallbacks +https://github.com/dirkx/OptocouplerDebouncer +https://github.com/distrakt/OmEspHelpers +https://github.com/DjamesSuhanko/bbPrinter +https://github.com/DjamesSuhanko/EasyColor +https://github.com/DjamesSuhanko/EasyPCF8574 +https://github.com/djGrrr/Int64String +https://github.com/djuseeq/Ch376msc +https://github.com/dleval/STLED316S +https://github.com/dlkay0/TinyFontRenderer +https://github.com/dmadison/ArduinoXInput +https://github.com/dmadison/HID_Buttons +https://github.com/dmadison/NintendoExtensionCtrl +https://github.com/dmadison/ServoInput +https://github.com/dmadison/Xbox360ControllerLEDs +https://github.com/dmkishi/Dusk2Dawn +https://github.com/dniklaus/arduino-display-lcdkeypad +https://github.com/dniklaus/spin-timer +https://github.com/dniklaus/wiring-timer +https://github.com/dobotopensource/AIStarter +https://github.com/dojyorin/arduino_base64 +https://github.com/dojyorin/arduino_percent +https://github.com/dok-net/CoopTask +https://github.com/dok-net/esp_sds011 +https://github.com/DonnyCraft1/PIDArduino +https://github.com/douglaslyon/AudioShieldDTMF +https://github.com/dparson55/NRFLite +https://github.com/dreed47/WifiMQTTManager +https://github.com/drewfish/arduino-FourRegs +https://github.com/drewfish/arduino-TrimWright +https://github.com/drewfish/arduino-ZeroRegs +https://github.com/DrGamerGuy/GLCD +https://github.com/DrGFreeman/SharpDistSensor +https://github.com/DrGFreeman/TimedPID +https://github.com/drifkind/QDispatch +https://github.com/drp0/ADCDRP +https://github.com/drug123/T67XX +https://github.com/dualB/Melody +https://github.com/dualB/Musician +https://github.com/duinoWitchery/hd44780 +https://github.com/durydevelop/arduino-lib-oled +https://github.com/dushyantahuja/IPGeolocation +https://github.com/dushyantahuja/TFL-Status +https://github.com/Dustpancake/MQ7 +https://github.com/dvernier/GDXLib +https://github.com/dvernier/VernierLib +https://github.com/dwrobel/TrivialKalmanFilter +https://github.com/dxinteractive/AnalogMultiButton +https://github.com/dxinteractive/ResponsiveAnalogRead +https://github.com/dycodex/ESPectro32 +https://github.com/dycodex/MakestroCloudClient +https://github.com/e-radionicacom/Inkplate-6-Arduino-library +https://github.com/eagleSIA/eBoard +https://github.com/earlephilhower/ESP8266Audio +https://github.com/earthtown/8_digit_vfd +https://github.com/EasyIoT-BR/Easyiot-Esp8266 +https://github.com/ecal-mid/ESP32Servo360 +https://github.com/eccnil/ESPNow2Mqtt +https://github.com/EdanPotter/end-device-radioenge +https://github.com/EdgeiLAB/libedge +https://github.com/Edinburgh-College-of-Art/DesignInformaticsPCB +https://github.com/eduardomarcos/arduino-esp32-restclient +https://github.com/eecharlie/MatrixMath +https://github.com/ehajo/LM75B +https://github.com/ehajo/WSEN-PADS +https://github.com/EinarArnason/ArduinoQueue +https://github.com/ekkai/PMD4 +https://github.com/ekkai/PMsensor +https://github.com/elC0mpa/EnergyMeter +https://github.com/elC0mpa/OLED_SSD1306_Chart +https://github.com/electric-sheep-co/arduino-redis +https://github.com/electro-smith/DaisyDuino +https://github.com/Electro707/Simple-LED-Matrix-Library +https://github.com/ElectronicCats/AqualaboSensorsLibrary +https://github.com/ElectronicCats/CayenneLPP +https://github.com/ElectronicCats/ElectronicCats_InternalTemperatureZero +https://github.com/ElectronicCats/ElectronicCats-PN7150 +https://github.com/ElectronicCats/mpu6050 +https://github.com/elhayra/MilliStopper +https://github.com/elhayra/SandTimer +https://github.com/elhayra/Strober +https://github.com/elkrem/koyn +https://github.com/eloquentarduino/EloquentArduino +https://github.com/eloquentarduino/EloquentTinyML +https://github.com/eloquentarduino/EloquentVision +https://github.com/elpassion/Babelduino +https://github.com/elpinjo/CumulocityClient +https://github.com/elyons/pinduino +https://github.com/embeddedartistry/arduino-printf +https://github.com/emctague/Tasks +https://github.com/emelianov/modbus-esp8266 +https://github.com/EmotiBit/BMI160-Arduino +https://github.com/EmotiBit/EmotiBit_FW_FeatherWing +https://github.com/EmotiBit/EmotiBit_FW_Si7013 +https://github.com/EmotiBit/EmotiBit_MAX30101 +https://github.com/EmotiBit/EmotiBit_MLX90632 +https://github.com/EmotiBit/EmotiBit_NCP5623 +https://github.com/EmotiBit/EmotiBit_XPlat_Utils +https://github.com/eNBeWe/MiCS6814-I2C-Library +https://github.com/end2endzone/AnyRtttl +https://github.com/end2endzone/BitReader +https://github.com/end2endzone/NonBlockingRTTTL +https://github.com/end2endzone/SoftTimers +https://github.com/EnhancedRadioDevices/DDS +https://github.com/EnhancedRadioDevices/HamShield_KISS +https://github.com/EnhancedRadioDevices/HamShield +https://github.com/EnviroDIY/Arduino-SDI-12 +https://github.com/EnviroDIY/KellerModbus +https://github.com/EnviroDIY/SensorModbusMaster +https://github.com/EnviroDIY/Sodaq_DS3231 +https://github.com/EnviroDIY/YosemitechModbus +https://github.com/erdemarslan/GSMSim +https://github.com/erdnaxe/Arduino_BrushlessServo +https://github.com/Erhan-MADE/StepperControl +https://github.com/ErickSimoes/Ultrasonic +https://github.com/ERNICommunity/dbg-trace +https://github.com/ERNICommunity/debug-cli +https://github.com/erow/Task +https://github.com/ERROPiX/ESP32_AnalogWrite +https://github.com/EscaVic/ROKduino +https://github.com/ESikich/RGBLEDBlender +https://github.com/ethanjli/linear-position-control +https://github.com/ethanjli/liquid-handling-robotics +https://github.com/etherkit/JTEncode +https://github.com/etherkit/MorseArduino +https://github.com/etherkit/Si5351Arduino +https://github.com/ETLCPP/etl-arduino +https://github.com/ettoreleandrotognoli/ArcPID +https://github.com/evert-arias/EasyButton +https://github.com/evert-arias/EasyBuzzer +https://github.com/evert-arias/LedSync +https://github.com/evert-arias/MyBlinker +https://github.com/evivetoolkit/evive-Library +https://github.com/ewpa/LibSSH-ESP32 +https://github.com/ewpa/MAX3100Serial +https://github.com/exosite-garage/arduino_exosite_library +https://github.com/F4GOJ/AD9850SPI +https://github.com/fabianofranca/ESP8266RestClient +https://github.com/fabiopjve/ULWOS2 +https://github.com/fabiuz7/Dimmable-Light-Arduino +https://github.com/fabiuz7/esp-logger-lib +https://github.com/fabiuz7/melody-player-arduino +https://github.com/fabiuz7/rtc-memory-esp8266 +https://github.com/fablab-bayreuth/WTV020SD16P +https://github.com/FaBoPlatform/FaBo3Axis-ADXL345-Library +https://github.com/FaBoPlatform/FaBo7Seg-TLC59208-Library +https://github.com/FaBoPlatform/FaBo9AXIS-MPU9250-Library +https://github.com/FaBoPlatform/FaBoAmbientLight-ISL29034-Library +https://github.com/FaBoPlatform/FaBoBarometer-MPL115-Library +https://github.com/FaBoPlatform/FaBoBLE-BLE113-Library +https://github.com/FaBoPlatform/FaBoBLE-Nordic-Library +https://github.com/FaBoPlatform/FaBoColor-BH1749NUC-Library +https://github.com/FaBoPlatform/FaBoColor-s11059-Library +https://github.com/FaBoPlatform/FaBoEnvironment-BME680-Library +https://github.com/FaBoPlatform/FaBoGas-CCS811-Library +https://github.com/FaBoPlatform/FaBoGPIO-PCAL6408-Library +https://github.com/FaBoPlatform/FaBoGPIO40-PCA9698-Library +https://github.com/FaBoPlatform/FaBoHumidity-HTS221-Library +https://github.com/FaBoPlatform/FaBoKTemp-MCP3421-Library +https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library +https://github.com/FaBoPlatform/FaBoLCDmini-AQM0802A-Library +https://github.com/FaBoPlatform/FaBoMotor-DRV8830-Library +https://github.com/FaBoPlatform/FaBoOLED-EROLED096-Library +https://github.com/FaBoPlatform/FaBoProximity-VCNL4010-Library +https://github.com/FaBoPlatform/FaBoPWM-PCA9685-Library +https://github.com/FaBoPlatform/FaBoRTC-PCF2129-Library +https://github.com/FaBoPlatform/FaBoTemperature-ADT7410-Library +https://github.com/FaBoPlatform/FaBoUV-Si1132-Library +https://github.com/fabriziop/aTalkArduino +https://github.com/fabriziop/EEWL +https://github.com/fabriziop/TalkingLED +https://github.com/facts-engineering/P1AM +https://github.com/facts-engineering/ViewMarq +https://github.com/Falcons21/Custom_PID +https://github.com/Falcons21/FSerial +https://github.com/FancyFoxGems/HalfStepper +https://github.com/FancyFoxGems/IttyBitty +https://github.com/Fastcomm/hellothing_NBIoT_Arduino_Shield +https://github.com/FastLED/FastLED +https://github.com/FatBeard/vbus-arduino-library +https://github.com/fatihaslamaci/TimerFa +https://github.com/fatpat/arduino-dra818 +https://github.com/fdivitto/FabGL +https://github.com/feilipu/Arduino_FreeRTOS_Library +https://github.com/feilipu/Arduino_RTC_Library +https://github.com/feilipu/Goldilocks_Analogue_DAC_Library +https://github.com/feilipu/Goldilocks_Analogue_SPIRAM_Library +https://github.com/feklee/MultiTrans +https://github.com/felis/USB_Host_Shield_2.0 +https://github.com/fenichelar/Pin +https://github.com/ferkoyanagi/AppFernandok +https://github.com/ferkoyanagi/SevenSegmentsK +https://github.com/fesselk/everytime +https://github.com/fhessel/esp32_https_server_compat +https://github.com/fhessel/esp32_https_server +https://github.com/finitespace/BME280 +https://github.com/finson-release/FirmataWithDeviceFeature +https://github.com/finson-release/Luni +https://github.com/fire0shadow/SevSegSPI +https://github.com/fire1/PulseCom +https://github.com/firmata/arduino +https://github.com/firmata/ConfigurableFirmata +https://github.com/FirstBuild/Relay +https://github.com/fitzterra/ServoOsc +https://github.com/flav1972/ArduinoINA219 +https://github.com/floe/BTLE +https://github.com/Floessie/frt +https://github.com/flyingeinstein/Restfully +https://github.com/foothillscommunityworkshop/Robot-Model-2 +https://github.com/forkineye/E131 +https://github.com/forkineye/ESPAsyncE131 +https://github.com/forntoh/LcdMenu +https://github.com/FortySevenEffects/arduino_midi_library +https://github.com/FortySevenEffects/serde +https://github.com/foxel/arduino-noolite-tx +https://github.com/fp64lib/fp64lib +https://github.com/francibm97/UM3750 +https://github.com/frankjoshua/rosserial_arduino_lib +https://github.com/frason5566/MatrixMini +https://github.com/freaklabs/cmdArduino +https://github.com/Fredi/ArduinoIRC +https://github.com/fredilarsen/ModuleInterface +https://github.com/Freenove/Freenove_WS2812_Lib_for_ESP32 +https://github.com/Freenove/Freenove_WS2812B_RGBLED_Controller +https://github.com/freetronics/BaroSensor +https://github.com/freetronics/DMD2 +https://github.com/freetronics/FTOLED +https://github.com/freetronics/FTRGBLED +https://github.com/fterrier/dwarf433 +https://github.com/fu-hsi/FuGPS +https://github.com/fu-hsi/PMS +https://github.com/full-stack-ex/tiny-template-engine-arduino +https://github.com/funkyfisch/arduino-knock-detector +https://github.com/Fuzzer11/SDconfig +https://github.com/gabriel-milan/TinyMPU6050 +https://github.com/GabrielNotman/cryptoauthlib +https://github.com/GabrielNotman/RTCCounter +https://github.com/GadgetFactory/Gadget-Box +https://github.com/Gamadril/DD-Booster-Library +https://github.com/Gamebuino/Gamebuino-Classic +https://github.com/Gamebuino/Gamebuino-Meta +https://github.com/gamgine/Arduino-lib-HCSR04 +https://github.com/garmin/LIDARLite_Arduino_Library +https://github.com/gavinlyonsrepo/ERM19264_UC1609 +https://github.com/gavinlyonsrepo/FourteenSegDisplay +https://github.com/gavinlyonsrepo/NOKIA5110_TEXT +https://github.com/gavinlyonsrepo/TM1638plus +https://github.com/gbrd/arduino-teleinfo +https://github.com/Geabong/ModbusRTUSlaveArduino +https://github.com/gelraen/Arduino-PID-Library +https://github.com/Gemelon/Pushbutton +https://github.com/GerLech/LG_Matrix_Print +https://github.com/GerLech/Talking_Display +https://github.com/GerLech/TouchEvent +https://github.com/GerLech/WebConfig +https://github.com/getlarge/arduino-device +https://github.com/GewoonGijs/VID28 +https://github.com/GGorAA/MorsDuino +https://github.com/ggzucco/LM35 +https://github.com/ghaemshop/ghaemShopSmSim +https://github.com/ghlawrence2000/UTFT_SdRaw +https://github.com/giannivh/SmoothThermistor +https://github.com/Gibartes/uCOS-II_Arduino +https://github.com/gicking/LIN_master_Arduino +https://github.com/gicking/NeoHWSerial +https://github.com/gigabits-org/gigabits-arduino +https://github.com/gigix74/CalibratedSpeed +https://github.com/gilmaimon/Arduino-CloudStorage +https://github.com/gilmaimon/ArduinoComponents +https://github.com/gilmaimon/ArduinoWebsockets +https://github.com/gin66/FastAccelStepper +https://github.com/gioblu/PJON +https://github.com/GiorgioAresu/FanController +https://github.com/GiorgosXou/NeuralNetworks +https://github.com/Glinnes/NMEAParser +https://github.com/gmag11/CayenneLPPdec +https://github.com/gmag11/NtpClient +https://github.com/gmag11/WifiLocation +https://github.com/gmarty2000-ARDUINO/arduino-BUZZER +https://github.com/gmarty2000-ARDUINO/arduino-JOYSTICK +https://github.com/gmarty2000-ARDUINO/arduino-SOIL_HYGROMETER +https://github.com/gmarty2000-ARDUINO/arduino-ULTRASONIC_SENSOR +https://github.com/gmarty2000/arduino-LED +https://github.com/gmazzamuto/MAX1464-Arduino-library +https://github.com/GO01260/uMT +https://github.com/goncalomb/KeyMatrix +https://github.com/GoogleCloudPlatform/google-cloud-iot-arduino +https://github.com/GordonRudman/ExampleArduinoLibrary +https://github.com/gordonthree/pca9633 +https://github.com/gramedek/pio8255 +https://github.com/grandeurtech/arduino-sdk +https://github.com/graybiel-laboratory/GeneralPurposeMotionDetector +https://github.com/GreenPonik/DFRobot_ESP_EC_BY_GREENPONIK +https://github.com/GreenPonik/DFRobot_ESP_PH_WITH_ADC_BY_GREENPONIK +https://github.com/gregington/BigCrystal +https://github.com/gregington/NetEEPROM +https://github.com/gregington/RfidDb +https://github.com/greiman/DigitalIO +https://github.com/greiman/SdFat +https://github.com/greiman/SSD1306Ascii +https://github.com/GreyGnome/EnableInterrupt +https://github.com/Gruppio/Throttle +https://github.com/grzesl/ESPMail +https://github.com/GTO2013/EMUSerial +https://github.com/guglicap/arduino-pv +https://github.com/guglielmino/arduino-pushetta-lib +https://github.com/GurtDotCom/GKScroll +https://github.com/guru-florida/PWMFreak +https://github.com/gutierrezps/ESP32_I2C_Slave +https://github.com/gutierrezps/gwiot7941e +https://github.com/GypsyRobot/CuteBuzzerSounds +https://github.com/GypsyRobot/Formulinha +https://github.com/GypsyRobot/MusicBuzzer +https://github.com/h-c-c/Seven_Segment_Pixel +https://github.com/H-Kurosaki/UARDECS_MEGA +https://github.com/H-Kurosaki/UARDECS +https://github.com/h2zero/NimBLE-Arduino +https://github.com/haakonnessjoen/TCA6416A +https://github.com/hackair-project/hackAir-Arduino +https://github.com/HackerInside0/Arduino_sevenSegmentDisplay +https://github.com/HackerInside0/Arduino_SoftwareReset +https://github.com/HackerInside0/L293 +https://github.com/HackerInside0/SharpIR +https://github.com/haimoz/SoftFilters +https://github.com/haratta27/M5Stack_SimpleBeep +https://github.com/Hardi-St/MobaLedLib +https://github.com/harnettlab/vl53l0x-arduino +https://github.com/harvie/ps2dev +https://github.com/Harvie/RotaryDial +https://github.com/hectorespert/SolarCharger +https://github.com/hedrickbt/MillaMilla_DS7505_Library +https://github.com/helium/helium-arduino +https://github.com/helium/longfi-arduino +https://github.com/HelTecAutomation/Heltec_ESP32 +https://github.com/HelTecAutomation/Heltec_ESP8266 +https://github.com/HendrikVE/Arduino-DFR0554 +https://github.com/HendrikVE/Arduino-LiquidCrystalWired +https://github.com/HendrikVE/Arduino-PCA9633 +https://github.com/henriksod/Fabrik2DArduino +https://github.com/HexFab/HexFabQuadroMotorShield +https://github.com/hideakitai/ADS1x1x +https://github.com/hideakitai/ArduinoOSC +https://github.com/hideakitai/ArtNet +https://github.com/hideakitai/ArxContainer +https://github.com/hideakitai/ArxSmartPtr +https://github.com/hideakitai/ArxStringUtils +https://github.com/hideakitai/ArxTypeTraits +https://github.com/hideakitai/CRCx +https://github.com/hideakitai/Debouncer +https://github.com/hideakitai/Debug +https://github.com/hideakitai/DRV2667 +https://github.com/hideakitai/DS323x +https://github.com/hideakitai/Dynamixel +https://github.com/hideakitai/Easing +https://github.com/hideakitai/EmbeddedUtils +https://github.com/hideakitai/ES920 +https://github.com/hideakitai/ESP32DMASPI +https://github.com/hideakitai/Filters +https://github.com/hideakitai/HyperDeck +https://github.com/hideakitai/I2CExtension +https://github.com/hideakitai/MAX17048 +https://github.com/hideakitai/MCP4728 +https://github.com/hideakitai/MPU9250 +https://github.com/hideakitai/MsgPack +https://github.com/hideakitai/MsgPacketizer +https://github.com/hideakitai/MTCParser +https://github.com/hideakitai/Packetizer +https://github.com/hideakitai/PCA9536 +https://github.com/hideakitai/PCA9547 +https://github.com/hideakitai/PCF2129 +https://github.com/hideakitai/PollingTimer +https://github.com/hideakitai/SceneManager +https://github.com/hideakitai/Sony9PinRemote +https://github.com/hideakitai/SPIExtension +https://github.com/hideakitai/SpresenseNeoPixel +https://github.com/hideakitai/TaskManager +https://github.com/hideakitai/TCA9534 +https://github.com/hideakitai/TCS34725 +https://github.com/hideakitai/TFmini +https://github.com/hideakitai/TimeProfiler +https://github.com/hideakitai/TsyDMASPI +https://github.com/hideakitai/Tween +https://github.com/hideakitai/VectorXf +https://github.com/hideakitai/XBeeATCmds +https://github.com/HidWizards/UCR-ESP8266 +https://github.com/Hieromon/AutoConnect +https://github.com/Hieromon/PageBuilder +https://github.com/highno/rtcvars +https://github.com/hippymulehead/FastDigitalPin +https://github.com/hippymulehead/RARGBLED +https://github.com/Hiroshi-Sugimura/EL_dev_arduino +https://github.com/hirotakaster/CoAP-simple-library +https://github.com/HNRobotica/LineTracker5 +https://github.com/Hobietime/RF24G +https://github.com/HomeControlAS/homecontrol-mqtt +https://github.com/HomeDing/HomeDing +https://github.com/HomeSpan/HomeSpan +https://github.com/horihiro/esp8266-google-home-notifier +https://github.com/horihiro/esp8266-google-tts +https://github.com/hotchpotch/Arduino-HDC1000 +https://github.com/housewithinahouse/TwoWheelRobotLibrary +https://github.com/hpwit/SID6581 +https://github.com/HuangYuTse/GM1602lib +https://github.com/huilab/HoneywellTruStabilitySPI +https://github.com/huilab/HoneywellZephyrI2C +https://github.com/HullabalooRobotics/Hyperduino-Library +https://github.com/HullabalooRobotics/Soldering-Machine +https://github.com/hunamizawa/ESPPerfectTime +https://github.com/hunsalz/log4Esp +https://github.com/hutorny/cojson.lib +https://github.com/hvanvoorthuijsen/InkyBoard +https://github.com/hznupeter/blynk-library-for-chinese +https://github.com/i3water/Blinker_PMSX003ST +https://github.com/iagows/arduino_io +https://github.com/Iainmon/altino +https://github.com/iamthechad/parallax_lcd +https://github.com/ichigo663/NDNOverUDP +https://github.com/IGB-Germany/ComDriverSpi +https://github.com/IGB-Germany/IGB-FlashSst26 +https://github.com/IGB-Germany/IGB-Tactile-Switch +https://github.com/igvina/ArdBitmap +https://github.com/igvina/ArdVoice +https://github.com/IharYakimush/arduino-temperature-control-events +https://github.com/ihormelnyk/opentherm_library +https://github.com/iliaslamprou/virtuino_stm32 +https://github.com/iliaslamprou/virtuino +https://github.com/iliaslamprou/virtuinoCM +https://github.com/iliaslamprou/virtuinoESP +https://github.com/imfrancisd/MorseCodeMachine +https://github.com/ImpulseAdventure/GUIslice +https://github.com/ImpulseAdventure/Waveshare_ILI9486 +https://github.com/imrehorvath/BridgeHttpClient +https://github.com/IndustrialShields/arduino-IndustrialShields +https://github.com/Industruino/EthernetIndustruino +https://github.com/Industruino/FRAM +https://github.com/Industruino/Indio +https://github.com/Industruino/UC1701 +https://github.com/INFICON-Spot/inficon-spot-lib +https://github.com/Infineon/arduino-optiga-trust-m +https://github.com/Infineon/arduino-optiga-trust-x +https://github.com/Infineon/DC-Motor-Control-TLE94112EL +https://github.com/Infineon/DPS310-Pressure-Sensor +https://github.com/Infineon/hall-switch +https://github.com/Infineon/high-side-switch +https://github.com/Infineon/IFX007T-Motor-Control +https://github.com/Infineon/OPTIGA-Trust-E-Security-Controller +https://github.com/Infineon/RGB-LED-Lighting-Shield-XMC1202 +https://github.com/Infineon/Stepper-Motor-Shield-IFX9201-XMC1300 +https://github.com/Infineon/TLE493D-3DMagnetic-Sensor +https://github.com/Infineon/TLE5012-Magnetic-Angle-Sensor +https://github.com/Infineon/TLI493D-W2BW +https://github.com/Infineon/TLI4970-D050T4-Current-Sensor +https://github.com/Infineon/TLI4971-Current-Sensor +https://github.com/Infineon/TLV493D-A1B6-3DMagnetic-Sensor +https://github.com/Infineon/TLx4966-Direction-Speed-Sensor +https://github.com/IngeniaMC/Ingenia-Serial-Servo-Drive-Library +https://github.com/inovatic-ict/emoro-2560-library +https://github.com/Integreight/1Sheeld-Arduino-Library +https://github.com/iobeam/iobeam-client-embedded +https://github.com/iondbproject/iondb +https://github.com/iotappstory/ESP-Library +https://github.com/iotec-gmbh/M5_RTC_Module +https://github.com/IoTGuruLive/theiotguru-arduino-library +https://github.com/iotize-sas/Arduino-Tap +https://github.com/iotpipe/esp8266-arduino-iotpipe +https://github.com/IoTWay/IoTWay-Arduino +https://github.com/IowaScaledEngineering/arduino-irsense +https://github.com/iq-motion-control/iq-module-communication-arduino +https://github.com/Isaac100/TMP36 +https://github.com/isaacrobinson2000/SoundPlayer +https://github.com/Isaranu/IoTtweet +https://github.com/Isaranu/IoTtweetESP32 +https://github.com/Isaranu/IoTtweetNBIoT +https://github.com/Isaranu/IoTtweetSIEMENS_SIMATIC +https://github.com/Isaranu/pm25senses +https://github.com/Isaranu/PointzNet +https://github.com/Isaranu/Senses_NBIoT +https://github.com/Isaranu/Senses_wifi_esp32 +https://github.com/Isaranu/Senses_wifi +https://github.com/ivanseidel/ArduinoSensors +https://github.com/ivanseidel/ArduinoThread +https://github.com/ivanseidel/DueTimer +https://github.com/ivanseidel/Gaussian +https://github.com/ivanseidel/LinkedList +https://github.com/J-Rios/uTLGBotLib-arduino +https://github.com/Jaapdedood/ArxRobot-Library +https://github.com/jackrobotics/HONEYLemon +https://github.com/jackrobotics/iSYNC_BC95_Arduino +https://github.com/jackrobotics/iSYNC +https://github.com/jacobrosenthal/MergedStreams +https://github.com/jaean123/DeadReckoning-library +https://github.com/jaean123/SnappyXO-PreciseMovement-library +https://github.com/JAICHANGPARK/Arduino-Watch +https://github.com/jakalada/Arduino-ADXL345 +https://github.com/jakalada/Arduino-AM50288H +https://github.com/jakalada/Arduino-S11059 +https://github.com/jakalada/Arduino-S5851A +https://github.com/jakalada/Arduino-S9706 +https://github.com/jakerabid/WiFiManager +https://github.com/jalr/EE895 +https://github.com/jandelgado/jled +https://github.com/jandelgado/log4arduino +https://github.com/jandrassy/ArduinoOTA +https://github.com/jandrassy/EthernetENC +https://github.com/jandrassy/StreamLib +https://github.com/jandrassy/TelnetStream +https://github.com/jandrassy/UnoWiFiDevEdSerial1 +https://github.com/jandrassy/WiFiEspAT +https://github.com/janelia-arduino/AD57X4R +https://github.com/janelia-arduino/Array +https://github.com/janelia-arduino/Functor +https://github.com/janelia-arduino/JsmnStream +https://github.com/janelia-arduino/MPR121 +https://github.com/janelia-arduino/PCA9685 +https://github.com/janelia-arduino/Streaming +https://github.com/janelia-arduino/TLE72X +https://github.com/janelia-arduino/TMC2130 +https://github.com/janelia-arduino/TMC429 +https://github.com/janelia-arduino/Vector +https://github.com/janelia-arduino/Watchdog +https://github.com/janthefischer/SerialVariable +https://github.com/janw-cz/JWA_BME280 +https://github.com/jaredpetersen/ghostlab42reboot +https://github.com/jasiek/arduino-statsdclient +https://github.com/jasonacox/TinyStepper +https://github.com/jasonacox/TM1637TinyDisplay +https://github.com/javisank/LibEdificio +https://github.com/javisank/LibEstacionamiento +https://github.com/javisank/LibLucesCiudad +https://github.com/javisank/LibMiniSys +https://github.com/javisank/LibSemaforo +https://github.com/javisank/LibSemaforosCiudad +https://github.com/jbliesener/FlightSimOutputs +https://github.com/jbliesener/FlightSimSwitches +https://github.com/JCardoen/ATmega32U4-Grove-Air-quality-sensor +https://github.com/JChristensen/CurrentTransformer +https://github.com/JChristensen/DS3232RTC +https://github.com/JChristensen/JC_Button +https://github.com/JChristensen/MCP79412RTC +https://github.com/JChristensen/MCP9800 +https://github.com/JChristensen/MCP9808 +https://github.com/JChristensen/movingAvg +https://github.com/JChristensen/Timezone +https://github.com/JChristensen/tinySPI +https://github.com/jcubuntu/iBit_Arduino +https://github.com/jcubuntu/IKB1_Arduino +https://github.com/JCWentzel/PolymorphicButtons +https://github.com/jedp/PMSensor-HPMA115 +https://github.com/jefersonla/ArduinoLang +https://github.com/JeffShapiro/ArduinoLearningBoard-Lib +https://github.com/JemRF/max7219 +https://github.com/JenertsA/VCNL3040_Proximity_Sensor_Library +https://github.com/jenscski/DoubleResetDetect +https://github.com/jensh/CopyThreads +https://github.com/jeremycole/AllSensors_DLHR +https://github.com/jeremycole/AllSensors_DLV +https://github.com/jeremycole/Temperature_LM75_Derived +https://github.com/jeremycole/TI_TCA9548A +https://github.com/jeremylindsayni/Bifrost.Arduino.Sensors.HCSR04 +https://github.com/jeroenvermeulen/JeVe_EasyOTA +https://github.com/jfitter/MLX90614 +https://github.com/jfjlaros/simpleRPC +https://github.com/jgromes/RadioLib +https://github.com/JHershey69/DarkSkySevenDay +https://github.com/jhershey69/MoonStruck +https://github.com/JHershey69/OpenWeatherOneCall +https://github.com/JHershey69/weatherLocation-Library +https://github.com/jhershey69/WiFiTri +https://github.com/jihoonkimtech/UltraSonic_Lib +https://github.com/JimmySoftware/ESPert +https://github.com/JiriBilek/WiFiSpi +https://github.com/jlusPrivat/SimpleHOTP +https://github.com/jmderomedi/SavitzkyGolayFilter +https://github.com/jmparatte/jm_CPPM +https://github.com/jmparatte/jm_LCM2004A_I2C +https://github.com/jmparatte/jm_LiquidCrystal_I2C +https://github.com/jmparatte/jm_PCF8574 +https://github.com/jmparatte/jm_Pin +https://github.com/jmparatte/jm_Scheduler +https://github.com/jmparatte/jm_Wire +https://github.com/jo-seph/SDS011_vers +https://github.com/JoaoLopesF/ESP32MotorControl +https://github.com/JoaoLopesF/RemoteDebug +https://github.com/JoaoLopesF/RemoteDebugger +https://github.com/JoaoLopesF/SerialDebug +https://github.com/JoaquimFlavio/GuaraTeca_Demo +https://github.com/JoaquimFlavio/GuaraTeca_Hardware +https://github.com/JoaquimFlavio/GuaraTeca_Menu +https://github.com/JoaquimFlavio/GuaraTeca_OBR +https://github.com/joba-1/Joba_Tsl2561 +https://github.com/JobNoorman/PmodClsArduino +https://github.com/JoeyStrandnes/Arduino-Toggl-API +https://github.com/JoeyStrandnes/NST1001_Arduino-Driver +https://github.com/johnnyb/Eventually +https://github.com/johnnyb/Shifty +https://github.com/Jomelo/LCDMenuLib +https://github.com/Jomelo/LCDMenuLib2 +https://github.com/jonas-merkle/AS5047P +https://github.com/jonathanedgecombe/absmouse +https://github.com/jonblack/arduino-fsm +https://github.com/jonblack/arduino-menusystem +https://github.com/Jones1403/SPI-DAC7611 +https://github.com/jonnieZG/DFPlayerMini +https://github.com/jonnieZG/EButton +https://github.com/jonnieZG/EWMA +https://github.com/jonnieZG/LinkedPointerList +https://github.com/joonazan/nina-fast-bluetooth +https://github.com/jordancrubin/ballvalve +https://github.com/jordancrubin/watermeter +https://github.com/jorgemvc/MotoMamaLib +https://github.com/jorgemvc/S4ALib +https://github.com/Jorropo/ds3231 +https://github.com/josejuansanchez/NanoPlayBoard-Arduino-Library +https://github.com/joshnishikawa/Flicker +https://github.com/joysfera/arduino-tasker +https://github.com/jpraus/arduino-opentherm +https://github.com/jrcape/ADSWeather +https://github.com/jrullan/neotimer +https://github.com/jrullan/StateMachine +https://github.com/JRVeale/function-fsm +https://github.com/JSC-electronics/Adeon +https://github.com/JSC-electronics/ObjectButton +https://github.com/JSC-electronics/SimpleMotionV2-Arduino +https://github.com/JSC-electronics/SimpleRelay +https://github.com/JSC-electronics/Ticker +https://github.com/jscastonguay/technoshield-ui-lib +https://github.com/jspark311/Arduino-ADG2128 +https://github.com/jspark311/Arduino-DS1881 +https://github.com/jspark311/Arduino-SX150x +https://github.com/jspark311/Arduino-SX8634 +https://github.com/jspark311/CppPotpourri +https://github.com/jspayneco/Debugger +https://github.com/Juerd/ESP-WiFiSettings +https://github.com/JulStrat/LibYxml +https://github.com/junwha0511/LiquidCrystal_I2C_Hangul +https://github.com/just-oblivious/arduino-ibustrx +https://github.com/justplaysoftware/EduShield2 +https://github.com/JVKran/Forced-BME280 +https://github.com/JVKran/OneTime-BH1750 +https://github.com/jvpernis/esp32-ps3 +https://github.com/jwagnerhki/arduino_pm2005lib +https://github.com/jwhiddon/EDB +https://github.com/jwrw/ESP_EEPROM +https://github.com/jwrw/Executive +https://github.com/kaaproject/kaa-arduino-sdk +https://github.com/kbernario/PaunaStepper +https://github.com/kcl93/muCom +https://github.com/kcl93/Tasks +https://github.com/kcl93/VT100 +https://github.com/kd8bxp/micro-Maqueen-Arduino-Library +https://github.com/kd8bxp/TheTroll +https://github.com/kd8bxp/Word100 +https://github.com/kdhooper/arduino-CheapLCD +https://github.com/keigan-motor/Arduino-I2C-KM1 +https://github.com/keimochizuki/cgnuino +https://github.com/keyro90/AFArray +https://github.com/khoih-prog/AsyncDNSServer_STM32 +https://github.com/khoih-prog/AsyncHTTPRequest_Generic +https://github.com/khoih-prog/AsyncUDP_STM32 +https://github.com/khoih-prog/AsyncWebServer_STM32 +https://github.com/khoih-prog/Blynk_Async_ESP32_BT_WF +https://github.com/khoih-prog/Blynk_Async_GSM_Manager +https://github.com/khoih-prog/Blynk_Async_WM +https://github.com/khoih-prog/Blynk_Esp8266AT_WM +https://github.com/khoih-prog/Blynk_Teensy +https://github.com/khoih-prog/Blynk_WiFiNINA_WM +https://github.com/khoih-prog/Blynk_WM +https://github.com/khoih-prog/BlynkESP32_BT_WF +https://github.com/khoih-prog/BlynkEthernet_STM32_WM +https://github.com/khoih-prog/BlynkEthernet_WM +https://github.com/khoih-prog/BlynkGSM_Manager +https://github.com/khoih-prog/DDNS_Generic +https://github.com/khoih-prog/DoubleResetDetector_Generic +https://github.com/khoih-prog/DS323x_Generic +https://github.com/khoih-prog/ESP_AT_Lib +https://github.com/khoih-prog/ESP_AT_WiFiManager +https://github.com/khoih-prog/ESP_AT_WM_Lite +https://github.com/khoih-prog/ESP_DoubleResetDetector +https://github.com/khoih-prog/ESP_MultiResetDetector +https://github.com/khoih-prog/ESP_WiFiManager +https://github.com/khoih-prog/ESP32_ISR_Servo +https://github.com/khoih-prog/ESP32TimerInterrupt +https://github.com/khoih-prog/ESP8266_AT_WebServer +https://github.com/khoih-prog/ESP8266_ISR_Servo +https://github.com/khoih-prog/ESP8266TimerInterrupt +https://github.com/khoih-prog/ESPAsync_WiFiManager +https://github.com/khoih-prog/Ethernet_Manager_STM32 +https://github.com/khoih-prog/Ethernet_Manager +https://github.com/khoih-prog/EthernetWebServer_SSL_STM32 +https://github.com/khoih-prog/EthernetWebServer_SSL +https://github.com/khoih-prog/EthernetWebServer_STM32 +https://github.com/khoih-prog/EthernetWebServer +https://github.com/khoih-prog/functional-vlpp +https://github.com/khoih-prog/MDNS_Generic +https://github.com/khoih-prog/MultiResetDetector_Generic +https://github.com/khoih-prog/MySQL_MariaDB_Generic +https://github.com/khoih-prog/NRF52_MBED_TimerInterrupt +https://github.com/khoih-prog/NRF52_TimerInterrupt +https://github.com/khoih-prog/NTPClient_Generic +https://github.com/khoih-prog/SAMD_TimerInterrupt +https://github.com/khoih-prog/SAMDUE_TimerInterrupt +https://github.com/khoih-prog/SinricPro_Generic +https://github.com/khoih-prog/STM32_TimerInterrupt +https://github.com/khoih-prog/Teensy_TimerInterrupt +https://github.com/khoih-prog/TimerInterrupt_Generic +https://github.com/khoih-prog/TimerInterrupt +https://github.com/khoih-prog/Timezone_Generic +https://github.com/khoih-prog/UPnP_Generic +https://github.com/khoih-prog/WebSockets_Generic +https://github.com/khoih-prog/WebSockets2_Generic +https://github.com/khoih-prog/WiFiManager_NINA_Lite +https://github.com/khoih-prog/WiFiNINA_Generic +https://github.com/khoih-prog/WiFiWebServer +https://github.com/khoih-prog/WIOTerminal_WiFiManager +https://github.com/kigster/back-seat-driver +https://github.com/kike-canaries/canairio_sensorlib +https://github.com/killer0071234/esp_abus +https://github.com/Kineis/ArduinoKim +https://github.com/kingmathers313/FHEM_Arduino +https://github.com/kiryanenko/SimpleTimer +https://github.com/kiryanenko/TTP229 +https://github.com/kitesurfer1404/WS2812FX +https://github.com/kk6axq/BraccioV2 +https://github.com/klenov/advancedSerial +https://github.com/klenov/keyboardButton +https://github.com/kmackay/micro-ecc +https://github.com/kniwwelino/KniwwelinoLib +https://github.com/knolleary/pubsubclient +https://github.com/koendv/SerialWireOutput +https://github.com/koendv/STM32duino-Semihosting +https://github.com/Kongduino/LoRandom +https://github.com/KONNEKTING/KonnektingDeviceLibrary +https://github.com/kontakt/MAX30100 +https://github.com/KorneliusThomas/PIDcontrollersModularProfessional +https://github.com/kosme/arduinoFFT +https://github.com/kosme/fix_fft +https://github.com/kosme/flex_DST +https://github.com/kosme/timestamp32bits +https://github.com/kotobuki/SetPoint +https://github.com/kousheekc/Kinematics +https://github.com/kpn-iot/thingsml-c-library +https://github.com/KravitzLabDevices/FED3_library +https://github.com/kremio/DLPacket +https://github.com/KROIA/L298N_MotorDriver +https://github.com/krpc/krpc-arduino +https://github.com/krzychb/DimSwitch +https://github.com/krzychb/EspSaveCrash +https://github.com/KuangLei/fDigitsSegtPin +https://github.com/KwangryeolPark/GLCD_QY_12864BG +https://github.com/kyuseok-oh/ArduinoThingsOfValueSDK +https://github.com/LabAixBidouille/RobotDuLAB-arduino-library +https://github.com/labfruits/mcp3208 +https://github.com/LaCocoRoco/DataVisualizer +https://github.com/Laserlicht/MaerklinMotorola +https://github.com/lasselukkari/aWOT +https://github.com/lathoub/Arduino-AppleMidi-Library +https://github.com/lathoub/Arduino-BLE-MIDI +https://github.com/lathoub/Arduino-ipMIDI +https://github.com/lathoub/EthernetBonjour +https://github.com/lathoub/USB-MIDI +https://github.com/LAtimes2/InternalTemperature +https://github.com/laurb9/StepperDriver +https://github.com/layadcircuits/Saleng-GSM +https://github.com/lbernstone/plotutils +https://github.com/lbernstone/rrdtool_ESP32 +https://github.com/lbussy/LCBUrl +https://github.com/ldab/ESP32_FTPClient +https://github.com/ldab/KXTJ3-1057 +https://github.com/ldab/lis3dh-motion-detection +https://github.com/ldab/u-blox_GNSS +https://github.com/LeandroLimaPRO/Pressure +https://github.com/leaphy-robotics/leaphy-extensions-extra +https://github.com/leaphy-robotics/leaphy-extensions-original +https://github.com/lebuni/ZACwire-Library +https://github.com/lecsDragos/Arduino_SegmentDisplay_CD4511B +https://github.com/lectrobox/KeypadShield +https://github.com/lectrobox/PCJoy +https://github.com/LeemanGeophysicalLLC/FIR_Filter_Arduino_Library +https://github.com/leftCoast/LC_baseTools +https://github.com/leftCoast/LC_lilParser +https://github.com/Legion2/CorsairLightingProtocol +https://github.com/Legion2/Somfy_Remote_Lib +https://github.com/lemio/esp32_ble_wedo +https://github.com/lemmingDev/ESP32-BLE-Gamepad +https://github.com/lendres/BatteryMeter-Arduino +https://github.com/lendres/BlinkSuite-Arduino +https://github.com/lendres/ButtonSuite-Arduino +https://github.com/LennartHennigs/Button2 +https://github.com/LennartHennigs/ESPBattery +https://github.com/LennartHennigs/ESPRotary +https://github.com/LennartHennigs/ESPTelnet +https://github.com/LennartHennigs/M5FacesEncoder +https://github.com/LennartHennigs/OTAWrapper +https://github.com/leomil72/analogComp +https://github.com/leomil72/leOS +https://github.com/leomil72/leOS2 +https://github.com/leomil72/looper +https://github.com/leomil72/pRNG +https://github.com/leomil72/secTimer +https://github.com/leomil72/swRTC +https://github.com/lesterlo/Notched-Shaft-Encoder +https://github.com/levosos/Controlino +https://github.com/levosos/Midier +https://github.com/lewapek/sds-dust-sensors-arduino-library +https://github.com/lexus2k/lcdgfx +https://github.com/lexus2k/ssd1306 +https://github.com/lexus2k/tinyhal +https://github.com/lexus2k/tinyproto +https://github.com/leyap/LispIO +https://github.com/leyap/LispMotor +https://github.com/libEmGUI/emGUI-arduino +https://github.com/Liksu/7SegmentsSnake +https://github.com/LILCMU/GoGoBoard-Arduino +https://github.com/LILCMU/GoGoBright +https://github.com/lime-labs/HDC2080-Arduino +https://github.com/limiteddata/SchedulerESP8266 +https://github.com/Links2004/arduinoVNC +https://github.com/Links2004/arduinoWebSockets +https://github.com/linneslab/kickfft +https://github.com/LinnesLab/KickFilters +https://github.com/LinnesLab/KickFiltersRT +https://github.com/LinnesLab/KickMath +https://github.com/LinnesLab/KickSort +https://github.com/LinnesLab/LMP91000 +https://github.com/LinnesLab/MAX541X +https://github.com/LinnesLab/TrigDef +https://github.com/LinnesLab/tTestTable +https://github.com/llelundberg/EasyWebServer +https://github.com/Locoduino/Accessories +https://github.com/Locoduino/Commanders +https://github.com/Locoduino/DCCpp +https://github.com/Locoduino/DcDccNanoController +https://github.com/Locoduino/DIO2 +https://github.com/Locoduino/EEPROMExtent +https://github.com/Locoduino/LcdUi +https://github.com/Locoduino/LightDimmer +https://github.com/Locoduino/LightEffect +https://github.com/Locoduino/MemoryUsage +https://github.com/Locoduino/RingBuffer +https://github.com/Locoduino/ScheduleTable +https://github.com/Locoduino/SlowMotionServo +https://github.com/LoganTraceur/LogansGreatButton +https://github.com/logickworkshop/du-ino +https://github.com/loopj/i2c-sensor-hal +https://github.com/LoRaFi/LoRaFi +https://github.com/lorol/LITTLEFS +https://github.com/Losant/losant-mqtt-arduino +https://github.com/lovyan03/LovyanGFX +https://github.com/lovyan03/M5Stack_OnScreenKeyboard +https://github.com/lovyan03/M5Stack_TreeView +https://github.com/LowPowerLab/RFM69 +https://github.com/LowPowerLab/SPIFlash +https://github.com/lpasqualis/TimedBlink +https://github.com/lperez31/youmadeit-arduino +https://github.com/LSatan/SmartRC-CC1101-Driver-Lib +https://github.com/lucadentella/ArduinoLib_CEClient +https://github.com/lucadentella/SPIFFS_ImageReader +https://github.com/lucadentella/TOTP-Arduino +https://github.com/lucadentella/WiThrottle +https://github.com/lucalas/StreamlabsArduinoAlerts +https://github.com/lucasromeiro/DropboxManager +https://github.com/lucasso/ModbusRTUSlaveArduino +https://github.com/luciansabo/GP2YDustSensor +https://github.com/lucyamy/LapI2CTop +https://github.com/lucyamy/LapINA219 +https://github.com/lucyamy/LapX9C10X +https://github.com/lucyamy/SevenSegInt +https://github.com/LuighiV/arduino-isfetboard +https://github.com/luisllamasbinaburo/Arduino-Articulated +https://github.com/luisllamasbinaburo/Arduino-AsyncSerial +https://github.com/luisllamasbinaburo/Arduino-AsyncServo +https://github.com/luisllamasbinaburo/Arduino-AsyncSonar +https://github.com/luisllamasbinaburo/Arduino-AsyncStepper +https://github.com/luisllamasbinaburo/Arduino-AsyncTask +https://github.com/luisllamasbinaburo/Arduino-AsyncTimer +https://github.com/luisllamasbinaburo/Arduino-BTS7960 +https://github.com/luisllamasbinaburo/Arduino-CircularBuffer +https://github.com/luisllamasbinaburo/Arduino-ColorConverter +https://github.com/luisllamasbinaburo/Arduino-Countdown +https://github.com/luisllamasbinaburo/Arduino-DebounceFilter +https://github.com/luisllamasbinaburo/Arduino-DoubleEmaFilter +https://github.com/luisllamasbinaburo/Arduino-Easing +https://github.com/luisllamasbinaburo/Arduino-EasyComma +https://github.com/luisllamasbinaburo/Arduino-GammaCorrection +https://github.com/luisllamasbinaburo/Arduino-I2CScanner +https://github.com/luisllamasbinaburo/Arduino-Interpolation +https://github.com/luisllamasbinaburo/Arduino-LinkedList +https://github.com/luisllamasbinaburo/Arduino-List +https://github.com/luisllamasbinaburo/Arduino-Meanfilter +https://github.com/luisllamasbinaburo/Arduino-MedianFilter +https://github.com/luisllamasbinaburo/Arduino-MultiTask +https://github.com/luisllamasbinaburo/Arduino-Parser +https://github.com/luisllamasbinaburo/Arduino-PetriNet +https://github.com/luisllamasbinaburo/Arduino-PropertyChange +https://github.com/luisllamasbinaburo/Arduino-QuickMedian +https://github.com/luisllamasbinaburo/Arduino-QuickSort +https://github.com/luisllamasbinaburo/Arduino-ReactiveArduino +https://github.com/luisllamasbinaburo/Arduino-SimpleStepper +https://github.com/luisllamasbinaburo/Arduino-SingleEmaFilter +https://github.com/luisllamasbinaburo/Arduino-StateMachine +https://github.com/luisllamasbinaburo/Arduino-Stopwatch +https://github.com/luisllamasbinaburo/Arduino-Storyboard +https://github.com/luisllamasbinaburo/Arduino-SyncWaveforms +https://github.com/luisllamasbinaburo/Arduino-Threshold +https://github.com/luisllamasbinaburo/Arduino-TimeoutTask +https://github.com/luisllamasbinaburo/Arduino-TriangleSolver +https://github.com/luisllamasbinaburo/ArduinoLinq +https://github.com/LuisMiCa/IRsmallDecoder +https://github.com/luni64/TeensyStep +https://github.com/luni64/TeensyTimerTool +https://github.com/LUXROBO/MODI-Arduino +https://github.com/lvgl/lv_arduino +https://github.com/lvgl/lv_examples +https://github.com/lvgl/lvgl +https://github.com/Lynxmotion/AlternativeLSS +https://github.com/Lynxmotion/LSS_Library_Arduino +https://github.com/M-Reimer/EncoderStepCounter +https://github.com/M-Reimer/IwitVolumeKnob +https://github.com/M-Reimer/USBStatus +https://github.com/M-tech-Creations/NoDelay +https://github.com/m2m-solutions/M2M_Boards +https://github.com/m2m-solutions/M2M_LM75A +https://github.com/m2m-solutions/M2M_Logger +https://github.com/m2m-solutions/M2M_MiraOne +https://github.com/m2m-solutions/M2M_Quectel +https://github.com/m2m-solutions/M2M_TLV +https://github.com/m5stack/M5-CoreInk +https://github.com/m5stack/M5Atom +https://github.com/m5stack/M5Core2 +https://github.com/m5stack/M5EPD +https://github.com/m5stack/M5Stack +https://github.com/m5stack/M5StickC-Plus +https://github.com/m5stack/M5StickC +https://github.com/m5stack/TimerCam-arduino +https://github.com/MacroYau/LTC2942-Arduino-Library +https://github.com/MacroYau/RV-1805-C3-Arduino-Library +https://github.com/MacroYau/RV-3028-C7-Arduino-Library +https://github.com/madhephaestus/BNO055SimplePacketComs +https://github.com/madhephaestus/ESP32AnalogRead +https://github.com/madhephaestus/ESP32Encoder +https://github.com/madhephaestus/ESP32Servo +https://github.com/madhephaestus/Esp32SimplePacketComs +https://github.com/madhephaestus/Esp32WifiManager +https://github.com/madhephaestus/EspWii +https://github.com/madhephaestus/lx16a-servo +https://github.com/madhephaestus/PVision +https://github.com/madhephaestus/SimplePacketComs +https://github.com/madhephaestus/TeensySimplePacketComs +https://github.com/madhephaestus/WiiChuck +https://github.com/madleech/Button +https://github.com/madleech/TurnoutPulser +https://github.com/MadTooler/Gobbit_Line_Commander +https://github.com/MAINAKMONDAL98/MSMPLOTTER +https://github.com/mairas/ReactESP +https://github.com/maisonsmd/msTask +https://github.com/MajicDesigns/MD_AButton +https://github.com/MajicDesigns/MD_AD9833 +https://github.com/MajicDesigns/MD_CirQueue +https://github.com/MajicDesigns/MD_Cubo +https://github.com/MajicDesigns/MD_DS1307 +https://github.com/MajicDesigns/MD_DS3231 +https://github.com/MajicDesigns/MD_KeySwitch +https://github.com/MajicDesigns/MD_LM335A +https://github.com/MajicDesigns/MD_MAX72XX +https://github.com/MajicDesigns/MD_MAXPanel +https://github.com/MajicDesigns/MD_Menu +https://github.com/MajicDesigns/MD_MSGEQ7 +https://github.com/MajicDesigns/MD_Parola +https://github.com/MajicDesigns/MD_REncoder +https://github.com/MajicDesigns/MD_SN76489 +https://github.com/MajicDesigns/MD_TCS230 +https://github.com/MajicDesigns/MD_TicTacToe +https://github.com/MajicDesigns/MD_UISwitch +https://github.com/MajicDesigns/MD_YM2413 +https://github.com/MajicDesigns/MD_YX5300 +https://github.com/makers-upv/ORC +https://github.com/MakerSpaceLeiden/rfid +https://github.com/MakerVision/ArduinoLibrary +https://github.com/Makuna/AnalogKeypad +https://github.com/Makuna/DFMiniMp3 +https://github.com/Makuna/NeoPixelBus +https://github.com/Makuna/Rfid134 +https://github.com/Makuna/Rtc +https://github.com/Makuna/Task +https://github.com/maly/edushield +https://github.com/MannyPeterson/HeliOS +https://github.com/marccolemont/CRMX_TimoTwo +https://github.com/marcinbor85/BlinkCode +https://github.com/marcinbor85/SmartButton +https://github.com/marcmerlin/FastLED_NeoMatrix +https://github.com/marcmerlin/FastLED_RPIRGBPanel_GFX +https://github.com/marcmerlin/FastLED_SPITFT_GFX +https://github.com/marcmerlin/FastLED_TFTWrapper_GFX +https://github.com/marcmerlin/Framebuffer_GFX +https://github.com/marcmerlin/SmartMatrix_GFX +https://github.com/marcoschwartz/aREST_UI +https://github.com/marcoschwartz/aREST +https://github.com/marcoschwartz/LiquidCrystal_I2C +https://github.com/marecl/HPDL1414 +https://github.com/marecl/settingsManager +https://github.com/marhar/ArrbotMonitor +https://github.com/markszabo/IRremoteESP8266 +https://github.com/MarkusLange/RTCDue +https://github.com/MarScaper/ephemeris +https://github.com/Martin-Laclaustra/CronAlarms +https://github.com/martin-leo/KeyboardAzertyFr +https://github.com/martin2250/ADCTouch +https://github.com/MartinL1/BMP280_DEV +https://github.com/MartinL1/BMP388_DEV +https://github.com/MartinL1/I2C_DMAC +https://github.com/Martinsos/arduino-lib-hc-sr04 +https://github.com/MartyMacGyver/ESP32-Digital-RGB-LED-Drivers +https://github.com/marvinroger/arduino-shutters +https://github.com/Marzogh/SPIMemory +https://github.com/Master811129/MicroTone +https://github.com/Master811129/PF +https://github.com/matafonoff/J1850-VPW-Arduino-Transceiver-Library +https://github.com/mateusjunges/accel-stepper-with-distances +https://github.com/mathcoll/t6iot +https://github.com/mathertel/DMXSerial +https://github.com/mathertel/DMXSerial2 +https://github.com/mathertel/LiquidCrystal_PCF8574 +https://github.com/mathertel/OneButton +https://github.com/mathertel/Radio +https://github.com/mathertel/RotaryEncoder +https://github.com/mathworks/thingspeak-arduino +https://github.com/matmunk/DS18B20 +https://github.com/matmunk/LiquidCrystal_74HC595 +https://github.com/MatrixOrbital/MatrixOrbitalGTTClientLibrary +https://github.com/matsujirushi/MjGrove +https://github.com/mattairtech/EEPROM_CAT25 +https://github.com/mattairtech/SRAM_23LC +https://github.com/MattFryer/Board_Identify +https://github.com/MattFryer/Smoothed +https://github.com/matthew-dickson-epic/TimeInterrupt +https://github.com/matthewg42/Mutila +https://github.com/matthijskooijman/arduino-lmic +https://github.com/mattshepcar/SmoothLed +https://github.com/matusm/Arduino-DataSeriesPod +https://github.com/matusm/Arduino-E2 +https://github.com/max22-/ESP32-BLE-MIDI +https://github.com/maxpautsch/mPower +https://github.com/maxpautsch/SvgParser +https://github.com/maykon/ButtonDebounce +https://github.com/mcauser/i2cdetect +https://github.com/mcci-catena/arduino-lmic +https://github.com/mcci-catena/arduino-lorawan +https://github.com/mcci-catena/Catena-Arduino-Platform +https://github.com/mcci-catena/Catena-mcciadk +https://github.com/mcci-catena/MCCI_Catena_SDP +https://github.com/mcci-catena/MCCI_FRAM_I2C +https://github.com/MCUdude/KTMS1201 +https://github.com/MCUdude/SigmaDSP +https://github.com/mcxiaoke/ESPDateTime +https://github.com/mdxmase/asip-additional-services +https://github.com/mdxmase/asip +https://github.com/MeelonUsk/tb9051ftg-motor-carrier-arduino +https://github.com/meeo/meeo-arduino +https://github.com/meganetaaan/m5stack-avatar +https://github.com/Megunolink/MLP +https://github.com/mehtajainam/VCNL36687 +https://github.com/mehyaa/esp8266-iot-helper +https://github.com/melopero/Melopero_AMG8833_Arduino_Library +https://github.com/melopero/Melopero_APDS-9960_Arduino_Library +https://github.com/melopero/Melopero_BME280_Arduino_Library +https://github.com/melopero/Melopero_LSM9DS1_Arduino_Library +https://github.com/melopero/Melopero_RV-3028_Arduino_Library +https://github.com/melopero/Melopero_SAM-M8Q_Arduino_Library +https://github.com/melopero/Melopero_UBX +https://github.com/melopero/Melopero_VL53L1X_Arduino_Library +https://github.com/MERG-DEV/CBUS +https://github.com/MERG-DEV/CBUS2515 +https://github.com/MERG-DEV/CBUSBUZZER +https://github.com/MERG-DEV/CBUSconfig +https://github.com/MERG-DEV/CBUSLED +https://github.com/MERG-DEV/CBUSswitch +https://github.com/merlinschumacher/Basecamp +https://github.com/mertwhocodes/mwc_stepper +https://github.com/MHeeres/DataServeriOS +https://github.com/mhorimoto/ELT_S300_HOLLY +https://github.com/MHotchin/BalBoaSpa +https://github.com/MHotchin/RLEBitmap +https://github.com/MHotchin/Waveshare4InchTftShield +https://github.com/MHotchin/YAAWS +https://github.com/MichaelJonker/HardwareSerialRS485 +https://github.com/michaelkamprath/ShiftRegisterLEDMatrixLib +https://github.com/michaelkrzyzaniak/Dynamixel_Servo +https://github.com/MichaelUray/muTimer +https://github.com/michalmonday/CSV-Parser-for-Arduino +https://github.com/Mickaelh51/Arduino-Oregon-Library +https://github.com/mickey9801/BlinkControl +https://github.com/mickey9801/ButtonFever +https://github.com/mickey9801/MultiButtons +https://github.com/micro-bitcoin/uBitcoin +https://github.com/MicroBahner/MobaTools +https://github.com/Microbot-it/Microbot-Motor-Shield +https://github.com/MicroGamerConsole/MicroGamer-Arduino +https://github.com/miguel5612/Arduino-ThermistorLibrary +https://github.com/miguel5612/MQSensorsLib +https://github.com/miguelbalboa/rfid +https://github.com/MiguelPynto/ShiftDisplay +https://github.com/mihai-dinculescu/arduino-gravity-soil-moisture-sensor +https://github.com/mikalhart/IridiumSBD +https://github.com/mike-matera/ArduinoSTL +https://github.com/mike-matera/FastPID +https://github.com/MikeDombo/HV518_Arduino +https://github.com/miko007/SerialTerminal +https://github.com/mikronika/BitkitRobit +https://github.com/milador/EasyMorse +https://github.com/MileBuurmeijer/DS1307newAlarms +https://github.com/milesburton/Arduino-Temperature-Control-Library +https://github.com/mimeindustries/Marceau +https://github.com/MINDS-i/MINDS-i-Drone +https://github.com/MINDS-i/MINDS-i +https://github.com/mirobot/mirobot-arduino +https://github.com/Mixiaoxiao/Arduino-HomeKit-ESP8266 +https://github.com/mjackdk/AmbientCO2 +https://github.com/MLXXXp/Arduboy2 +https://github.com/MLXXXp/ArduboyTones +https://github.com/mmojana/pca9634-arduino-library +https://github.com/mmuratyilmaz/KAI-Pro +https://github.com/mmurdoch/arduinounit +https://github.com/mobergmann/Simple_HCSR04 +https://github.com/mobinrg/JMAFoundation +https://github.com/mobinrg/JMASPComm +https://github.com/mobizt/ESP-Mail-Client +https://github.com/mobizt/ESP32-Mail-Client +https://github.com/mobizt/Firebase-Arduino-WiFi101 +https://github.com/mobizt/Firebase-Arduino-WiFiNINA +https://github.com/mobizt/Firebase-ESP32 +https://github.com/mobizt/Firebase-ESP8266 +https://github.com/mobizt/FirebaseJson +https://github.com/modulolabs/modulo-lib +https://github.com/MohammedRashad/ArduZ80 +https://github.com/Mokolea/InputDebounce +https://github.com/monolithicpower/MagAlpha-Arduino-Library +https://github.com/monoxit/RTC4543lib +https://github.com/MonsieurV/ArduinoPocketGeiger +https://github.com/monstrenyatko/ArduinoMqtt +https://github.com/montoyamoraga/TinyTrainable +https://github.com/moononournation/Arduino_GFX +https://github.com/morcibacsi/arduino_tss463_van +https://github.com/morcibacsi/esp32_rmt_van_rx +https://github.com/moretticb/Neurona +https://github.com/morsisko/EasyStringStream +https://github.com/mozilla-iot/webthing-arduino +https://github.com/mpflaga/Arduino_Library-vs1053_for_SdFat +https://github.com/mprograms/QMC5883LCompass +https://github.com/mprograms/SimpleRotary +https://github.com/mrdunk/esp8266_mdns +https://github.com/mrfaptastic/Easy-IoT-Arduino-CC1101-LORA +https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA +https://github.com/mrfaptastic/json-streaming-parser2 +https://github.com/mrfaptastic/WiFiConnectLite +https://github.com/mrjimenez/JTAG +https://github.com/mrmot021/PLS7shield +https://github.com/mrrwa/LocoNet +https://github.com/mrrwa/NceCabBus +https://github.com/mrrwa/NmraDcc +https://github.com/MrYsLab/FirmataExpress +https://github.com/MrYsLab/Telemetrix4Arduino +https://github.com/MrYsLab/Telemetrix4Esp8266 +https://github.com/ms-iot/virtual-shields-arduino +https://github.com/mt-elektrik/MteCore +https://github.com/muwerk/munet +https://github.com/muwerk/muwerk +https://github.com/muwerk/ustd +https://github.com/myconstellation/constellation-arduino +https://github.com/myDevicesIoT/Cayenne-MQTT-Arduino +https://github.com/mysensors/MySensors +https://github.com/N-Magi/CliTerminal +https://github.com/n0m1/Comp6DOF_n0m1 +https://github.com/n0m1/MMA8453_n0m1 +https://github.com/n0m1/Sleep_n0m1 +https://github.com/NachtRaveVL/BY8X01-16P-Arduino +https://github.com/NachtRaveVL/Lepton-FLiR-Arduino +https://github.com/NachtRaveVL/PCA9685-Arduino +https://github.com/NADA-ELECTRONICS/AS-289R2 +https://github.com/nadavmatalon/ADS1110 +https://github.com/nadavmatalon/MCP3221 +https://github.com/nadavmatalon/MCP9802 +https://github.com/nadavmatalon/PCA9536_RGB +https://github.com/nadavmatalon/PCA9536 +https://github.com/nadavmatalon/WatchDog +https://github.com/Naguissa/uCRC16BPBLib +https://github.com/Naguissa/uCRC16Lib +https://github.com/Naguissa/uCRC16XModemLib +https://github.com/Naguissa/uDebugLib +https://github.com/Naguissa/uEEPROMLib +https://github.com/Naguissa/uMFMLib +https://github.com/Naguissa/uMuxOutputLib +https://github.com/Naguissa/uRTCLib +https://github.com/Naguissa/uSevenSegmentLib +https://github.com/Naguissa/uTimerLib +https://github.com/Nargott/birdhouse_sdk +https://github.com/narinaviation/iBotX +https://github.com/NatanBiesmans/Arduino-POST-HTTP-Parser +https://github.com/natchaipon/SnailwalkPromptpay +https://github.com/NathanBak/astra_esp8266 +https://github.com/nathanRamaNoodles/MusicWithoutDelay-LIbrary +https://github.com/nathanRamaNoodles/SensorToButton +https://github.com/nathanRamaNoodles/TinkerController-Library +https://github.com/NeiroNx/RTCLib +https://github.com/neman-io/Bleeper +https://github.com/NeoCat/Arduno-Twitter-library +https://github.com/neonode-inc/zforce-arduino +https://github.com/neosarchizo/cm1106_i2c +https://github.com/neosarchizo/pm2008_i2c +https://github.com/neosarchizo/TinyGPS +https://github.com/Neosegment/Arduino +https://github.com/neptune2/simpleDSTadjust +https://github.com/neroroxxx/BMC +https://github.com/neroroxxx/RoxMux +https://github.com/netguy204/OakOLED +https://github.com/netpieio/microgear-esp8266-arduino +https://github.com/netpieio/microgear-nbiot-arduino +https://github.com/neu-rah/ArduinoMenu +https://github.com/neu-rah/Dump +https://github.com/NHBSystems/NHB_AD7794 +https://github.com/niccokunzmann/UC121902-TNARX-A +https://github.com/NicholasBerryman/GenericMotorDriver +https://github.com/NicholasBerryman/USBControllerLib +https://github.com/nickgammon/Regexp +https://github.com/nickkoza/animately +https://github.com/NicoHood/AnalogTouch +https://github.com/NicoHood/HID +https://github.com/NicoHood/IRLremote +https://github.com/NicoHood/MSGEQ7 +https://github.com/NicoHood/Nintendo +https://github.com/NicoHood/PinChangeInterrupt +https://github.com/NicoHood/RCLSwitch +https://github.com/NilsMinor/TMP117-Arduino +https://github.com/nitins11/Nokia5110LCD +https://github.com/NitrofMtl/ACI_10K_an +https://github.com/NitrofMtl/ADC_Sampler +https://github.com/NitrofMtl/ADC_SEQR +https://github.com/NitrofMtl/CurrentSwitch +https://github.com/NitrofMtl/DUE_Schmitt +https://github.com/NitrofMtl/MicroTuple +https://github.com/NitrofMtl/RTD10k-temp-sensor +https://github.com/NitrofMtl/TimeOut +https://github.com/NitrofMtl/weeklyAlarm +https://github.com/njh/EtherCard +https://github.com/njh/EtherSia +https://github.com/Nkawu/TFT_22_ILI9225 +https://github.com/nkolban/ESP32_BLE_Arduino +https://github.com/noah1510/LedController +https://github.com/NordicAlliance/arduino-tgui +https://github.com/NorthernWidget/DS3231 +https://github.com/NorthernWidget/Logger +https://github.com/Nospampls/SchedTask +https://github.com/Nouryas-Tech/Nouryas-Advanced-Line-Follower-Array +https://github.com/Nredor/ESPNexUpload +https://github.com/nrwiersma/ConfigManager +https://github.com/nrwiersma/ESP8266Scheduler +https://github.com/nullboundary/AtTouch +https://github.com/nullboundary/SST25VF +https://github.com/nuMectro/nuMROBO +https://github.com/NVSL/gadgetron-software-libraries +https://github.com/nyampass/ArduinoESPAT-Library +https://github.com/nyampass/HaLake-M5Stack-Library +https://github.com/nyampass/HaLakeKit-Library +https://github.com/nyampass/HaLakeKitFirst-Library +https://github.com/Nyanyan/FastCapacitiveSensor +https://github.com/oberonspace/krypton +https://github.com/ocrdu/Arduino_SAMD21_Audio_Player +https://github.com/ocrdu/Arduino_SAMD21_turbo_PWM +https://github.com/ofekp/TinyUPnP +https://github.com/offcircuit/Batflow +https://github.com/offcircuit/Charset +https://github.com/offcircuit/DTime +https://github.com/offcircuit/GPS +https://github.com/offcircuit/LCDIC2 +https://github.com/offcircuit/Morse +https://github.com/offcircuit/Nextion +https://github.com/offcircuit/RTCDS1307 +https://github.com/offcircuit/SDHT +https://github.com/offcircuit/SHCSR04 +https://github.com/OladapoAjala/Drive +https://github.com/OladapoAjala/Robot +https://github.com/olikraus/U8g2_Arduino +https://github.com/olikraus/U8g2_for_Adafruit_GFX +https://github.com/olikraus/U8glib_Arduino +https://github.com/olikraus/Ucglib_Arduino +https://github.com/olkal/HX711_ADC +https://github.com/olkal/LCD_ST7032 +https://github.com/OM222O/ADS1219 +https://github.com/onelife/Arduino_RT-Thread +https://github.com/onelife/RTT-GUI +https://github.com/onelife/RTT-QRCode +https://github.com/OnionIoT/Onion-Arduino-Library +https://github.com/Open-Bionics/FingerLib +https://github.com/OpenBCI/OpenBCI_32bit_Library +https://github.com/OpenBCI/OpenBCI_32bit_SD +https://github.com/OpenBCI/OpenBCI_Ganglion_Library +https://github.com/OpenBCI/OpenBCI_Radios +https://github.com/OpenBCI/OpenBCI_Wifi_Master_Library +https://github.com/OpenBCI/OpenBCI_WIFI +https://github.com/OpenCIAg/BlueFairy +https://github.com/OpenDevice/opendevice-lib-arduino +https://github.com/openenergymonitor/EmonLib +https://github.com/OpenFTC/HiTechnic-Arduino +https://github.com/openlcb/OpenLCB_Single_Thread +https://github.com/openmrn/OpenMRNLite +https://github.com/openmv/openmv-arduino-rpc +https://github.com/opensensinglab/tfmini +https://github.com/OPEnSLab-OSU/FeatherFault +https://github.com/OPEnSLab-OSU/SSLClient +https://github.com/OpenSourceMedicalRobots/Endo-Continuum-Robot-Library +https://github.com/OperatorFoundation/Crypto +https://github.com/orbitalair/Rtc_Pcf8563 +https://github.com/orgua/iLib +https://github.com/orgua/OneWireHub +https://github.com/oroca/OROCA-EduBot-Library +https://github.com/ostaquet/Arduino-MQ131-driver +https://github.com/ostaquet/Arduino-SIM800L-driver +https://github.com/OtacilioN/Brasilino +https://github.com/outofambit/easy-neopixels +https://github.com/oxullo/Arduino-MAX30100 +https://github.com/oxullo/Arduino-TCM2 +https://github.com/ozhantr/DigitLedDisplay +https://github.com/pachonk/Sensor +https://github.com/pacocatech/LedUtil +https://github.com/pagongamedev/PagonGameDev_GameLoop +https://github.com/PalladinoMarco/AlignedJoystick +https://github.com/Panjkrc/TCS3200_library +https://github.com/panStamp/mma8652 +https://github.com/panStamp/sram +https://github.com/panStamp/swap +https://github.com/panStamp/thermistor +https://github.com/Pantastisch/FixedPoint_LUT +https://github.com/PaoloP74/extEEPROM +https://github.com/Papabyte/Byteduino +https://github.com/Paraphraser/NodeRedTime +https://github.com/ParsePlatform/Parse-SDK-Arduino +https://github.com/pasko-zh/brzo_i2c +https://github.com/patou01/HC-SR04 +https://github.com/Patrick-Thomas/SixAxisRing +https://github.com/PatternAgents/Haptic_DA7280 +https://github.com/PatternAgents/Haptic_DRV2605 +https://github.com/paulo-raca/Arduino_AsyncLiquidCrystal +https://github.com/paulo-raca/ArduinoBufferedStreams +https://github.com/paulo-raca/ArduinoLedDithering +https://github.com/paulo-raca/YetAnotherArduinoDebounceLibrary +https://github.com/paulo-raca/YetAnotherArduinoPcIntLibrary +https://github.com/paulo-raca/YetAnotherArduinoWiegandLibrary +https://github.com/PaulStoffregen/AltSoftSerial +https://github.com/PaulStoffregen/CapacitiveSensor +https://github.com/PaulStoffregen/DmxSimple +https://github.com/PaulStoffregen/DS1307RTC +https://github.com/PaulStoffregen/Encoder +https://github.com/PaulStoffregen/FreqCount +https://github.com/PaulStoffregen/FreqMeasure +https://github.com/PaulStoffregen/FrequencyTimer2 +https://github.com/PaulStoffregen/ILI9341_t3 +https://github.com/PaulStoffregen/LedDisplay +https://github.com/PaulStoffregen/MahonyAHRS +https://github.com/PaulStoffregen/MsTimer2 +https://github.com/PaulStoffregen/NXPMotionSense +https://github.com/PaulStoffregen/OctoWS2811 +https://github.com/PaulStoffregen/OneWire +https://github.com/PaulStoffregen/PS2Keyboard +https://github.com/PaulStoffregen/PulsePosition +https://github.com/PaulStoffregen/PWMServo +https://github.com/PaulStoffregen/SerialFlash +https://github.com/PaulStoffregen/Time +https://github.com/PaulStoffregen/TimeAlarms +https://github.com/PaulStoffregen/TimerOne +https://github.com/PaulStoffregen/TimerThree +https://github.com/PaulStoffregen/Tlc5940 +https://github.com/PaulStoffregen/XPT2046_Touchscreen +https://github.com/pavelmc/FT857d +https://github.com/peanut-king-solution/PeanutKing_Soccer +https://github.com/PeterEmbedded/BH1750FVI +https://github.com/peterus/APRS-Decoder-Lib +https://github.com/peterus/APRS-IS-Lib +https://github.com/peterus/INA226Lib +https://github.com/pfeerick/elapsedMillis +https://github.com/Pharap/FixedPointsArduino +https://github.com/philbowles/esparto +https://github.com/philippG777/HP03S +https://github.com/philj404/SimpleSerialShell +https://github.com/phlpjo/MkrGsm1400IoT +https://github.com/pholmes2012/Simple_FRAM_FileSystem +https://github.com/photodude/DualVNH5019MotorShieldMod3 +https://github.com/phpoc/arduino-Phpoc +https://github.com/phpoc/arduino-PhpocExpansion +https://github.com/PhracturedBlue/ESP8266MQTTMesh +https://github.com/picodebr/PlugPiBlack +https://github.com/pierremolinaro/acan-t4 +https://github.com/pierremolinaro/acan +https://github.com/pierremolinaro/acan2515 +https://github.com/pierremolinaro/acan2515Tiny +https://github.com/pierremolinaro/acan2517 +https://github.com/pierremolinaro/acan2517FD +https://github.com/pilotak/Hysteresis +https://github.com/pilotak/LPS35HW +https://github.com/pilotak/MCP3X21 +https://github.com/pilotak/MeteoFunctions +https://github.com/pilotak/MovingAverage +https://github.com/pilotak/MovingAverageAngle +https://github.com/pilotak/MovingAverageFloat +https://github.com/pilotak/WeatherMeters +https://github.com/pixelmatix/GifDecoder +https://github.com/pixelmatix/SmartMatrix +https://github.com/pixetto/Pixetto +https://github.com/pkerspe/ESP-FlexyStepper +https://github.com/pkerspe/ESP-StepperMotor-Server +https://github.com/pkoerber/SMA-SunnyBoy-Reader +https://github.com/planetk/ArduinoFritzApi +https://github.com/plapointe6/EspHtmlTemplateProcessor +https://github.com/plapointe6/EspMQTTClient +https://github.com/plapointe6/HAMqttDevice +https://github.com/plasticrake/OpcServer +https://github.com/platisd/nokia-5110-lcd-library +https://github.com/platisd/smartcar_shield +https://github.com/plenprojectcompany/PLEN5Stack +https://github.com/plerup/espsoftwareserial +https://github.com/ploys/arduino-logger +https://github.com/poelstra/arduino-multi-button +https://github.com/pololu/a-star-32u4-arduino-library +https://github.com/pololu/a4990-motor-shield +https://github.com/pololu/amis-30543-arduino +https://github.com/pololu/apa102-arduino +https://github.com/pololu/balboa-32u4-arduino-library +https://github.com/pololu/drv8835-motor-shield +https://github.com/pololu/dual-g2-high-power-motor-shield +https://github.com/pololu/dual-max14870-motor-shield +https://github.com/pololu/dual-mc33926-motor-shield +https://github.com/pololu/dual-tb9051ftg-motor-shield +https://github.com/pololu/dual-vnh5019-motor-shield +https://github.com/pololu/fastgpio-arduino +https://github.com/pololu/high-power-stepper-driver-arduino +https://github.com/pololu/jrk-g2-arduino +https://github.com/pololu/l3g-arduino +https://github.com/pololu/lis3mdl-arduino +https://github.com/pololu/lps-arduino +https://github.com/pololu/lsm303-arduino +https://github.com/pololu/lsm6-arduino +https://github.com/pololu/maestro-arduino +https://github.com/pololu/opt3101-arduino +https://github.com/pololu/pololu-3pi-plus-32u4-arduino-library +https://github.com/pololu/pololu-buzzer-arduino +https://github.com/pololu/pololu-hd44780-arduino +https://github.com/pololu/pololu-led-strip-arduino +https://github.com/pololu/pololu-menu-arduino +https://github.com/pololu/pololu-rpi-slave-arduino-library +https://github.com/pololu/pushbutton-arduino +https://github.com/pololu/qik-arduino +https://github.com/pololu/qtr-sensors-arduino +https://github.com/pololu/romi-32u4-arduino-library +https://github.com/pololu/tic-arduino +https://github.com/pololu/usb-pause-arduino +https://github.com/pololu/vl53l0x-arduino +https://github.com/pololu/vl53l1x-arduino +https://github.com/pololu/vl6180x-arduino +https://github.com/pololu/xyzrobot-servo-arduino +https://github.com/pololu/zumo-32u4-arduino-library +https://github.com/pololu/zumo-shield-arduino-library +https://github.com/polygondoor/Pablo +https://github.com/ponoor/Ponoor_PowerSTEP01_Library +https://github.com/porrey/EEPROM-Storage +https://github.com/porrey/max1704x +https://github.com/porrey/Mioduino +https://github.com/postfixNotation/OLED_LIB_VGY12864L_03 +https://github.com/postpersonality/melt-7segment-lcd +https://github.com/pothos/arduino-n64-controller-library +https://github.com/PowerBroker2/ArdUAV +https://github.com/PowerBroker2/Autopilot +https://github.com/PowerBroker2/DFPlayerMini_Fast +https://github.com/PowerBroker2/ELMduino +https://github.com/PowerBroker2/FireTimer +https://github.com/PowerBroker2/NEO-6M_GPS +https://github.com/PowerBroker2/SafeString +https://github.com/PowerBroker2/SdTerminal +https://github.com/PowerBroker2/SerialTransfer +https://github.com/PowerBroker2/Teensy_3X_Multipurpose_Board +https://github.com/pozyxLabs/Pozyx-Arduino-library +https://github.com/ppedro74/Arduino-SerialCommands +https://github.com/prampec/arduino-pcimanager +https://github.com/prampec/arduino-softtimer +https://github.com/prampec/IotWebConf +https://github.com/prampec/LcdBarGraph +https://github.com/prampec/LcdBarGraphX +https://github.com/pranjal-joshi/TSD305Lib-Arduino +https://github.com/predicteur/Serie +https://github.com/prenticedavid/MCUFRIEND_kbv +https://github.com/PribaNosati/mrm-8x8a +https://github.com/PribaNosati/mrm-bldc2x50 +https://github.com/PribaNosati/mrm-bldc4x2.5 +https://github.com/PribaNosati/mrm-board +https://github.com/PribaNosati/mrm-can-bus +https://github.com/pribaNosati/mrm-col-can +https://github.com/PribaNosati/mrm-common +https://github.com/PribaNosati/mrm-fet-can +https://github.com/PribaNosati/mrm-imu +https://github.com/PribaNosati/mrm-ir-finder-can +https://github.com/PribaNosati/mrm-ir-finder2 +https://github.com/PribaNosati/mrm-ir-finder3 +https://github.com/PribaNosati/mrm-lid-can-b +https://github.com/PribaNosati/mrm-lid-can-b2 +https://github.com/PribaNosati/mrm-lid1 +https://github.com/PribaNosati/mrm-lid2 +https://github.com/PribaNosati/mrm-mot2x50 +https://github.com/PribaNosati/mrm-mot4x10 +https://github.com/PribaNosati/mrm-mot4x3.6can +https://github.com/PribaNosati/mrm-node +https://github.com/PribaNosati/mrm-pid +https://github.com/PribaNosati/mrm-ref-can +https://github.com/PribaNosati/mrm-robot +https://github.com/PribaNosati/mrm-servo +https://github.com/PribaNosati/mrm-switch +https://github.com/PribaNosati/mrm-therm-b-can +https://github.com/PribaNosati/mrm-us1 +https://github.com/printoo/printoo_library +https://github.com/ProgettoCompany/Progetto_One_Pin_Keypad_Arduino_Library +https://github.com/Programmable-Air/Code +https://github.com/project-sparthan/sparthan-gforce +https://github.com/project-sparthan/sparthan-module +https://github.com/project-sparthan/sparthan-myo +https://github.com/PRosenb/DeepSleepScheduler +https://github.com/PRosenb/EEPROMWearLevel +https://github.com/PRosenb/SPIFFS_FilePrint +https://github.com/Protocentral/Protocentral_ADS1220 +https://github.com/Protocentral/ProtoCentral_ads1262 +https://github.com/Protocentral/ProtoCentral_fdc1004_breakout +https://github.com/Protocentral/protocentral_healthypi4_arduino +https://github.com/Protocentral/protocentral_max30003 +https://github.com/Protocentral/Protocentral_MAX30205 +https://github.com/Protocentral/protocentral_max86150_ecg_ppg +https://github.com/Protocentral/protocentral_mlx90632_arduino +https://github.com/Protocentral/protocentral-ads1292r-arduino +https://github.com/Protocentral/protocentral-afe4490-arduino +https://github.com/Protocentral/protocentral-pulse-express +https://github.com/pseudoVella/shift7seg +https://github.com/pstolarz/CoopThreads +https://github.com/pstolarz/nrfhal_arduino +https://github.com/pstolarz/OneWireNg +https://github.com/psychogenic/Chronos +https://github.com/psychogenic/SerialUI +https://github.com/PTS93/Stator +https://github.com/pu2clr/AKC695X +https://github.com/pu2clr/bk108x +https://github.com/pu2clr/KT0915 +https://github.com/pu2clr/RDA5807 +https://github.com/pu2clr/SI470X +https://github.com/pu2clr/SI4735 +https://github.com/pu2clr/SI4844 +https://github.com/pubnub/arduino +https://github.com/PulseRain/M10ADC +https://github.com/PulseRain/M10CODEC +https://github.com/PulseRain/M10DTMF +https://github.com/PulseRain/M10ESP8266 +https://github.com/PulseRain/M10Examples +https://github.com/PulseRain/M10I2C +https://github.com/PulseRain/M10JTAG +https://github.com/PulseRain/M10LCD +https://github.com/PulseRain/M10PS2 +https://github.com/PulseRain/M10PWM +https://github.com/PulseRain/M10SD +https://github.com/PulseRain/M10SerialAUX +https://github.com/PulseRain/M10SevenSeg +https://github.com/PulseRain/M10SRAM +https://github.com/PulseRain/PulseRainUARTConsole +https://github.com/PulseRain/Step_CYC10_I2C +https://github.com/PulseRain/Step_CYC10_Seven_Seg_Display +https://github.com/purwar2016/ArduinoBlue-library +https://github.com/purwar2016/PreciseMovement-library +https://github.com/pushdata-io/Arduino_ESP8266_SSL +https://github.com/PushTheWorld/PTW-Arduino-Assert +https://github.com/puuu/ESPiLight +https://github.com/puuu/USIWire +https://github.com/pvannatto/Switch2_Lib +https://github.com/pvizeli/CmdParser +https://github.com/Pylo/MCreatorLinkArduino +https://github.com/qisun1/ESP8266_LED_64x16_Matrix +https://github.com/QuadrifoglioVerde/DL_PAC_NK76 +https://github.com/qub1750ul/Arduino_HTTP +https://github.com/qubitro/mqtt-client-arduino +https://github.com/Qudor-Engineer/DMD32 +https://github.com/queuetue/Q2-Balance-Arduino-Library +https://github.com/queuetue/Q2-HX711-Arduino-Library +https://github.com/QuickSander/ArduinoHttpServer +https://github.com/Quirkbot/QuirkbotArduinoLibrary +https://github.com/r-downing/AutoPID +https://github.com/r-downing/EasySSDP +https://github.com/r-downing/PersWiFiManager +https://github.com/r-downing/SPIFFSReadServer +https://github.com/r89m/Button +https://github.com/r89m/CapacitiveButton +https://github.com/r89m/MPR121Button +https://github.com/r89m/PushButton +https://github.com/rafaelnsantos/Relay +https://github.com/rahulstva/Motor_RS +https://github.com/ramonheras/Pixel-and-Play-Arduino-Library +https://github.com/rapifireio/rapifire-arduino-mqtt +https://github.com/ravelab/JsonLogger +https://github.com/RB-ENantel/RC_ESC +https://github.com/RealTadango/FrSky +https://github.com/red-scorp/LiquidCrystal_AIP31068 +https://github.com/red-scorp/SoftSPIB +https://github.com/RedBearLab/nRF8001 +https://github.com/redkea/arduino-library +https://github.com/ReefPOM/OSPOM +https://github.com/regimantas/Oversampling +https://github.com/remicaumette/esp8266-redis +https://github.com/remoteme/esp8266-OLED +https://github.com/remoteme/RemoteMeArduinoLibrary +https://github.com/remoteme/RemoteMeArduinoLibraryUtils +https://github.com/RemoteXY/RemoteXY-Arduino-library +https://github.com/reven/Unistep2 +https://github.com/RexMORE/MOREbot_Games +https://github.com/RexMORE/MOREbot_Library +https://github.com/rfetick/Kalman +https://github.com/rfetick/MPU6050_light +https://github.com/RFExplorer/RFExplorer_3GP_IoT_Arduino +https://github.com/rgot-org/TheThingsNetwork_esp32 +https://github.com/rgot-org/TTN_M5Stack +https://github.com/rhelmus/virtmem-arlibman +https://github.com/Rhomb-io/rhio-pinmap +https://github.com/ricaun/ArduinoUniqueID +https://github.com/ricaun/LoRaNow +https://github.com/ricki-z/MMA7455 +https://github.com/ricki-z/SDS011 +https://github.com/ricmoo/QRCode +https://github.com/ridencww/cww_MorseTx +https://github.com/rileyjshaw/Seg16 +https://github.com/RiversEngineering/RiversEngineering +https://github.com/rleddy/tinycmdtable +https://github.com/rlogiacco/AnalogButtons +https://github.com/rlogiacco/BatterySense +https://github.com/rlogiacco/CircularBuffer +https://github.com/rlogiacco/MicroDebug +https://github.com/rlogiacco/PlotPlus +https://github.com/rlogiacco/VoltageReference +https://github.com/RoanBrand/ArduinoSerialToTCPBridgeClient +https://github.com/robbie-remote/RESTClient +https://github.com/robertgallup/BobaBlox +https://github.com/robgmsn/PureDigit +https://github.com/RoboCore/RoboCore_MMA8452Q +https://github.com/RoboCore/RoboCore_SMW-SX1276M0 +https://github.com/RoboCore/SerialRelay +https://github.com/robojay/_2020Bot_Library +https://github.com/Robokishan/Arduino-Scheduler +https://github.com/RobolinkInc/CoDrone +https://github.com/RobolinkInc/RokitSmart +https://github.com/Robopoly/Robopoly_Bluetooth +https://github.com/Robopoly/Robopoly_Encoders +https://github.com/Robopoly/Robopoly_Linear_Camera +https://github.com/Robopoly/Robopoly_PRismino +https://github.com/RobotCing/Atmega328_IO +https://github.com/RobotCing/Atmega32u4_IO +https://github.com/RobotCing/Atmega8_IO_basic +https://github.com/RobotCing/Atmega8_IO +https://github.com/RobotCing/Attiny84_IO_basic +https://github.com/RobotCing/Attiny84_IO +https://github.com/RobotCing/Attiny85_IO_basic +https://github.com/RobotCing/Attiny85_IO +https://github.com/RoboTech-srl/EasyVR-Arduino +https://github.com/Robotechnic/DigiKeyboardFr +https://github.com/RoboticsBrno/ArduinoLearningKitStarter-library +https://github.com/RoboticsBrno/ServoESP32 +https://github.com/ROBOTIS-GIT/Dynamixel2Arduino +https://github.com/ROBOTIS-GIT/DynamixelShield +https://github.com/ROBOTIS-GIT/ros2arduino +https://github.com/RobPo/Paperino +https://github.com/RobTillaart/ACS712 +https://github.com/RobTillaart/AD520X +https://github.com/RobTillaart/AD524X +https://github.com/RobTillaart/AD985X +https://github.com/RobTillaart/ADS1X15 +https://github.com/RobTillaart/ADT7470 +https://github.com/RobTillaart/AM232X +https://github.com/RobTillaart/AnalogPin +https://github.com/RobTillaart/Angle +https://github.com/RobTillaart/ANSI +https://github.com/RobTillaart/AsyncAnalog +https://github.com/RobTillaart/AverageAngle +https://github.com/RobTillaart/avrheap +https://github.com/RobTillaart/BH1750FVI_RT +https://github.com/RobTillaart/BitArray +https://github.com/RobTillaart/bitHelpers +https://github.com/RobTillaart/BoolArray +https://github.com/RobTillaart/Complex +https://github.com/RobTillaart/Correlation +https://github.com/RobTillaart/CountDown +https://github.com/RobTillaart/Cozir +https://github.com/RobTillaart/DAC8551 +https://github.com/RobTillaart/DAC8552 +https://github.com/RobTillaart/DAC8554 +https://github.com/RobTillaart/DEVNULL +https://github.com/RobTillaart/DEVRANDOM +https://github.com/RobTillaart/DHT12 +https://github.com/RobTillaart/DHT2pin +https://github.com/RobTillaart/DHTlib +https://github.com/RobTillaart/DHTNew +https://github.com/RobTillaart/DHTstable +https://github.com/RobTillaart/DistanceTable +https://github.com/RobTillaart/DS1821 +https://github.com/RobTillaart/DS18B20_INT +https://github.com/RobTillaart/DS18B20 +https://github.com/RobTillaart/DS28CM00 +https://github.com/RobTillaart/FastMap +https://github.com/RobTillaart/FastShiftIn +https://github.com/RobTillaart/FastShiftOut +https://github.com/RobTillaart/FastTrig +https://github.com/RobTillaart/FLE +https://github.com/RobTillaart/Fraction +https://github.com/RobTillaart/FRAM_I2C +https://github.com/RobTillaart/FunctionGenerator +https://github.com/RobTillaart/GAMMA +https://github.com/RobTillaart/GY521 +https://github.com/RobTillaart/HeartBeat +https://github.com/RobTillaart/Histogram +https://github.com/RobTillaart/HMC6352 +https://github.com/RobTillaart/HT16K33 +https://github.com/RobTillaart/HX711 +https://github.com/RobTillaart/I2C_ASDX +https://github.com/RobTillaart/I2C_EEPROM +https://github.com/RobTillaart/I2CKeyPad +https://github.com/RobTillaart/IEEE754tools +https://github.com/RobTillaart/Interval +https://github.com/RobTillaart/Kelvin2RGB +https://github.com/RobTillaart/LineFormatter +https://github.com/RobTillaart/M62429 +https://github.com/RobTillaart/MAX31855_RT +https://github.com/RobTillaart/Max44009 +https://github.com/RobTillaart/MCP_ADC +https://github.com/RobTillaart/MCP23017_RT +https://github.com/RobTillaart/MCP4725 +https://github.com/RobTillaart/MCP9808_RT +https://github.com/RobTillaart/ML8511 +https://github.com/RobTillaart/MS5611 +https://github.com/RobTillaart/MT8870 +https://github.com/RobTillaart/MultiMap +https://github.com/RobTillaart/nibbleArray +https://github.com/RobTillaart/Optoma +https://github.com/RobTillaart/PAR27979 +https://github.com/RobTillaart/ParallelPrinter +https://github.com/RobTillaart/PCA9635 +https://github.com/RobTillaart/PCA9685_RT +https://github.com/RobTillaart/PCF8574 +https://github.com/RobTillaart/PCF8575 +https://github.com/RobTillaart/PCF8591 +https://github.com/RobTillaart/PinInGroup +https://github.com/RobTillaart/PinOutGroup +https://github.com/RobTillaart/Prandom +https://github.com/RobTillaart/PrintCharArray +https://github.com/RobTillaart/printHelpers +https://github.com/RobTillaart/PrintSize +https://github.com/RobTillaart/PrintString +https://github.com/RobTillaart/PulsePattern +https://github.com/RobTillaart/RADAR +https://github.com/RobTillaart/randomHelpers +https://github.com/RobTillaart/runningAngle +https://github.com/RobTillaart/RunningAverage +https://github.com/RobTillaart/RunningMedian +https://github.com/RobTillaart/SET +https://github.com/RobTillaart/SHEX +https://github.com/RobTillaart/SHT31 +https://github.com/RobTillaart/statHelpers +https://github.com/RobTillaart/Statistic +https://github.com/RobTillaart/StopWatch_RT +https://github.com/RobTillaart/Temperature +https://github.com/RobTillaart/timing +https://github.com/RobTillaart/Troolean +https://github.com/RobTillaart/weight +https://github.com/RobTillaart/XMLWriter +https://github.com/rocketscream/Low-Power +https://github.com/rocketscream/RocketScream_LowPowerAVRZero +https://github.com/rocketscream/RocketScream_RTCAVRZero +https://github.com/RockoonTechnologies/PadComLib +https://github.com/RoCorbera/BlueVGA +https://github.com/rodrigodornelles/arduino-tone-pitch +https://github.com/RogueRobotics/RogueMP3 +https://github.com/RogueRobotics/RogueSD +https://github.com/RogueRobotics/SmartDial +https://github.com/Rokenbok/ROKduino +https://github.com/Rom3oDelta7/LED3 +https://github.com/Rom3oDelta7/MCP320X +https://github.com/romkey/IFTTTWebhook +https://github.com/roncapat/MultiLcd +https://github.com/rootfrogs/Arduino-GetInTouch-library +https://github.com/ropg/ezTime +https://github.com/ropg/M5ez +https://github.com/Rotario/arduinoCurveFitting +https://github.com/Rotario/noveltyDetection +https://github.com/roverwing/RoverWingLibrary +https://github.com/rstephan/ArtnetWifi +https://github.com/Rufus31415/Sharer +https://github.com/ruminize/FlashLightLED +https://github.com/RyoKosaka/HelloDrum-arduino-Library +https://github.com/s-light/slight_ButtonInput +https://github.com/s-light/slight_DebugMenu +https://github.com/s-light/slight_Fade +https://github.com/s-light/slight_FDC1004 +https://github.com/s-light/slight_LiquidCrystalDummy +https://github.com/s-light/slight_RotaryEncoder +https://github.com/s-light/slight_TLC5957 +https://github.com/s00500/ESPUI +https://github.com/s00500/SimpleExpressions +https://github.com/sabas1080/FXAS21002C_Arduino_Library +https://github.com/sadika9/TFTLCD-SPFD5408 +https://github.com/sadr0b0t/arduino-timer-api +https://github.com/Saeterncj/MX1508 +https://github.com/Saeterncj/QuadratureEncoder +https://github.com/saghonfly/SimpleEspNowConnection +https://github.com/sakuraio/SakuraIOArduino +https://github.com/Salterm27/Watch +https://github.com/salvadorrueda/SerialMP3Player +https://github.com/samelement/ACS-M1128 +https://github.com/samverstraete/TimerFour +https://github.com/Samyz/CESmartCamp +https://github.com/SandeepanSengupta/miniDAC-library +https://github.com/sandeepmistry/arduino-BLEPeripheral +https://github.com/sandeepmistry/arduino-CAN +https://github.com/sandeepmistry/arduino-LoRa +https://github.com/sandeepmistry/arduino-OBD2 +https://github.com/Saruccio/ESPpassthrough +https://github.com/sauttefk/RS485HwSerial +https://github.com/sblantipodi/arduino_bootstrapper +https://github.com/schinken/Flash +https://github.com/schinken/PPMEncoder +https://github.com/schlingensiepen/TelegramBotClient +https://github.com/Schm1tz1/arduino-ms5xxx +https://github.com/Schm1tz1/arduino-tsic +https://github.com/Schm1tz1/aws-sdk-arduino-esp8266 +https://github.com/SConaway/AVRUtils +https://github.com/sdumetz/coordinates +https://github.com/sebaJoSt/BlaeckSerial +https://github.com/sebnil/DueFlashStorage +https://github.com/Seeed-Studio/Accelerometer_ADXL335 +https://github.com/Seeed-Studio/Accelerometer_ADXL345 +https://github.com/Seeed-Studio/Accelerometer_And_Gyroscope_LSM6DS3 +https://github.com/Seeed-Studio/Accelerometer_H3LIS331DL +https://github.com/Seeed-Studio/Accelerometer_MMA7660 +https://github.com/Seeed-Studio/CAN_BUS_Shield +https://github.com/Seeed-Studio/Digital_Infrared_Temperature_Sensor_MLX90615 +https://github.com/Seeed-Studio/Ethernet_Shield_W5200 +https://github.com/Seeed-Studio/Gesture_PAJ7620 +https://github.com/Seeed-Studio/Grove_3_Axis_Compass_V2.0_BMM150 +https://github.com/Seeed-Studio/Grove_3_Axis_Digital_Gyro +https://github.com/Seeed-Studio/Grove_3Axis_Digital_Compass_HMC5883L +https://github.com/Seeed-Studio/Grove_4Digital_Display +https://github.com/Seeed-Studio/Grove_6Axis_Accelerometer_And_Compass_v2 +https://github.com/Seeed-Studio/Grove_Air_quality_Sensor +https://github.com/Seeed-Studio/Grove_Barometer_HP20x +https://github.com/Seeed-Studio/Grove_Barometer_Sensor +https://github.com/Seeed-Studio/Grove_BME280 +https://github.com/Seeed-Studio/Grove_BMP280 +https://github.com/Seeed-Studio/Grove_Chainable_RGB_LED +https://github.com/Seeed-Studio/Grove_Digital_Light_Sensor +https://github.com/Seeed-Studio/Grove_Haptic_Motor +https://github.com/Seeed-Studio/Grove_High_Precision_RTC_PCF85063TP +https://github.com/Seeed-Studio/Grove_HighTemp_Sensor +https://github.com/Seeed-Studio/Grove_I2C_Color_Sensor +https://github.com/Seeed-Studio/Grove_I2C_Motor_Driver_v1_3 +https://github.com/Seeed-Studio/Grove_IMU_9DOF +https://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight +https://github.com/Seeed-Studio/Grove_LED_Bar +https://github.com/Seeed-Studio/Grove_LED_Matrix_Driver +https://github.com/Seeed-Studio/Grove_LoRa_433MHz_and_915MHz_RF +https://github.com/Seeed-Studio/Grove_Mini_Track_Ball +https://github.com/Seeed-Studio/Grove_Motor_Driver_TB6612FNG +https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0 +https://github.com/Seeed-Studio/Grove_SHT31_Temp_Humi_Sensor +https://github.com/Seeed-Studio/Grove_Sunlight_Sensor +https://github.com/Seeed-Studio/Grove_Temper_Humidity_TH02 +https://github.com/Seeed-Studio/Grove_Temperature_And_Humidity_Sensor +https://github.com/Seeed-Studio/Grove_touch_sensor_CY8C40XX +https://github.com/Seeed-Studio/Grove_Ultrasonic_Ranger +https://github.com/Seeed-Studio/HDC1000 +https://github.com/Seeed-Studio/Hercules_Motor_Driver +https://github.com/Seeed-Studio/IRSendRev +https://github.com/Seeed-Studio/Multi_Channel_Relay_Arduino_Library +https://github.com/Seeed-Studio/Music_Shield +https://github.com/Seeed-Studio/Mutichannel_Gas_Sensor +https://github.com/Seeed-Studio/NFC_Tag_M24LR6E +https://github.com/Seeed-Studio/OLED_Display_128X64 +https://github.com/Seeed-Studio/OLED_Display_96X96 +https://github.com/Seeed-Studio/RFID_Library +https://github.com/Seeed-Studio/RTC_DS1307 +https://github.com/Seeed-Studio/Seeed_ADIS16470 +https://github.com/Seeed-Studio/Seeed_Arduino_FS +https://github.com/Seeed-Studio/Seeed_Arduino_IR +https://github.com/Seeed-Studio/Seeed_Arduino_LIS3DHTR +https://github.com/Seeed-Studio/Seeed_Arduino_mbedtls +https://github.com/Seeed-Studio/Seeed_Arduino_rpcUnified +https://github.com/Seeed-Studio/Seeed_Arduino_rpcWiFi +https://github.com/Seeed-Studio/Seeed_Arduino_SFUD +https://github.com/Seeed-Studio/Seeed_LDC1612 +https://github.com/Seeed-Studio/Seeed_LTC2941 +https://github.com/Seeed-Studio/Seeed_MCP9600 +https://github.com/Seeed-Studio/Seeed_PCA9685 +https://github.com/Seeed-Studio/Seeed_PM2_5_sensor_HM3301 +https://github.com/Seeed-Studio/Seeed_QTouch +https://github.com/Seeed-Studio/Seeed_SHT35 +https://github.com/Seeed-Studio/Seeed_VEML6070 +https://github.com/Seeed-Studio/Seeed_Wio_GPS_Board +https://github.com/Seeed-Studio/SeeedMotorShieldV2 +https://github.com/Seeed-Studio/Seeeduino_GPRS +https://github.com/Seeed-Studio/Small_ePaper_Shield +https://github.com/Seeed-Studio/TFT_Touch_Shield_V1 +https://github.com/Seeed-Studio/TFT_Touch_Shield_V2 +https://github.com/Seeed-Studio/Touch_Screen_Driver +https://github.com/Seeed-Studio/Wio_LTE_Arduino_Library +https://github.com/SeeedJP/GroveDriverPack +https://github.com/SeeedJP/Wio_3G_for_Arduino +https://github.com/SeeedJP/Wio_cell_lib_for_Arduino +https://github.com/SeeedJP/WioLTEforArduino +https://github.com/sefisher/fishyDIYdevices +https://github.com/Seithan/EasyNextionLibrary +https://github.com/Sensirion/arduino-ess +https://github.com/Sensirion/arduino-sht +https://github.com/Sensirion/arduino-sps +https://github.com/sensslen/LibLanc +https://github.com/septillion-git/FadeLed +https://github.com/septillion-git/QC2Control +https://github.com/SergiuToporjinschi/espmanager +https://github.com/SergiuToporjinschi/settingsmanager +https://github.com/SethSenpai/singleLEDLibrary +https://github.com/shaduzlabs/arduino-rastr +https://github.com/shaduzlabs/synapse +https://github.com/shashikg/PixhawkArduinoMAVLink +https://github.com/shielddx/oatmeal-protocol +https://github.com/ShubhamAnnigeri/tinyECC-ArduinoIDE +https://github.com/shubhamtivedi95/UltraDistSensor +https://github.com/shurillu/CTBot +https://github.com/shuvangkar/RingEEPROM +https://github.com/siara-cc/esp_arduino_sqlite3_lib +https://github.com/siara-cc/esp32_arduino_sqlite3_lib +https://github.com/siara-cc/Shox96_Arduino_Progmem_lib +https://github.com/siara-cc/sqlite_micro_logger_arduino +https://github.com/siara-cc/Unishox_Arduino_Progmem_lib +https://github.com/SiddheshNan/ThingESP-Arduino-Library +https://github.com/SiddheshNan/Things-IoT-Arduino-Library +https://github.com/sidoh/path_variable_handlers +https://github.com/sidoh/rich_http_server +https://github.com/sidwarkd/gp20u7_arduino +https://github.com/signetica/MoonRise +https://github.com/signetica/SunRise +https://github.com/sigvaldm/SevenSeg +https://github.com/Silvan85/Nova_SDS011 +https://github.com/silvervest/Silvervest_OLED_0010_SPI +https://github.com/simap/TouchWheel +https://github.com/simonmonk/arduino_TEA5767 +https://github.com/SimpleHacks/EzDmaHelper +https://github.com/SimpleHacks/hw_rng +https://github.com/SimpleHacks/QDEC +https://github.com/Simsso/ShiftRegister-PWM-Library +https://github.com/Simsso/ShiftRegister74HC595 +https://github.com/SindormirNet/ArduinoFacil +https://github.com/SindormirNet/SindormirSevenSegments +https://github.com/sinricpro/esp8266-esp32-sdk +https://github.com/siteswapjuggler/RAMP +https://github.com/sixfab/Sixfab_Arduino_CellularIoT_Library +https://github.com/sixfab/Sixfab_Arduino_NBIoT_Shield +https://github.com/skaarj1989/mWebSockets +https://github.com/skaldek/STools +https://github.com/Skallwar/GSL1680 +https://github.com/skx/Z80RetroShield +https://github.com/SlashDevin/NeoBufferedPrint +https://github.com/SlashDevin/NeoGPS +https://github.com/SlashDevin/NeoSWSerial +https://github.com/slavaza/SuperButton +https://github.com/slavaza/Thread +https://github.com/sleepdefic1t/bcl +https://github.com/sleepdefic1t/BIP66 +https://github.com/SloCompTech/ByteConvert_arduino +https://github.com/SloCompTech/QList +https://github.com/smaffer/espvgax +https://github.com/smaffer/espvgax2 +https://github.com/smaffer/vgax +https://github.com/smaffer/vgaxua +https://github.com/smartmeio/arancino-library +https://github.com/Smartphone-Companions/ESP32-ANCS-Notifications +https://github.com/SMFSW/CaptureTimer +https://github.com/SMFSW/cI2C +https://github.com/SMFSW/cQueue +https://github.com/SMFSW/Queue +https://github.com/SMFSW/sarmfsw +https://github.com/SMFSW/SeqButton +https://github.com/SMFSW/SeqTimer +https://github.com/SMFSW/SerialTerminal +https://github.com/SMFSW/SmoothADC +https://github.com/SMFSW/WireWrapper +https://github.com/smurf0969/WiFiConnect +https://github.com/smz/Arduino-RTCtime +https://github.com/sne3ks/ExodeCore +https://github.com/snototter/BasicTinkering +https://github.com/soburi/IoTivity-Lite_arduino-porting +https://github.com/soburi/IoTivity-Lite +https://github.com/soburi/tinycbor +https://github.com/SodaqMoja/GPRSbee +https://github.com/SodaqMoja/Microchip_RN487x +https://github.com/SodaqMoja/RTCTimer +https://github.com/SodaqMoja/Sodaq_BMP085 +https://github.com/SodaqMoja/Sodaq_dataflash +https://github.com/SodaqMoja/Sodaq_DS3231 +https://github.com/SodaqMoja/Sodaq_HTS221 +https://github.com/SodaqMoja/Sodaq_LIS3DE +https://github.com/SodaqMoja/Sodaq_LPS22HB +https://github.com/SodaqMoja/Sodaq_LSM303AGR +https://github.com/SodaqMoja/Sodaq_N2X +https://github.com/SodaqMoja/Sodaq_nbIOT +https://github.com/SodaqMoja/Sodaq_PcInt +https://github.com/SodaqMoja/Sodaq_R4X_MQTT +https://github.com/SodaqMoja/Sodaq_R4X +https://github.com/SodaqMoja/Sodaq_RN2483 +https://github.com/SodaqMoja/Sodaq_SHT2x +https://github.com/SodaqMoja/Sodaq_UBlox_GPS +https://github.com/SodaqMoja/Sodaq_wdt +https://github.com/SofaPirate/AsciiMassage +https://github.com/SofaPirate/Plaquette +https://github.com/SofaPirate/SlipMassage +https://github.com/SoftwareTools4Makers/OPC +https://github.com/SohnyBohny/6-digit-7-Segment-Arduino +https://github.com/solidsnake745/MIDI_Device_Controller +https://github.com/somefunAgba/ModernPIDControlSS +https://github.com/somsinchai/IBot +https://github.com/SoonerRobotics/RobotLib +https://github.com/souliss/souliss +https://github.com/souviksaha97/DAC7611 +https://github.com/souviksaha97/MCP3202 +https://github.com/soyantonio/simple-box +https://github.com/spacehuhn/SimpleCLI +https://github.com/Spaguetron/ST_HW_HC_SR04 +https://github.com/sparkfun/Fingerprint_Scanner-TTL +https://github.com/sparkfun/HyperDisplay_4DLCD-320240_ArduinoLibrary +https://github.com/sparkfun/HyperDisplay_ILI9163C_ArduinoLibrary +https://github.com/sparkfun/HyperDisplay_ILI9341_ArduinoLibrary +https://github.com/sparkfun/HyperDisplay_KWH018ST01_4WSPI_ArduinoLibrary +https://github.com/sparkfun/HyperDisplay_SSD1309_ArduinoLibrary +https://github.com/sparkfun/HyperDisplay_UG2856KLBAG01_ArduinoLibrary +https://github.com/sparkfun/phant-arduino +https://github.com/sparkfun/Qwiic_Capacitive_Touch_Slider_Arduino_Library +https://github.com/sparkfun/SparkFun_AD5330_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_ADS1015_Arduino_Library +https://github.com/sparkfun/SparkFun_ADS122C04_ADC_Arduino_Library +https://github.com/sparkfun/SparkFun_ADXL313_Arduino_Library +https://github.com/sparkfun/SparkFun_ADXL345_Arduino_Library +https://github.com/sparkfun/SparkFun_AK9750_Arduino_Library +https://github.com/sparkfun/SparkFun_AK975x_Arduino_Library +https://github.com/sparkfun/SparkFun_Alphanumeric_Display_Arduino_Library +https://github.com/sparkfun/SparkFun_Ambient_Light_Sensor_Arduino_Library +https://github.com/sparkfun/SparkFun_APDS-9960_Sensor_Arduino_Library +https://github.com/sparkfun/SparkFun_APDS9301_Library +https://github.com/sparkfun/SparkFun_ARGOS_ARTIC_R2_Arduino_Library +https://github.com/sparkfun/SparkFun_AS3935_Lightning_Detector_Arduino_Library +https://github.com/sparkfun/SparkFun_AS7265x_Arduino_Library +https://github.com/sparkfun/SparkFun_AS726X_Arduino_Library +https://github.com/sparkfun/SparkFun_ATECCX08a_Arduino_Library +https://github.com/sparkfun/SparkFun_ATSHA204_Arduino_Library +https://github.com/sparkfun/SparkFun_Bar_Graph_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_BH1749NUC_Arduino_Library +https://github.com/sparkfun/SparkFun_Bio_Sensor_Hub_Library +https://github.com/sparkfun/SparkFun_BME280_Arduino_Library +https://github.com/sparkfun/SparkFun_BNO080_Arduino_Library +https://github.com/sparkfun/SparkFun_BQ27441_Arduino_Library +https://github.com/sparkfun/SparkFun_CCS811_Arduino_Library +https://github.com/sparkfun/SparkFun_Clock_5P49V60_Arduino_Library +https://github.com/sparkfun/SparkFun_Color_LCD_Shield_Arduino_Library +https://github.com/sparkfun/SparkFun_DE2120_Arduino_Library +https://github.com/sparkfun/SparkFun_Displacement_Sensor_Arduino_Library +https://github.com/sparkfun/SparkFun_ePaper_Arduino_Library +https://github.com/sparkfun/SparkFun_External_EEPROM_Arduino_Library +https://github.com/sparkfun/SparkFun_Flying_Jalapeno_Arduino_Library +https://github.com/sparkfun/SparkFun_Graphic_LCD_Serial_Backpack_Arduino_Library +https://github.com/sparkfun/SparkFun_GridEYE_Arduino_Library +https://github.com/sparkfun/SparkFun_Haptic_Motor_Driver_Arduino_Library +https://github.com/sparkfun/SparkFun_HM01B0_Camera_ArduinoLibrary +https://github.com/sparkfun/SparkFun_HM1X_Bluetooth_Arduino_Library +https://github.com/sparkfun/SparkFun_HTU21D_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_HyperDisplay +https://github.com/sparkfun/SparkFun_I2C_GPS_Arduino_Library +https://github.com/sparkfun/SparkFun_I2C_Mux_Arduino_Library +https://github.com/sparkfun/SparkFun_ICM-20948_ArduinoLibrary +https://github.com/sparkfun/SparkFun_IridiumSBD_I2C_Arduino_Library +https://github.com/sparkfun/SparkFun_ISL29125_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_LIDARLitev4_Arduino_Library +https://github.com/sparkfun/SparkFun_Line_Follower_Array_Arduino_Library +https://github.com/sparkfun/SparkFun_LIS2DH12_Arduino_Library +https://github.com/sparkfun/SparkFun_LIS3DH_Arduino_Library +https://github.com/sparkfun/SparkFun_LP55231_Arduino_Library +https://github.com/sparkfun/SparkFun_LPS25HB_Arduino_Library +https://github.com/sparkfun/SparkFun_LSM303C_6_DOF_IMU_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_LSM6DS3_Arduino_Library +https://github.com/sparkfun/SparkFun_LSM9DS0_Arduino_Library +https://github.com/sparkfun/SparkFun_LSM9DS1_Arduino_Library +https://github.com/sparkfun/SparkFun_LTE_Shield_Arduino_Library +https://github.com/sparkfun/SparkFun_MAX1704x_Fuel_Gauge_Arduino_Library +https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library +https://github.com/sparkfun/SparkFun_MAX31855K_Thermocouple_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_MCP9600_Arduino_Library +https://github.com/sparkfun/SparkFun_MetaWatch_Library +https://github.com/sparkfun/SparkFun_MG2639_Cellular_Shield_Arduino_Library +https://github.com/sparkfun/SparkFun_Micro_OLED_Arduino_Library +https://github.com/sparkfun/SparkFun_MicroMod_Button_Arduino_Library +https://github.com/sparkfun/SparkFun_MicroPressure_Arduino_Library +https://github.com/sparkfun/SparkFun_MicroView_Arduino_Library +https://github.com/sparkfun/SparkFun_MiniGen_Arduino_Library +https://github.com/sparkfun/SparkFun_MiniMoto_Arduino_Library +https://github.com/sparkfun/SparkFun_MLX90614_Arduino_Library +https://github.com/sparkfun/SparkFun_MLX90632_Arduino_Library +https://github.com/sparkfun/SparkFun_MMA8452Q_Arduino_Library +https://github.com/sparkfun/SparkFun_MPL3115A2_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_MPU-9250_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_MS5637_Arduino_Library +https://github.com/sparkfun/SparkFun_MS5803-14BA_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_Particle_Sensor_SN-GCJA5_Arduino_Library +https://github.com/sparkfun/SparkFun_PCA9536_Arduino_Library +https://github.com/sparkfun/SparkFun_PHT_MS8607_Arduino_Library +https://github.com/sparkfun/SparkFun_ProDriver_TC78H670FTG_Arduino_Library +https://github.com/sparkfun/SparkFun_Quadstepper_Motor_Driver_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_Button_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_Digital_Capacitor_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_GPIO_Library +https://github.com/sparkfun/SparkFun_Qwiic_Humidity_AHT20_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_Joystick_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_Keypad_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_LED_Stick_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_MP3_Trigger_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_OpenLog_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_Power_Switch_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_Relay_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_RFID_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_Scale_NAU7802_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_Step_Arduino_Library +https://github.com/sparkfun/SparkFun_Qwiic_Twist_Arduino_Library +https://github.com/sparkfun/SparkFun_QwiicRF_Library +https://github.com/sparkfun/SparkFun_RedBot_Arduino_Library +https://github.com/sparkfun/SparkFun_RFD77402_Arduino_Library +https://github.com/sparkfun/Sparkfun_RGB_OLED_64x64_Arduino_Library +https://github.com/sparkfun/SparkFun_RV-1805_Arduino_Library +https://github.com/sparkfun/SparkFun_RV-8803_Arduino_Library +https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library +https://github.com/sparkfun/SparkFun_Serial_Controlled_Motor_Driver_Arduino_Library +https://github.com/sparkfun/SparkFun_SerLCD_Arduino_Library +https://github.com/sparkfun/SparkFun_SGP30_Arduino_Library +https://github.com/sparkfun/SparkFun_SGP40_Arduino_Library +https://github.com/sparkfun/SparkFun_SHTC3_Arduino_Library +https://github.com/sparkfun/SparkFun_Si701_Breakout_Arduino_Library +https://github.com/sparkfun/SparkFun_Simultaneous_RFID_Tag_Reader_Library +https://github.com/sparkfun/SparkFun_SSD1320_OLED_Arduino_Library +https://github.com/sparkfun/SparkFun_STUSB4500_Arduino_Library +https://github.com/sparkfun/SparkFun_SX1509_Arduino_Library +https://github.com/sparkfun/SparkFun_T5403_Barometric_Sensor_Arduino_Library +https://github.com/sparkfun/SparkFun_TeensyView_Arduino_Library +https://github.com/sparkfun/SparkFun_TLC5940_Arduino_Library +https://github.com/sparkfun/SparkFun_TMP102_Arduino_Library +https://github.com/sparkfun/SparkFun_TMP117_Arduino_Library +https://github.com/sparkfun/SparkFun_ToF_Range_Finder-VL6180_Arduino_Library +https://github.com/sparkfun/SparkFun_TouchInput_Arduino_Library +https://github.com/sparkfun/SparkFun_TouchInput_Driver_FT5xx6 +https://github.com/sparkfun/SparkFun_TSL2561_Arduino_Library +https://github.com/sparkfun/SparkFun_Ublox_Arduino_Library +https://github.com/sparkfun/SparkFun_VCNL4040_Arduino_Library +https://github.com/sparkfun/SparkFun_VEML6075_Arduino_Library +https://github.com/sparkfun/SparkFun_VKey_Voltage_Keypad_Arduino_Library +https://github.com/sparkfun/SparkFun_VL53L1X_Arduino_Library +https://github.com/sparkfun/SparkFun_WiseChip_HUD_Library +https://github.com/sparkfun/SparkFun_WT2003S_MP3_Decoder_Arduino_Library +https://github.com/sparkfun/SparkFun_ZX_Distance_and_Gesture_Sensor_Arduino_Library +https://github.com/sparkfun/SparkFunDMX +https://github.com/SpellFoundry/PCF8523 +https://github.com/SpellFoundry/SleepyPi2 +https://github.com/sphero-inc/sphero-sdk-arduino-cpp-library-manager +https://github.com/spicajames/Rtttl +https://github.com/SpinWearables/SpinWearablesFirmware +https://github.com/Spirik/GEM +https://github.com/Spirik/KeyDetector +https://github.com/sqfmi/HPDL1414-74HC595-Arduino +https://github.com/sqfmi/Watchy +https://github.com/squaresausage/WinbondW25N +https://github.com/squix78/esp8266-weather-station +https://github.com/squix78/json-streaming-parser +https://github.com/squix78/minigrafx +https://github.com/ssilverman/libCBOR +https://github.com/ssilverman/LiteOSCParser +https://github.com/ssilverman/SLIPStream +https://github.com/ssilverman/TeensyDMX +https://github.com/sstaub/Ticker +https://github.com/ssuhrid/EmSevenSegment +https://github.com/Staacks/phyphox-arduino +https://github.com/Stan-Reifel/ArduinoUserInterface +https://github.com/Stan-Reifel/FlexyStepper +https://github.com/Stan-Reifel/SpeedyStepper +https://github.com/Stan-Reifel/TeensyUserInterface +https://github.com/Stan-Reifel/TinyStepper_28BYJ_48 +https://github.com/StanislavJochman/LegoSensorAdapter +https://github.com/Starmbi/hp_BH1750 +https://github.com/stblassitude/Adafruit_SSD1306_Wemos_OLED +https://github.com/stdevPavelmc/ft817 +https://github.com/stechio/arduino-ad-mux-lib +https://github.com/steenerson/Plex64 +https://github.com/stefangs/arduino-library-braccio-robot +https://github.com/stemi-education/stemi-hexapod +https://github.com/STEMpedia/Dabble +https://github.com/STEMpedia/DabbleESP32 +https://github.com/stephentracz/StivSeg +https://github.com/SteveBenz/PS2KeyboardHost +https://github.com/SteveGdvs/MCP48xx +https://github.com/stevemarple/AS3935 +https://github.com/stevemarple/AsyncDelay +https://github.com/stevemarple/HIH61xx +https://github.com/stevemarple/IniFile +https://github.com/stevemarple/MCP342x +https://github.com/stevemarple/MicroNMEA +https://github.com/stevemarple/MLX90614 +https://github.com/stevemarple/RTCx +https://github.com/stevemarple/SoftWire +https://github.com/stm32duino/ASM330LHH +https://github.com/stm32duino/FatFs +https://github.com/stm32duino/FP_Examples +https://github.com/stm32duino/HTS221 +https://github.com/stm32duino/I-NUCLEO-LRWAN1 +https://github.com/stm32duino/IIS2MDC +https://github.com/stm32duino/ISM330DLC +https://github.com/stm32duino/LIS2DW12 +https://github.com/stm32duino/LIS2MDL +https://github.com/stm32duino/LIS3MDL +https://github.com/stm32duino/LPS22HB +https://github.com/stm32duino/LPS22HH +https://github.com/stm32duino/LPS25HB +https://github.com/stm32duino/LSM303AGR +https://github.com/stm32duino/LSM6DS0 +https://github.com/stm32duino/LSM6DS3 +https://github.com/stm32duino/LSM6DSL +https://github.com/stm32duino/LSM6DSO +https://github.com/stm32duino/LSM6DSOX +https://github.com/stm32duino/LSM6DSR +https://github.com/stm32duino/LwIP +https://github.com/stm32duino/M24SR64-Y +https://github.com/stm32duino/M95640-R +https://github.com/stm32duino/MX25R6435F +https://github.com/stm32duino/Proximity_Gesture +https://github.com/stm32duino/S2-LP +https://github.com/stm32duino/SPBTLE-RF +https://github.com/stm32duino/ST25DV +https://github.com/stm32duino/STM32Ethernet +https://github.com/stm32duino/STM32Examples +https://github.com/stm32duino/STM32FreeRTOS +https://github.com/stm32duino/STM32LowPower +https://github.com/stm32duino/STM32RTC +https://github.com/stm32duino/STM32SD +https://github.com/stm32duino/STTS22H +https://github.com/stm32duino/STTS751 +https://github.com/stm32duino/VL53L0X +https://github.com/stm32duino/VL53L1 +https://github.com/stm32duino/VL53L1X +https://github.com/stm32duino/VL53L3CX +https://github.com/stm32duino/VL6180X +https://github.com/stm32duino/WiFi-ISM43362-M3G-L44 +https://github.com/stm32duino/X-NUCLEO-53L0A1 +https://github.com/stm32duino/X-NUCLEO-53L1A1 +https://github.com/stm32duino/X-NUCLEO-53L1A2 +https://github.com/stm32duino/X-NUCLEO-53L3A2 +https://github.com/stm32duino/X-NUCLEO-6180XA1 +https://github.com/stm32duino/X-NUCLEO-GNSS1A1 +https://github.com/stm32duino/X-NUCLEO-IDB05A1 +https://github.com/stm32duino/X-NUCLEO-IHM02A1 +https://github.com/stm32duino/X-NUCLEO-IHM05A1 +https://github.com/stm32duino/X-NUCLEO-IHM12A1 +https://github.com/stm32duino/X-NUCLEO-IKA01A1 +https://github.com/stm32duino/X-NUCLEO-IKS01A1 +https://github.com/stm32duino/X-NUCLEO-IKS01A2 +https://github.com/stm32duino/X-NUCLEO-IKS01A3 +https://github.com/stm32duino/X-NUCLEO-LED61A1 +https://github.com/stm32duino/X-NUCLEO-NFC01A1 +https://github.com/stm32duino/X-NUCLEO-NFC03A1 +https://github.com/stm32duino/X-NUCLEO-NFC04A1 +https://github.com/stm32duino/X-NUCLEO-S2868A1 +https://github.com/stm32duino/X-NUCLEO-S2868A2 +https://github.com/stm32duino/X-NUCLEO-S2915A1 +https://github.com/Strabox/Easyuino +https://github.com/StrathbogieBrewing/AceMenu +https://github.com/suculent/esp32-http-update +https://github.com/suculent/thinx-aes-lib +https://github.com/suculent/thinx-firmware-esp32 +https://github.com/suculent/thinx-lib-esp8266-arduinoc +https://github.com/sudomesh/LoRaLayer2 +https://github.com/sui77/rc-switch +https://github.com/SukkoPera/PsxNewLib +https://github.com/SukkoPera/Webbino +https://github.com/SunitRaut/Smart-Duty-Cycling-Arduino +https://github.com/SunitRaut/WSN-for-RFM69-LowPowerLab +https://github.com/SunjunKim/PMW3360 +https://github.com/Suraj151/esp8266-framework +https://github.com/SV-Zanshin/INA +https://github.com/SvenRosvall/SignalControl +https://github.com/Syncano/syncano-arduino +https://github.com/Syncano/syncano-arduino +https://github.com/szotsaki/LIS331 +https://github.com/t-in/cloudchip-iot +https://github.com/taligentx/dscKeybusInterface +https://github.com/talk2wisen/Talk2Library +https://github.com/TamojitSaha/MAX6626_library +https://github.com/tanakamasayuki/Arduino_TensorFlowLite_ESP32 +https://github.com/tanakamasayuki/efont +https://github.com/tanakamasayuki/ESP32LitePack +https://github.com/tanakamasayuki/I2C_AXP192 +https://github.com/tanakamasayuki/I2C_BM8563 +https://github.com/tanakamasayuki/I2C_MPU6886 +https://github.com/tanakamasayuki/LinxESP32 +https://github.com/tanakamasayuki/UlpDebug +https://github.com/TanPitch/ButtonKing +https://github.com/TaraHoleInIt/Subpixie +https://github.com/tasos12/ev3-arduino +https://github.com/tcafiero/NBduinoLibrary +https://github.com/tcafiero/SensorCommunicationLib +https://github.com/tcoppex/mbed-ble-hid +https://github.com/Tdoe4321/FlexLibrary +https://github.com/TEAMarg/ATMlib +https://github.com/teamong/Mechatro +https://github.com/TECA-IOT/Tinyfox +https://github.com/TECA-IOT/Ufox +https://github.com/Technickfreak/LoRa-payload-BKU +https://github.com/TechnoPhysCAL/TGP_Bouton +https://github.com/TechnoPhysCAL/TGP_Decodeur +https://github.com/TechnoPhysCAL/TGP_Del +https://github.com/TechnoPhysCAL/TGP_Ecran +https://github.com/TechnoPhysCAL/TGP_MenuOLED +https://github.com/TechnoPhysCAL/TGP_ProtoTGP +https://github.com/technosf/ESPxRGB +https://github.com/techpaul/PS2KeyAdvanced +https://github.com/techpaul/PS2KeyMap +https://github.com/techpaul/PS2KeyRaw +https://github.com/techwillsaveus/Gamer +https://github.com/techwillsaveus/GamerIR +https://github.com/teckel12/arduino-toneac +https://github.com/teemuatlut/TMC2130Stepper +https://github.com/teemuatlut/TMC2208Stepper +https://github.com/teemuatlut/TMCStepper +https://github.com/tejashwikalptaru/ssd1306xled +https://github.com/Teknologiskolen/HCSR04 +https://github.com/telecombretagne/YACL +https://github.com/telemetryjet/telemetryjet-arduino-sdk +https://github.com/telleropnul/BigFont01_I2C +https://github.com/telleropnul/BigFont01 +https://github.com/Testato/SoftwareWire +https://github.com/texie/TeXie_arduino +https://github.com/tfeldmann/Arduino-Timeout +https://github.com/ThaiEasyElec/TEE_UC20_Shield +https://github.com/thapakorn613/GoGoBoard-Library +https://github.com/The-STEAM-Train/STEAMbot +https://github.com/thebigpotatoe/Effortless-SPIFFS +https://github.com/thebigpotatoe/Feature-Variables +https://github.com/thehapyone/BareBoneSim800 +https://github.com/TheJLifeX/ScrollingText8x8Display +https://github.com/thesolarnomad/lora-serialization +https://github.com/TheThingsNetwork/arduino-device-lib +https://github.com/TheThingsNetwork/arduino-node-lib +https://github.com/thexeno/DS1307-Emulator-Arduino-Library +https://github.com/thexeno/HardWire-Arduino-Library +https://github.com/thexperiments/NukiClientESP +https://github.com/thijse/Arduino-CmdMessenger +https://github.com/thijse/Arduino-DCF77 +https://github.com/thijse/Arduino-EEPROMEx +https://github.com/thijse/Arduino-Log +https://github.com/thinger-io/Arduino-Library +https://github.com/thinger-io/ClimaStick +https://github.com/thinger-io/ClimaStick +https://github.com/thinger-io/Core32 +https://github.com/thingface/arduino +https://github.com/ThingPulse/esp8266-oled-ssd1306 +https://github.com/ThingPulse/XPT2046_Touchscreen +https://github.com/thingsboard/ThingsBoard-Arduino-MQTT-SDK +https://github.com/thingSoC/embedis +https://github.com/thinkovation/Ambimate +https://github.com/ThisSmartHouse/CoogleIOT +https://github.com/thomasfredericks/Bounce2 +https://github.com/thomasfredericks/Chrono +https://github.com/thomasfredericks/Stepper_28BYJ_48 +https://github.com/thomasfredericks/wemos_matrix_gfx +https://github.com/thomasklingbeil/SR04_Ultrasonic +https://github.com/thotro/arduino-dw1000 +https://github.com/tiagolobao/CS5490 +https://github.com/TilenS6/SerialDraw-Library +https://github.com/timum-viw/socket.io-client +https://github.com/tinkerspy/Automaton-Esp8266 +https://github.com/tinkerspy/Automaton +https://github.com/Tintin4000/INA219B +https://github.com/TinyCircuits/TinyCircuits-TinyScreen_Lib +https://github.com/TinyCircuits/TinyCircuits-Wireling-Lib +https://github.com/tipih/NRF51_Radio_library +https://github.com/tkem/CarreraDigitalControlUnit +https://github.com/tkem/mbino +https://github.com/TKJElectronics/KalmanFilter +https://github.com/TMRh20/AutoAnalogAudio +https://github.com/TMRh20/RF24 +https://github.com/TMRh20/RF24Ethernet +https://github.com/TMRh20/RF24Mesh +https://github.com/TMRh20/RF24Network +https://github.com/TMRh20/TMRpcm +https://github.com/tobiasschuerg/InfluxDB-Client-for-Arduino +https://github.com/tobiasschuerg/MH-Z-CO2-Sensors +https://github.com/toblum/TetrisAnimation +https://github.com/tobozo/ESP32-Chimera-Core +https://github.com/tobozo/ESP32-targz +https://github.com/tobozo/ESP8266SDUpdater +https://github.com/tobozo/ImgurUploader +https://github.com/tobozo/M5Stack-SD-Updater +https://github.com/Tockn/MPU6050_tockn +https://github.com/Toernblom/SimpleUDPController +https://github.com/Toernblom/SimpleWiFiClient +https://github.com/tofuman0/PCA9505_06 +https://github.com/TomasRoj/BasicsLibrary +https://github.com/TomasRoj/OctopusLab-Library +https://github.com/tommag/DS2431_Arduino +https://github.com/tommag/PCM51xx_Arduino +https://github.com/tommag/TMC4210_Arduino +https://github.com/tomoto/Arduino_Tomoto_HM330X +https://github.com/tomstewart89/BasicLinearAlgebra +https://github.com/tomstewart89/Callback +https://github.com/tomstewart89/Geometry +https://github.com/tomstewart89/StateSpaceControl +https://github.com/ToniA/arduino-heatpumpir +https://github.com/toritamantaro/TN_SwitchState +https://github.com/torsteinnh/conductivityLib +https://github.com/toxnico/DMOscillator +https://github.com/toxnico/DMStepper +https://github.com/toxnico/Timer +https://github.com/tr4cker-app/tr4cker +https://github.com/TriadSemi/TS4231 +https://github.com/TriadSemi/TS8000 +https://github.com/TridentTD/TridentTD_EasyFreeRTOS32 +https://github.com/TridentTD/TridentTD_LineNotify +https://github.com/TridentTD/TridentTD_SimplePair +https://github.com/tripplefox/TsicSensor +https://github.com/tswfi/PE43xx +https://github.com/tuanpmt/ESP8266MQTTClient +https://github.com/turbyho/DABDUINO +https://github.com/Tvde1/ConfigTool +https://github.com/Tvde1/WiFiPicker +https://github.com/tyhenry/CheapStepper +https://github.com/tyrkelko/sn76489 +https://github.com/tzapu/WiFiManager +https://github.com/u-fire/ECSalinity +https://github.com/u-fire/ISE_Probe +https://github.com/u-fire/Isolated_EC +https://github.com/u-fire/Isolated_ISE +https://github.com/u-fire/pHProbe +https://github.com/u-fire/uFire_PAR +https://github.com/u-fire/uFire_SHT20 +https://github.com/u0078867/Arduino-Websocket-Fast +https://github.com/uArm-Developer/UArmForArduino +https://github.com/Uberi/Arduino-CommandParser +https://github.com/Uberi/Arduino-HardwareBLESerial +https://github.com/ubidefeo/FTDebouncer +https://github.com/ubidots/ubidots-arduino-gprs +https://github.com/ubidots/ubidots-arduino-yun +https://github.com/ubidots/Ubidots-FONA +https://github.com/ubidots/ubidots-mqtt-esp +https://github.com/UBTEDU/uKitExplore-library +https://github.com/ucloud/ucloud-iot-sdk-arduino +https://github.com/udoklein/dcf77 +https://github.com/udoklein/MLX90393_raw +https://github.com/UIPEthernet/UIPEthernet +https://github.com/ukkz/green-beacon-esp32 +https://github.com/ukw100/IRMP +https://github.com/UnexpectedMaker/Neo7Segment +https://github.com/UnexpectedMaker/tinypico-helper +https://github.com/uStepper/egoShieldS +https://github.com/uStepper/egoShieldTeach +https://github.com/uStepper/egoShieldTimeLapse +https://github.com/uStepper/uStepper-S-lite +https://github.com/uStepper/uStepper +https://github.com/uStepper/uStepperS +https://github.com/VasilKalchev/ExponentMap +https://github.com/VasilKalchev/LiquidMenu +https://github.com/VasilKalchev/RGBLED +https://github.com/VassilyDev/TSController +https://github.com/VCSFA-MARS/TSLPB +https://github.com/vdeconinck/QC3Control +https://github.com/Velleman/ALLBOT-lib +https://github.com/Velleman/K1200 +https://github.com/Velleman/Tuyav +https://github.com/Velleman/VMA11 +https://github.com/vidor-libraries/USBBlaster +https://github.com/vidor-libraries/VidorBoot +https://github.com/vidor-libraries/VidorGraphics +https://github.com/vidor-libraries/VidorPeripherals +https://github.com/VincentLim/TimerFive +https://github.com/VincentLim/TimerFour +https://github.com/vintlabs/fauxmoESP +https://github.com/vishnumaiea/ISL1208-RTC-Library +https://github.com/vishnumaiea/ptScheduler +https://github.com/vishnumaiea/R30X-Fingerprint-Sensor-Library +https://github.com/vitcon-iot/VitconCommon +https://github.com/vitcon-iot/VitconIOT +https://github.com/vitcon-iot/VitconLink +https://github.com/vitcon-iot/VitconMQTT +https://github.com/VittorioEsposito/J1850-Arduino-Transceiver-Library +https://github.com/VittorioEsposito/J1850-PWM-Encoding-Library +https://github.com/VittorioEsposito/Sim800L-Arduino-Library-revised +https://github.com/VizIoT-com/viziot-mqtt-client-arduino +https://github.com/VMinute/RootCertificates +https://github.com/vonnieda/ScreenUi +https://github.com/Vrekrer/Vrekrer_scpi_parser +https://github.com/vshymanskyy/StreamDebugger +https://github.com/vshymanskyy/TinyGSM +https://github.com/warhog/Arduino-MedianFilter +https://github.com/Warlib1975/Irms_calc +https://github.com/Warlib1975/ModbusConfig +https://github.com/WarmCatUK/WarmCat_6x14Backpack +https://github.com/wasm3/wasm3-arduino +https://github.com/waspinator/AccelStepper +https://github.com/waspinator/CD74HC4067 +https://github.com/wayoda/LedControl +https://github.com/WD24/AD5231-Arduino-Library +https://github.com/weckbach/AstroMech +https://github.com/werktag/Adaino +https://github.com/Wh1teRabbitHU/EEPROMAdapter +https://github.com/Wh1teRabbitHU/RX8010SJ +https://github.com/whatnick/ATM90E26_Arduino +https://github.com/whatnick/CS5464_Arduino +https://github.com/WhoIsMrRobotics/brainzy-library +https://github.com/WifWaf/AT24CM01 +https://github.com/WifWaf/MCP45HVX1 +https://github.com/WifWaf/MH-Z19 +https://github.com/WifWaf/TCA9548A +https://github.com/WifWaf/VEML6075 +https://github.com/will2055/AS6212-Arduino-Library +https://github.com/willie68/RCReceiver +https://github.com/wilmouths/LM35 +https://github.com/wilmouths/RGBLed +https://github.com/winlinvip/SimpleDHT +https://github.com/WiserUFBA/ArduMideaWrapper +https://github.com/WitchCraftWorks/arduino-MCP2515-nb +https://github.com/witnessmenow/arduino_twitch_api +https://github.com/witnessmenow/arduino-coinmarketcap-api +https://github.com/witnessmenow/arduino-facebook-api +https://github.com/witnessmenow/arduino-google-maps-api +https://github.com/witnessmenow/arduino-ifttt-maker +https://github.com/witnessmenow/arduino-instagram-stats +https://github.com/witnessmenow/arduino-instructables-api +https://github.com/witnessmenow/arduino-kickstarter-stats +https://github.com/witnessmenow/arduino-slack-api +https://github.com/witnessmenow/arduino-twitter-api +https://github.com/witnessmenow/arduino-youtube-api +https://github.com/witnessmenow/BPLib +https://github.com/witnessmenow/tindie-api-arduino +https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot +https://github.com/wizard97/ArduinoProcessScheduler +https://github.com/wizard97/ArduinoRingBuffer +https://github.com/wizard97/Embedded_RingBuf_CPP +https://github.com/wizard97/SimplyAtomic +https://github.com/Wiznet/WizFi250_arduino_library +https://github.com/Wiznet/WizFi310_arduino_library +https://github.com/wloche/LcdProgressBar +https://github.com/wloche/LcdProgressBarDouble +https://github.com/wolfv6/keybrd +https://github.com/Wolkabout/WolkConnect-Arduino +https://github.com/wollewald/ADS1115_WE +https://github.com/wollewald/ADXL345_WE +https://github.com/wollewald/AP3216_WE +https://github.com/wollewald/BH1750_WE +https://github.com/wollewald/INA219_WE +https://github.com/wollewald/INA226_WE +https://github.com/wollewald/MCP23017_WE +https://github.com/wollewald/SI1145_WE +https://github.com/wollewald/VL6180X_WE +https://github.com/WorldFamousElectronics/PulseSensorPlayground +https://github.com/WPIRoboticsEngineering/DFW +https://github.com/WPIRoboticsEngineering/RBE1001Lib +https://github.com/WPIRoboticsEngineering/ReactorProtocol +https://github.com/WPIRoboticsEngineering/wpi-32u4-library +https://github.com/wroob-io/arduino-wroobimp +https://github.com/wyolum/jsonlib +https://github.com/x2bus/EnergyBoard +https://github.com/XasWorks/Circios-Library +https://github.com/xcoder123/FlexiPlot_Arduino +https://github.com/xinyu198736/arduino-aliyun-iot-sdk +https://github.com/xoseperez/debounceevent +https://github.com/xoseperez/eeprom_rotate +https://github.com/xoseperez/eeprom32_rotate +https://github.com/xoseperez/hlw8012 +https://github.com/xoseperez/justwifi +https://github.com/xoseperez/my92xx +https://github.com/xoseperez/s7xg +https://github.com/xreef/ABB_Aurora_Solar_Inverter_Library +https://github.com/xreef/DHT12_sensor_library +https://github.com/xreef/EMailSender +https://github.com/xreef/PCF8575_library +https://github.com/xreef/PCF8591_library +https://github.com/YashuYathi/controlKeyboard +https://github.com/yergin/Yabl +https://github.com/YFROBOT-TM/Yfrobot-Motor-Driver-Library +https://github.com/YiannisBourkelis/Uptime-Library +https://github.com/yinkou/Arduboy-TinyFont +https://github.com/yknivag/ESP_OTA_GitHub +https://github.com/yknivag/PxMatrixChristmasIcons +https://github.com/yoprogramo/ESP_QRcode +https://github.com/YuriiSalimov/AD_Sensors +https://github.com/YuriiSalimov/AxisJoystick +https://github.com/YuriiSalimov/MAX6675_Thermocouple +https://github.com/YuriiSalimov/NTC_Thermistor +https://github.com/YuriiSalimov/RelayModule +https://github.com/YuriiSalimov/YK04_Module +https://github.com/Yurik72/ESPHap +https://github.com/yurilopes/SPIFFSIniFile +https://github.com/yyuri/Switch_lib +https://github.com/z3t0/Arduino-IRremote +https://github.com/ZachEnglish/NanoProtoShield +https://github.com/Zanduino/BME280 +https://github.com/Zanduino/BME680 +https://github.com/Zanduino/Cubigel +https://github.com/Zanduino/DS1631 +https://github.com/Zanduino/DS3231M +https://github.com/Zanduino/DSFamily +https://github.com/Zanduino/MAX31855 +https://github.com/Zanduino/MB85_FRAM +https://github.com/Zanduino/MCP7940 +https://github.com/Zanduino/MicrochipSRAM +https://github.com/Zanduino/RotaryEncoder +https://github.com/Zanduino/VCNL4010 +https://github.com/zerokol/eFLL +https://github.com/zfields/nes-rob +https://github.com/zharijs/FDC2214 +https://github.com/zhenek-kreker/MAX6675 +https://github.com/ZinggJM/GFX_Root +https://github.com/ZinggJM/GxEPD +https://github.com/ZinggJM/GxEPD2 +https://github.com/zischknall/BohleBots_BNO055 +https://github.com/zkemble/nRF905-arduino +https://github.com/zoubworldArduino/PinExtender +https://github.com/zoubworldArduino/WireUtility +https://github.com/zoubworldArduino/ZCmdMotor +https://github.com/zoubworldArduino/Zeeprom +https://github.com/zoubworldArduino/ZEncoder +https://github.com/zoubworldArduino/ZMCP23017 +https://github.com/zoubworldArduino/ZMotor2 +https://github.com/zoubworldArduino/Zmotor3 +https://github.com/zoubworldArduino/ZPCA9685 +https://github.com/zoubworldArduino/ZSharpIR +https://github.com/ZulNs/LCD_HD44780 +https://github.com/ZulNs/MultitapKeypad +https://github.com/ZulNs/STM32F1_RTC +https://github.com/Zuntara/Arduino.AdagioPro +https://github.com/Zwer2k/WeatherStationDataRx +https://gitlab.com/airbornemint/arduino-protothreads +https://gitlab.com/Ama_De/as5200l-arduino +https://gitlab.com/arduino-libraries/i2commands +https://gitlab.com/arduino-libraries/stackstring +https://gitlab.com/arduino-libraries/stens-timer +https://gitlab.com/arduino23/ExtendedTouchEvent +https://gitlab.com/chatpeth/nx2003 +https://gitlab.com/dariusmihai/Arduino_Lib_MorePins +https://gitlab.com/Enrico204/sam32wifiesp +https://gitlab.com/friml/is31fl3733 +https://gitlab.com/konnekting/KonnektingFlashStorage +https://gitlab.com/painlessMesh/painlessMesh +https://gitlab.com/rhombio/rhio-LIS2HH12 +https://gitlab.com/robostarter/starterremote +https://gitlab.com/virchow-personal/arduino-ledflasher +https://gitlab.com/xoan/escornabot-extlib +https://gitlab.com/yesbotics/libs/arduino/average-value +https://gitlab.com/yesbotics/libs/arduino/interval-callback +https://gitlab.com/yesbotics/libs/arduino/timeout-callback +https://gitlab.com/yesbotics/libs/arduino/voltmeter +https://gitlab.com/yesbotics/simple-serial-protocol/simple-serial-protocol-arduino +https://gitlab.com/zaber-core-libs/zaber-ascii-for-arduino +https://gitlab.com/zaber-core-libs/zaber-binary-for-arduino