Arduino Library downloader

No problem testing. I think it is a great tool to have. Also good practice to keep libraries in a seperate location.
One question, is there someone that will keep this list of libraries in sync with the libraries on the Arduino website? If not is there a plan in place to do this somehow?

A central repository might be a very good idea.

The plan of the application was to have a central repository for all libraries.

to maintain the libraries there is the web page code-i.de
where every developer can register and upload new versions of their libraries.
they even can be downloaded directly from the web page if someone don't want to use the tool.

once they are uploaded they will be directly available in the application and it should show you that there is a new version.

it is possible that someone else than the developer uploads new libs and versions.

Maybe you should talk to the administrator of the Arduino website to setup a formal arrangement on getting the libraries from the Arduino repository transferred. Or if possible allow one of the forum members to do the job.
After that there should be an update done with every new library that is committed to the Arduino website. If you achieve this the tool will be very valuable.

Alternatively, you could get your tool to work on the Arduino repository. Maybe by special arrangement with the Arduino team.

Anyway, I think the tool is valuable and should be implemented to serve the broader community in the best possible way.

Hi. And thanks for the kind words.

I am not sure if we both talk about the same "Arduino repository".

Because as far as i know there is no central repository for libs from Arduino.
The only place that i know of where "some" of the libs that exists out there in the world of Arduino are in the playground here:
http://arduino.cc/playground/Main/LibraryList

And that is a public wiki where everyone can post and write links.
So some of the libs there in the playground only have a link to an external webpage where somewhere you can find the lib from the author.
And some have a own wiki page where somewhere there you can find a link to the lib. Then some of the libs have a different directory structure etc.
So nothing is standardized there. And i don't believe the Arduino crew have any possibility to get that data in some form that can easily imported from somewhere else.

So please don't understand me wrong.
At most of this i was already thinking how to do it in a way that would be the best before i started with this application and while i was developing it.
And i think the only way is to make a new repository where every library creator uploads their libs in a standardized form.
(i believe i should release a how-to how the structure of the zip-file should look like and maybe implement a check when the lib got uploaded.
But to be honest. Most of the libs should already be in that structure because this is how the Arduino crew recommend it.)

And then i am not a pro c++ coder. I started this project to learn a bit about developing in c++ and to try to develop it in a way that should make it easy to compile it for other operating systems out there.

So i hope there will be support from some library developers. :wink:
I still have many ideas how this project could get better.
It is just mostly hard work to gather all the needed information.

I am referring to the playground list of libraries. I do realize that they are all over the place but I think with encouragement of the Arduino team one could get the contributors to deposit their libraries on your site as well for download.
Having said that I also realize that some contributions are made in order to draw people to a specific site and maybe to sell something to them. I think it is worth the effort to try and convince contributors to support your repository for the sake of the tool and the many coders out there that can benefit from it.

Nice work on this library installer!

You might like to know about a similar effort I've been undertaking for the last year or so... to test and port all "major" Arduino libraries to Teensy (which is 3rd party board my company makes).

Here is the list of all the libraries.

http://www.pjrc.com/teensy/td_libs.html

As you can see, I still have quite a number of them to test. Usually when I add one to this list, I buy the necessary hardware - but often it sits for weeks or months due to lack of available time.

A few months ago, I added a feature to the Teensyduino installer (which automatically adds the Teensy-specific files to Arduino) to optionally install any of the tested libraries. Virtually all the libraries are only a few relatively small files. Just copying them all into installer didn't enlarge it very much, less than 1 megabyte.

Several times I considered making a java-based tool right inside the IDE - which does pretty much the same thing your nice-looking application does. The really hard part, though, is the last of a central database of all the libraries. Maybe my efforts can help, at least a bit, or I might be able to contribute in some way?

Hello and thank you.

If i understand you right you modify the libs so they work with Teensy
that they would no longer work on an Arduino Board?

I am not sure how these libraries could help in this project at the moment then.
But nice to see someone else had the same idea and made a central list for a 3rd party board.
If you know of any way to support this application i would be happy. :slight_smile:

Just to note:
I updated the Ardulibrary after i tested the method of finding the Directory where the libraries should be installed from the application.
I found out the IDE does not create the libraries directory and so now i changed the ardulibrary downloader to read the config-file of the Arduino IDE for the sketch directory and creates the libraries directory inside it.
Now the user should no longer need to search for the correct directory for himself.
ardulibrary0.1.3

beo6:
If i understand you right you modify the libs so they work with Teensy
that they would no longer work on an Arduino Board?

Oh no, not anything like that!! I always aim to preserve compatibility.

In fact, in the process of porting to Teensy, I often find libraries that were hard-coded to work only with the 168/328 chips. I usually add support for Arduino Mega and Sanguino too. For example, the Firmata library, which is now pre-installed on every Arduino Uno and Arduino Mega, became compatible with the Mega boards only because of my work to add a hardware abstraction layer.
To get an idea of the type work I've done, take a look at libraries/Firmata/Boards.h inside your arduino-0022 directory. Several other libraries work on Arduino Mega only because of the Teensy porting effort!

I always attempt to contact the original author(s) and contribute my changes. Usually, when I can find the author's contact info, they publish the changes in a new version. In some cases, I've discovered and fixed bugs too (eg, OneWire was horribly buggy). In a few cases, it's turned out the library was pretty much abandoned code and I've become the de-facto maintainer.

Recently some of the hardware abstractions I've developed for libraries are (finally) being included into the Arduino core. Some libraries (eg, SDfat) have also made use of hardware abstractions I've proposed but haven't (yet) been accepted by the Arduino Team.

I definitely do not patch libraries to work exclusively with Teensy, and in most cases I've gone to quite a lot of extra effort to build robust hardware abstraction layers that support many boards and allow for new boards to be added easily.

Then again, some libraries are already very portable, so all I do it test and document.

But nice to see someone else had the same idea and made a central list for a 3rd party board.
If you know of any way to support this application i would be happy. :slight_smile:

I'll take a look at Ardulibrary soon. Maybe I could publish a page in the format it expects, so it could query the list I have?

Or if there's more work to create a central list, at least the work I've done so far might help. I only tend to test/port/document the "major" libraries. But a quick look at my list shows several that aren't on the 2 lists I saw mentioned in this thread.

Hi and sorry that i have misunderstood your post in that point.
And i appreciate your hard work on that.

you can of course use the XML-Structure that Ardulibrary uses. (don't know if this is even a good name for that application.)
So it can easily be used with it. If you think there are some Values missing in the XML you can add them and i might use them in the application. I used most of the structure that AlphaBeta created and i might have removed some values or just didn't used some of them at the moment.

I am not sure though if i like it that there will be only 1 maintainer to add, change or remove libraries.
On the other side, i think it might be nice if i add your repository of libs as the tested and maintained libraries-list.
And the other one as an inofficial list where every developer can add libraries and new versions.
And the users use this list on their own risk.

If you want to look at the current XML-Structure you can look at this url that is generated out of my current database:
http://www.code-i.de/ardulibrary/xml.php

Multiple libraries can be selected (which is nice) but only the first library selected is downloaded and installed (which is not so nice).

Hello and thanks for testing.

Installing multiple libraries at once is now on the todo list.

Thanks.
I wasn't aware that the new Listview allows multiple selections by default.

Hello.

Also, please get the default button / Enter key to work correctly (or remove the default button property from the download button).

Hello and sorry for my long break.
I have not forgot your reports and this tool.

Also i want to thank jcnossen for uploading a library. :slight_smile:
It should still be compatible with the Arduino IDE 1.0.
Not sure about the libraries though.

So i updated it and it is now possible to install or remove multiple libraries at once.
Download Ardulibrary 0.1.5

http://ardulibrary.code-i.de/

//Edit: fixed now some bugs in version 0.1.5 and i fixed the updating. now as soon as some new version of a lib is published and "install" is pressed, the old version is deinstalled with the old file-structure and the new version is installed.

Hi beo6, I just saw your arduino lib downloader and it looks very good.
I am making an Arduino IDE based on CodeBlock and thinking I can integrate your work into the IDE. What do you think?

Hi.
Nice project.

It would be nice if it could be integrated.

I looked at how to develop a codeblocks plugin. But i can not even compile the hello world plugin. Possible because i use wxWidgets from the SVN trunk and codeblocks is not easy to compile with wxWidgets 2.9.
Or do you want to integrate the tool differently?
I could look further in plugin-development for codeblocks.

Will you release the source-code of your modified codeblocks?
And what is about the PHP-Backend to manage the libraries?

It is always good to have some choices but i think there is already a official IDE in development using Qt.

Will you release the source-code of your modified codeblocks?
And what is about the PHP-Backend to manage the libraries?

It is always good to have some choices but i think there is already a official IDE in development using Qt.

Up to now, all custom features I added is by writing wizard scripts, and pre-configuring some IDE settings, so it's naturally open-source and all can be found in my distribution.
It's a wonderful idea to have a backend that allows many contributors, including users and vendors, to maintain the libraries online.

beo6:
I looked at how to develop a codeblocks plugin. But i can not even compile the hello world plugin. Possible because i use wxWidgets from the SVN trunk and codeblocks is not easy to compile with wxWidgets 2.9.
Or do you want to integrate the tool differently?
I could look further in plugin-development for codeblocks.

I started a new post disucssing about the possbilities and ways to integrate Ardulibrary into CodeBlocks. So let's continue there.

Great project.

@Paul great work with your site. How about adding an xml file to your web root that describes each library in the same or similar way to @beo6 xml system. Then we would simply need a config file to determine what sites can be used for xml configs, this will allow multiple sites to host different sets of libraries.

We just need something like this to be downloaded from a single repository point?

The links above are examples

I could probably write a script to generate xml.

Is Ardulibrary still in development?

Hi.
It is not as active as i would like.
But when we get together a nice repository i would really like to change it so it can be used easily in Ardulibrary.

My biggest problem was always to get a good and up to date repository of libraries.

So making it like Visual Micro suggested is a good idea.

It always was possible to change the url of the xml in ardulibrary by hand. But i think a dropdown with a list would be a better option for users.

the next step would be a integration into CodeBlocks Arduino Edition. :slight_smile:

Thanks that my small project is not forgotten.

Indeed, maintaining a good list of Arduino libraries is a challenge. My goal isn't a comprehensive list, but only the most important and most useful ones. One of my main interests is learning of new libraries as early as possible, rather than random chance (either I see it online, or someone asks me for help using it with Teensy).

I could generate an xml file for the libraries I've tested and plan to test.

There are several details in the sample xml I don't quite understand. Each "lib" has an id number, starting at 19. How are they assigned? Do I just make up numbers? Likewise, there's a "category" tag, with id=1. What that about?

In the xml, links to the zip file are in a "versions" section. What should be done for libraries which don't have a clearly published version number?

There's also an "authors" section. All in the example are "sascha". What does that mean?

The XML doesn't provide any means to embed one or more URLs where documentation about the library is maintained. At least that doesn't seem to be in the example.