<?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>Informatique &#8211; Electronique et Informatique</title>
	<atom:link href="https://amaury-laurent.fr/category/tutoriaux/informatique-tutoriaux/feed/" rel="self" type="application/rss+xml" />
	<link>https://amaury-laurent.fr</link>
	<description>Site web d&#039;Amaury LAURENT</description>
	<lastBuildDate>Mon, 16 Mar 2020 09:41:34 +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>Informatique &#8211; Electronique et Informatique</title>
	<link>https://amaury-laurent.fr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Le Raspberry Pi se propulse vers LabVIEW 2019 (et 2020) !</title>
		<link>https://amaury-laurent.fr/le-raspberry-pi-se-propulse-vers-labview-2019-et-2020/</link>
					<comments>https://amaury-laurent.fr/le-raspberry-pi-se-propulse-vers-labview-2019-et-2020/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Fri, 13 Mar 2020 21:02:09 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW 2019]]></category>
		<category><![CDATA[LINX]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=1140</guid>

					<description><![CDATA[<p>Cette année, National Instruments a annoncé la sortie d&#8217;une version communautaire du célèbre environnement de développement LabVIEW. A cette occasion, le toolkit LINX devrait être porté en LabVIEW 2020 et maintenu officiellement pas NI. En effet, la version pouvant être installée en autonomie sur un Raspberry Pi était cantonnée à LabVIEW 2014. En cherchant sur [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/le-raspberry-pi-se-propulse-vers-labview-2019-et-2020/">Le Raspberry Pi se propulse vers LabVIEW 2019 (et 2020) !</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Cette année, National Instruments a <a href="https://forums.ni.com/t5/NI-Blog/LabVIEW-Community-Edition/ba-p/3970512?profile.language=fr" target="_blank" rel="noopener noreferrer">annoncé la sortie d&rsquo;une version communautaire</a> du célèbre environnement de développement LabVIEW. A cette occasion, le <a href="https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/" target="_blank" rel="noopener noreferrer">toolkit LINX </a>devrait être porté en LabVIEW 2020 et maintenu officiellement pas NI. En effet, la version pouvant être installée en autonomie sur un Raspberry Pi était cantonnée à LabVIEW 2014. En cherchant sur le dépôt d&rsquo;installation de digilent, on observe trois versions du paquet d&rsquo;installation:</p>
<ul>
<li><strong>lvrt-schroot</strong> : pour LabVIEW 2014, la version initiale</li>
<li><strong>lvrt20-schroot</strong> : pour la future LabVIEW 2020 ?</li>
<li><strong>lvrt19-schroot</strong> : pour LabVIEW 2019 ?</li>
</ul>
<p>Si l&rsquo;on essayait ensemble d&rsquo;installer lvrt19-schroot sur un Raspberry Pi 4 tout neuf ?</p>
<h1>Introduction</h1>
<p>Avant de commencer, il nous faut un Raspberry Pi (&gt;2) fonctionnel avec la dernière version de Raspbian (Buster à l&rsquo;heure où ce test a été mené). Pour ma part, je profite de la sortie du Raspberry Pi 4 pour le prendre en main et profité de la connexion WiFi (enfin!).</p>
<h1>Installation de LINX 3 pour LabVIEW 2019</h1>
<p>Nous sommes prêts? Allons-y !</p>
<p>Tout se passe en ligne de commande. Ouvrez un terminal SSH et connectez-vous sur le Raspberry Pi.</p>
<p>Commençons par mettre à jour notre installation:</p>
<ul>
<li><strong>sudo apt-get update</strong></li>
<li><strong>sudo apt-get dist-upgrade -y</strong></li>
</ul>
<p>Ensuite activons les modules i2c et spi:</p>
<ul>
<li><strong>sudo raspi-config nonint do_i2c 0</strong></li>
<li><strong>sudo raspi-config nonint do_spi 0</strong></li>
</ul>
<p>Ajoutons le dépôt d&rsquo;installation de LINX:</p>
<ul>
<li><strong>sudo sh -c &lsquo;echo « deb [trusted=yes] http://feeds.labviewmakerhub.com/debian/ binary/ » &gt;&gt; /etc/apt/sources.list&rsquo;</strong></li>
<li><strong>sudo apt-get update</strong></li>
</ul>
<p>A ce stade, la magie n&rsquo;a pas encore opéré. Installons donc le paquet lvrt19 (tuto <a href="https://forums.ni.com/t5/LabVIEW/LINX-3-0-on-the-Raspberry-Pi-2-3-and-4-running-Raspbian-Buster/td-p/3967891?profile.language=fr" target="_blank" rel="noopener noreferrer">extrait du forum NI</a>, modifié pour LabVIEW 2019) :</p>
<ul>
<li><strong>sudo apt-get install -y lvrt19-schroot</strong></li>
<li><strong>sudo mv /etc/systemd/system/multi-user.target.wants/nisysserver.service /lib/systemd/system</strong></li>
<li><strong>sudo mv /etc/systemd/system/multi-user.target.wants/labview.service /lib/systemd/system</strong></li>
<li><strong>sudo schroot -c labview -d /usr/lib &#8212; ln -s liblinxdevice_rpi2.so liblinxdevice.so</strong></li>
<li><strong>sudo systemctl enable nisysserver.service</strong></li>
<li><strong>sudo systemctl enable labview.service</strong></li>
<li><strong>sudo systemctl start nisysserver.service</strong></li>
<li><strong>sudo systemctl start labview.service</strong></li>
</ul>
<h1>Vérification de l&rsquo;installation avec LabVIEW 2019</h1>
<p>Avant d&rsquo;aller plus loin, nous allons vérifier la bonne installation du runtime 2019 sur le Raspberry Pi.</p>
<p>Créons un nouveau projet LabVIEW vide et ajoutons une cible <em>temps réelle</em> compatible (cRIO 9039 au hasard) en spécifiant l&rsquo;adresse IP du Raspberry Pi.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2109.png"><img decoding="async" fetchpriority="high" class="aligncenter wp-image-1141 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:249/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2109.png" alt="" width="249" height="300" /></a>Ensuite, nous connectons le projet à la cible: clic droit sur la cible -&gt; Connect.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2110.png"><img decoding="async" class="aligncenter size-medium wp-image-1142" src="https://ml9zfxsqktal.i.optimole.com/w:268/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2110.png" alt="" width="268" height="300" /></a>LabVIEW déploie le projet et vérifie la connexion à la cible.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2111.png"><img decoding="async" class="aligncenter size-medium wp-image-1143" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:216/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2111.png" alt="" width="300" height="216" /></a>Comme nous avons défini la cible comme étant un compact RIO, LabVIEW cherche automatiquement à détecter les modules d&rsquo;acquisitions présents dans el châssis. Nous avons un Raspberry Pi, donc LabVIEW échoue à détecter les modules, mais pas de panique, tout est normal.<a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2113.png"><img decoding="async" class="aligncenter size-medium wp-image-1144" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:247/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2113.png" alt="" width="300" height="247" /></a>On continue la procédure en écrivant un petit code de test qui renvoie la version de LabVIEW et la version du système :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/test.png"><img decoding="async" class="aligncenter size-full wp-image-1146" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/test.png" alt="" width="286" height="151" /></a>Confirmation du fonctionnement (ctrl + R), après déploiement et exécution, nous voyons la version 2019 et la version de l&rsquo;OS (ici Linux raspberry 1.19.97) :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2115.png"><img decoding="async" class="aligncenter size-medium wp-image-1145" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:89/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2115.png" alt="" width="300" height="89" /></a>Vous trouverez le projet de test ici : <a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/test.zip">test.zip</a></p>
<h1>Ajout de la cible Raspberry Pi dans LabVIEW 2019</h1>
<p>Pour ajouter le Raspberry Pi comme cible de déploiement dans LabVIEW, il faut ajouter des <a href="https://forums.ni.com/t5/Developer-Center-Resources/Customize-the-LabVIEW-Project-Explorer-Using-the-Project/ta-p/3532774?profile.language=fr" target="_blank" rel="noopener noreferrer">Providers</a>. Ils sont fournis dans <a href="http://download.ni.com/evaluation/labview/lvtn/vipm/packages/lvh_linx/" target="_blank" rel="noopener noreferrer">le paquet d&rsquo;installation VIPM de LINX</a>. Il est possible de récupérer l&rsquo;archive zip intéressante en décompressant le fichier .vip ou en la téléchargeant ici : <a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/InstallProviders.zip">InstallProviders.zip</a></p>
<p>Quittez LabVIEW, décompressez cette archive et lancez la commande suivante :</p>
<ul>
<li><strong>UpdateLinxProvider.bat « C:\Program Files (x86)\National Instruments\LabVIEW 2019 »</strong></li>
</ul>
<p>Une fois installé, le Raspberry Pi apparait dans la liste des cibles disponibles :</p>
<h1><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2129.png"><img decoding="async" class="aligncenter size-medium wp-image-1150" src="https://ml9zfxsqktal.i.optimole.com/w:266/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2129.png" alt="" width="266" height="300" /></a>Conclusion</h1>
<p>En attendant la sortie officielle de LabVIEW 2020 avec le support LINX inclus, il est possible de profiter d&rsquo;un runtime 2019 sur un Raspberry Pi. Pour preuve, voici un pilotage moteur en CanOpen utilisant CanOpenSocket:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2134.png"><img decoding="async" class="aligncenter size-medium wp-image-1152" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:206/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/2020-03-13_2134.png" alt="" width="300" height="206" /></a></p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/le-raspberry-pi-se-propulse-vers-labview-2019-et-2020/">Le Raspberry Pi se propulse vers LabVIEW 2019 (et 2020) !</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/le-raspberry-pi-se-propulse-vers-labview-2019-et-2020/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>LabVIEW RT &#038; LattePanda</title>
		<link>https://amaury-laurent.fr/labview-rt-lattepanda/</link>
					<comments>https://amaury-laurent.fr/labview-rt-lattepanda/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Fri, 13 Mar 2020 19:50:28 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LattePanda]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=1051</guid>

					<description><![CDATA[<p>Cet article explique comment installer la distribution Linux temps-réel de National Instruments sur un LattePanda première génération. Il explique en outre comment installer l&#8217;IDE Arduino afin de flasher Linx 3.0 et d&#8217;utiliser ce dernier avec l&#8217;API LabVIEW idoine. J&#8217;ai mené mes tests sur une version 4G de RAM, 64G de stockage. J&#8217;utilise un LabVIEW 32 [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/labview-rt-lattepanda/">LabVIEW RT &#038; LattePanda</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Cet article explique comment installer la distribution <a href="https://www.ni.com/fr-fr/innovations/white-papers/13/introduction-to-ni-linux-real-time.html" target="_blank" rel="noopener noreferrer">Linux temps-réel de National Instruments</a> sur un LattePanda première génération. Il explique en outre comment installer l&rsquo;IDE Arduino afin de flasher <a href="https://www.labviewmakerhub.com/doku.php?id=libraries:linx:start" target="_blank" rel="noopener noreferrer">Linx 3.0</a> et d&rsquo;utiliser ce dernier avec l&rsquo;API LabVIEW idoine. J&rsquo;ai mené mes tests sur une version 4G de RAM, 64G de stockage. J&rsquo;utilise un <a href="https://www.ni.com/fr-fr/support/downloads/software-products/download.labview.html#306364" target="_blank" rel="noopener noreferrer">LabVIEW 32 bits SP1</a> patché f4 ainsi que le module <a href="https://www.ni.com/fr-fr/support/downloads/software-products/download.labview-real-time-module.html#305484" target="_blank" rel="noopener noreferrer">Real-Time 18.5</a>.</p>
<h1>Avertissements</h1>
<p>Cette manipulation pourrait rendre votre LattePanda disfonctionnel. Pour le restaurer dans la version Windows 10 d&rsquo;origine, référez-vous à la <a href="http://docs.lattepanda.com/content/1st_edition/os/" target="_blank" rel="noopener noreferrer">page d&rsquo;explication du forum LattePanda</a>.</p>
<p>En outre, l&rsquo;installation de NI Real-Time et la programmation du LattePanda avec LabVIEW RT ne sont pas supportés officiellement, ni par National Instruments, ni par moi-même. Cet article expose la possibilité d&rsquo;utiliser le LattePanda avec LabVIEW RT à titre purement expérimental et non professionnel. En effet, le LattePanda n&rsquo;offre pas les mêmes caractéristiques techniques qu&rsquo;un compact RIO en terme de robustesse, fiabilité ou déterminisme. Il ne saurait en aucun cas remplacer un contrôleur industriel certifié et testé.</p>
<h1>Prérequis</h1>
<p>Pour commencer, il vous faut réunir les pièces suivantes:</p>
<ul>
<li>Un LattePanda première génération</li>
<li>Son écran 7 » (facultatif, mais alors il faudra un écran HDMI)</li>
<li>Un clavier USB pour le LattePanda</li>
<li>Une clés USB d&rsquo;au moins 128Mo</li>
<li>Un PC installé avec LabVIEW, LabVIEW RT et MAX (Measurement and Automation eXplorer)</li>
<li>La possibilité de brancher sur le même réseau le PC et le LattePanda (la carte WiFi ne sera pas utilisable)</li>
<li>L&rsquo;image d&rsquo;installation via NIPM ou ici : <a href="https://amaury-laurent.fr/wp-content/uploads/standard_x64_recovery.iso">standard_x64_recovery.iso</a></li>
</ul>
<h1>Récupération de l&rsquo;image via NIPM</h1>
<p>Lancer NIPM et faire la recherche « Linux ». Le résultat doit être le suivant :</p>
<p><img decoding="async" class="size-medium wp-image-1078 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:171/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/NipmPxiImagePackage.png" alt="" width="300" height="171" /></p>
<p>Sélectionner le produit « Image Système NI Linux RT PXI » et cliquer sur installer.</p>
<p>MAX doit être mis à jour pour permettre la création de la clé USB. Dans tous les cas l&rsquo;image se trouvera dans « ..\National Instruments\RT Images\Utilities\Linux RT PXI Safemode\7.0 ».</p>
<h1>Création de la clé USB d&rsquo;installation</h1>
<p>Depuis peu (version 19.0), MAX est doté de la possibilité de générer une clé USB de restauration pour NI Linux RT.</p>
<p>Pour ce faire, passer par le menu <strong>Outils -&gt; Créer une clé de restauration NI Linux RT</strong></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/usb_utilty_image.png"><img decoding="async" class="aligncenter wp-image-1055 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:213/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/usb_utilty_image.png" alt="usb_utilty_image" width="300" height="213" /></a>Ensuite, choisissez votre clé USB et le fichier <strong>standard_x64_recovery.iso</strong></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/partition_max_image.png"><img decoding="async" class="size-medium wp-image-1054 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:210/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/partition_max_image.png" alt="partition_max_image" width="300" height="210" /></a>Cliquer sur <strong>Formater</strong> et laisser MAX générer la clé d&rsquo;installation.</p>
<h1>Installation de NI Linux RT</h1>
<p><strong>ATTENTION :</strong> pour fonctionner correctement, le LattePanda doit avoir un BIOS configuré en UEFI.</p>
<p>Pour installer NI Linux RT sur le LattePanda, il faut amorcer la clé USB générée par MAX. Pour ce faire, appuyer sur F12 pendant l&rsquo;écran d&rsquo;amorçage et sélectionner la clés USB. Normalement, un shell Linux devrait démarrer vous demandant si vous souhaitez formater votre cible et installer NI Linux RT. Répondez oui (&lsquo;Y&rsquo; puis Entrer).</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/y_to_partition.jpg"><img decoding="async" class="size-medium wp-image-1056 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:139/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/y_to_partition.jpg" alt="y_to_partition" width="300" height="139" /></a></p>
<p>L&rsquo;installation dure quelques secondes, puis un message de confirmation apparait.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/Successful_partition.jpg"><img decoding="async" class="aligncenter wp-image-1057 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:145/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/Successful_partition.jpg" alt="Successful_partition" width="300" height="145" /></a>Il reste à retirer la clé USB et appuyer sur Entrer pour redémarrer le LattePanda. L&rsquo;écran d&rsquo;accueil est le suivant:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/20190910_111521.jpg"><img decoding="async" class="aligncenter size-medium wp-image-1058" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/20190910_111521.jpg" alt="" width="300" height="169" /></a>L&rsquo;identifiant par défaut est :</p>
<p style="padding-left: 40px;">login : admin<br />
mot de passe : aucun</p>
<h1>Installation des logiciels</h1>
<p>Maintenant que le LattePanda fonctionne sous NI Linux RT, la suite des opérations se déroule dans MAX. Logiquement, le LattePanda doit apparaitre dans la section systèmes déportés. S&rsquo;il n&rsquo;apparait pas, il est possible que le pare-feu Windows fasse obstruction&#8230;</p>
<p>Pour ajouter des logiciels au LattePanda, faire un clic droit sur sa section « Logiciels » et choisir « Ajouter/Supprimer des logiciels » :</p>
<p><img decoding="async" class="aligncenter wp-image-1084 " src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/MAXAjoutProgramme.png" alt="" width="232" height="207" /></p>
<p>Valider les droits admin :</p>
<p><img decoding="async" class="aligncenter wp-image-1085 " src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/MAXAjoutProgrammeAdmin.png" alt="" width="206" height="175" /></p>
<p>En fonction des paquets logiciels disponibles sur votre pc hôte, l&rsquo;interface suivante vous proposera différents paquets à installer.</p>
<p>De base, , en choisissant une installation personnalisée, il est possible d&rsquo;installer le run-time LabVIEW RT ainsi que VISA, les web services, les Network Streams&#8230; :</p>
<p><img decoding="async" class="aligncenter wp-image-1081 " src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/CustomInstall.png" alt="" width="339" height="280" /></p>
<p>Voici un exemple de paquets que vous pouvez installer :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/CustomInstallPackages1.png"><img decoding="async" class="aligncenter wp-image-1082" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/CustomInstallPackages1.png" alt="" width="327" height="271" /></a> <a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/CustomInstallPackages2.png"><img decoding="async" class="aligncenter wp-image-1083" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/CustomInstallPackages2.png" alt="" width="341" height="282" /></a></p>
<p>Il peut cependant être utile d&rsquo;installer des paquets supplémentaires cette fois-ci dans LabVIEW. Pour ce faire, on utilise le VI Package Manager. Voici une liste des paquets intéressants:</p>
<ul>
<li><a href="//ftp.ni.com/evaluation/labview/lvtn/vipm" target="_blank" rel="noopener noreferrer">NI Linux RT Inter-Process Communication</a></li>
<li><a href="//ftp.ni.com/evaluation/labview/lvtn/vipm" target="_blank" rel="noopener noreferrer">NI Linux RT Utilities</a></li>
<li><a href="//ftp.ni.com/evaluation/labview/lvtn/vipm" target="_blank" rel="noopener noreferrer">NI Linux RT Errno</a></li>
<li><a href="//ftp.ni.com/evaluation/labview/lvtn/vipm" target="_blank" rel="noopener noreferrer">Digilent LINX</a></li>
<li><a href="//ftp.ni.com/evaluation/labview/lvtn/vipm" target="_blank" rel="noopener noreferrer">RTI DDS Toolkit</a></li>
</ul>
<h1>Activation de l&rsquo;Embedded UI</h1>
<p>L&rsquo;introduction de NI Linux RT a permis de tirer parti d&rsquo;un écran connecté sur la cible RT. Cela permet de concevoir des applications autonomes équipées d&rsquo;une interface graphique.</p>
<p>Il est possible que le serveur graphique ne démarre pas automatiquement. Pour palier à ce problème il faut éditer le fichier de configuration ni-rt.ini à l&#8217;emplacement /etc/natinst/share.</p>
<p>Ajouter la clé ui.enabled=True dans la section SYSTEMSETTINGS :</p>
<p><img decoding="async" class="wp-image-1086 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/nirt-ini.png" alt="" width="399" height="335" /></p>
<h2>Installation d&rsquo;un serveur VNC</h2>
<p>Avec un serveur graphique fonctionnel, il est possible d&rsquo;installer un serveur VNC pour prendre la main à distance sur le LattePanda.</p>
<p>Pour ce faire, il faut installer manuellement X11VNC. Sur NI Linux RT, le gestionnaire de paquets est opkg. Pour installer VNC, commencer par mettre à jour la liste des paquets:</p>
<p>$ opkg update</p>
<p>Puis installer VNC:</p>
<p>$ opkg  install x11vnc</p>
<p>Pour la configuration et le lancement manuel (je n&rsquo;ai pas réussi à le rendre automatique), se référer à la page de LinuxTricks suivante:</p>
<p><a href="https://www.linuxtricks.fr/wiki/vnc-x11vnc-pour-prendre-le-controle-du-bureau-a-distance" target="_blank" rel="noopener noreferrer">https://www.linuxtricks.fr/wiki/vnc-x11vnc-pour-prendre-le-controle-du-bureau-a-distance</a></p>
<h1>Installation de l&rsquo;Arduino</h1>
<h2>Installation de l&rsquo;IDE</h2>
<p>A partir de votre PC, télécharger la version d&rsquo;<a href="https://www.arduino.cc/download_handler.php?f=/arduino-1.8.9-linux64.tar.xz" target="_blank" rel="noopener noreferrer">Arduino pour Linux 64 bits</a>. Pour envoyer le paquet tar.xz sur le LattePanda, il est possible de monter un disque réseau Windows sur le système WebDAV du LattePanda. Il est autrement possible de passer en SCP ou en SSHFS (par exemple avec WinSCP). Une dernière solution consiste à installer le serveur FTP (legacy mode) avec MAX.</p>
<p>Pour le WebDAV, voici les informations de connexions:</p>
<ul>
<li>adresse : http://ip_panda/files</li>
<li>login : admin</li>
<li>mot de passe : vide</li>
</ul>
<p>Placer l&rsquo;archive tar.xz dans le dossier /home/lvuser</p>
<p>Pour décompacter l&rsquo;archive .tar.xz, il faut les utilitaires tar et xz:</p>
<p style="padding-left: 40px;">$ opkg intall tar xz</p>
<p style="padding-left: 40px;">$ tar -xJf arduino-x.x.x-linux64.tar.xz</p>
<p>Aller dans le dossier Arduino et faire un chmod +x sur le fichier arduino.</p>
<p>Pour lancer l&rsquo;IDE, un simple ./arduino devrait faire l&rsquo;affaire.</p>
<h2>Compilation et téléchargement de LINX</h2>
<p>Pour charger LINX dans l&rsquo;Arduino, il est nécessaire de le compiler à partir des sources du firmware. Il est possible de les récupérer à partir du <a href="https://github.com/MakerHub/LINX/tree/master/LabVIEW/vi.lib/MakerHub/LINX/Firmware/Source" target="_blank" rel="noopener noreferrer">GITHUB de MakerHub</a> ou de les récupérer à partir de LabVIEW:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/linx_1.png"><img decoding="async" class="aligncenter size-medium wp-image-1067" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:204/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/linx_1.png" alt="" width="300" height="204" /></a></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/linx_2.png"><img decoding="async" class="aligncenter size-medium wp-image-1068" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:237/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/linx_2.png" alt="" width="300" height="237" /></a></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/linx-3.png"><img decoding="async" class="aligncenter size-medium wp-image-1069" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:171/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/09/linx-3.png" alt="" width="300" height="171" /></a></p>
<p>Il faut ensuite recompiler l&rsquo;exemple Arduino_Leonardo_Serial.ino et le téléverser sur l&rsquo;arduino du LattePanda. Une fois cette opération faite, il est possible d&rsquo;utiliser LabVIEW pour accéder à l&rsquo;arduino.</p>
<h2>Utilisation sous LabVIEW</h2>
<p>L&rsquo;arduino devrait apparaitre dans MAX comme alias VISA (il est possible de le renommer :</p>
<p><img decoding="async" class="size-full wp-image-1077 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/SerialCmd.png" alt="" width="163" height="53" /></p>
<p>LINX utilisera cet alias pour se connecter à l&rsquo;arduino :</p>
<p><img decoding="async" class="size-full wp-image-1076 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/11/LinxSerialAccess.png" alt="" width="164" height="69" /></p>
<p>&nbsp;</p>
<p>En cas de problèmes, n&rsquo;hésitez à pas à me contacter 🙂</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/labview-rt-lattepanda/">LabVIEW RT &#038; LattePanda</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/labview-rt-lattepanda/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)</title>
		<link>https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/</link>
					<comments>https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/#comments</comments>
		
		<dc:creator><![CDATA[adrienBS]]></dc:creator>
		<pubDate>Wed, 06 Mar 2019 14:36:49 +0000</pubDate>
				<category><![CDATA[Microcontrôleur]]></category>
		<category><![CDATA[Capteurs]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Tutoriaux]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LattePanda]]></category>
		<category><![CDATA[Lidar]]></category>
		<category><![CDATA[LINX]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=1012</guid>

					<description><![CDATA[<p>Le sujet abordé dans cet article présente la réalisation d’une mesure de distance à l’aide d’un capteur Lidar monté sur un moteur pas à pas et commandé par LabVIEW à travers la bibliothèque LINX. Nous verrons comment rendre ce système embarqué sur un LattePanda. L’objectif est de pouvoir mesurer une distance entre 0,1 à 20 [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/">Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le sujet abordé dans cet article présente la réalisation d’une mesure de distance à l’aide d’un capteur Lidar monté sur un moteur pas à pas et commandé par LabVIEW à travers la bibliothèque LINX. Nous verrons comment rendre ce système embarqué sur un LattePanda. L’objectif est de pouvoir mesurer une distance entre 0,1 à 20 mètres sur 360° et de contrôler l’ensemble à partir d’une IHM (Interface Homme Machine) tactile.</p>
<p><em>Avant de commercer cet article, je tiens à remercier Amaury qui m&rsquo;a permis de publier cet article sur son site. 🙂</em></p>
<div style="width: 640px;" class="wp-video"><!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->
<video class="wp-video-shortcode" id="video-1012-1" width="640" height="360" preload="metadata" controls="controls"><source type="video/mp4" src="https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4?_=1" /><a href="https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4">https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4</a></video></div>
<p>Je découvre actuellement l’électronique et la programmation entre  LabVIEW et Arduino et je tiens à partager certains résultats avec vous. Certaines notions abordées ne seront pas forcément poussées ou assez détaillées pour des lectures ou lectrices plus expérimenté(e)s.</p>
<h1><a name="_Toc2727674"></a>Théorie de mesure de distance Lidar</h1>
<p>Lidar est l’acronyme anglais de <em>light detection and ranging </em>qui est une technique qui permet de mesurer des distances allant de quelques centimètres à la distance Terre-Lune. Le lidar Garmin utilisé ici, génère un train d’onde électromagnétique cohérente (un faisceau laser InfraRouge) de longueur d’onde λ de 905 nm. Les trains d’onde sont envoyés à une fréquence comprise entre 10 à 20 kHz (à ne pas confondre avec la fréquence propre de l’onde du laser IR) d’après les datasheet. Les trains d’ondes se réfléchissent sur la cible visée par le capteur. Une partie de la lumière du laser revient sur le capteur. Une photodiode placée dans le Lidar et sensible dans la plage de longueur d’onde des IR reçoit l’onde réfléchie. L’écart de temps entre le départ d’un train d’onde et son retour est mesuré par le capteur. Cet écart de temps est proportionnel à la distance parcourue par l’onde. Cette technologie de mesure est communément appelée <em>Time of Flight</em>.</p>
<h1><a name="_Toc2727675"></a>Le matériel utilisé pour la réalisation</h1>
<table style="height: 778px" width="621">
<tbody>
<tr style="height: 24px">
<td style="width: 224px;text-align: center;height: 24px"><strong>Matériel</strong></td>
<td style="width: 172px;text-align: center;height: 24px"><strong>Prix (neufs)</strong></td>
<td style="width: 203px;text-align: center;height: 24px"><strong>Site achat</strong></td>
</tr>
<tr style="height: 72px">
<td style="width: 224px;height: 72px;text-align: center">Carte LattePanda 4 GB/64 GB DFR0419 (sans écran et capteur tactile)</td>
<td style="width: 172px;height: 72px;text-align: center">~ 187 €</td>
<td style="width: 203px;height: 72px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 72px">
<td style="width: 224px;height: 72px;text-align: center">Ecran 7’ + capteur tactile + Ventilateur et refroidisseur métalliques</td>
<td style="width: 172px;height: 72px;text-align: center">~ 80 €</td>
<td style="width: 203px;height: 72px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 72px">
<td style="width: 224px;height: 72px;text-align: center">LabVIEW pour l&rsquo;enseignement 2014 (version d’essai gratuite 7 jours)</td>
<td style="width: 172px;height: 72px;text-align: center">A partir de 196 €</td>
<td style="width: 203px;height: 72px;text-align: center">NI</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">LIDAR GARMIN lite V3</td>
<td style="width: 172px;height: 48px;text-align: center">143 €</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon (Expédié et vendu par <a href="https://www.amazon.fr/gp/help/seller/at-a-glance.html/ref=dp_merchant_link?ie=UTF8&amp;seller=A2PIW95AGLR8G3" target="_blank" rel="noopener">RobotShop inc</a>.)</td>
</tr>
<tr style="height: 120px">
<td style="width: 224px;height: 120px;text-align: center">Driver de moteur Pas à Pas Bipolaire</p>
<p>(A4988 1182)</td>
<td style="width: 172px;height: 120px;text-align: center">7€</td>
<td style="width: 203px;height: 120px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">Moteur pas à Pas Bipolaire (14HM11-0404S)</td>
<td style="width: 172px;height: 48px;text-align: center">18 €</td>
<td style="width: 203px;height: 48px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">Laser Rouge de niveau recyclé</td>
<td style="width: 172px;height: 24px;text-align: center">0 €</td>
<td style="width: 203px;height: 24px;text-align: center">Sans objet</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">2 Piles de 9 Volts + 2 connecteurs</td>
<td style="width: 172px;height: 48px;text-align: center">~ 10 €</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">Une breadboard (400 points minimum)</td>
<td style="width: 172px;height: 48px;text-align: center">3 €</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">Batterie Li 20000mAh</td>
<td style="width: 172px;height: 24px;text-align: center">30 €</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">1 Condensateur 100µF 16V</td>
<td style="width: 172px;height: 24px;text-align: center">Qlq centimes</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">2 Condensateurs 0.1µF</td>
<td style="width: 172px;height: 24px;text-align: center">Idem</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon/ Go Tronic</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">1 Résistance de 1KΩ</td>
<td style="width: 172px;height: 24px;text-align: center">Idem</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon/ Go Tronic</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">1 Résistance de 500Ω de 1W (ou 4 de 2KΩ mis en parallèles)</td>
<td style="width: 172px;height: 48px;text-align: center">Idem</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon/ Go Tronic</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">Régulateur de tension LM7815</td>
<td style="width: 172px;height: 24px;text-align: center">1,5€</td>
<td style="width: 203px;height: 24px;text-align: center">RS Components</td>
</tr>
<tr style="height: 10px">
<td style="width: 224px;height: 10px;text-align: center">Des fils</td>
<td style="width: 172px;height: 10px;text-align: center">recyclés</td>
<td style="width: 203px;height: 10px;text-align: center"></td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center"><strong>Coût total</strong></td>
<td style="width: 172px;height: 24px;text-align: center"><strong>667 €</strong></td>
<td style="width: 203px;height: 24px;text-align: center"></td>
</tr>
</tbody>
</table>
<p>Nota : un clavier et une souris seront très certainement nécessaires pour naviguer sur LattePanda.</p>
<h1><a name="_Toc2727676"></a>Le Montage global</h1>
<p>Le schéma suivant a été réalisé sur le logiciel libre Fritzing. N’ayant pas trouvé de modèle de LattePanda dans la librairie Fritzing, il a donc été représenté par sa carte Arduino qu’il intègre. Un schéma du LattePanda est donné après.</p>
<p><img decoding="async" class="alignnone wp-image-1016 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Fritzing-Stepper-et-Lidar_regulationtension.png" alt="" width="962" height="908" /></p>
<p style="text-align: center">Figure 1 Schéma Global de la mesure Lidar (à l’aide du logiciel gratuit Fritzing)</p>
<p>L’intégration des différents éléments a été faite à l’aide d’un vieux jeu mécanos.</p>
<h2><a name="_Toc2727677"></a>LattePanda</h2>
<p>Le modèle de  LattePanda utilisé est le 4 GB/64 GB sous Windows 10. Ce modèle suffit pour faire tourner un LabVIEW 2014 (<a href="https://www.gotronic.fr/art-carte-lattepanda-4-gb-64-gb-dfr0419-24792.htm" target="_blank" rel="noopener">https://www.gotronic.fr/art-carte-lattepanda-4-gb-64-gb-dfr0419-24792.htm</a> ). LattePanda sera très utile car il intègre une carte Arduino Leonardo et ses E/S associées. A l’aide des entrées et sorties numériques (0-5V), il sera possible de piloter le moteur pas à pas, le laser et d’acquérir le signal du Lidar. Le LattePanda est enfaîte un petit ordinateur d’instrumentation très compacte et assez puissant. Le projet n’utilise ici qu’une petite partie de sa capacité. Pour plus de détails sur LattePanda, le lecteur pourra se référer à l&rsquo;article : <a href="https://amaury-laurent.fr/lattapanda-premiere-mise-route/">LattePanda – Première mise en route</a></p>
<p>Le schéma ci-dessous reprend les principales E/S :</p>
<p><img decoding="async" class="alignnone size-full wp-image-1017 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/lattepanda.jpg" alt="" width="649" height="637" /></p>
<p style="text-align: center">Figure 2 E/S LattePanda 4GB/64GB (https://www.lattepanda.com)</p>
<h2><a name="_Toc2727678"></a>Le moteur Pas à Pas</h2>
<p>Le moteur Pas à Pas bipolaire est contrôlé par un Driver Pololu (A4988). Le schéma ci-après (d’après le site Pololu qui commercialise le Driver) permet de connecter le moteur et le Driver. La puce du Driver est alimentée en 5 V par la carte Arduino du LattePanda. Ce driver a été choisi car il est facilement pilotable à partir des E/S digitales du Arduino, qui seront contrôlées par le logiciel ; lequel qui sera abordé après.</p>
<p><img decoding="async" class="alignnone size-full wp-image-1018 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/SchémaDriver.png" alt="" width="605" height="377" /></p>
<p style="text-align: center">Figure 3 Schéma de fonctionnement du Drive couplé au moteur Pas à Pas (bipolaire)</p>
<p>Pour connecter correctement le moteur pas à pas au driver on pourra suivre le tableau suivant :</p>
<table>
<tbody>
<tr>
<td width="136"><strong>Fils côté moteur</strong></td>
<td width="140"><strong>Pin entrée Driver</strong></td>
</tr>
<tr>
<td width="136">A (noir)</td>
<td width="140">1A</td>
</tr>
<tr>
<td width="136">C (vert)</td>
<td width="140">1B</td>
</tr>
<tr>
<td width="136">B (rouge)</td>
<td width="140">2A</td>
</tr>
<tr>
<td width="136">D (bleu)</td>
<td width="140">2B</td>
</tr>
</tbody>
</table>
<p><img decoding="async" class="alignnone size-full wp-image-1019 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Moteur.png" alt="" width="209" height="212" /></p>
<p style="text-align: center">Figure 4 Schéma du moteur Pas à Pas (14HM11-0404S) d&rsquo;après datasheet Go Tronic</p>
<p>Il est conseillé de relier la masse de l’alimentation du moteur à la masse du circuit afin d’éviter de le moteur ne grésille. Un petit régulateur LM7815 (15 V) permet de limiter la tension en entrée. Pour ma part j’ai utilisé deux piles de 9 V. En sortie du régulateur il vaut mieux ne pas oublier de limiter le courant à l’aide d’une résistance de charge. Le moteur consomme 400 mA par phase. Pour limiter le courant j’ai choisi de mettre en parallèle 4 résistances de 2 kΩ de 1/4 W qui forment une résistance 500 Ω supportant 1 W. Avec ce montage, le moteur ne chauffe et a assez de puissance pour réaliser ses pas. Un potentiomètre présent sur le driver permet de réguler la tension. Le réglage du courant limite est disponible dans la vidéo disponible en suivant de <a href="https://www.youtube.com/watch?v=89BHS9hfSUk" target="_blank" rel="noopener">lien</a> (https://www.youtube.com/watch?v=89BHS9hfSUk). Pololu préconise de régler le courant limite à l’aide du réglage du VREF et non en entrée comme cela a été fait ici.</p>
<ul>
<li>Une fois le montage du moteur réalisé, un test du moteur peut être réalise. Pour cela, la Pin STEP du driver peut être connecté au 5V délivré par l’Arduino. Le moteur est censé faire un pas. Sinon, revérifier le schéma de montage.</li>
</ul>
<p>Les entrées MS1, MS2 et MS3 permettent de réduire le Pas, c’est-à-dire de gagner en précision angulaire. Le tableau ci-dessous affiche les niveaux à utiliser sur les pins en fonctions de la résolution du pas.</p>
<p><img decoding="async" class="alignnone size-full wp-image-1021 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Tableau-resolution-pas.png" alt="" width="369" height="193" /></p>
<p style="text-align: center">Figure 5 Tableau de résolution des pas d&rsquo;après le site Pololu</p>
<p>Dans le cas présent, un pas complet est de 0,9°, un demi-pas en vaudra la moitié et ainsi de suite. Dans le présent projet, il n’est pas possible de descendre en dessous du demi-pas.</p>
<p><strong>Nota important:</strong> il est fortement<strong> déconseillé de déconnecter le moteur du driver quand le moteur est en fonctionnement</strong> car le Driver peut-être endommagé. Il faudra couper l’alimentation du moteur pour effectuer des changements de postions (si besoin) sur les 4 fils du moteur pas à pas.</p>
<h2><a name="_Toc2727679"></a>Le Lidar</h2>
<p>Pour fonctionner le Lidar doit être alimenté en 5 V. L’alimentation 5 V de l’Arduino du LattePanda convient parfaitement. L’acquisition de la mesure de distance est lue en largeur d’impulsion (PWM) sur le fil jaune. Les datasheet préconisent l’utilisation d’une résistance de 1KΩ qui est reliée entre le fil de sortie de la mesure et la masse comme ci-dessous :</p>
<p><img decoding="async" class="size-full wp-image-1020 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/schema-cablage-lidar.png" alt="" width="604" height="457" /></p>
<p style="text-align: center">Figure 6 Schéma de câblage du lidar en acquisition de mesure en PWM (d&rsquo;après datasheet Gramin)</p>
<p>Concernant les aspects métrologiques du capteur, la portée maximale du Lidar est de 40 mètres. Sa résolution est de 1 cm.</p>
<p>L&rsquo;incertitude de mesure du Lidar Lite V3,  entre 0 et 5m est de ± 2.5cm et ± 10 cm au delà.</p>
<p>En sortie de mesure en largeur d&rsquo;impulsion, la sensibilité est de 10 µs/cm. Cette valeur est à retenir pour comprendre la partie acquisition du signal du logiciel.</p>
<h2><a name="_Toc2727680"></a>Le Laser de visée</h2>
<p>Le laser est utile ici afin d&rsquo;avoir un repère visuel sur l&rsquo;orientation du Lidar. Le laser est du même type qu’utilisé pour les pointeurs laser de présentation (diode laser). Dans le cas présent, un laser d’alignement de 1 mW (λ = 650 nm) de couleur rouge a été utilisé. Il est alimenté en 5V par une entrée digitale de carte Arduino activable à partir du logiciel.</p>
<p><strong><span style="color: #ff0000">Attention aux yeux !</span></strong> Le laser concentre l&rsquo;énergie sur une surface très petite et a pour conséquence d&rsquo;être nocif pour l’œil.</p>
<p>L&rsquo;utilisateur est responsable de sa sécurité mais également celle des personnes autour !</p>
<h1><a name="_Toc2727681"></a>Le logiciel/programme</h1>
<p>Pour piloter les instruments (Lidar, moteur, laser) le logiciel LabVIEW 2014 est utilisé. Le but n’est pas de faire la présentation ni la promotion de ce logiciel mais de tenter d’expliquer comment utiliser certaines briques LINX. Si LabVIEW n’est pas utilisé, il sera quand même possible de piloter les instruments via un programme développé sur l’IDE Arduino. La suite de l’article pourra paraître obscure pour les personnes non initiées à LabVIEW; je m’en excuse par avance. Cependant, un petit effort a été fait pour que le code soit compris des personnes non initiées à LabVIEW.</p>
<p>Des briques (ou VI) de code LabVIEW ont été développées afin de faciliter grandement la compatibilité entre des cartes Arduino et LabVIEW. Pour utiliser les briques de codes LINX, la bibliothèque LINX côté LabVIEW doit avoir été installée préalablement dans VI Pack Manager (logiciel qui permet de charger des ToolKit ou librairies de programme).</p>
<h2><a name="_Toc2727682"></a>Chargement des librairies</h2>
<p>Avant de compiler le code, il faut charger les bibliothèques. Pour charger les bibliothèques, aller sur l’onglet <em>Tool\MakerHub\LINX\Generate Firmware Librairies :</em></p>
<p><img decoding="async" class="size-full wp-image-1022 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies.png" alt="" width="612" height="399" /></p>
<p>Et mettre en cible : <strong>C:\Program Files\Arduino\Libraries</strong></p>
<p><img decoding="async" class="wp-image-1023 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies_2.png" alt="" width="579" height="486" /></p>
<p>Les librairies sont donc maintenant chargées et opérationnelles.</p>
<h2><a name="_Toc2727683"></a>Configuration du type de carte</h2>
<p>Avant de compiler le code, il faudra configurer le type de carte (Mega, Leonardo) et le type de liaison. Dans ce projet avec LattePanda, la carte Arduino Leonardo est utilisée sur le port COM 4. Dans LabVIEW cliquez dans l&rsquo;onglet <em>Tool </em>puis <em>\MakerHub\LINX\LINX Firmware Wizard… </em>il faut configurer les champs à l’aide des informations mentionnées plus haut.</p>
<h2><a name="_Toc2727683"></a>TEST simple avec une LED</h2>
<p>Pour vérifier que la carte fonctionne correctement, l’exemple du pilotage d’une LED pourra être réalisé (onglet <em>HELP/Find Example…</em>). L&rsquo;exemple est prêt à être utilisé et ne nécessite que la mise en place d&rsquo;une LED en série avec une résistance de 220 Ω reliées au LattePanda.</p>
<p><img decoding="async" class="size-full wp-image-1024 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-test-example-LED-LINX.png" alt="" width="605" height="421" /><img decoding="async" class="size-full wp-image-1025 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Screen-Exemple-LED-LINX.png" alt="" width="766" height="616" /></p>
<p>Mettre le port COM 4 (normalement) et configurer la pin du Arduino sur laquelle est reliée l&rsquo;anode de la LED (la patte la plus longue) et ne pas oublier la résistance de 220 Ω en série 😉 . Puis relier la résistance à la masse et lancer le programme (flèche blanche).</p>
<p>Si la LED clignote quand le bouton est pressé, c’est gagné. Passer aux étapes suivantes. Sinon, il faut trouver la raison de cette malchance.</p>
<p>Ne pas hésiter à reconfigurer la carte car il arrive (trop) souvent que cela saute au bout de 3 à 4 compilations. Par exemple, il vaut mieux arrêter proprement la boucle avec un bouton « stop » placé dans la boucle While plutôt que de stopper le programme avec le bouton rouge de LabVIEW.</p>
<h1>L&rsquo;IHM (côté « Face Avant » de LabVIEW)</h1>
<p>L&rsquo;IHM qui permet à l&rsquo;utilisateur de contrôler les instruments pourra ressembler fortement à celle présentée ci-dessous.</p>
<p>Les configurations des Pins et du port sont situées à gauche.</p>
<p>Le bouton « Motor ON » permet d&rsquo;activer le driver sur la Pin ENABLE (Driver).</p>
<p>Le bouton « Left » permet d&rsquo;activer la Pin STEP (Driver)  et faire faire un pas au moteur.</p>
<p>Le bouton « Right »agit comme le bouton « Left » mais active la pin DIR (Driver) à l&rsquo;état haut et permet de changer de sens de rotation.</p>
<p>Un bouton « Laser » permet d&rsquo;activer le laser de visée.</p>
<p>Un bouton STOP permet d&rsquo;arrêter l’exécution proprement et d&rsquo;arrêter le moteur (ENABLE) et le Laser.</p>
<p>Trois types d’indicateurs sont présents : numérique (format chaîne de caractère), une barre de remplissage, et un graphe déroulant.</p>
<p>Un contrôleur barre graphe permet de passer au pilotage Pas par Pas (un clique sur LEFT ou RGTH = 0,9°) ou active la vitesse constante (comme sur la vidéo du début de l&rsquo;article).</p>
<p><img decoding="async" class=" wp-image-1036 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/IHM.png" alt="" width="700" height="376" /></p>
<p>Pour le lecteur non initié à LabVIEW, la « face avant » est la partie visible finale du programme disponible pour l&rsquo;utilisateur.</p>
<p>Le code est développé dans une seconde fenêtre appelée « Diagramme ». Et c&rsquo;est la partie de développement du Diagramme que nous allons maintenant aborder.</p>
<p><em>Nota : un Crtl+E permet de permuter rapidement rentre la face avant et le diagramme.</em></p>
<h2><a name="_Toc2727684"></a>La structure (côté diagramme)</h2>
<p>La structure générale du programme est la suivante :</p>
<p><img decoding="async" class="size-full wp-image-1026 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-LINX-boucle-while.png" alt="" width="605" height="230" /></p>
<p style="text-align: center">Figure 7 Structure générale du programme dans un boucle While</p>
<p>Le code source ne sera pas disponible dans cet article mais les principales briques seront détaillées pour arriver facilement au résultat. 🙂</p>
<h2><a name="_Toc2727685"></a>Lecture de la valeur de la distance du Lidar</h2>
<p>Le Lidar Garmin Lite V3 admet deux sorties de données pour la lecture des mesures : I2C ou PWM. La lecture en modulation de largeur d’impulsion est apparue comme le plus simple du point de vue du soft. Un VI LINX permet de réaliser cette mesure rapidement contre plusieurs VI pour la communication en I2C.</p>
<p>Dans la boucle While cadencée à 50 ms, la mesure du Lidar est effectuée à l’aide du VI « <strong>Lecture de la largueur d’impulsion</strong> » :</p>
<p><img decoding="async" class="size-full wp-image-1027 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-lecture-largeur-impulsion.png" alt="" width="385" height="150" /></p>
<p>L’entrée <strong>DO Channel</strong> est connectée et la valeur de la Pin 0 de la carte Arduino est rentrée (cf Figure 8 ci-dessous).</p>
<p>Un tableau général de configuration des Pins d’E/S pourra être créé en amont de la boucle While comme ceci :</p>
<p><img decoding="async" class="size-full wp-image-1028" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-tableau-E_S-ecrire.png" alt="" width="733" height="645" /></p>
<p>La valeur en sortie du VI n’est pas en cm mais en largeur d’une impulsion (µs), qui est proportionnelle à la distance mesurée en cm par le lidar. Afin de lire et d’afficher une valeur en cm, il faut diviser les valeurs en sortie du VI par une constante valant 10 pour obtenir une mesure de longueur (en cm). Cette constante est la sensibilité (en µs/cm) du capteur abordé précédemment que l&rsquo;on peut retrouver dans la documentation du Lidar Lite V3 (page 4, §Mode Pin Control).</p>
<p>Une moyenne glissante pourra être développée afin d’obtenir une mesure plus stable et plus juste à l’aide des registres à décalage (flèches oranges sur les bords de la boucle While). L’inconvénient de cette technique est qu’il faudra attendre n fois le nombre de points moyennés, pour obtenir le résultat. Si l’on choisit de moyenner sur 10 points et que le temps du cadencement est de 500 ms, alors le résultat sera juste au bout de 5 secondes. Ne pas oublier d’initialiser les registres à décalage à zéro. Différents types d’indicateurs pourront être placés en face avant comme ci-dessous :</p>
<p><img decoding="async" class="alignnone size-full wp-image-1029 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-moyenne-glissante.png" alt="" width="1069" height="627" /></p>
<p style="text-align: center">Figure 9 Moyenne glissante (côté diagramme/code) et exemples d&rsquo;indicateurs en face avant</p>
<p>Comme le Lidar affiche une incertitude de ± 2.5 cm et une résolution de 1 cm, il a été choisi de n’afficher que des valeurs entières arrondies au centimètre.</p>
<h2><a name="_Toc2727686"></a>VI de contrôle du Driver et du moteur</h2>
<p>Un VI « écrire sur des E/S digitales » permet d’activer les sorties de l’Arduino du LattePanda afin de piloter le Driver.</p>
<p>La fonction suivante a été construite comme ci-après :</p>
<p><img decoding="async" class="size-full wp-image-1030 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-ecrire-E-S-digitales.png" alt="" width="186" height="156" /></p>
<p>Cette fonctionnalité permet de prendre, en entrée, un tableau de booléens (ordres des boutons pressés en face avant) et d’activer les E/S correspondantes.</p>
<ul>
<li><strong>La première entrée</strong> (en partant du haut) de la fonction « <strong>Construire un tableau</strong>» est reliée au bouton « MOTOR ON » et agit sur la Pin « ENABLE » du Driver. Ce bouton permet vraisemblablement d’activer l’alimentation du driver et du moteur.</li>
<li><strong>La seconde entrée </strong>permet de gérer la direction du moteur. Le fil (vert) est relié au bouton « RIGHT » de mon interface afin d’active la Pin « DIR » du driver. Le moteur tourne ainsi dans le sens horaire.</li>
<li><strong>La troisième entrée</strong> active la pin « STEP » du driver et permet d’effectuer un Pas de 0,9° (avec les entrées du driver MS1=MS2=MS3=0=GND). Le moteur effectue un pas par changement de niveau de l’état bas à l’état haut. Cette entrée est active si le bouton « LEFT » OU le bouton « RIGHT » est activé. Nous verrons ensuite comment faire tourner le moteur à vitesse constante.</li>
<li><strong>La quatrième entrée</strong> active le laser. Un laser de visée peut fonctionner qu’avec une tension de 5V et ne consomme que quelques milliampères. Il est souhaitable pour la sécurité des personnes, que le bouton « STOP » qui arrête le programme, puisse stopper l’émission du laser à la fin de la manip en même temps. Pour cela on pourra mettre une boucle conditions comme ci-dessous :</li>
</ul>
<p><img decoding="async" class="size-full wp-image-1031 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-Secu-Laser.png" alt="" width="746" height="166" /></p>
<p>Il pourra être fait de même avec l’arrêt du moteur (« MOTOR ON ») à la fin de l’exécution du programme.</p>
<ul>
<li><strong>Les cinquième, sixième et septième</strong> entrées activent les Pins MS1, MS2 et MS3 du driver et permettent de gagner en précision d’angle (jusqu’au demi pas ici).</li>
</ul>
<p>Afin de faire fonctionner le moteur à vitesse constante, la fonctionnalité suivante a été développée :</p>
<p><img decoding="async" class="size-full wp-image-1032 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-ecrire-signal-carre.png" alt="" width="294" height="155" /></p>
<p>Lorsqu’un booléen (bouton) active la structure « Cas », le VI « écrire un signal carré » est activé avec une fréquence nulle et d&rsquo;une durée nulle sur la pin STEP. Cette fonctionnalité m&rsquo;a permis de faire fonctionner le moteur à vitesse constante. Dans ce cas, la vitesse est fonction du temps de cadencement de la boucle (réglée à 50 ms). A l’heure où est écrit cet article, il existe surement de meilleures solutions, notamment avec le VI « PWM Set Duty Cycle »:</p>
<p><img decoding="async" class="size-full wp-image-1033 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-PWM.png" alt="" width="126" height="74" /></p>
<p>Mais cela n’a pas fonctionné comme il était souhaité lors du test.</p>
<p>A la suite de ces nombreux réglages et bidouillages, le programme doit pouvoir se lancer (flèche blanche non brisée). Si cela n&rsquo;est pas le cas, résoudre les erreurs unes à unes.</p>
<p>Il fortement probable que rien ne fonctionne du premier coup, ou qu’à moitié, il est alors conseillé, dans un premier temps, de vérifier les branchements (alimentation) des organes dysfonctionnant.</p>
<p>L&rsquo;utilisateur pourra jouer avec les différents types d&rsquo;actions mécaniques pour contrôler le moteur (clique droit sur un bouton) :</p>
<p><img decoding="async" class=" wp-image-1040 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LabVIEW_acrion-boutons.png" alt="" width="326" height="354" /></p>
<p>&nbsp;</p>
<h1><a name="_Toc2727687"></a>Résultats en images :</h1>
<p><img decoding="async" class="size-full wp-image-1015 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222601.jpg" alt="" width="4608" height="3456" /></p>
<p>Figure 10 Interface de la mesure de distance (Windows n&rsquo;est pas à l&rsquo;heure ^_^ )</p>
<p>J’espère que ce projet a pu continuer d’éveiller votre curiosité et a pu vous aider dans vos futurs développements !</p>
<h1><a name="_Toc2727688"></a>Sources :</h1>
<ul>
<li>Site Pololu (<a href="https://www.pololu.com/product/1182" target="_blank" rel="noopener">https://www.pololu.com/product/1182</a> )</li>
<li>Site GO Tronic</li>
<li><a href="https://www.lattepanda.com" target="_blank" rel="noopener">https://www.lattepanda.com</a></li>
<li>Ressources LINX : <a href="http://sine.ni.com/nips/cds/view/p/lang/fr/nid/212478" target="_blank" rel="noopener">http://sine.ni.com/nips/cds/view/p/lang/fr/nid/212478</a></li>
<li>Forum LINX : <a href="https://www.labviewmakerhub.com/doku.php?id=libraries:linx:start" target="_blank" rel="noopener">https://www.labviewmakerhub.com/doku.php?id=libraries:linx:start</a></li>
<li>Datasheet Lidar Garmin lite V3 : <a href="https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf" target="_blank" rel="noopener">https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf</a></li>
<li><em>LabVIEW &#8211; 4e édition &#8211; Programmation et applications &#8211; Introduction à LabVIEW NXG, </em>Collection : Technique et ingénierie, Dunod, Parution : août 2018,Francis Cottet, Luc Desruelle, Michel Pinard</li>
</ul>
<ul>
<li><em>The Art of electronic</em>, Third edition, Paul Horowitz et Winfield Hill</li>
</ul>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/">Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)</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/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4" length="98513038" type="video/mp4" />

			</item>
		<item>
		<title>LINX 3.0 – Création d&#8217;un Service Web avec LabVIEW</title>
		<link>https://amaury-laurent.fr/linx-3-0-creation-dun-service-web-labview/</link>
					<comments>https://amaury-laurent.fr/linx-3-0-creation-dun-service-web-labview/#comments</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Sat, 10 Dec 2016 17:17:09 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Http]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[LINX]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Web]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=656</guid>

					<description><![CDATA[<p>Cet article fait partie d&#8217;une série consacrée à LINX 3.0. Comme je vous l&#8217;ai expliqué dans l&#8217;article précédent, il est possible de déployer une application LabVIEW dans le Raspberry Pi. Il fonctionne alors en mode autonome, sans interface utilisateur. Je vais aujourd&#8217;hui vous présenter l&#8217;une des solution qui permet de communiquer avec son programme en [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-creation-dun-service-web-labview/">LINX 3.0 – Création d&rsquo;un Service Web 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>Cet article fait partie d&rsquo;une <a href="https://amaury-laurent.fr/index.php/2016/12/03/linx-3-0-programmer-raspberry-pi-labview/">série consacrée à LINX 3.0</a>.</p>
<p>Comme je vous l&rsquo;ai expliqué <a href="https://amaury-laurent.fr/index.php/2016/12/05/linx-3-0-deploiement-dune-application-labview/">dans l&rsquo;article précédent</a>, il est possible de déployer une application LabVIEW dans le Raspberry Pi. Il fonctionne alors en mode autonome, sans interface utilisateur. Je vais aujourd&rsquo;hui vous présenter l&rsquo;une des solution qui permet de communiquer avec son programme en utilisant un simple navigateur internet: le service Web.</p>
<h1>Principe de fonctionnement</h1>
<p>L&rsquo;exécution d&rsquo;une application LabVIEW sur une cible embarquée repose sur le moteur d&rsquo;exécution (Run-Time Engine). Ce moteur fournit l&rsquo;environnement d&rsquo;exécution de l&rsquo;application. Il fournit également un serveur de débogage distant, des modules d&rsquo;accès aux ressources systèmes (réseau, fichiers, interpréteur de commande, &#8230;), le <a href="http://digital.ni.com/public.nsf/allkb/FBD546A08048EA5D86256E8E0027040B" target="_blank" rel="noopener noreferrer">Vi Server</a> et bien d&rsquo;autres choses.</p>
<p>Il se trouve qu&rsquo;il y a également a disposition des développeurs un serveur web. Il s&rsquo;agit d&rsquo;un environnement d&rsquo;exécution particulier qui permet d&rsquo;interroger un VI <em>via</em> une <a href="https://fr.wikipedia.org/wiki/Service_web" target="_blank" rel="noopener noreferrer">requête HTTP</a>.</p>
<p>Comme illustré sur l&rsquo;image d&rsquo;introduction, ce serveur Web est dissocié de l&rsquo;application principale. Cependant, il est possible de communiquer avec elle en utilisant le Vi Server ou d&rsquo;autres mécanismes. Dans l&rsquo;exemple qui va suivre, j&rsquo;utiliserai des <a href="http://zone.ni.com/reference/fr-XX/help/371361H-0114/lvconcepts/glob_variables/" target="_blank" rel="noopener noreferrer">variables globales</a> pour échanger de simples valeurs courantes.</p>
<h1>Créer un Service Web</h1>
<p>Pour créer un service Web sur une cible LabVIEW (PC ou embarquée), il suffit de faire un clic droit sur cette dernière et de choisir <strong>Nouveau</strong> &gt; <strong>Service Web</strong>.</p>
<figure id="attachment_667" aria-describedby="caption-attachment-667" 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/NewWebService.png"><img decoding="async" class="wp-image-667 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:203/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/NewWebService.png" width="300" height="203" /></a><figcaption id="caption-attachment-667" class="wp-caption-text">Ajouter un service Web</figcaption></figure>
<p>Un nouvel objet apparait alors dans le projet. Il contient deux sous sections, Ressources Web et VI de Démarrage. Nous nous intéresserons exclusivement à la première.</p>
<figure id="attachment_668" aria-describedby="caption-attachment-668" style="width: 194px" 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/NewWebService_next.png"><img decoding="async" class="size-full wp-image-668" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/NewWebService_next.png" alt="" width="194" height="54" /></a><figcaption id="caption-attachment-668" class="wp-caption-text">Le nouveau service Web</figcaption></figure>
<p>Ce service Web va servir de point d&rsquo;entrée pour les requêtes HTTP. On va maintenant ajouter de nouvelles ressources. Chaque ressource sera liée d&rsquo;une part à une URL, d&rsquo;autre part à un VI.</p>
<p>Pour ajouter une ressource, il suffit là encore de faire un clic droit sur l&rsquo;objet <strong>Ressources Web</strong>, puis <strong>Nouveau VI</strong>. Chaque nouveau VI sera lié à une URL. Il est également possible d&rsquo;ajouter une Ressource Web. Ces ressources permettent simplement de structurer le service Web (un peu comme des dossiers pour un serveur Apache). Il faudra alors spécifier le nom de la ressource Web dans l&rsquo;URL.</p>
<figure id="attachment_666" aria-describedby="caption-attachment-666" style="width: 292px" 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/NewWebPage.png"><img decoding="async" class="wp-image-666 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/NewWebPage.png" width="292" height="120" /></a><figcaption id="caption-attachment-666" class="wp-caption-text">Ajouter un nouveau VI au service Web</figcaption></figure>
<p>Pour chaque VI, il est possible de définir le type de requête HTTP associé: GET, POST, PUT ou DELETE. Cela permet par exemple de développer des <a href="https://fr.wikipedia.org/wiki/Representational_state_transfer" target="_blank" rel="noopener noreferrer">API REST</a>.</p>
<figure id="attachment_671" aria-describedby="caption-attachment-671" 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/Properties.png"><img decoding="async" class="size-medium wp-image-671" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:252/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/Properties.png" alt="" width="300" height="252" /></a><figcaption id="caption-attachment-671" class="wp-caption-text">Le type de requête HTTP associée à un VI est configurable</figcaption></figure>
<p>De manière générale, le VI sera accessible par l&rsquo;URL suivante:</p>
<p style="text-align: center;"><strong>http://xxx.xxx.xxx.xxx:8001/RessourcesWeb/NomDuVi</strong></p>
<h1>Formater une réponse HTTP</h1>
<p>Les VI ajoutés dans un Service Web sont exécutés dès qu&rsquo;une requête HTTP est reçue sur l&rsquo;URL associée. Voyons maintenant le type de code que peut contenir une ressource Web, et surtout comment formater la réponse HTTP.</p>
<h2>1 &#8211; Formatage automatique</h2>
<p>Pour un simple échange de valeurs courantes, il est possible de déléguer à LabVIEW la création de la réponse. Pour cela, il suffit de câbler les données à envoyer sur le terminal du VI.</p>
<figure id="attachment_672" aria-describedby="caption-attachment-672" 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/faceAvant_simple.png"><img decoding="async" class="size-medium wp-image-672" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:241/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/faceAvant_simple.png" alt="" width="300" height="241" /></a><figcaption id="caption-attachment-672" class="wp-caption-text">Formatage automatique des données</figcaption></figure>
<p>Le diagramme du VI est lui chargé d&rsquo;élaborer les données à transférer. Dans mon cas, je remonte simplement trois mesures. Le VI lit donc simplement trois variables globales et les envoie dans des indicateurs.</p>
<figure id="attachment_660" aria-describedby="caption-attachment-660" 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_simple.png"><img decoding="async" class="wp-image-660 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:212/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/diagramme_simple.png" width="300" height="212" /></a><figcaption id="caption-attachment-660" class="wp-caption-text">Remontée de valeurs courantes</figcaption></figure>
<p>Le code source pourrait être bien plus complexe, par exemple en réalisant des calculs, ou en interprétant la requête HTTP. Gardez cependant une chose à l&rsquo;esprit: ce VI est exécuté pour chaque requête. Plus il est long, plus la réponse sera longue à obtenir&#8230;</p>
<p>Mais comment LabVIEW envoie les données ?</p>
<p>Et bien, on peut choisir ! En faisant un clic droit sur le Service Web dans le projet puis en allant dans Propriétés on obtient tous les paramètres voulus dans la section <strong>HTTP Method VI Settings</strong>:</p>
<figure id="attachment_665" aria-describedby="caption-attachment-665" style="width: 650px" 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/method_type.png"><img decoding="async" class="wp-image-665" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:205/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/method_type.png" width="650" height="445" /></a><figcaption id="caption-attachment-665" class="wp-caption-text">Propriétés du service Web</figcaption></figure>
<p>Les paramètres sont réglés VI par VI.</p>
<p>La première sous section correspond à la mise en forme de l&rsquo;URL d&rsquo;accès et au type de requête attendu.</p>
<p>La deuxième sous section permet de configurer la réponse HTTP.</p>
<figure id="attachment_669" aria-describedby="caption-attachment-669" style="width: 650px" 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/output_type.png"><img decoding="async" class="wp-image-669" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:205/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/output_type.png" width="650" height="445" /></a><figcaption id="caption-attachment-669" class="wp-caption-text">Propriétés de la réponse HTTP</figcaption></figure>
<p>Par défaut, le VI est configuré pour une sortie sur Terminaux avec un format HTML. Pour faire un formatage automatique, il faut impérativement choisir une sortie sur <strong>Terminal</strong>.</p>
<p>LabVIEW va prendre tous les terminaux du VI et mettre leurs valeurs dans une table HTML. Voici la page affichée par un navigateur Web pour mon VI simpliste:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="html">
&lt;html&gt;
    &lt;body&gt;
        &lt;h1&gt;URL: /WebService/RawData/HTTPMethod_Html&lt;/h1&gt;
        &lt;h2&gt;Output Terminals&lt;/h2&gt;
        &lt;table  border=1.0&gt;
            &lt;tr&gt;
                &lt;th&gt;Terminal Name&lt;/th&gt;
                &lt;th&gt;Terminal Value&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;Temperature&lt;/td&gt;
                &lt;td&gt;25.32916641235352&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;Hygrometrie&lt;/td&gt;
                &lt;td&gt;30.240014152&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;Pression&lt;/td&gt;
                &lt;td&gt;907.505615234375&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/table&gt;
    &lt;/body&gt;
&lt;/html&gt;

</pre>
<p>&nbsp;</p>
<p>Les autres formats de sortie sont les suivants:</p>
<ul>
<li>XML</li>
</ul>
<pre class="EnlighterJSRAW" data-enlighter-language="xml">
&lt;Response&gt;
    &lt;Terminal&gt;
        &lt;Name&gt;Temperature&lt;/Name&gt;
        &lt;Value&gt;25.375&lt;/Value&gt;
    &lt;/Terminal&gt;
    &lt;Terminal&gt;
        &lt;Name&gt;Hygrometrie&lt;/Name&gt;
        &lt;Value&gt;30.10982604800001&lt;/Value&gt;
    &lt;/Terminal&gt;
    &lt;Terminal&gt;
        &lt;Name&gt;Pression&lt;/Name&gt;
        &lt;Value&gt;907.39013671875&lt;/Value&gt;
    &lt;/Terminal&gt;
&lt;/Response&gt;

</pre>
<p>&nbsp;</p>
<ul>
<li>JSON</li>
</ul>
<pre class="EnlighterJSRAW" data-enlighter-language="json">
{
    "Temperature":25.39583396911621,
    "Hygrometrie":30.247509352,
    "Pression":907.404296875
}

</pre>
<p>&nbsp;</p>
<ul>
<li>Texte brut</li>
</ul>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">Temperature=25.46249961853027
Hygrometrie=30.04304245000001
Pression=907.55322265625

</pre>
<p>&nbsp;</p>
<p>La seule précaution à prendre pour ce type de Service Web est de <strong>ne pas utiliser de caractères accentués</strong> dans les étiquettes des terminaux.</p>
<p>Bien que LabVIEW renvoie du HTML par défaut, il est cependant préférable de se cantonner au XML ou au JSON, bien que le XML généré par LabVIEW soit assez mal organisé (requête XPath complexes à cause du manque d&rsquo;utilisation de tags).</p>
<h2>2 &#8211; Formatage manuel</h2>
<p>Avec ce mode de formatage, il est possible de fabriquer par programme la réponse HTTP. Pour passer en formatage manuel, il faut choir une sortie de type Stream dans la fenêtre de propriétés du Service Web. Le diagramme du VI est un peu plus complexe: on utilise la sous palette Web Service de la palette Connectivity pour fabriquer toute la réponse HTTP:</p>
<ul>
<li>Code de la réponse</li>
<li>type MIME</li>
<li>Contenu</li>
<li>&#8230;</li>
</ul>
<figure id="attachment_661" aria-describedby="caption-attachment-661" 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_stream.png"><img decoding="async" class="size-medium wp-image-661" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:142/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/diagramme_stream.png" alt="" width="300" height="142" /></a><figcaption id="caption-attachment-661" class="wp-caption-text">Création manuelle de la réponse HTTP</figcaption></figure>
<p>Il devient alors possible de générer du code HTML plus évolué, d&rsquo;ajouter du style CSS, d&rsquo;envoyer des images, &#8230; Pour l&rsquo;exemple, je me suis contenté d&rsquo;une feuille HTML de base:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="html">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;body&gt;
        &lt;h1&gt;Température&lt;/h1&gt;&lt;p&gt;25.5 °C&lt;/p&gt;
        &lt;h1&gt;Pression&lt;/h1&gt;&lt;p&gt;907.6 hPa&lt;/p&gt;
        &lt;h1&gt;Hygrométrie&lt;/h1&gt;&lt;p&gt;30.2 %HR&lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;

</pre>
<p>&nbsp;</p>
<p>Ce mode de création de la réponse HTTP permet par exemple de générer un code XML mieux organisé que celui de base.</p>
<h1>Déploiement</h1>
<p>Pour déployer un service Web en source, il suffit de faire un clic droit sur ce dernier et de choisir Démarrer. Cependant, il semble y avoir un problème avec LINX: quelques fois, il y a une erreur au déploiement (LabVIEW ne trouve pas le serveur web et échoue à démarrer l&rsquo;application). Du coup, je préfère tester mes services Web directement en compilant mon application. Pour cela, il convient de modifier les spécifications de construction de l&rsquo;application:</p>
<figure id="attachment_689" aria-describedby="caption-attachment-689" style="width: 650px" 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/Application.png"><img decoding="async" class="wp-image-689" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:201/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/Application.png" width="650" height="436" /></a><figcaption id="caption-attachment-689" class="wp-caption-text">Inclure un service Web dans une application est des plus simple, il suffit de le cocher !</figcaption></figure>
<p>Il faut alors choisir les services Web à inclure dans l&rsquo;application, recompiler l’ensemble, déployer et redémarrer le Raspberry Pi.</p>
<h1>Conclusion</h1>
<p>Les services Web sont une solution relativement simple pour communiquer avec une application LabVIEW.</p>
<p>Ils peuvent être utilisés pour surveiller une application ou consulter des valeurs courantes.</p>
<p>Ils peuvent également servir pour communiquer avec un système distant, tel qu&rsquo;une base de données, une application Android, un site Web, &#8230; Les applications sont nombreuses et puissantes. Je n&rsquo;ai qu’effleuré l&rsquo;aspect « Service » pour me concentrer sur l&rsquo;implémentation sous LabVIEW.</p>
<p>Si le sujet vous intéresse, vous trouverez plus d&rsquo;informations sur <a href="https://openclassrooms.com/courses/les-services-web" target="_blank" rel="noopener noreferrer">OpenClassRoom</a>.</p>
<p>La seule contrainte liée au formatage automatique est d&rsquo;éviter les caractères ASCII étendus.</p>
<p>Enfin, il faut garder à l&rsquo;esprit que les VI des services Web sont exécutés de manière asynchrone, et par conséquent ont un impacte important et non prédictible sur les performances globales du système.</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-creation-dun-service-web-labview/">LINX 3.0 – Création d&rsquo;un Service Web 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-creation-dun-service-web-labview/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<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" 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>
		<item>
		<title>Communication entre LabVIEW et L&#8217;interface HID</title>
		<link>https://amaury-laurent.fr/communication-entre-labview-et-linterface-hid/</link>
					<comments>https://amaury-laurent.fr/communication-entre-labview-et-linterface-hid/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Sat, 03 Oct 2015 09:32:36 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<guid isPermaLink="false">http://vps200917.ovh.net/?p=148</guid>

					<description><![CDATA[<p>Générer un driver spécifique à votre interface, envoyer et recevoir des données par l&#8217;USB HID Pour communiquer sur les entrées/sorties standards d&#8217;un PC, LabVIEW utilise un ensemble de librairies nommées VISA. Pour rendre compatible notre interface avec VISA, il faut un driver spécifique. Heureusement pour nous, National Instrument à tout prévu! LabVIEW fournit ainsi une [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/communication-entre-labview-et-linterface-hid/">Communication entre LabVIEW et L&rsquo;interface HID</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Générer un driver spécifique à votre interface, envoyer et recevoir des données par l&rsquo;USB HID</h1>
<p>Pour communiquer sur les entrées/sorties standards d&rsquo;un PC, LabVIEW utilise un ensemble de librairies nommées VISA. Pour rendre compatible notre interface avec VISA, il faut un driver spécifique. Heureusement pour nous, National Instrument à tout prévu! LabVIEW fournit ainsi une interface graphique pour générer ce driver.</p>
<p>Voici la procédure à suivre pour générer le Driver:</p>
<ol>
<li>Lancer le programme National Instrument -&gt; VISA -&gt; Driver Wizard<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/1.jpg" target="_blank" rel="noopener"><img decoding="async" class="aligncenter wp-image-154 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/1-300x262.jpg" alt="Le VISA Driver Wizard" width="300" height="262" /></a></li>
<li>Choisir le bus USB<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/2.jpg" target="_blank" rel="noopener"><img decoding="async" class="aligncenter wp-image-155 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/2-300x261.jpg" alt="Choisir son interface dans la liste" width="300" height="261" /></a></li>
<li>Choisir son interface dans la liste<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/3.jpg" target="_blank" rel="noopener"><img decoding="async" class="aligncenter wp-image-156 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/3-300x262.jpg" alt="Générer le Driver" width="300" height="262" /></a></li>
<li>Nommer son driver<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/4.jpg" target="_blank" rel="noopener"><img decoding="async" class="aligncenter wp-image-157 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/4-300x262.jpg" alt="Installer le Driver" width="300" height="262" /></a></li>
<li>Et finalement l&rsquo;installer<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/5.jpg" target="_blank" rel="noopener"><img decoding="async" class="aligncenter wp-image-158 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/5-206x300.jpg" alt="L'interface doit apparaitre dans le gestionnaire de périphérique" width="206" height="300" /></a></li>
<li>Votre interface doit apparaître dans la catégorie NI-VISA USB Device</li>
</ol>
<p>Une fois le driver installé, vous êtes opérationnel. Entrons maintenant dans le vif du sujet.<br />
Voici les différentes étapes d&rsquo;une communication HID:</p>
<ul>
<li>Lister les interfaces (évite les désagréments liés aux changements de nom de l&rsquo;interface)<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/listerInterfaces.png" target="_blank" rel="noopener"><img decoding="async" class="aligncenter wp-image-163 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/listerInterfaces-300x87.png" alt="listerInterfaces" width="300" height="87" /></a></li>
<li>Ouvrir la liaison<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/ouvrirLiaison.png" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full wp-image-164" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/ouvrirLiaison.png" alt="ouvrirLiaison" width="265" height="104" /></a></li>
<li>Activer les évènements (ou interruptions, permet de recevoir des données)<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/activerEvents.png" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full wp-image-159" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/activerEvents.png" alt="activerEvents" width="196" height="118" /></a></li>
<li>Envoyer des données<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/ecrire.png" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full wp-image-160" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/ecrire.png" alt="ecrire" width="225" height="104" /></a></li>
<li>Recevoir des données<a href="http://vps200917.ovh.net/wp-content/uploads/2015/10/lire.png" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-medium wp-image-162" src="http://vps200917.ovh.net/wp-content/uploads/2015/10/lire-300x98.png" alt="lire" width="300" height="98" /></a></li>
</ul>
<h2>Particularité depuis Windows 8</h2>
<p>Depuis Windows 8, Microsoft a décidé de restreindre l&rsquo;installation des drivers de périphériques aux drivers signés numériquement. Concrètement, il devient impossible d&rsquo;installer un pilote sans que celui-ci soit avalisé par Microsoft. C&rsquo;est le cas du pilote généré par le Driver Wizard.</p>
<p>Pour installer le pilote généré, il faut au préalable désactiver la vérification des signatures de pilotes.</p>
<p>Voici un tutoriel qui explique comment le faire:</p>
<p><a class="fancybox-iframe" href="http://www.windows8facile.fr/windows-8-signature-obligatoire-des-pilotes/" target="_blank" rel="noopener">Installer un pilote non signé sous Windows 8 et 8.1</a></p>
<p>Cette manipulation est également valable avec Windows 10.</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/communication-entre-labview-et-linterface-hid/">Communication entre LabVIEW et L&rsquo;interface HID</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/communication-entre-labview-et-linterface-hid/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
