oct 13 2015

Contrôler un PIC 16F877 avec Labwindows/CVI

Dans ce billet, je vais vous présenter les bases pour établir une communication série entre NI Labwindows/CVI et un microcontrôleur de Microchip, c’est le PIC 16F877 dans notre exemple.
Il ne s’agit en aucun cas la meilleure solution, ni le meilleur exemple, c’est simplement une approche basique pour réaliser une carte DIO (digital input output) low cost.
On commence par le schéma suivant pour avoir une idée globale sur le principe de fonctionnement :

DioPicJ’aborde dans cet exemple :

  • Schéma électronique (Simulation avec Isis)
  • Firmware du PIC
  • Application de contrôle (GUI) développée avec Labwindows/CVI.

Passons maintenant au vif du sujet :)

Schéma électronique (Simulation avec Isis) :

Le montage électronique présenté sert à expliquer le principe de fonctionnement ni plus ni moins, il est composé d’un PIC 16F877 avec huit LED connectés sur le port B (des sorties numériques) et huit switch connectés sur le port D (entrées numériques), et un port COM virtuel pour pouvoir communiquer avec l’application Windows (développée en C avec Labwindows/CVI), dans le monde réel les choses peuvent être différentes, une isolation galvanique peut être nécessaire, une alimentation, un circuit d’adaptation de lien série (Max 232) …
Bref, si vous souhaitez réalisez ce montage, vous devez le modifiez, ajoutez les éléments manquants … et faire votre propre PCB, celui de l’article ne suffit pas :) on est d’accord n’est-ce pas.

Schematic_PIC_16F877Firmware du PIC :

Le programme du PIC est écrit en C avec l’IDE Mplab v8.98, compilé avec HI-TECH C Compiler for PIC10/12/16 MCUs V9.83, le principe de fonctionnement est très simple, le programme commence par initialiser les entrées / sorties nécessaires.
Après avoir configuré le lien série, le pic entre dans une boucle infinie de lecture du port COM (fonction read_command), dès réception d’une trame une fonction d’analyse (process_command) est appelé, si une commande valide est reçue, elle sera exécutée directement.
Le programme du PIC  propose également des fonctions d’aide :) il suffit de taper la commande « LS » ou « ? »,  le help sera affiché sur votre terminal série.

Voici le Main du programme :


// ======================================================
//  Function     : main
//  Version      : v1.01
//  Date         : 10/2015
//  Author       : Tawfik NOURI
//  Brief        : Main Program
// ======================================================
void main(void)
{
init_main();
display_terminal_info();
while( 1 )
{
process_command(read_command());
}
}

La liste des commandes disponibles :


16F877>LS
**********************************

*  List of Supported Commands    *

**********************************

*   RB01    -> RB0=1  *

*   RB00    -> RB0=0  *

*   RB11    -> RB1=1  *

*   RB10    -> RB1=0  *

*   RB21    -> RB2=1  *

*   RB20    -> RB2=0  *

*   RB31    -> RB3=1  *

*   RB30    -> RB3=0  *

*   RB41    -> RB4=1  *

*   RB40    -> RB4=0  *

*   RB51    -> RB5=1  *

*   RB50    -> RB5=0  *

*   RB61    -> RB6=1  *

*   RB60    -> RB6=0  *

*   RB71    -> RB7=1  *

*   RB70    -> RB7=0  *

*   PD?    -> PORTD = xx *

*   INFO   -> Information       *

*   LS ou ?-> List of commands  *

**********************************

OK
16F877>

Les sources de l’exemple sont disponible pour téléchargement :

Sources PIC : Dio_Firmware_Hitech

Simulation Isis (Version  8.1 SP 1) : Dio_Proteus_Isis

Application de contrôle (GUI) développée avec Labwindows/CVI :

Passons maintenant au dernier point, c’est le GUI CVI.
L’application de supervision GuiDio est développée en C avec  NI Labwindows/CVI s’interface avec la carte à PIC via le port COM du PC (Adaptateur USB/Série pour les PC portable).
L’IHM proposé très simple mais contient tous les éléments nécessaires pour dialoguer avec le module à PIC :

  • Liste déroulante pour choisir un port COM (COM1, COM2, ….)
  • Liste déroulante pour choisir une Vitesse particulière (9600, 19200, ….)
  • Led pour indiquer le statut du port COM
  • Switch pour démarrer / arrêter la communication série avec le module.
  • Zone texte pour afficher les messages d’erreurs de communication
  • Huit led pour indiquer le statut du port D (Led / entrée)
  • Huit interrupteur pour changer l’état des sorties (Interrupteur / Sortie)
GUI_1 GUI_2

 

Voici le résultat d’une simulation sur mon PC :

DemoDioPic

Les sources GUI Labwindows/CVI sont également disponible pour téléchargement : CVI_GuiDio

J’ai fermé le fil des commentaires car j’ai toujours des soucis a manager les spam.

En cas de besoin d’information complémentaires n’hésitez pas à m’envoyer un petit email : nouri.tawfik@gmail.com

août 15 2015

Consommer un Web service .Net avec un client Java JSP

Dans un précédent article, j’ai montre comment créer un Web services SOAP avec C#.Net, aujourd’hui a travers cet article je vous présente comment consommez ce même Web Service avec un client en JSP (Java Server Pages) en utilisant les API Axis.

Avant de commencer, je suppose que votre environnement de développement Apache Tomcat est installé et fonctionnel.
Je vais juste vous expliquer comment installer les jars nécessaires pour que Axis fonctionne.
Alors GO,
Vous devez télécharger le fichier soap-Nedd-All-jar, bien évidement ce fichier est disponible sur d’autres sites, demandez à Google :)
Une fois téléchargé, dézippez le dossier et copier le contenu dans le dossier lib de votre Apache Tomcat.
Sur mon poste par exemple c’est :
C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.22\lib
Redémarrez ensuite votre serveur Tomcat, voila c’est tout.

Passons maintenant à la partie JSP, le code est assez simple et basique, en cas de problème ou d’erreur, faites-moi signe, n’hésitez pas à laisser un commentaire.


<%@page contentType="text/html"
import="java.net.*,
java.util.*,
org.apache.soap.*,
org.apache.soap.rpc.*" %>

<%
String ls_result = "";

Call call = new Call ();
call.setTargetObjectURI("http://tempuri.org/");
call.setMethodName ("HelloUser");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);

// Gestion des paramètres
Vector params = new Vector ();
params.addElement (new Parameter("strUser", String.class, "Tawfik NOURI", null));
call.setParams (params);

URL url = new URL ("http://localhost/DemoWebServices/DemoWebServices.asmx?WSDL");

// On invoke la methode HelloUser du WebServices
Response resp = call.invoke (url, "http://tempuri.org/HelloUser");
if (resp.generatedFault())
{      Fault fault=resp.getFault();
ls_result = " Fault code: " + fault.getFaultCode();
ls_result = " Fault Description: " +fault.getFaultString();
}
else
{      Parameter result = resp.getReturnValue();
ls_result = (String) result.getValue();
}
%>
<html><head><title>Running a Local Web Service</title></head>
<body>
The result of the Web service call is :<br/>
<%= ls_result %>
</body>
</html>

 

Pour tester cette page JSP, vous devez télécharger le fichier client_soap.rar puis le dézippez dans le dossier webapps de votre Apache Tomcat.

Ensuite via votre navigateur entrez l’URL de cette page, dans mon cas par exemple, ça donne l’URL suivante : http://localhost:8084/demo/client_soap.jsp

Client_JSP_Demo

Allez je vous laisse, bon courage  :)

 

juil 27 2015

Consommer un Web service .Net avec un client PHP

Cet article explique comment consommez un  Web Services C#.Net avec un client PHP en utilisant la bibliothèque nusoap.
Grâce à la lib nusoap, la mise en place d’un client PHP est relativement simple.

Alors, passons à la pratique, ci-dessous un bout du code en php permet de consommer la méthode HelloUser du Web Service DemoWebServices.

Bien évidemment le script PHP ci-dessous est basé sur la lib nusoap, vous devez mettre les sources de la lib a coté du script et/ou adaptez ensuite le chemin dans le script php.

<?php
// Lib nusoap
require_once('./nusoap-0.9.5/lib/nusoap.php');
$wsdl = "http://localhost/DemoWebServices/DemoWebServices.asmx?WSDL";
ini_set("soap.wsdl_cache_enabled", 0);

$theVariable = array('strUser'=> 'Tawfik NOURI');

// Creation d'un client SOAP
$client = new SoapClient($wsdl,true);
$err = $client->getError();
if ($err)
{
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';
exit();
}
// Exécution de la Methode
$result = $client->call('HelloUser',$theVariable);

if ($client->fault)
{
echo '<h2>Fault (Expect - The request contains an invalid SOAP body)</h2><pre>'; print_r($result); echo '</pre>';
}
else
{
$err = $client->getError();
if ($err)
{
echo '<h2>Error</h2><pre>' . $err . '</pre>';
}
else
{
echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>';
}
}
?>

Voici le résultat d’un test dans mon navigateur :

Client_PHP_Demo

Les sources du scripts sont disponible pour téléchargement client_v2

N’hésitez pas à laisser vos commentaires …

juil 26 2015

Créer un Web services SOAP avec C#.Net

A travers cet article, je vais vous présenter comment développer un WebService SOAP en C#.Net, ensuite dans d’autres articles je vais vous montrer comment consommer ce WS en C#.Net, PHP, Java, Windev et en Android.
Cependant, avant d’entrer dans le vif du sujet, je voudrais d’abord expliquer en quelques mots c’est quoi un WebService et c’est quoi SOAP.

  • Définition d’un Web Service

Un webservice c’est un programme informatique installé dans un serveur d’applications web qui permet de proposer une ou plusieurs fonctionnalités qui seront invoquées par un ou plusieurs consommateurs (clients).
Il s’agit d’une architecture orientée service permettant à des applications d’échanger directement entre elles sans se préoccuper des langages et des plates-formes sur lesquelles elles sont implémenté.

Les principaux avantages sont les suivants:

  1. Utilisation du protocole HTTP, la plupart des parefeux laissent passer les requêtes HTTP
  2. Intéropérabilité et l’indépendance vis-à-vis des langages et des plates-formes
  3. Protocoles d’échanges Standard et Ouvert (XML, HTTP, RPC)
  4. L’extensibilité
  • Définition SOAP

SOAP c’est l’acronyme de Service Oriented Architecture Protocol, c’est un protocole d’échange de données en XML et HTTP, il s’agit d’un  protocole d’échange de messages (requêtes) qui définit un ensemble de règles de codage XML.

Passons maintenant au développement du Web Services avec Visual Studio (Ma version c’est visual studio 2010 ultimate):

  1. Lancez un nouveau projet (File > New > Project…)
  2. Choisissez les options (Les différences options sont indiquées dans l’image suivante), puis validez par OK

WebService

Félicitation !, c’est bon votre Web Services presque prêt, il ne reste que quelques optimisations, le but c’est de rendre ce Web Services compatible avec les différentes API disponibles pour pouvoir développez des clients très rapidement, pour cela j’ai ajouté l’attribut [SoapRpcService] pour forcer le style RPC, j’ai également ajouté l’attribut [SoapRpcMethod()] pour la méthode HelloUser, ensuite j’ai basculé le [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1) vers [WebServiceBinding(ConformsTo = WsiProfiles.None)]

WebService_config

Avec ces petites modifications, notre Web Services est prêt, nous passons maintenant au déploiement sous IIS.
Ouvrez le menu contextuel du projet et choisissez propriétés, cliquez ensuite sur l’anglet Web, finissez par un clic sur le bouton Create Virtual Directory

WebService_install

Maintenant pensez a testez le Web Services via le navigateur dans un 1er temps, tapez le lien suivant dans votre navigateur http://localhost/DemoWebServices/DemoWebServices.asmx

WebService_Demo

Les sources sont disponible : DemoWebServices

La partie client (php, c#, java, WinDev et android) sera présentée dans des futurs articles

Si vous avez des questions, n’hésitez pas, laissez vos commentaires …

juil 04 2015

Réécriture d’urls wordpress sans www

Cet article montre comment configurer votre blog wordpress pour la réécriture d’urls sans www, l’objectif c’est d’éviter le « Duplicate Content ».
En fonction de la configuration de votre site, ce dernier peut être accessible via deux urls différentes :

  •  Via l’URL http://nouri-tawfik.com
  • Via l’URL http://www.nouri-tawfik.com

Cela ne pose pas de problème de fonctionnement ou de performance, mais cette configuration va poser des problèmes de ce qu’on appelle le « Duplicate Content ».
Et cela n’est pas très appréciée par les moteurs de recherche notamment Google, risque d’avoir un effet négatif sur l’indexation et l’apparition de votre site dans les résultats de recherche.

Pour remédier à ce problème, une première solution consiste à créer / modifier le fichier .htaccess et modifier l’URL de votre blog dans l’interface d’administration de wordpress.

Selon l’installation de votre blog, deux cas de figure possible :

  • Une installation dans la racine (/www)

Deux étapes a suivre, commencer par la modification de l’URL de votre blog via l’interface d’administration :

config-wp2

Pour accéder à l’interface de configuration, vous pouvez adapter l’url suivante http://exemple.com/wp-admin/options-general.php en fonction de votre nom du domaine.

La deuxième étape c’est la modification du fichier .htaccess, Voici à quoi ressemble le contenu du  fichier :

# BEGIN WordPress
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.nouri-tawfik\.com$ [NC]
RewriteRule ^(.*)$ http://nouri-tawfik.com/$1 [R=301,L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</ifmodule>
# END WordPress

  • Une installation dans un sous-répertoire  (/www/blog)

De la même façon, Deux étapes a suivre, commencer par la modification de l’URL de votre blog via l’interface d’administration :

config-wp1

Pour accéder à l’interface de configuration, vous pouvez adapter l’url suivante http://exemple.com/blog/wp-admin/options-general.php en fonction de votre nom du domaine.

La deuxième étape c’est la modification du fichier .htaccess, Voici à quoi ressemble le contenu du  fichier :

# BEGIN WordPress
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.nouri-tawfik\.com$ [NC]
RewriteRule ^(.*)$ http://nouri-tawfik.com/blog/$1 [R=301,L]
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</ifmodule>
# END WordPress

juil 03 2015

Développement Arduino avec Eclipse

Dans cet article je vous présente comment préparer un environnement de développement Arduino avec Eclipse

1 – Préparation des répertoires d’installations

L’ergonomie de l’environnement de travail est un facteur majeur de réussite pour les objectifs du programme.

  • Créez l’arborescence de répertoires suivante dans la racine de votre disque dur C:\ ou D:\

/!\ Je vous conseille vivement d’utilisez D:\ ou autre partition que C:\ /!\

Les répertoires indispensables :Arduino_Eclipse_Install_01

D:\01_Dev_Arduino\01_Outils\eclipse-cpp-helios-SR1
D:\01_Dev_Arduino\01_Outils\sdk_arduino-1.0.5-r2
D:\01_Dev_Arduino\02_Arduino_WorkSpace

Les répertoires optionnels :

D:\01_Dev_Arduino\03_Documents
D:\01_Dev_Arduino\04_Dépôt_Outils_Documents
D:\01_Dev_Arduino\05_Simulation_WorkSpace

2 – Installation de l’SDK Arduino

L’SDK Arduino contient tous les éléments qui permettront de construire un programme Arduino.

  • Téléchargez l’SDK Arduino

Lien téléchargement de l’SDK : http://arduino.cc/en/main/software

  • Installation

Une fois téléchargé, dézippez le dossier et copier le contenu dans :

D:\01_Dev_Arduino\01_Outils\sdk_arduino-1.0.5-r2

Attention, vous devez mettre à jour le nom du dossier (sdk_arduino) si vous n’utiliser pas la version 1.0.5-r2

Arduino_Eclipse_Install_02

3 – Installation driver USB/Série

La plateforme arduino équipé d’un adaptateur USB/Série

  • Connectez votre carte Arduino à votre ordinateur en utilisant votre câble USB

=> La LED verte d’alimentation devrait s’allumer.

  • Si vous connectez la carte à l’ordinateur pour la première fois, Windows devrait démarrer le processus d’installation du pilote.
    Les étapes à suivre pour Windows 7 :

– Aller dans Démarrer > Panneau de Configuration > Système > Gestionnaire de périphérique

– Aller dans Port Com et LPT > Repérer le port USB série > Clic droit > Mettre à jour le pilote

– Sélectionner le pilote dans le répertoire D:\01_Dev_Arduino\01_Outils\sdk_arduino-1.0.5-r2\drivers\FTDI USB Drivers

– Valider les différentes étapes.

Arduino_Eclipse_Install_03

4 – Installation Eclipse

Eclipse est un environnement de développement intégré libre extensible, universel et polyvalent.

  • Téléchargez Eclipse

Lien téléchargement Eclipse : eclipse-cpp-helios-SR1-win32.zip

  • Installation

Une fois téléchargé, dézippez le dossier et copier le contenu dans :

D:\01_Dev_Arduino\01_Outils\eclipse-cpp-helios-SR1

  • Lancez Eclipse

Si la JRE (Java Runtime Environment) n’est pas installé ou que c’est une version inférieure à JRE 1.6,ce message d’erreur peut apparaitre.

Arduino_Eclipse_Install_04

 La solution le plus simple pour cet problème, c’est d’ajouter le PATH pour la machine virtuelle, éditez le fichier D:\01_Dev_Arduino\01_Outils\eclipse-cpp-helios-SR1\eclipse.ini et ajoutez au début du fichier :

-vm
D:/01_Dev_Arduino/01_Outils/sdk_arduino-1.0.5-r2/java/bin

5 – Installation Plugin AVR pour Eclipse

Le Plugin AVR pour eclipse fournit des outils et des paramètres nécessaires pour le développement des programmes en C pour les microcontrôleurs ATMEL, il s’agit d’un projet open source avec une licence de logiciel libre compatible avec la GNU GPL.

  •  Lancez Eclipse, dans la barre de menu faites « Help -> Install New Software …»

La fenêtre «Install» apparait , faites « Add …» puis dans la fenêtre qui s’est ouverte :

– Entrez « AVR Eclipse Plugin » dans le champ « Name »

– Entrez « http://avr-eclipse.sourceforge.net/updatesite/ » dans le champ « Location »

– Cliquez « OK ».

Arduino_Eclipse_Install_05

Cochez la case  « AVR Eclipse Plugin », puis cliquez sur « Next »

Arduino_Eclipse_Install_06

– Cliquez sur « Next »

Arduino_Eclipse_Install_07

 – Acceptez la licence puis cliquez sur « Finish »

Arduino_Eclipse_Install_08

 – Cliquez sur « OK » pour l’alerte de sécurité

Arduino_Eclipse_Install_09

 – Cliquez sur « Yes » pour redémarrer Eclipse

Arduino_Eclipse_Install_10

La fenêtre «Workspace Launcher» apparait
Entrez D:\01_Dev_Arduino\02_Arduino_WorkSpace dans le champ  Workspace et cliquez sur « OK »

Arduino_Eclipse_Install_11

Désormais, le Plugin AVR est bien installé dans eclipse

Arduino_Eclipse_Install_12

6 – Configuration Plugin AVR pour Eclipse
  • Dans la barre de menu faites «Window -> Preferences -> AVR -> Paths»

=> La fenêtre «Preferences» apparait

– Set AVR-GCC to custom value D:\01_Dev_Arduino\01_Outils\sdk_arduino-1.0.5-r2\hardware\tools\avr\bin

– Set GNU make to custom value D:\01_Dev_Arduino\01_Outils\sdk_arduino-1.0.5-r2\hardware\tools\avr\utils\bin

– Set SVR-GCC to custom value D:\01_Dev_Arduino\01_Outils\sdk_arduino-1.0.5-r2\hardware\tools\avr\avr\include

– Set SVR-GCC to custom value D:\01_Dev_Arduino\01_Outils\sdk_arduino-1.0.5-r2\hardware\tools\avr\bin

Cliquer sur « Apply »

Arduino_Eclipse_Install_13

juin 17 2015

Bonjour tout le monde !

Proverbe Chinois

Si nous avons chacun un objet et que nous les échangeons, nous avons chacun un objet. Si nous avons chacun une idée et que nous les échangeons, nous avons chacun deux idées.