<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Digilent &#8211; Electronique et Informatique</title>
	<atom:link href="https://amaury-laurent.fr/tag/digilent/feed/" rel="self" type="application/rss+xml" />
	<link>https://amaury-laurent.fr</link>
	<description>Site web d&#039;Amaury LAURENT</description>
	<lastBuildDate>Sun, 10 Dec 2017 08:56:31 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.2</generator>

<image>
	<url>https://amaury-laurent.fr/wp-content/uploads/2015/09/favicon.png</url>
	<title>Digilent &#8211; Electronique et Informatique</title>
	<link>https://amaury-laurent.fr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>LINX 3.0 &#8211; Déploiement d&#8217;une application LabVIEW sur Raspberry Pi</title>
		<link>https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/</link>
					<comments>https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/#comments</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Mon, 05 Dec 2016 17:02:00 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Microcontrôleur]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Digilent]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Linux RT]]></category>
		<category><![CDATA[LINX]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Raspbian]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=639</guid>

					<description><![CDATA[<p>LabVIEW permet de développer rapidement un petit programme: on dessine le diagramme, on exécute et voilà. Cependant, LabVIEW permet de faire bien plus. Une application embarquée va être amenée à fonctionner de manière autonome, dans un lieux potentiellement inaccessible. Il est alors indispensable que l&#8217;application soit téléchargée dans la cible et démarre automatiquement. Déployer son [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/">LINX 3.0 &#8211; Déploiement d&rsquo;une application LabVIEW sur Raspberry Pi</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://amaury-laurent.fr/index.php/2016/12/03/linx-3-0-programmer-raspberry-pi-labview/">LabVIEW permet de développer rapidement un petit programme</a>: on dessine le diagramme, on exécute et voilà.</p>
<p>Cependant, LabVIEW permet de faire bien plus. Une application embarquée va être amenée à fonctionner de manière autonome, dans un lieux potentiellement inaccessible. Il est alors indispensable que l&rsquo;application soit téléchargée dans la cible et démarre automatiquement.</p>
<h1>Déployer son application en mode autonome</h1>
<p>Une fois le programme mis au point, il est possible de le déployer à demeure dans la cible. Un petit peu comme on flasherait une programme dans un microcontrôleur. Pour ce faire, il faut créer une spécification de construction de type <strong>Real Time Application</strong> (bien que cette dernière n&rsquo;ai pas le déterminisme d&rsquo;une vrai application RT, du fait des limitations du Raspberry Pi).</p>
<figure id="attachment_627" aria-describedby="caption-attachment-627" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/rtexe.png"><img decoding="async" class="wp-image-627 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:118/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/rtexe.png" alt="rtexe" width="300" height="118" /></a><figcaption id="caption-attachment-627" class="wp-caption-text">Ajouter une spécification de construction</figcaption></figure>
<p>Un assistant de configuration s&rsquo;ouvre. La première page vous permet de nommer votre application et de choisir dans quel dossier elle sera construite.</p>
<figure id="attachment_628" aria-describedby="caption-attachment-628" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/info.png"><img decoding="async" fetchpriority="high" class="wp-image-628 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:201/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/info.png" alt="info" width="300" height="201" /></a><figcaption id="caption-attachment-628" class="wp-caption-text">Les informations générales de votre application</figcaption></figure>
<p>La section la plus importante est la suivante: Source Files. Elle permet entre autre de choisir le VI de démarrage. Il s&rsquo;agit du premier VI lancé par le Run-Time au démarrage de l’application. Autrement dit, il s&rsquo;agit du Main de l&rsquo;application.</p>
<figure id="attachment_629" aria-describedby="caption-attachment-629" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/source_file.png"><img decoding="async" class="wp-image-629 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:201/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/source_file.png" alt="source_file" width="300" height="201" /></a><figcaption id="caption-attachment-629" class="wp-caption-text">Définir le VI principal de l&rsquo;application et les ressources nécessaires</figcaption></figure>
<p>Une autre page intéressant est celle concernant les options avancées. On y trouve notamment la possibilité de compiler l&rsquo;application en mode Debug, qui permet de connecter LabVIEW à l&rsquo;application compilée pour la debugguer <em>in situ.</em></p>
<figure id="attachment_630" aria-describedby="caption-attachment-630" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/advanced.png"><img decoding="async" class="wp-image-630 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:201/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/advanced.png" alt="advanced" width="300" height="201" /></a><figcaption id="caption-attachment-630" class="wp-caption-text">Quelques options avancées de l&rsquo;application</figcaption></figure>
<p>Une fois la spécification de construction terminée, ne cliquez pas directement sur Build, mais plutôt sur <strong>OK</strong>. Enregistrez ensuite l&rsquo;intégralité du projet. En effet, la configuration de la spécification de construction est sauvée dans le fichier .lvproj lui-même. La spécification apparait alors dans le projet. Il est possible de la compiler <em>via</em> le menu du clic droit en choisissant <strong>Build</strong>.</p>
<figure id="attachment_631" aria-describedby="caption-attachment-631" style="width: 280px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build.png"><img decoding="async" class="wp-image-631 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:280/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build.png" alt="build" width="280" height="300" /></a><figcaption id="caption-attachment-631" class="wp-caption-text">Lancer la compilation</figcaption></figure>
<p>Une fenêtre faisant apparaitre la progression de la compilation s&rsquo;ouvre:</p>
<figure id="attachment_632" aria-describedby="caption-attachment-632" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build_in_progress.png"><img decoding="async" class="wp-image-632 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:163/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build_in_progress.png" alt="build_in_progress" width="300" height="163" /></a><figcaption id="caption-attachment-632" class="wp-caption-text">La compilation de l&rsquo;application peut prendre un certain temps</figcaption></figure>
<p>Quand la compilation est terminée, cliquer sur Done.</p>
<figure id="attachment_633" aria-describedby="caption-attachment-633" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build_termine.png"><img decoding="async" class="wp-image-633 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:166/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build_termine.png" alt="build_termine" width="300" height="166" /></a><figcaption id="caption-attachment-633" class="wp-caption-text">Une fois terminé, l&rsquo;application est prête à être déployée</figcaption></figure>
<p>A ce stade, l&rsquo;application n&rsquo;est pas encore dans le Raspberry Pi. LabVIEW a juste généré le fichier binaire exécutable. Pour télécharger l&rsquo;application dans la cible et faire en sorte qu&rsquo;elle démarre automatiquement à la mise sous tension, il fait repasser par le menu du clic droit et choisir <strong>Run as startup</strong>.</p>
<p>LabVIEW télécharge alors le binaire dans le Raspberry Pi et configure ce dernier pour le lancer au démarrage. Un popup apparait alors pour vous proposer de redémarrer la cible. Acceptez et votre application devrait se lancer an quelques dizaines de secondes.</p>
<h1>Conclusion</h1>
<p>Une application compilée sera plus économe en ressources systèmes. Elle peut démarrer automatiquement, sans le recours à LabVIEW pour lancer le code. Cependant, il n&rsquo;y a plus d&rsquo;interface graphique, donc certaines fonctions sont inopérantes: les popups, les message d&rsquo;erreurs, &#8230; Il faut donc trouver d&rsquo;autres solutions pour communiquer, mais cela sera l&rsquo;objet d&rsquo;un autre article.</p>
<p>Bon dév à tous !</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/">LINX 3.0 &#8211; Déploiement d&rsquo;une application LabVIEW sur Raspberry Pi</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>LINX 3.0 &#8211; Ou comment programmer un Raspberry Pi avec LabVIEW</title>
		<link>https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/</link>
					<comments>https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/#comments</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Sat, 03 Dec 2016 19:45:28 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Microcontrôleur]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Digilent]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Linux RT]]></category>
		<category><![CDATA[LINX]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Raspbian]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=606</guid>

					<description><![CDATA[<p>Depuis peu, un toolkit permet à LabVIEW, l&#8217;environnement de développement graphique, de programmer certaines cibles informatiques ARMv7. On y trouve actuellement les Raspberry Pi 2 et 3 ainsi que les BeagleBone. Ce toolkit permet donc de développer une application avec LabVIEW, de la compiler et de la télécharger dans la cible pour lui permettre de [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/">LINX 3.0 &#8211; Ou comment programmer un Raspberry Pi avec LabVIEW</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Depuis peu, un toolkit permet à LabVIEW, l&rsquo;environnement de développement graphique, de programmer certaines cibles informatiques ARMv7. On y trouve actuellement les Raspberry Pi 2 et 3 ainsi que les BeagleBone.</p>
<p>Ce toolkit permet donc de développer une application avec LabVIEW, de la compiler et de la télécharger dans la cible pour lui permettre de fonctionner de manière autonome!</p>
<figure id="attachment_635" aria-describedby="caption-attachment-635" style="width: 300px" class="wp-caption aligncenter"><a href="http://store.digilentinc.com/labview-physical-computing-kit-for-raspberry-pi-2/" target="_blank" rel="noopener noreferrer"><img decoding="async" class="wp-image-635 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:300/q:mauto/rt:fill/g:ce/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/Raspberry_Pi_2_Physical_Computing_Kit_box_600__96022.1459951516.1280.1280.png" alt="LabVIEW Physical Computing kit for Raspberry Pi 2" width="300" height="300" /></a><figcaption id="caption-attachment-635" class="wp-caption-text">LabVIEW Physical Computing kit for Raspberry Pi 2</figcaption></figure>
<h1>Le Contexte</h1>
<p>National Instruments, la société qui développe et maintient l&rsquo;environnement LabVIEW, a récemment choisi une distribution Linux RT (<a href="https://fr.wikipedia.org/wiki/Syst%C3%A8me_temps_r%C3%A9el" target="_blank" rel="noopener noreferrer">Real Time</a>) pour animer ses systèmes embarqués (<a href="http://www.ni.com/data-acquisition/compactdaq/f/" target="_blank" rel="noopener noreferrer">cDAQ</a>, <a href="http://www.ni.com/compactrio/f/" target="_blank" rel="noopener noreferrer">cRIO</a>, <a href="http://www.ni.com/pxi/f/" target="_blank" rel="noopener noreferrer">PXI</a>&#8230;). Elle supporte actuellement les plateformes <a href="https://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html" target="_blank" rel="noopener noreferrer">Zynq de Xillinx </a>(ARMv7) et Intel Atom (x86). Or il se trouve que les Raspberry Pi 2 et 3 ainsi que la BeagleBone ont un jeu d&rsquo;instruction ARMv7&#8230; Partant de ce postula, un portage du noyau d&rsquo;exécution LabVIEW (Run-Time Engine) sur ces plateforme n&rsquo;était qu&rsquo;une question de temps.</p>
<p>C&rsquo;est maintenant chose faite ! Une chose manque cependant à l&rsquo;appel: le support du serveur graphique.</p>
<p>En effet, depuis l&rsquo;arrivée des <a href="http://sine.ni.com/nips/cds/view/p/lang/fr/nid/212970" target="_blank" rel="noopener noreferrer">cRIO 903x</a>, NI propose l&rsquo;utilisation d&rsquo;un serveur XFCE pour ajouter une interface graphique aux applications embarquées. Ceci n&rsquo;est à ce jour pas encore supporté par LINX.</p>
<p>ATTENTION: Le Raspberry Pi <strong>N&rsquo;EST PAS A CE JOUR UNE CIBLE LabVIEW TEMPS RÉEL</strong>!</p>
<h1>LINX: Le toolkit LabVIEW</h1>
<p><a href="http://store.digilentinc.com/" target="_blank" rel="noopener noreferrer">Digilent</a>, une société acquise par National Instruments, a développé <a href="https://www.labviewmakerhub.com/doku.php?id=libraries:linx:start" target="_blank" rel="noopener noreferrer">LINX</a>, une solutions permettant le fonctionnement d&rsquo;application LabVIEW sur certaines cibles telles que les Arduino ou Raspberry Pi.</p>
<p>Depuis la version 3.0 de LINX, la cible (Raspberry Pi ou Beagle Board) devient autonome!</p>
<p>L&rsquo;idée de Digilent est brillante de simplicité: installer le Run-Time LabVIEW RT dans un environnement <a href="https://fr.wikipedia.org/wiki/Chroot" target="_blank" rel="noopener noreferrer">chroot </a>à l&rsquo;intérieur de l&rsquo;OS d&rsquo;origine. Sur le Raspberry Pi, Digilent recommande l&rsquo;utilisation de <strong>Raspbian Jessy</strong>.</p>
<p>Configuré pour booter en mode console sans environnement graphique, l&rsquo;application développée avec LINX 3.0 démarre en quelques dizaines de secondes à partir de la mise sous tension; les performances sont donc au rendez-vous!</p>
<figure id="attachment_609" aria-describedby="caption-attachment-609" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/autonome.png"><img decoding="async" class="size-medium wp-image-609" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:128/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/autonome.png" alt="En mode autonome, le code source est compilé et téléchargé sur la cible." width="300" height="128" /></a><figcaption id="caption-attachment-609" class="wp-caption-text">En mode autonome, le code source est compilé et téléchargé sur la cible.</figcaption></figure>
<p>Les premières versions fonctionnaient en mode supervisé:  un daemon installé sur la cible recevait des commandes d&rsquo;un PC qui exécutait le VI LabVIEW. Une perte de communication entre les deux et le programme se plantait.</p>
<figure id="attachment_608" aria-describedby="caption-attachment-608" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/supervise.png"><img decoding="async" class="wp-image-608 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:128/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/supervise.png" alt="Mode supervisé: le PC se connecte par liaison série ou TCP" width="300" height="128" /></a><figcaption id="caption-attachment-608" class="wp-caption-text">Mode supervisé: le PC se connecte par liaison série ou TCP</figcaption></figure>
<h2>Mise en place de l&rsquo;environnement</h2>
<p>Le première chose à faire est d&rsquo;installer <strong>LabVIEW 2014 SP1 32bits</strong>. Une licence <a href="http://sine.ni.com/nips/cds/view/p/lang/fr/nid/213095" target="_blank" rel="noopener noreferrer">Home Bundle </a>est disponible aux alentour de 50€ à destination des makers et autres amateurs. Digilent propose également des packs <a href="http://store.digilentinc.com/labview-physical-computing-kit-for-raspberry-pi-2/" target="_blank" rel="noopener noreferrer">LabVIEW Physical Computing </a>à moins de 100€ incluant la licence et la cible. Je vous recommande particulièrement d&rsquo;installer la version anglaise de LabVIEW, l&rsquo;essentiel des communautés d&rsquo;utilisateurs faisant usage du jargon anglophone. Prévoir quelques Go d&rsquo;espace disque, LabVIEW est relativement volumineux (mon installation fait plus de 4Go sans compter les modules additionnels), ainsi qu&rsquo;une connexion Internet pour l&rsquo;activation.</p>
<p>Une fois LabVIEW correctement installé et activé, il faut lui ajouter LINX 3.0. Pour cela, rien de plus facile: VIPM est là pour ça!</p>
<p>Mais qu&rsquo;est donc? VIPM (VI Package Manager) est un outils développé par <a href="http://jki.net/" target="_blank" rel="noopener noreferrer">JKI </a>pour donner accès à une bibliothèque de toolkits et plugins pour LabVIEW. Certains sont gratuits, voir Open Source (tels que l&rsquo;<a href="http://sine.ni.com/nips/cds/view/p/lang/fr/nid/209027" target="_blank" rel="noopener noreferrer">OpenG </a>ou encore LINX), d&rsquo;autres sont soumis à licence. Du coup, pour installer LINX, il suffit de lancer VIPM, chercher LINX dans la liste des modules et cliquer sur Installer&#8230;</p>
<figure id="attachment_611" aria-describedby="caption-attachment-611" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/VIPM.png"><img decoding="async" class="size-medium wp-image-611" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:174/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/VIPM.png" alt="VI Package Manager" width="300" height="174" /></a><figcaption id="caption-attachment-611" class="wp-caption-text">VI Package Manager</figcaption></figure>
<p>Pour vérifier la bonne installation de LINX, lancer LabVIEW et ouvrir le menu Outils. Vérifier la présence d&rsquo;un sous menu MakerHub:</p>
<figure id="attachment_613" aria-describedby="caption-attachment-613" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/LabVIEW_Tools.png"><img decoding="async" class="size-medium wp-image-613" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:281/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/LabVIEW_Tools.png" alt="Le menu Outils de LabVIEW" width="300" height="281" /></a><figcaption id="caption-attachment-613" class="wp-caption-text">Le menu Outils de LabVIEW</figcaption></figure>
<h2>Installation de la cible</h2>
<p>Je vais détailler ici l&rsquo;installation de LINX 3.0 sur Raspberry Pi 2 ou 3, n&rsquo;ayant pas de BeagleBone sous le coude&#8230; Pour ces dernières, je vous propose de regarder <a href="https://www.labviewmakerhub.com/doku.php?id=learn:tutorials:libraries:linx:start" target="_blank" rel="noopener noreferrer">les tutoriaux vidéos de Digilent</a>.</p>
<p>Commençons par installer <a href="https://downloads.raspberrypi.org/raspbian_lite_latest" target="_blank" rel="noopener noreferrer">Raspbian Jessy Lite </a>sur la carte SD du Raspberry. Un petit coup de <a href="https://www.raspberrypi.org/documentation/installation/installing-images/linux.md" target="_blank" rel="noopener noreferrer">dd</a> sous Linux ou de <a href="https://www.raspberrypi.org/documentation/installation/installing-images/windows.md" target="_blank" rel="noopener noreferrer">Win32DiskImager</a> sous Windows et le tour est joué. Pour configurer le Raspberry, un petit <em>sudo raspi-config</em>. Il est utile d&rsquo;activer l&rsquo;UART, le SPI et L&rsquo;I2C ainsi que d&rsquo;étendre la partition système à toute la carte SD. Pour continuer, il va également falloir configurer le réseau: Ethernet pour le Pi 2, possiblement le WiFi pour le Pi 3. Notez bien l&rsquo;adresse IP du Raspberry, nous en aurons besoin.</p>
<p>Retour sous LabVIEW. Aller dans le menu Outils &gt; MakerHub &gt; LINX &gt; LINX Target Configuration&#8230;</p>
<figure id="attachment_614" aria-describedby="caption-attachment-614" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/target_config.png"><img decoding="async" class="size-medium wp-image-614" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:187/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/target_config.png" alt="Connecter LINX sur la cible" width="300" height="187" /></a><figcaption id="caption-attachment-614" class="wp-caption-text">Connecter LINX sur la cible</figcaption></figure>
<p>Renseigner les champs comme suit:</p>
<p><strong>Hostname or IP :</strong> xxx.xxx.xxx.xxx (l&rsquo;adresse IP du Raspberry Pi sur le LAN)</p>
<p><strong>Username:</strong> pi</p>
<p><strong>Password:</strong> raspberry</p>
<p>Et cliquer sur <strong>Connect</strong> puis sur l&rsquo;onglet <strong>Install Software</strong>.<strong><br />
</strong></p>
<figure id="attachment_616" aria-describedby="caption-attachment-616" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/install_soft.png"><img decoding="async" class="size-medium wp-image-616" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:186/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/install_soft.png" alt="Installer le Run-Time sur la cible" width="300" height="186" /></a><figcaption id="caption-attachment-616" class="wp-caption-text">Installer le Run-Time sur la cible</figcaption></figure>
<p>Un simple appuie sur le bouton Install et le tour est joué. L&rsquo;utilitaire d&rsquo;installation se connecte sur les dépôts d&rsquo;installation de NI pour récupérer le Run-Time et l&rsquo;installer dans l&rsquo;environnement chroot.</p>
<h1>Programmer la cible avec LabVIEW</h1>
<p>Pour attaquer une cible embarquée avec LabVIEW, il faut commencer par créer un projet. Pour l&rsquo;exemple, je vais créer un projet vide, mais rien n&#8217;empêche de partir d&rsquo;un modèle de projet. Pour ajouter le Raspberry au projet, faire un clic droit sur la racine du projet (et non sur <em>My Computer</em>, comme souvent commis par erreur&#8230;) et ajouter une nouvelle cible:</p>
<figure id="attachment_620" aria-describedby="caption-attachment-620" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/new_target-1.png"><img decoding="async" class="wp-image-620 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:126/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/new_target.png" alt="new_target" width="300" height="126" /></a><figcaption id="caption-attachment-620" class="wp-caption-text">Ajouter une cible au projet</figcaption></figure>
<figure id="attachment_621" aria-describedby="caption-attachment-621" style="width: 269px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/new_target-1.png"><img decoding="async" class="wp-image-621 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:269/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/new_target-1.png" alt="new_target" width="269" height="300" /></a><figcaption id="caption-attachment-621" class="wp-caption-text">Spécifier l&rsquo;adresse IP de la cible et son type</figcaption></figure>
<p>Spécifier l&rsquo;adresse IP de la cible et choisir son type: LINX &gt; Raspberry Pi / BeagleBone. Une nouvelle cible est ajoutée au projet. Tout les VI placés dans cette cible s&rsquo;exécuteront sur celle-ci et non sur l&rsquo;ordinateur.</p>
<figure id="attachment_622" aria-describedby="caption-attachment-622" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/projet.png"><img decoding="async" class="size-medium wp-image-622" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:161/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/projet.png" alt="Le projet LabVIEW." width="300" height="161" /></a><figcaption id="caption-attachment-622" class="wp-caption-text">Le projet LabVIEW</figcaption></figure>
<p>Quand on édite un VI, on peut savoir sur quelle cible il s&rsquo;exécute lorsque l&rsquo;on clique sur la flèche d&rsquo;exécution. Il suffit pour cela de regarder en bas à gauche de la fenêtre (face avant ou diagramme): un  champ texte précise le nom de la cible et permet de modifier ponctuellement celle-ci.</p>
<p>Par exemple, on développe un algorithme de calcul sur le Raspberry et l&rsquo;on aimerait le tester rapidement: rien de plus simple! Un clic droit sur le champ texte et on choisi <em>My Computer</em>. LabVIEW va alors exécuter le code sur le PC plutôt que sur le Raspberry. Les conditions d&rsquo;exécution sont différentes, mais on économise la phase de compilation et de déploiement qui peut prendre un peu de temps.</p>
<figure id="attachment_624" aria-describedby="caption-attachment-624" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/front.png"><img decoding="async" class="size-medium wp-image-624" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:183/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/front.png" alt="Il est possible de voir la cible d'exécution en bas à gauche" width="300" height="183" /></a><figcaption id="caption-attachment-624" class="wp-caption-text">Il est possible de voir la cible d&rsquo;exécution en bas à gauche</figcaption></figure>
<figure id="attachment_623" aria-describedby="caption-attachment-623" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/diagramme.png"><img decoding="async" class="size-medium wp-image-623" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:176/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/diagramme.png" alt="On peu la changer par un clic droit, tant depuis la face avant que depuis le diagramme" width="300" height="176" /></a><figcaption id="caption-attachment-623" class="wp-caption-text">On peu la changer par un clic droit, tant depuis la face avant que depuis le diagramme</figcaption></figure>
<p>Les fonctions spécifiques au module LINX sont accessibles par la palette MakerHub. On y retrouve toute l&rsquo;API: accès aux E/S tout ou rien, aux modules UART/SPI/I2C ainsi que tout un tas de drivers pour capteurs et afficheurs. On y trouve également une Toolbox qui propose des fonctions de support utiles.</p>
<figure id="attachment_625" aria-describedby="caption-attachment-625" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/palette.png"><img decoding="async" class="size-medium wp-image-625" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:257/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/palette.png" alt="La palette LINX 3.0" width="300" height="257" /></a><figcaption id="caption-attachment-625" class="wp-caption-text">La palette LINX 3.0</figcaption></figure>
<p>L&rsquo;accès à l&rsquo;API LINX s&rsquo;effectue de la manière suivante:</p>
<ol>
<li>Ouverture d&rsquo;une référence en mode Local I/O</li>
<li>Initialisation des différents sous modules (typiquement le SPI)</li>
<li>Accès aux E/S, fonctionnement nominal de l&rsquo;application</li>
<li>Fermeture des sous modules</li>
<li>Fermeture de la référence principale</li>
</ol>
<p>Voici un exemple de communication sur bus SPI.</p>
<figure id="attachment_642" aria-describedby="caption-attachment-642" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/spi.png"><img decoding="async" class="size-medium wp-image-642" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:140/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/spi.png" alt="Exemple d'une communication SPI" width="300" height="140" /></a><figcaption id="caption-attachment-642" class="wp-caption-text">Exemple d&rsquo;une communication SPI</figcaption></figure>
<p>&nbsp;</p>
<ul>
<li>Le premier VI ouvre une référence vers l&rsquo;API LINX. Elle est nécessaire à l&rsquo;accès aux ressources de la cible.</li>
<li>Le deuxième VI initialise le module SPI 0</li>
<li>Le troisième VI configure le module SPI: vitesse de communication, ordre des bits, mode de fonctionnement de l&rsquo;horloge&#8230;</li>
<li>Le quatrième VI écrit et lit des trames sur le bus</li>
<li>Le cinquième VI ferme et détruit la référence à l&rsquo;API LINX.</li>
</ul>
<p>Il n&rsquo;est pas nécessaire de fermer l&rsquo;accès au module SPI.</p>
<h1>Lancement du programme</h1>
<p>Pour exécuter le programme, il y a deux méthode:</p>
<ul>
<li>En source</li>
<li>En exécutable</li>
</ul>
<p>La première solution est à privilégier pour la phase de développement. Il suffit simplement de cliquer sur la flèche d&rsquo;exécution. LabVIEW compile le programme, le télécharge sur la cible et connecte la face avant restée sur le PC sur le Run-Time de la cible. Ainsi, on peut interagir avec le programme, utiliser les outils de debug usuels (sondes, loupiote, points d’arrêts&#8230;).</p>
<p>Cette solution est très pratique, mais gourmande en ressources sur la cible. En effet, une communication réseau permanente est établie entre la cible et le PC. en outre, le programme ne peut être lancé qu&rsquo;à partir de LabVIEW. Cela signifie qu&rsquo;il faut rouvrir les sources du programme, compiler, télécharger et exécuter celui-ci à partir de LabVIEW à chaque mise sous tension de la cible.</p>
<h1>Conclusion</h1>
<p>LINX 3.0 représente une petite révolution dans le monde National Instruments. Il devient en effet possible pour tout un chacun de développer une application embarquée avec LabVIEW pour un budget accessible. En effet, la licence Home Bundle est à 50€ et les Raspberry Pi oscillent entre 30 et 40€. Tout le monde a désormais accès à l&rsquo;ergonomie du langage G et à la puissance de l&rsquo;environnement LabVIEW.</p>
<p>A bientôt pour de plus amples informations sur le <a href="https://amaury-laurent.fr/index.php/2016/12/05/linx-3-0-deploiement-dune-application-labview/">déploiement d&rsquo;une application LabVIEW sur le Raspberry Pi</a>.</p>
<p>Lancez-vous !</p>
<h1>[EDIT du 03/12/2017] &#8211; Problème lié au déploiement de LINX sur le Raspberry Pi</h1>
<p>Lors de l&rsquo;installation du LINX sur un Raspberry Pi, il se peut que l&rsquo;une des étapes ne se déroule pas complètement, probablement à cause de certains droits d&rsquo;accès qui auraient changés dans la dernière version de Raspbian (Stretch au moment où j’écris ces lignes).</p>
<p>Le symptôme est le suivant: au déploiement d&rsquo;un programme faisant appel à la bibliothèque LINX, un message d&rsquo;erreur survient:</p>
<p>« <strong>LMH-LINX.lvlib:Local IO.lvlib:Load Device Channels.vi loaded with errors on the target and was closed.</strong> »</p>
<figure id="attachment_870" aria-describedby="caption-attachment-870" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/ErrorDeploy.png"><img decoding="async" class="size-medium wp-image-870" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:216/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/ErrorDeploy.png" alt="" width="300" height="216" /></a><figcaption id="caption-attachment-870" class="wp-caption-text">Erreur au lancement d&rsquo;une application</figcaption></figure>
<p>La cause probable est la suivante :</p>
<p>LINX installe une bibliothèque sur le Raspberry Pi : <code class="EnlighterJSRAW" data-enlighter-language="shell">/usr/lib/liblinxdevice_rpi2.so</code></p>
<p>Cependant, pour assurer la compatibilité avec les BeagleBone Black, une deuxième bibliothèque est installée : <code class="EnlighterJSRAW" data-enlighter-language="shell">/usr/lib/liblinxdevice_bbb.so</code></p>
<p>Le choix de la bonne bibliothèque est fait grâce à la création d&rsquo;un lien symbolique: <code class="EnlighterJSRAW" data-enlighter-language="shell">liblinxdevice.so -&gt; ./liblinxdevice_rpi2.so</code>. La coutume est courante sous Linux, mais dans notre cas précis le lien peut ne pas exister.</p>
<p>Pour s&rsquo;assurer de la bonne installation de la bibliothèque, commencez par ouvrir un terminal SSH (soit dit en passant, <a href="https://korben.info/installer-shell-bash-linux-windows-10.html" target="_blank" rel="noopener">Windows 10 est nativement doté d&rsquo;un shell Linux</a>&#8230;).</p>
<p>Ouvrir ensuite un accès à l&rsquo;environnement chroot d&rsquo;exécution LabVIEW: <code class="EnlighterJSRAW" data-enlighter-language="shell">$ sudo schroot --run-session -c lv</code></p>
<p>Naviguer dans le dossier /usr/lib : <code class="EnlighterJSRAW" data-enlighter-language="shell"># cd /usr/lib</code></p>
<p>Lister le contenu du dossier : <code class="EnlighterJSRAW" data-enlighter-language="shell"># ls -l | grep linx</code></p>
<p>S&rsquo;il n&rsquo;y a que deux fichiers (le bbb et le rpi2), le problème de déploient du code viens de là.</p>
<p>Pour corriger le problème, il suffit de recréer le lien symbolique : <code class="EnlighterJSRAW" data-enlighter-language="shell"># ln -s ./liblinxdevice_rpi2.so ./liblinxdevice.so</code></p>
<p>J&rsquo;ai trouvé cette solution en parcourant le forum LabVIEW MakerHub (<a href="https://www.labviewmakerhub.com/forums/viewtopic.php?f=12&amp;t=3018&amp;p=11683&amp;hilit=install#p11683" target="_blank" rel="noopener">page d&rsquo;origine</a>). Nous la devons à <a href="https://www.labviewmakerhub.com/forums/memberlist.php?mode=viewprofile&amp;u=4255" target="_blank" rel="noopener">Kryptman</a>. Je me suis contenté de la tester et de la traduire en Français. Merci à lui.</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/">LINX 3.0 &#8211; Ou comment programmer un Raspberry Pi avec LabVIEW</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
	</channel>
</rss>
