<?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>Raspberry Pi &#8211; Electronique et Informatique</title>
	<atom:link href="https://amaury-laurent.fr/tag/raspberry-pi/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:40:41 +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>Raspberry Pi &#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>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>
	</channel>
</rss>
