hello,
Comme promis le premier tutoriel autour de l'Arietta G25, bien que pas très compliqué en terme de programme, c’était surtout pour moi l'occasion de découvrir l'utilisation des GPIO et de la librairie. La librairie qui d’ailleurs pour le moment n'est disponible que pour Python. Il existe bien un moyen pour faire sa en C++ ou en C mais j'en toucherai un mot à la fin de l'article.
I - Installation de la librairie
Commençons par l'installation de la librairie, en python et nommé "ablib" elle est utilisé pour Arietta G25 bien sur, mais aussi pour toutes les autres cartes du constructeur Acme-Systems. Il existe un dépôt GitHub regroupant des tas d'exemples python, C, php etc, disponible ici :
Pour l'installation de la librairie une fois connectée via ssh il faut récupérer le contenu sur GtiHub :
git clone git://github.com/tanzilli/ablib.git
On se place ensuite dans le dossier de la lib :
cd ablib
Et on lance l'installation avec :
python setup.py installLa librairie est maintenant installée et prête à être utilisé.
II - Blink (Python)
Avant tout comme dit précédemment la librairie est générique à toutes les cartes Acme donc il faut connaitre la carte pour dans un premier temps savoir sur quel port nous travaillons, ici on va travailler sur le port J4. Ensuite la numérotation des pins comme sur le Raspberry Pi elles ont un numéro de pins et un nom. Ici on va utilisez le numéro des pins.
Numérotations des GPIO (Nom du GPIO sur de sont numéro) :
from ablib import Pin
from time import sleep
while True:
led = Pin('J4.7','OUTPUT') # pin 7 du port J4 en sortie
led.on()
sleep(0.5)
led.off()
sleep(0.25)
III - C et C++
Comme je vous l'ai expliquez pas de librairie en C ou C++ pour le moment, donc pour faire la même chose en C il faut compiler et exécuter le code suivant, la pin cette fois est à nommer avec son nom :
Pour bien faire on pourrait facilement faire une librairie avec c'est quelques fonctions, donc à voir.
IV - Conclusion
Alors comme indiquer dans précédent article l'utilisation de ce microcontrôleur n'est pas si facile que le Raspberry Pi notamment à cause du manque pour le moment de librairie autour des fonctionnalités des GPIO, mais il ne faut pas aussi oublier que sa sortie est très récente et que les quelques exemples fournis et un peut de recherche permette vite de faire se que l'ont souhaite.
Comme je vous l'ai expliquez pas de librairie en C ou C++ pour le moment, donc pour faire la même chose en C il faut compiler et exécuter le code suivant, la pin cette fois est à nommer avec son nom :
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
int gpioexport(int gpioid)
{
FILE *filestream;
if ((filestream=fopen("/sys/class/gpio/export","w"))==NULL) {
printf("Error on export GPIO\n");
return -1;
}
fprintf(filestream,"%d",gpioid);
fclose(filestream);
return 0;
}
int gpiosetdir(int gpioid,char *mode)
{
FILE *filestream;
char filename[50];
sprintf(filename,"/sys/class/gpio/gpio%d/direction",gpioid);
if ((filestream=fopen(filename,"w"))==NULL) {
printf("Error on direction setup\n");
return -1;
}
fprintf(filestream,mode);
fclose(filestream);
return 0;
}
int gpiogetbits(int gpioid)
{
FILE *filestream;
char filename[50];
char retchar;
sprintf(filename,"/sys/class/gpio/gpio%d/value",gpioid);
if ((filestream=fopen(filename,"r"))==NULL) {
printf("Error on gpiogetbits %d\n",gpioid);
return -1;
}
retchar=fgetc(filestream);
fclose(filestream);
if (retchar=='0') return 0;
else return 1;
}
int gpiosetbits(int gpioid)
{
FILE *filestream;
char filename[50];
sprintf(filename,"/sys/class/gpio/gpio%d/value",gpioid);
if ((filestream=fopen(filename,"w"))==NULL) {
printf("Error on setbits %d\n",gpioid);
return -1;
}
fprintf(filestream,"1");
fclose(filestream);
return 0;
}
int gpioclearbits(int gpioid)
{
FILE *filestream;
char filename[50];
sprintf(filename,"/sys/class/gpio/gpio%d/value",gpioid);
if ((filestream=fopen(filename,"w"))==NULL) {
printf("Error on clearbits %d\n",gpioid);
return -1;
}
fprintf(filestream,"0");
fclose(filestream);
return 0;
}
int main(void)
{
int led = 23; # GPIO PA23 donc son nom est 23
gpioexport(led);
gpiosetdir(led,"out");
for (;;) {
gpiosetbits(led);
sleep(1);
gpioclearbits(led);
sleep(1);
}
}
Pour bien faire on pourrait facilement faire une librairie avec c'est quelques fonctions, donc à voir.
IV - Conclusion
Alors comme indiquer dans précédent article l'utilisation de ce microcontrôleur n'est pas si facile que le Raspberry Pi notamment à cause du manque pour le moment de librairie autour des fonctionnalités des GPIO, mais il ne faut pas aussi oublier que sa sortie est très récente et que les quelques exemples fournis et un peut de recherche permette vite de faire se que l'ont souhaite.
:-)
RépondreSupprimerThank you very much for your simple but usefull (Python) example.
Now my arietta-G25 has a blinker.
This was the first step.
regards klaus.loy
Hi,
RépondreSupprimeron my Arietta (Kernel 4.2.5) the correct path for gpio set bit is:
/sys/class/gpio/pioA%d/value
Thanks for your good tutorial.
Where ist the resistor for the LED? Is it not needed?
RépondreSupprimerOn c or c++ code: put // before comments (in cpp compilation or /* blabla :-) */ in c
RépondreSupprimer