Dans ce deuxième billet concernant la programmation du MPLAB Xpress Evaluation board, nous allons produire un script qui va envoyer à l'ordinateur des informations pour affichage dans un logiciel de communication série.
Pour ce qui va suivre, je vais supposer que vous avez déjà consulté le précédent billet de cette série: programmation des entrées/sorties.
Nous commençons par créer un nouveau projet ("standalone") dans l'IDE MPLAB Xpress.
Nous nous rendons ensuite dans MCC: le MPLAB Express Code Configurator, et nous ajoutons un module "EUSART" à notre projet. Pour ce faire, nous cliquons deux fois sur "EUSART" dans la liste "Device Resources"...
...ce qui a pour effet d'ajouter "EUSART" dans la partie "Project Resources".
On coche les cases "Enable Transmit" et "Redirect STDIO to EUSART". (Comme vous pouvez le constater sur l'image ci-dessous, on pourrait aussi modifier le baud rate ainsi que d'autres paramètres de la communication).
On assigne TX à la pin RC0 et RX à la pin RC1; ces pins sont reliées au convertisseur série/USB de la carte:
On n'oublie pas de cliquer sur le bouton "Generate" pour que les fichiers appropriés soient créés dans notre projet MPLAB Xpress.
De retour dans l'IDE MPLAB Xpress, on écrit dans le fichier "main.c" un programme qui transmet l'information appropriée:
Finalement, on affiche l'information au moyen d'un logiciel de communication série (Putty, le moniteur série de l'IDE Arduino, etc.):
Aujourd'hui, je vous propose de programmer, au moyen de MIT App Inventor 2, une appli android qui va représenter sous forme de graphique cartésien les données analogiques reçues via bluetooth depuis une carte Arduino.
La vidéo ci-dessous montre l'appli en action: les données du graphique affiché en temps réel sur la tablette sont contrôlées par un potentiomètre relié à l'entrée A0 de la carte Arduino Uno.
Avant que vous vous imaginiez que je suis un inventeur génial, je tiens à préciser que mon point de départ pour ce projet est ce tuto sur le blog Gadgetas. J'ai utilisé le programme App Inventor conçu par Augusto Valdez et j'y ai apporté quelques modifications.
L'utilisation d'un circuit intégré 4050 pour abaisser le signal logique qui va de l'Arduino vers le HC-06 est nettement conseillée, afin de ne pas endommager votre HC-06 (voir ici pour plus d'informations concernant le 4050).
Pour faire varier le signal analogique qui sera mis en graphique, j'ai utilisé un potentiomètre, qui pourrait bien sûr être remplacé par n'importe quel capteur analogique (photorésistance, thermistance) ou même par un capteur numérique sous réserve de quelques modifications à l'intérieur de nos programmes.
Les principales connexions sont:
VCC du HC-06: 5 V de l'Arduino
GND du HC-06 : GND de l'Arduino
TXD du HC-06: Rx de l'Arduino
RXD du HC-06 : 4050 : Tx de l'Arduino
Le sketch de l'Arduino
Rien de bien compliqué du côté de l'Arduino: il se contente d'envoyer régulièrement l'état de son entrée A0. Seule particularité digne de mention: chaque message commence par le symbole "#". Ce symbole sera utilisé par l'appli Android pour valider les messages reçus.
Programmation de l'appli android avec MIT App Inventor 2
Commençons en mode "Designer": dans les propriétés de la fenêtre, assurez-vous de régler le paramètre "Orientation écran" à "Paysage". C'est l'orientation la plus appropriée pour la plupart des graphiques cartésiens, et nous n'aurons pas à gérer les changements d'échelle qui seraient occasionnés par un passage du mode paysage vers le mode portrait, ou inversement. J'ai aussi réglé le paramètre "Alignement horizontal" à "Centrer: 3".
Cette fenêtre comportera 9 composantes d'interface:
A) Un rectangle "Arrangement horizontal", qui sert à garder les éléments B, C et D sur une même ligne.
B) Un "Label" que j'ai renommé "StatutConnexion". Un message indiquant si la connexion bluetooth est active ou non apparaîtra dans ce label.
C) Un "Sélectionneur de liste" que j'ai rebaptisé "BoutonConnecter". Lorsque l'utilisateur cliquera sur cet élément, on lui présentera la liste des périphériques bluetooth disponibles. Le paramètre "Texte" du sélectionneur de liste a été modifié pour contenir le mot "Connecter".
D) Un "Bouton" qui servira à interrompre la communication bluetooth avec l'Arduino. J'ai remplacé son nom par "BoutonDeconnecter" et son paramètre "Texte" par "Déconnecter".
E) Un "Cadre" dans lequel notre programme dessinera le graphique. Je lui ai laissé son nom par défaut "Cadre1", mais j'ai réglé son paramètre "Hauteur" à "Remplir parent..." , son paramètre "Largeur" à "Remplir Parent", la "Largeur de ligne" à 2.0 et la "Couleur de dessin" à "Rouge".
F) Un deuxième rectangle "Arrangement Horizontal" complètement vide, qui n'est qu'une astuce pour me réserver une marge dans le bas de la fenêtre. Je trouvais ça plus joli. J'ai réglé sa hauteur à 20 pixels.
G) Un "Notificateur" qui présentera un message d'alerte si bluetooth n'est pas activé sur l'appareil.
H) Un "Client Bluetooth" nécessaire pour la communication bluetooth.
I) Une "Horloge" qui détermine le moment de consulter les messages reçus via bluetooth. Dans les paramètres de l'horloge, réglez IntervalleChronomètre à 100 millisecondes.
Voici, pour récapituler, la liste des composants de la fenêtre. J'ai laissé les noms par défaut, sauf pour le contenu du premier arrangement horizontal:
Passons maintenant en mode "Blocs". On définit d'abord trois variables globales: "echelley" qui établit une relation entre la hauteur du cadre en pixels et la valeur analogique (entre 0 et 1023) reçue par bluetooth, "ancienx" qui est la position horizontale du dernier point tracé sur le graphique, et "ancieny" qui est la position verticale du dernier point tracé.
Au début de l'exécution du programme, on vérifie si bluetooth est activé sur l'appareil, on ajuste l'échelle en fonction de la hauteur du cadre, et on appelle la procédure qui trace le quadrillage.
Notez que pour la variable echelley, j'ai divisé la hauteur du cadre par 1050 plutôt que 1023 pour me réserver une petite marge libre au bord du cadre.
Lors du clic sur le sélectionneur de liste, on présente la liste des périphériques bluetooth disponibles. Suite à un choix dans cette liste, on se connecte au périphérique choisi par l'utilisateur.
On interrompt la connexion bluetooth si l'utilisateur clique sur le bouton "Déconnecter".
C'est dans la routine d'horloge qu'on fait le gros du travail...voici une vue d'ensemble:
Faisons un zoom...
Toutes les 100 millisecondes, nous vérifions si nous avons reçu un message via bluetooth.
Si c'est le cas, nous extrayons la partie numérique du message.
Et nous traçons une droite joignant le point précédemment tracé et ce nouveau point. Attention: la coordonnée y du cadre est nulle en haut et de plus en plus grande à mesure qu'on descend, alors qu'on veut le contraire sur notre graphique. C'est pourquoi la valeur de y est calculée de cette façon:
y = hauteur du cadre - (echelley * mesure de l'Arduino)
(Je me suis gardé une petite marge de 2 pixels à gauche et en bas du cadre).
Il faut ensuite mettre à jour les variables qui contiennent les coordonnées du point précédent, et gérer le retour à gauche si on a atteint la limite droite du cadre:
Tel que son nom l'indique, la procédure "quadrillage" dessine un quadrillage dans le cadre (5 lignes horizontales, en fait).
Aujourd'hui, je vous parle du Banana Pi M2 Berry qui, comme son nom le laisse deviner, se veut une alternative au Raspberry Pi.
Il s'agit donc d'un ordinateur monocarte muni d'un processeur quadricoeur 32-bit Allwinner V40. Les dimensions et la position des connecteurs sont identiques à celles du Rasbperry Pi 3: alimentation par le port micro USB OTG, 4 ports USB 2.0, HDMI, Ethernet, 40 GPIOs, etc. Tout comme le Rasbperry Pi 3, nous avons droit au Wi-Fi et à bluetooth intégrés.
Une particularité du Banana Pi M2 Berry, c'est qu'il comporte un connecteur SATA qui vous permet d'y brancher un disque dur ou un graveur DVD, etc.
Préparation de la carte micro SD
Quatre systèmes d'exploitation sont proposés en téléchargement sur le site de Banana Pi: Android, Debian, Raspbian et Ubuntu. Pour faciliter la comparaison avec mon Rasbperry Pi, j'ai choisi la version la plus récente de Raspbian. Il s'agit d'un fichier .zip de 1,8 Go hébergé sur Google Drive.
Pour graver le système d'exploitation sur une carte micrco SD, j'ai utilisé le programme Etcher, dont l'interface est beaucoup plus élégante et intuitive que Win32DiskImager que j'utilisais auparavant.
Après avoir inséré la carte micro SD dans le Banana Pi, on branche pour se retrouver en terrain connu: le bureau de Raspbian Pixel!
À l'écran, rien n'indique que Rasbpian est en train de rouler sur un Banana Pi plutôt que sur un Raspberry Pi, tout est identique à ce qu'on verrait sur un Raspberry Pi.
En très peu de temps, j'avais réglé le WiFi, changé mon mot de passe, activé SPI et I2C...
Ce que j'ai essayé avec succès
J'ai navigué sur internet et visionné quelques vidéos sur Youtube (j'avais lu quelque part que ça pouvait s'avérer problématique avec le Banana Pi, mais non: aucun problème à signaler de ce côté).
J'ai créé quelques fichiers au moyen de Libre Office.
Je me suis branché à distance par une liaison SSH.
J'ai fait clignoter une LED au moyen d'un script en python (mais j'ai dû exécuter le script avec "sudo", ce qui n'est plus nécessaire avec un Raspberry Pi). J'ai aussi lu les données d'un accéléromètre MMA7455 (capteur I2C) avec un script en python.
Dans toutes ces situations, l'utilisation du Banana Pi n'a présenté aucune différence par rapport à l'utilisation d'un Raspberry Pi.
La licence gratuite pour le serveur Real VNC ne semble pas s'appliquer au Banana Pi. J'ai quand même pu me brancher à distance par VNC, après avoir installé le serveur "Tight VNC" (sudo apt-get install tightvncserver).
Ce qui a moins bien fonctionné
Même si Mathematica est installé par défaut, une clé d'activation est requise pour l'utiliser. Là encore, il semble que la licence d'utilisation gratuite accordée aux utilisateurs de Rasbperry Pi ne s'applique pas aux utilisateurs de Banana Pi.
Scratch version 1.4 fonctionne, sauf si on tente de démarrer le serveur GPIO:
Scratch version 2 gèle aussitôt que je démarre un script qui tente de contrôler un GPIO.
En ce qui concerne Minecraft, rien à faire: il ne démarre même pas.
À l'endroit où se trouve le connecteur CSI du Raspberry Pi, le Banana Pi comporte un connecteur à première vue identique...j'avais donc supposé, naïvement, qu'il était possible d'y brancher ma caméra pour Rasbperry Pi. Mais non! Le connecteur de caméra du Banana Pi est beaucoup plus large; il comporte 20 connexions alors que celui du Raspberry Pi n'en comporte que 15. On ne peut pas utiliser sur le Banana Pi une caméra conçue pour le Raspberry Pi. On doit se procurer une caméra spécialement conçue pour le Banana Pi. Zut!
Performances
En utilisant le Banana Pi M2 Berry, j'ai eu la nette impression qu'il était plus rapide que mon Rasbperry Pi 2 (oui: vous avez bien lu: je n'ai malheureusement pas de Rasbperry Pi 3 pour comparer). Pour en avoir le coeur net, j'ai effectué quelques tests. Dans les deux cas: système à jour récemment installé, aucun overclocking.
Temps nécessaire au démarrage:
50 secondes pour mon Raspberry Pi 2
30 secondes pour mon Banana Pi M2 Berry
Test de CPU avec sysbench:
580 secondes pour mon Rasbperry Pi 2
434 secondes pour mon Banana Pi M2 Berry
À ce test, le Banana Pi est 1,3 fois plus rapide que le Rasbperry Pi 2. Des résultats publiés ailleurs sur le web indiquent que le Raspberry Pi 3 est 1,6 fois plus rapide que le Raspberry Pi 2, pour ce même test.
Résultats sysbench pour le Banana Pi M2 Berry
Résultats sysbench pour le Raspberry Pi 2
Acheter ou pas?
Je n'utilise que très rarement les applications qui n'ont pas fonctionné. Pour cette raison, en ce qui me concerne, le Banana Pi M2 Berry arrive à peu près à égalité avec le Raspberry Pi. Je rappelle qu'il existe trois autres systèmes d'exploitation (Android, Rasbpian et Ubuntu) que je n'ai pas essayés.
Si le connecteur SATA (que je n'ai pas testé) est important pour vous, le Banana Pi pourrait même s'avérer préférable au Raspberry Pi.
Mais puisque le Banana Pi M2 Berry ne semble pas significativement moins cher qu'un Rasbperry Pi 3, je crois que l'achat d'un Raspberry Pi 3 demeure préférable pour la majorité des applications.
N.B.: Le Banana Pi M2 Berry utilisé pour la rédaction de ce billet a été fourni gratuitement par Reichelt Elektronik.