Aujourd'hui nous apprendre à adapter l'Akene v1 pour une utilisation avec un Arduino Zero !
- Matériel
- Akene v1
- Câbles M/M
Librairie Akeru spécifique
- Que faire ?
On commence par plier la patte 5V du shield de manière à ce qu'elle ne s'enfiche pas dans l'Arduino Zero, puis on met un câble M/M entre les broches 5V et 3.3V du shield :
Ensuite, il nous faut rediriger les RX/TX du modem Sigfox sur le nouveau port série utilisé. En effet, l'Arduino Zero ne supporte pas (pour le moment) la librairie SoftwareSerial... mais il possède 3 ports série matériels, utilisables en plus de la liaison USB lisible sur le moniteur série ! Ceux-ci sont désignés par Serial1, Serial2 et Serial3, et s'utilisent de la même manière que l'objet Serial que vous utilisez habituellement.
- Serial1
Pas de code supplémentaire à écrire ! Serial1 est reconnu automatiquement par l'IDE Arduino.
- Serial2
Il y a deux fichiers à modifier pour pouvoir exploiter l'objet Serial2 : il s'agit de fichiers de configuration spécifiques à l'Arduino Zero (téléchargés via le Boards Manager/Gestionnaire de Cartes de l'IDE), servant entre autres à définir les fonctions des pins du microcontrôleur.
Il faut faire un peu de spéléo pour les trouver ! Sur un PC avec Windows 7 le chemin d'accès au dossier qui nous intéresse ressemble à : C:\Users\Username\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.6\variants\arduino_zero. Une fois au bon endroit, nous avons deux fichiers à modifier :
- variant.h
Il faut ajouter à la suite des définitions des interfaces série :- Code: Tout sélectionner
// Serial2
#define PIN_SERIAL2_RX (34ul) // D12
#define PIN_SERIAL2_TX (36ul) // D10
#define PAD_SERIAL2_TX (UART_TX_PAD_2)
#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3)
Puis un peu plus bas :- Code: Tout sélectionner
extern Uart Serial2;
- variant.cpp
Il faut initialiser l'instance Serial2 en prenant exemple sur les deux existantes :- Code: Tout sélectionner
Uart Serial2(&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX);
Et activer les interruptions correspondantes, toujours en s'inspirant des lignes qui précèdent :- Code: Tout sélectionner
void SERCOM1_Handler()
{
Serial2.IrqHandler();
}
- Serial3
Il faut modifier les mêmes fichiers de configuration que précédemment pour pouvoir exploiter l'objet Serial3.
- variant.h
Il faut ajouter à la suite des définitions des interfaces série :- Code: Tout sélectionner
// Serial3
#define PIN_SERIAL3_RX (45ul) // D5
#define PIN_SERIAL3_TX (44ul) // D2
#define PAD_SERIAL3_TX (UART_TX_PAD_2)
#define PAD_SERIAL3_RX (SERCOM_RX_PAD_3)
Puis un peu plus bas :- Code: Tout sélectionner
extern Uart Serial3;
- variant.cpp
Il faut indiquer au microcontrôleur que les pins D2 et D5 peuvent être utilisées en tant que RX/TX en plus des fonctions déjà définies. Pour ce faire, il faut ajouter dans les descriptions des pins, à la suite des autres :- Code: Tout sélectionner
// 44..45 - SERCOM2
{ PORTA, 14, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SERCOM2/PAD[2]
{ PORTA, 15, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SERCOM2/PAD[3]
Puis initialiser l'instance Serial3 :- Code: Tout sélectionner
Uart Serial3(&sercom2, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX);
Et enfin activer les interruptions :- Code: Tout sélectionner
void SERCOM2_Handler()
{
Serial3.IrqHandler();
}
- Et ensuite ?
Les RX/TX de l'Akene sont respectivement sur D5 et D4, ici on utilise Serial1.
Enfin, il ne reste qu'à définir le port série utilisé dans le sketch ! Cela se fait de manière assez simple :
- Code: Tout sélectionner
Akeru akene(&Serial1);
Indiquez bien évidemment le port série sur lequel vous avez câblé l'Akene. Si la communication ne fonctionne pas, inversez les RX/TX, il s'agit d'une erreur courante !
Remarques :
- Les manipulations matérielles détaillées dans ce tutoriel sont à effectuer pour une utilisation de l'Akene avec n'importe quelle carte fonctionnant sous 3.3V.
- Une fois le convertisseur de niveaux modifié, la ligne 5V de la zone de prototypage délivrera du 3.3V.
- Si vous avez un sketch fonctionnant sur Arduino Uno que vous voulez porter sur Arduino Zero, il vous faut changer de librairie (passer de la version AVR à la version ARM citée en début de tutoriel) puis éditer le constructeur. C'est tout !
- Il est possible de rendre les modifications matérielles permanentes en remplaçant les câbles M/M par des fils soudés sur les pastilles servant à dupliquer les broches (si vous le faites n'oubliez pas de couper la patte 5V du shield) :
Les fichiers variant.h et variant.cpp en version modifiée pour ajouter le support des ports Serial2 et Serial3 sont également disponibles ci-dessous pour ceux qui auraient un doute... ou la flemme
