27 08 | 2011

Développer sur arduino avec cmake et votre éditeur favori

Rédigé par nicofonk

Classé dans : arduino

Récemment j'ai craqué pour le dernier module Arduino Ethernet. Pour le moment je n'ai aucun projet précis, je teste juste les exemples à droites et à gauches pour prendre en main l'environnement Arduino. Pour débuter j'ai commencé avec l'IDE fourni et la première chose qui m'est venu en tête c'est de trouver une alternative à cet éditeur. Comme solution j'ai trouvé le générateur de makefile cmake et vim pour éditeur. Vu la popularité d'arduino j'ai pas mis longtemps avant de trouver un projet libre nommé arduino-cmake.

arduino ethernet POE

Pour commencer, il faut installer les packages de base arduino, cmake et le gestionnaire de version git. J'ai également ajouté le groupe dialout à mon utilisateur pour avoir les droits en écritures sur mon module arduino via la liaison série /dev/ttyACM0. L'opération adduser réquière de relancer sa session.

apt-get install arduino-core cmake git
adduser $USER dialout

Maintenant vous pouvez récuperer arduino-cmake avec la commande ci-dessous. Copiez le répertoire cmake dans votre projet. Deux fichiers sont intéressants. L'Arduino.cmake indique les options de compiles. Et le second fichier FindArduino.cmake fait le lien avec votre version du SDK arduino, c'est lui qui propose les primitives pour générer vos librairies et firmwares arduino.

git clone https://github.com/queezythegreat/arduino-cmake.git

Pour mes projets arduino j'ai choisi l'arboresence ci-dessous. Celle-ci contient un répertoire build pour générer les makefiles, les librairies et exécutables. Le répertoire cmake du projet arduino-cmake et un répertoire src où l'on retrouve les sources et le makefile cmake CMakeLists.txt.

arborescence

Voici un exemple de CMakeLists.txt pour utiliser le projet arduino-cmake. Le nom de votre version de board peut être retrouver dans le fichier boards.txt dans le répertoire /usr/share/arduino/hardware/arduino. Votre sketch (source arduino) au format .pde doit être renommer en .cpp et inclure l'entête WProgram (#include "WProgram.h").

cmake_minimum_required(VERSION 2.8)

project(TestArduino C CXX)
find_package(Arduino 22 REQUIRED)

set(FIRMWARE_NAME start_guide) 
set(${FIRMWARE_NAME}_BOARD uno) # Arduino Target board
set(${FIRMWARE_NAME}_SRCS start_guide.cpp) # Firmware sources
set(${FIRMWARE_NAME}_PORT /dev/ttyACM0) # Serial upload port

generate_arduino_firmware(${FIRMWARE_NAME})

Une fois votre environnement en place passons à la compile. Il faut se positionner dans le répertoire build. Ensuite il faut générer les makefiles, la compilation et l'upload sur la carte arduino avec les commandes suivantes.

PATH_PROJECT=~/myproject
PATH_CMAKE=$PATH_PROJECT/cmake
PATH_SRC=$PATH_PROJECT/src
cmake -DCMAKE_MODULE_PATH=$PATH_CMAKE/modules \
	-DCMAKE_TOOLCHAIN_FILE=$PATH_CMAKE/toolchains/Arduino.cmake \
	$PATH_SRC
make
make upload

Sur ubuntu je sais pas pourquoi le SDK arduino contient un fichier main.cxx qui ne compile pas, car il n'inclut aucun header. Pour fixer ce problème il suffit de de supprimer la ligne #${LIB_PATH}/*.cxx dans le fichier FindArduino.cmake.

Si votre programme utilise la liaison série et que vous ne souhaitez pas utiliser la console série de l'IDE plusieurs alternatives existes aussi. Dans mon cas j'ai choisi d'utiliser un terminal avec les commandes stty pour la configuration et cat pour lire les entrées sur la voie série.

stty 9600 < /dev/ttyACM0
cat /dev/ttyACM0

Pour que cet environnement de travail soit parfait il faut encore élliminer 2 problèmes que je n'ai pas encore résolu. Le premier problème il faudrait apporter une fonctionnalité à arduino-cmake pour pouvoir choisir les fichiers nécessaires à la construction de la librairie core-arduino pour optimiser au mieux la taille du binaire en sortie. Actuellement, on se retrouve avec un binaire qui inclu la totalité de la librairie core avec des fonctionnalité que vous n'utilisez pas. Tant que vous avez de la place pas de problème sinon il y a moyen de gagner quelques octets de ce côté. L'autre problème qui me gène plus c'est les warnings présents lors de la phase de compile. Un warning provient de cmake avec  dpkg-architecture que je ne comprends pas trés bien et les autres warnings proviennent directement du SDK arduino. Hormis ces légers problèmes cet environnement est pleinement fonctionnel,  maintenant il reste plus qu'a être créatif.

sources :

10 08 | 2011

Mon home cinéma HD avec Ubuntu, ma Revolution et ma PS3

Rédigé par nicofonk

Classé dans : debian/ubuntu

Quel est l’intérêt à présent d'avoir son PC connecté à sa TV quand on a une Freebox révolution qui sait tout faire? Bêtement je vous répondrai esprit geek oblige ou plutôt question d'habitude. Souvenez vous des premiers divx diffusés sur votre bonne vieille télé à l'aide de votre PC et de votre connectique à base de péritel. A présent place à la HD et aux boiboites qui veulent remplacer vos PC. Dans cet article, je vais vous présenter ma configuration, comment je l'utilise et je finirai par les améliorations futures.

Configuration

home cinema

  • TV samsung led UE32B6000 : qui fait un bruit aléatoire... mais l'image est niquel

  • Ampli Onkyo TX-SR507 : rien à reprocher

  • PS3 Fat  : qui ventile bruyamment

  • Freebox Revolution : quelques bugs de jeunesse

  • PC Fixe (Ubuntu 11.04 - Gnome 2.32) : Intel Core2 Duo E6550  @ 2.33GHz - Nvidia GeForce 8600 GT - 2Go de RAM

La configuration de la PS3 et de la Freebox ne pose pas de problème, par contre pour le PC fixe avec ubuntu plusieurs prérequis sont nécessaires.

Pour pouvoir profiter pleinement de sa carte graphique et de la HD sous un système linux, il faut obligatoirement une carte graphique compatible HD et les drivers proprios afin de profiter du GPU de celle-ci (VDPAU pour nvidia). Ensuite il faut configurer votre PC avec deux écrans. Dans mon cas j'ai un écran primaire avec une résolution de 1680x1050 et le secondaire (la TV) en 1920x1080. Du coup premier problème, il faut jouer avec les propriétés de nvidia car la TV est tronquée sur le haut et le bas. Pour solutionner le problème, il faut jouer avec l'overscan compensation de l'outil de configuration nvidia.

Pour le lecteur vidéo j'ai opté pour mplayer avec la surcouche graphique SMPlayer. Il faut bien régler SMPlayer pour qu'il utilise bien le GPU de la carte graphique et configurer l'audio pour obtenir le Dolby Digital et DTS sur votre ampli (configuration en détail). Par défaut je lance la vidéo sur mon écran TV en plein écran et je peux controler celle-ci avec l'interface de SMPlayer sur mon écran PC. Pour ce faire rendez-vous dans Options > préférences dans l'onglet Avancé et faite ceci :

  • Dans l'onglet "Avancé" cochez "Lancer mplayer dans sa propre fenetre"
  • Dans l'onglet "Options pour MPlayer" saisir dans le champ Options : -xineramascreen 1 -fs

Dernier point de configuration si vous avez des saccades horizontales lors de la vision de vos vidéos, il faut désactiver les effets visuels et virer l'option composite nvidia :

sudo nvidia-xconfig --no-composite

Utilisation

  • la PS3 me sert uniquement pour le jeu

  • la Freebox pour regarder la TV, les Blu-Rays

  • le PC pour les séries et les films sans supports physiques

Je lis mes Blu-Rays avec la Freebox à présent car elle gère l'audio en DTS HD, contrairement à la PS3 version FAT. Et  la PS3 pour mater un film ça devient mission impossible vu le bruit du ventilo! Pour les films sans supports physiques je pourrai trés bien les lire avec la Freebox mais c'est plutôt par flem de devoir transférer les vidéos de mon PC à la Freebox. Je pense que j'utiliserai la Freebox bientôt dans ce cadre quand la fonction vidéo sera compatible avec le Dolby et DTS HD, mais à l'heure actuelle ce n'est pas possible, il faut que free solutionne le problème.

Améliorations

Aujourd'hui cette solution me convient parfaitement mais il est toujours possible d'apporter quelques améliorations. Avec la Freebox je pourrai profiter des protocoles UPNP et DLNA en installant une solution du type XBMC pour tout piloter via la télécommande mais il faut que le PC reste allumé donc double usage. Je pensais aussi réduire le nombre de télécommandes avec le protocole HDMI CEC mais ma TV et mon ampli ne sont pas compatibles car le service CEC Anymet+ de Samsung fonctionne uniquement avec les produits de la marque !! Côté PC il me manque encore la possibilité d'obtenir en sortie, les sources audios HD car ma carte graphique n'a pas de sortie HDMI et le câble optique ne véhicule pas l'audio HD. Il faudrait que j'investisse ou récupére une carte graphique avec une sortie HDMI. Par contre le point que je souhaiterai vraiment améliorer c'est l'audio. Je ne l'ai pas évoqué mais je suis équipé d'un ensemble 5.0 JVC qui me fait pas rêver alors qu'un ensemble d'enceintes Focal... mais nous sommes en août et je viens de recevoir ma fiche d’impôt !!

Pour conclure j'ai un ensemble home ciné qui me convient. Je peux à peut prêt faire la même chose avec chacun de mes périphériques mais j'ai une préférence pour mon PC Linux. Il gére facilement tous les formats de vidéos, et la mise en place du lancement d'un film se fait moyennant quelques clics. En plus il est hautement configurable et correpondra toujours à mon besoin. Le top à présent serait de pouvoir lancer ces vidéos à partir de son iPhone/gPhone, actuellement je n'ai pas de solution mais j'y travaille.

11 05 | 2011

Accès total aux paquets Debian en local

Rédigé par nicofonk

Classé dans : debian/ubuntu

Voici une méthode pour avoir accès à la totalité des paquets debian en local quand vous êtes contraint à être coupé du monde (web). Ce tuto a été appliqué sur une debian squeeze.

debian6

Tout d'abord il faut récupérer les 9 dvds de la distribution. Dans mon cas j'ai placé les isos dans le répertoire /opt/debian6/iso et j'ai créé les répertoires 1 à 9 dans /opt/debian6/ pour monter les isos des paquets.

Les opérations suivantes requières les droits root.

Pour monter les dvds automatiquement, il faut ajouter les lignes suivantes dans le fichier /etc/fstab :

# mount iso debian
/opt/debian6/iso/debian-6.0.1a-i386-DVD-1.iso /opt/debian6/1 iso9660 user,loop 0 0
/opt/debian6/iso/debian-6.0.1a-i386-DVD-2.iso /opt/debian6/2 iso9660 user,loop 0 0
/opt/debian6/iso/debian-6.0.1a-i386-DVD-3.iso /opt/debian6/3 iso9660 user,loop 0 0
/opt/debian6/iso/debian-6.0.1a-i386-DVD-4.iso /opt/debian6/4 iso9660 user,loop 0 0
/opt/debian6/iso/debian-6.0.1a-i386-DVD-5.iso /opt/debian6/5 iso9660 user,loop 0 0
/opt/debian6/iso/debian-6.0.1a-i386-DVD-6.iso /opt/debian6/6 iso9660 user,loop 0 0
/opt/debian6/iso/debian-6.0.1a-i386-DVD-7.iso /opt/debian6/7 iso9660 user,loop 0 0
/opt/debian6/iso/debian-6.0.1a-i386-DVD-8.iso /opt/debian6/8 iso9660 user,loop 0 0
/opt/debian6/iso/debian-update-6.0.1a-i386-DVD-1.iso /opt/debian6/9 iso9660 user,loop 0 0

A présent vous pouvez monter les dvds avec la commande mount -a. Tous les dvds sont montés sauf le neuvième car par défaut debian gére au maximum 8 points de montage loop. Pour régler ce probléme il faut créer le fichier loop et spécifier plus de point de montage avec la commande suivante :

echo "options loop max_loop=16" > /etc/modprobe.d/loop

Pour que cette option soit prise en compte, il faut rédémarrer le système.

Pour finir, il faut ajouter les dvds au gestionnaire de paquet dans le fichier /etc/apt/sources.list :

# add local packages
deb file:/opt/debian6/1 squeeze contrib main
deb file:/opt/debian6/2 squeeze contrib main
deb file:/opt/debian6/3 squeeze contrib main
deb file:/opt/debian6/4 squeeze contrib main
deb file:/opt/debian6/5 squeeze contrib main
deb file:/opt/debian6/6 squeeze contrib main
deb file:/opt/debian6/7 squeeze contrib main
deb file:/opt/debian6/8 squeeze contrib main
deb file:/opt/debian6/9 squeeze contrib main

A présent, il ne vous reste plus qu'a faire un apt-get update et de profiter des 29050 paquets disponibles sans accés web.

08 01 | 2011

Réparation d'une panne de rétro éclairage d'un PC portable

Rédigé par nicofonk

Classé dans : réparation

Dernièrement j'ai récupéré le pc portable de mes parents un Fujitsu Siemens amilo L1300 en panne. Le portable avait un problème au niveau du rétro-éclairage de la dalle LCD. Les symptômes : le pc démarre normalement mais l'affichage est extrêmement sombre, tellement qu'il est inutilisable. Au travers de cet article, je vais vous décrire la démarche à suivre pour réparer ce genre de problème.

amilo l1300

Tout d'abord, il faut savoir qu'un écran LCD est illuminé par l'intermédiaire d'un néon. Typiquement sur un pc portable le néon est alimenté par l'inverter comme décrit sur le schéma ci-dessous. Grossièrement, nous avons le 220V pour alimenter le PC, ensuite l'inverter va convertir le courant d'entré vers un courant correspondant à l'alimentation du néon.

sch_inverter_neon

Dans un premier temps il faut démonter son pc portable et tester si l'inverter fourni une tension de sortie avec un multimètre. Si aucune tension n'est présente il faut remplacer l'inverter . Dans l'autre cas l'inverter fonctionne donc il faut investiguer au niveau du néon, pour cela il faut démonter le bas de la dalle LCD. Puis vérifier la liaison entre l'inverter et le néon . Si la connectique entre ces deux composants vous semble ok alors votre néon est HS et il faut le remplacer (cf. HOW-TO).

En suivant les différents conseils sur les forums, j'ai commandé inutilement 2 composants aux US. Alors qu'il aurai été plus judicieux de démonter le PC et de le tester au fur et à mesure. La panne dépendait simplement d'une soudure qui avait lâché. Si vous êtes confrontés à un de ces cas de panne, je vous conseille PCHUB et LCDPARTS basé aux US, tous les deux spécialisés dans les pièces détachées pour PC portable et écran lcd. Le prix est 2 à 3 fois moins cher qu'un revendeur français. J'espère que ce retour d'expérience évitera à certain de commander des composants pour rien et de guider certain dans la réparation de leurs matos.

10 11 | 2010

Installation de django CMS

Rédigé par nicofonk

Classé dans : django, debian/ubuntu

Sur ma lancée d'initiation avec le framework web django j'ai voulu tester un CMS . Actuellement, c'est le mot à la mode lorsqu'on parle de web. Donc, par curiosité, j'ai voulu tester un CMS en tant qu'application Django. Après quelques recherches, le CMS qui m'a semblé le plus mature actuellement dans le monde django, est django CMS.

Django_cms_logo_svg.png

Dans un premier temps, cet article décrit comment mettre en place l'environnement nécessaire pour installer l'application Django CMS. Un second article viendra, pour voir ce que l'on peut tirer de cette application CMS, afin de voir si elle va nous simplifier la vie. Dans cet article nous allons installer l'environnement nécessaire pour faire fonctionner django CMS 2.0.2.

Fixer l'environnement

Attention, cet article utilise les versions suivantes des outils utilisés pour ce tuto (Ubuntu/Debian, Python 2.6, Django 1.1.2, Django CMS 2.0.2, Postgres 8.4)

Installation de virtualenv, de la base de donnée postgres et des paquets de dev python et postgres.

sudo apt-get install python-virtualenv postgresql python-dev libpq-dev

Créer l'environnement applicatif djangocmstest avec vitualenv et se positionner dedans.

virtualenv --distribute --no-site-packages djangocmstest
cd djangocmstest

Activation de l'environnement, deactivate pour en sortir.

source bin/activate

Installation de Django, Django CMS, l'API pour la base de donnée psycopg2, PIL et egenix pour faire rouler Django.

pip install http://www.djangoproject.com/download/1.1.2/tarball/ http://github.com/divio/django-cms/zipball/2.0.2 PIL psycopg2
easy_install -i http://downloads.egenix.com/python/index/ucs4/ egenix-mx-base

Création de la base de donnée

Attention, ci dessous les étapes pour créer l'utilisateur et la base de donnée, pour plus infos sur la configuration de postgres consulter le wiki ubuntu

Accès en root à postgres et accès au shell postgres.

sudo -s -u postgres
psql

Ici, nous allons créer votre nom d'utilisateur avec son password associé et la base de donnée. Nommer la base "djangocms".

CREATE USER <nom_utilisateur> ;
ALTER ROLE <nom_utilisateur> WITH CREATEDB;
CREATE DATABASE  <nom_base> OWNER <nom_utilisateur> ;
ALTER USER <nom_utilisateur> WITH ENCRYPTED PASSWORD '<mot_de_passe>';

Création et configuration du projet Django mycms

Créer le projet et se positionner dedans.

django-admin.py startproject mycms
cd mycms

Remplacer les fichiers settings.py et urls.py. Saisissez le nom d'utilisateur de la base de donnée et le password dans le fichier settings.py. Lancer la synchronisation entre django et la base de donnée avec la commande ci-dessous. Pour créer le compte admin, il faut  saisir yes , et les informations (login, mail, password).

python manage.py syncdb

Dernière modif car rien n'est parfait, pour que le tout soit fonctionnel, il faut patcher le fichier ~/djangocmstest/lib/python2.X/site-packages/cms/admin/pageadmin.py de django CMS à la ligne 59.

-exclude = ['created_by', 'changed_by', 'lft', 'rght', 'tree_id', 'level']
+exclude = []

Lancement de Django CMS

Lancement du serveur django.

python manage.py runserver 8080

Accès à la page web via http://localhost:8080

Si vous avez le même résultat que le screenshot ci-dessus c'est que tout c'est bien passé. Une fois le CMS mis en place, c'est bien beau mais il faut l'exploiter. La suite dans un prochain article ou sur django-cms.org.

 

page 1 sur 2suivante

Catégories

Archives