4
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 install
La 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) :


Schéma du blink, j'utilise la pin n° 7 :



Le programme Python avec utilisation de la librairie :
  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 :

 #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.





Enregistrer un commentaire

  1. :-)

    Thank 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

    RépondreSupprimer
  2. Hi,
    on 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.

    RépondreSupprimer
  3. Where ist the resistor for the LED? Is it not needed?

    RépondreSupprimer
  4. On c or c++ code: put // before comments (in cpp compilation or /* blabla :-) */ in c

    RépondreSupprimer

 
Top