11

Currently; when I start a new Arduino project with some new hardware, the first thing I do is to look for 3rd-party libraries that bring Arduino support for this hardware.

The first places I look are:

Generally I find either no support library or several different libraries (it's quite rare to find only one) in different locations with different levels of documentation, different levels of testing...

Once I have found the library I need (sometimes I need to try several), I download it to my Arduino libraries folder, I use it and I forget it.

I find this process cumbersome:

  • manual search with different possible options, not always well documented
  • manual download and install to Arduino libraries
  • no version control in the process (all versions of a library have the same name and thus cannot coexist in the Arduino library folder).

I wish there was a central repository with all available libraries for arduino, with:

  • description (supported hardware, supported boards)
  • source code
  • documentation
  • versions

And a tool (Arduino IDE or external) to access this repository at project build time.

A kind of maven for Arduino in fact.

I have seen several discussions once took place on Arduino forum, but it seems they led nowhere:

Are there other options, that are made it to something usable (from the community or individuals, why not)?

  • This would be similar to PyPi pypi.python.org/pypi and virtualenv in Python, if anyone needs an analogue in another language. – Cybergibbons Feb 23 '14 at 12:08
  • Another good source is PJRC pjrc.com/teensy/td_libs.html – Cybergibbons Feb 23 '14 at 12:12
  • Something tells me the library tag wiki would be a good place to create such a database. ~35,000 characters should provide ample space to develop a very comprehensive list. – asheeshr Feb 23 '14 at 12:58
  • @AsheeshR why not? But first, a clear description of what's required (and what is optional) for each library entry is to be defined, so that this 3template3 could be followed for each added entry. – jfpoilpret Feb 23 '14 at 13:11
  • @jfpoilpret Thats a topic for a Arduino Meta discussion. – asheeshr Feb 23 '14 at 13:12
4

You just described the problems the company I'm working for is trying to solve. We've recently launced a product called biicode. It seems exactly what you are looking for.

biicode is both an online central repository for code and and a client tool that features:

  • Easy to use by beginners, configurable for more advanced users
  • Dependencies resolution, transitively, as maven does, but without config files: reads dependencies directly from source code.
  • Central repository, anyone can upload their libraries. They can be explored, navigated and discovered in the web
  • Version control: it checks versions compatibility and allows safe updates of dependencies
  • You can use it with any text editor (it has optional eclipse support)
  • It manages project setup and compilations, flashes generated firmware to the board
  • It has a nice serial monitor as a plus

You can see a quick demo here and read more in the documentation.

  • Answered 2014, its 2018 still in production? – parohy Jul 26 '18 at 14:55
  • Nope, is now conan.io from jfrog and dont know if it supports arduino anymore – hithwen Aug 20 '18 at 7:14
4

Since this question was first asked, there is now the Arduino Library Manager, built into the Arduino IDE. There you can search for and install libraries.

There is information about how the library manager works here: https://github.com/arduino/Arduino/wiki/Library-Manager-FAQ

There isn't however an official website listing the libraries, so I recently created this unofficial site, based on the same data in the Arduino Library Manager:

http://www.arduinolibraries.info/

3

The Arduino Playground LibraryList and the standard library list appear to be the official pages for that.

  • Yes but they are just a mix of short doc with links to libraries, and seem to follow a "best effort" maintenance, leading to something that looks like a mess if we would want to use it from some kind of package manager. – jfpoilpret Feb 23 '14 at 16:24
2

If you want to create such a registry yourself, you may want to take a look at npm, the package manager of Node.js, which is open-source and very similar in scope to want you describe. Npm is both:

  1. a central registry with metadata about each library:
    • name, description, keywords, homepage, author, contributors
    • version number, in principle complying with semantic versioning
    • URL of source repository (svn, git, github, gitlab, bitbucket...)
    • compatibility information (in this case it's about the versions of Node)
    • license
    • dependencies
  2. a command-line tool for:
    • searching the registry
    • downloading and installing packages, recursively following their dependencies
    • publishing and updating your own packages on the registry.

See for example the page of a popular library, and the JSON file holding its metadata.

1

There is none. Unfortunately, you will have to manually search for each library you are interested in.

If you are interested in creating such a central repository, while it would be awesome, this is not the correct forum in which to do it.

  • Then what would you advise if we were to create such a repository? – jfpoilpret Feb 23 '14 at 14:56
  • Uh.... get started? What do you mean advise? It's basically a website. Maybe add a package-manager thing to the arduino text editor if you were really into it? The major issue, as always, is going to be getting people to actually use it. – Connor Wolf Feb 23 '14 at 14:59
  • 1
    Frankly, even if you add a fancypants package manager to the arduino text editor, I don't know what kind of adoption you're going to get, because the arduino editor is horrible, and people tend to stop using it in fairly short order. As such, you'd almost need a separate package manager, so I'd almost just say a basic web-site with a index of libraries, a short blurb, and links to where they're actually hosted is the best bet. – Connor Wolf Feb 23 '14 at 15:01
  • That was my idea too, the purpose would not be to host libraries but rather keep references to them, along with useful metadata. Regarding Arduino IDE, I agree, I don't use it very often, but an external tool should be easy to integrate with it later on. – jfpoilpret Feb 23 '14 at 15:05
  • @jfpoilpret - The issue with an external tool is, as with package managers, dependency resolution and version requirement management. The arduino people don't seem too bothered by maintaining backwards compatibility, and lots of libraries require "arduino verson {blah}". I really think just a list of references is the best bet. Any more complex stuff can come later. – Connor Wolf Feb 23 '14 at 15:07
0

Arduino IDE and associated libraries are included as installable software in most OS repositories. Unfortunately the versions in these repositories is usually several months or even years out-of-date. This would seem that the real problem is in getting OS repository managers to incorporate new releases as they become available.

This problem is compounded when your OS version has not been updated to the latest release, because this forces you to use an outdated software repository.

While not a perfect answer, you should probably insure that you are using the latest release of your OS, and then encourage the repository managers for that OS to incorporate the latest version of Arduino IDE.

An alternative would be to go to the Arduino.org homepage and follow instructions to download and install the latest IDE and associated libraries. This will probably be in the form of a .tar.gz file so you will need to know how to unzip, untar, and build the necessary software.

0

I think, that your wish will not come true. I hope for it, because having only one place for all Arduino libriaries, with no libraries allowed not be there and all those libraries would be forced to stand all commercial standards of quality, testing and documentation (+code quality, effectivity and readability) would mean, that only professionals and similary qualified teams would be allowed to publish some Arduino library and it all would be governed by one single entity, which would enforce removing functionally duplicate or similar libraries. And such entity would soner or later became evil.

I like the Arduino for being free and that also means, that I am free to write library for support of some features (which I want to use) of some hardware (which I have, plan to buy or want to make myself - even highly experimental and maybe unstable, but fun for me).

With your Big Central Authority being effective, I would just choose another free platform, rather then be sued for lesser than perfect and commercially certified outcome of my hobby playing with electronics and forced to work for their, NOT my goals on MY free time.

And if your Big Central Athority would not force me to forced free labor work for them, then what would you do about my library enabling one special use of some common hardware, and about me sharing it to anyone want it, even if it does not solve all the HW functionality fully in proffesional matter and documented only so much as I would be comfortabe to spend my own free time with documentation. And what if there would arise another library for the same HW, which would enable another part of functionality or would use another API and another approach to the whole problematic?

Namely I bought some multi 7-segment module and there was "official library" for it from its manufacturer. I made another library for the same module. What now? Should be my library be in the Central Repository as "the only one library for this HW" or should be there the "official one from manufacturer"? Note, that if there were both of them, than it would break your requested "one and only one" library point. If you disallow the manufacturer one, then "the only one" would be missing a lot of features, as integrated buffer for numbers, simple object interface, simple example, how to use it and there would be hard dependency on one specific timer and generic non-object, just functional API, which would require user to break integers to single digits somehow - does not sound too good. If you disallow my library, then user would have the above, but his display would refresh only 10x per second with blinking and leaving ghosts of other digits all over place, while fully utilise processor and the documentation would be mainly in chinese. And the user would miss refresh rate 100x per second with nearly no usage of processor, nice clean digits AND characters (potetially also user defined). - Also not good.

In current state of chaos user (maybe you or anyone else) can use the library, that is better fit for his needs (be it simplicity and native integer support, or be it clean fast refresh and low CPU usage) or combine both together, making third with fast refresh AND simple integer manipulation AND user defined charset, WITH nice object API and rich documentation. It only needs one person with some time and dedication make it easy for beginers and some english skills and basic knowledge of objects and how are "official Arduino libraries" packed, so the IDE can easily import them. (And such person should do it and contribute it to Arduino library packager).

I would not do it - for my needs is functional API far better and simpler to use, take less bytes from memory and less CPU cycles and I have no urge to improve the library in ways I would not use. Also I do not use Arduino IDE, I use simple Makefile to build and upload the programs, so I can easily use good text editor (vim in my case) and have not to fight with IDE-Notepad-parody.

Under Big Central Authority enforsing your model I would not care about using Arduino at all and you will be stuck with the chinese version, if any at all (as it would not make it there for lack of good english documentation and proper package format too).

0

http://downloads.arduino.cc/libraries/library_index.json provides a list of all libraries available in Arduino Library Manager.

I used this file to create https://github.com/scls19fr/arduino_libraries_search It's a Python Pandas script to search for Arduino libraries matching some keywords and to output to Excel file

You can also find Arduino libraries using:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.