1. Lecture de la température du rfm22 du Chistera Pi (en python)

    J'ai depuis quelque temps deux Raspberry Pi équipés de "HAT" Chistera Pi 1.2 qui trainent sur mon bureau (dont l'un m'est gentiment prêté par le FAI (neutre et) associatif toulousain Tétaneutral.net, dont je suis adhérent). Le Chistera Pi, attention au jeu de mots, est une petite carte que l'on branche sur un Raspberry Pi. Elle contient simplement deux puces radio : une RFM22 et une RFM95 (attention il existe deux versions de ChisteraPi, la 1.2 avec un RFM95 et la 1.1 avec un RFM69HCW). À noter surtout que la RFM95 gère la modulation LoRa. Il faudra que je trouve un peu de temps pour jouer avec des liens longue distance LoRa, et poster des articles qui suivent ces expérimentations...

    Un ChisteraPi avec ces deux antennes

    Pour une première prise en main de tout ça je renvoie aux tutos proposés par Snootlab (ah oui j'ai oublié : les Chistera Pi proviennent de cette très chouette startup toulousaine). Certainement d'autres tutos devraient arriver bientôt dans ce forum.

    L'idée de ce petit article est d'explorer rapidement comment on peut controler ces deux puces radio depuis le Raspberry Pi (avec du code en Python). Et ce en prenant pour prétexte d'aller lire la température du RFM22. En effet le RFM22 possède un capteur de température intégré !

    read more ...
  2. Exploration des "sleep mode" du attiny85

    Trois petits attiny85

    Le attiny85 est un tout petit microcontrôleur de Atmel, disponible en boitier DIP8. Il a donc juste 6 GPIO. Il coute moins de 2€. Bref c'est un microcontrôleur assez chouette pour de petits projets, ou en complément pour décharger un microcontrôleur principal.

    Pinout du attiny85 par www.pighixxx.com

    Ce n'est pas l'objet de cet article, mais il est possible de le programmer avec l'IDE Arduino. Nous utiliserons l'IDE (surtout le framework Arduino) ici par souci d'accessibilité. Toutesfois ce que nous allons voir ici ne dépend absolument pas du framework Arduino et est donc utilisable en dehors de celui-ci (programmer un microcontrôleur atmel en dehors du framework Arduino pourrait faire l'objet d'un article futur...).

    Nous allons donc explorer, en partie, comment réduire la consommation électrique d'un attiny85. L'idée que j'ai derrière la tête est de faire un mottage minimal avec un attiny85 (sur batterie) avec un transmetteur ASK 433Mhz.

    read more ...
  3. Ajouter un décodeur ASK à rtl_433

    L'objectif de ce post est de modifier étape par étape le logiciel rtl_433 pour lui faire décoder (avec une clé rtl-sdr) un signal radio émit par un transmetteur ASK 433mhz lowcost (ou encore) connecté a un Arduino et contrôlé par la bibliothèque radiohead.

    Note: le décodeur issu de ce post a été intégré a rtl_433, voir le PR associé. L'idée est donc de voir la méthode : comment ajouter un décodeur à rtl_433 ?

    Montage de test

    La première étape est de brancher un Arduino et un transmetteur radio ASK. Le montage n'est pas vraiment complexe :

    Cablage ultra simple de l'arduino et du module ASK

    À noter, pour fabriquer une antenne 433Mhz peu encombrante : 27cm de fil rigide enroulé sur une mèche de 9 (merci @guerby !).

    read more ...
  4. Recycler une dalle de portable en cadre-écran

    Un "cadre-écran" pour pas très cher

    Voici un petit cadre-écran que j'ai réalisé avec un cadre photo et une vieille dalle d'ordinateur portable. Je m'en sers d'écran de contrôle d'un petit media-center OSMC qui tourne sur un Raspberry Pi. Un séparateur HDMI me permet de brancher un vidéoprojecteur au besoin.

    Il est possible de recycler en écran "autonome" la plupart des dalles de laptop. Il faut pour cela une carte de contrôle de la dalle, ça se trouve sur ebay ou aliexpress (ou autre...). Il faut fouiller un peu pour trouver une carte qui convient avec sa dalle (bien vérifier les références). Il ne faut pas hésiter à contacter les vendeurs, et dans tous les cas attentionnés de bien indiquer au vendeur la référence de la dalle au moment de la commande.

    Voici donc les éléments nécessaires:

    • Dalle LCD, a démonté sur un vieux laptop,
    • Carte de contrôle,
    • Cadre photo assez grand (attention a la profondeur dernière la photo, il faut la place pour la carte de contrôle...),
    • Passepartout sur mesure, il existe des tas de sites qui proposent ça pour pas très cher.
    read more ...
  5. Mesurer la vitesse du vent avec des capteurs ultrason

    Un petit SR04 pour mesurer la vitesse du vent

    Voici un mini compte-rendu d'une petite expérimentation de la semaine dernière. C'est mon génial physicien de frangin qui m'a parlé d'une méthode pour mesurer la vitesse (et direction !) du vent (c'est à dire de l'air) avec des capteurs ultra-son... L'idée est de mesurer la vitesse de propagation d'un (ultra) son entre deux points, dans un sens puis dans l'autre. Le son étant porté par l'air, s'il va plus vite de A vers B que de B vers A, alors l'air est en mouvement de A vers B !

    En deux équations c'est presque plus clair. Dans un mode à une dimension, on note:

    • \(c\): la vitesse du son dans l'air (immobile),
    • \(v\): la vitesse de l'air (positif dans le sens A vers B),
    • \(d_{AB}\): la distance entre A et B;

    Alors on peut calculer le temps de propagation de A vers B (\(t_{A \rightarrow B}\)) et de B vers A (\(t_{B \rightarrow A}\)):

    \begin{align} t_{A \rightarrow B} &= \frac{d_{AB}}{c + v} \\ t_{B \rightarrow A} &= \frac{d_{AB}}{c - v} \end{align}

    Il est facile de combiner ces équations pour avoir \(c\) et \(v\):

    \begin{align} c &= \frac{d_{AB}}{2} ( \frac{1}{t_{A \rightarrow B}} + \frac{1}{t_{B \rightarrow A}} ) \\ v &= \frac{d_{AB}}{2} ( \frac{1}{t_{A \rightarrow B}} - \frac{1}{t_{B \rightarrow A}} ) \\ \end{align}

    Donc, on met deux capteurs ultrason l'un en face de l'autre, on mesure \(t_{A \rightarrow B}\) et \(t_{B \rightarrow A}\) et on a la vitesse du vent !

    Voici ce que ça donne dans une petite mise en place quick&dirty:

    Au début, ventilateur éteint, on mesure un \(v\) entre \(0.15\) m/s et ...

    read more ...
  6. Emuler un Raspberry Pi avec QEMU

    Voici quelques notes sur comment émuler un RaspberryPi sur un linux "classique". Ca peut-être intéressant pour préparer/configurer une image pour un Raspberry quand on n’en a pas un sous la main.

    QEmu permet de faire tourner un Raspberry Pi virtuel

    Installer QEmu

    C'est QEmu qui va faire le job de virtualisation. Tout simple à installer sous Ubuntu (pour les autres distribs je vous laisse vous débrouiller):

    $ sudo apt-get install qemu-system-arm
    

    Préparer une image de Raspbian (ici minibianpi)

    Seconde étape : télécharger et légèrement modifier une image Rasbian. J'utilise Minibian qui est une version light de raspbian (pas de serveur X, vraiment le minimal, sachant que tout est installable ensuite à coup d'apt-get).

    Pour télécharger la dernière version, c'est par ici: https://minibianpi.wordpress.com/download/

    Il faut ensuite faire quelques changements dans l'image. Le plus simple est de la monter dans le système de fichier. Comme l'image contient deux partitions, il faut préciser un offset à la commande mount. Voici la méthode (source).

    On commence par repérer quelles sont les partitions et où elles démarrent:

    $ fdisk -l  2015-11-12-jessie-minibian.img
    
    Disque 2015-11-12-jessie-minibian.img : 832 Mo, 832569344 octets
    255 têtes, 63 secteurs/piste, 101 cylindres, total 1626112 secteurs
    Unités = secteurs de 1 * 512 = 512 octets
    Taille de secteur (logique / physique) : 512 octets / 512 octets
    taille d'E/S (minimale / optimale) : 512 octets / 512 octets
    Identifiant de disque : 0x00000000
    
                     Périphérique Amorçage  Début         Fin      Blocs    Id. Système
    2015-11-12-jessie-minibian.img1              16      125055       62520    b  W95 FAT32
    2015-11-12-jessie-minibian.img2          125056     1626112      750528+  83  Linux
    

    La partition qui nous intéresse ici est la seconde (2015-11-12-jessie-minibian.img2), c'est la partition principale. Elle démarre sur le secteur 125056.

    Une fois que l'on a cette info, voici la commande pour la monter:

    $ mkdir minibian
    $ sudo mount -v -o offset=$((512*125056)) -t ext4 2015-11-12-jessie-minibian.img ./rasbian/
    

    On peut ensuite aller ...

    read more ...
  7. Raspberry-pi : connection 3G et envoi de SMS (en même temps)

    RaspberryPi avec une clé 3G

    J'ai en tête depuis un moment de mettre en place un système de "rescue" sur mon réseau à la maison. L'idée est d'avoir un rPi avec une clé 3G qui permette d'envoyer des SMS en cas de problème (coupure d'électricité, connection ADSL down, etc...) et un acces internet indépendant de l'acces ADSL principal (pour venir voir de l'exterieur, ou sortir sur les internets de la maison si l'ADSL est down).

    Pour faire ca, la première étape est de trouver une clé 3G et une carte SIM avec un petit forfait (idéalement SMS illimité, et un peu de data, avec la possibilité de prendre plus de data occasionelement). Ensuite il faut configurer tout ca pour pouvoir envoyer des sms (avec gammu-smsd) et maintenir la connection 3G (qui fait passer surtout un lien VPN). Ce post présente une partie du setup.

    Configuration de la clé 3G (modeswitch)

    Première chose à faire : faire marcher ca clé 3G sur le raspberry Pi... Il peut-être utile de consulter cette liste de clés supportées.

    J'utilise une clé alcatel X500D qui fonctionne out of the box (bien que non présent dans la liste sur elinux.org). La principale difficulté avec ce genre de périphérique est de les faire switcher en mode "modem", car par défaut ils se présentent comme de lecteurs de CD-Rom (avec les drivers dedans... pour windows).

    Attention à l'allimentation: les clé 3G on tendance à consomer pas mal... Ma clé X500D fini par faire freezer completement le rPi (B+) à priori à cause d'un pb d'allimentation insifisante. Avec un allimentation USB dédié pour la clé il semble ne plus y avoir de problème. Sinon ca marche avec une (seule) allimentation 2A et en configurant max_usb_current=1 dans /boot/config.txt.

    Il est ...

    read more ...
  8. Jouer avec une clé "RTLSDR"

    Clé RTL-SDR branché sur un raspberry pi 2

    Voici quelques notes pour jouer, sous linux (ubuntu), avec une clé DVB-T Realtek RTL2832U (vulgairement une clé RTLSDR). J'indique aussi quelques liens vers des tutoriels et cours plus approfondis sur la radio logicielle.

    La clé USB dite "RTLSDR" est conçue pour recevoir la TNT... Seulement le décodage de la TNT est fait coté logiciel, le hardware de la radio est donc "générique". Il peut en effet être utilisé pour recevoir n'importe quel signal radio (entre 52 et 2200 MHz) ! La clé est donc une petite carte bon marché (~10€!) pour faire de la radio logicielle (ou SDR pour Software Defined Radio).

    Voyons comment on peux jouer avec...

    Instalation des bibliothèques et drivers

    Pour installer les soft de base, le packaging dans ubuntu 14.04 est nickel, c'est donc super simple :

    $ sudo apt-get install rtl-sdr
    

    Il faut juste blacklister le driver par defaut fait pour décoder la TNT... Pour ca, dans un fichier /etc/modprobe.d/rtlsdr.conf ajouter juste une ligne :

    blacklist dvb_usb_rtl28xxu
    

    Ensuite soit on reboot pour prendre en compte la modif, soit on débranche à la main ce driver avec :

    $ sudo rmmod dvb_usb_rtl28xxu
    

    Ensuite quand on branche la clé on doit voir ca dans les log système :

    $ dmesg | tail
    [1642140.651167] usb 5-1: New USB device found, idVendor=0bda, idProduct=2838
    [1642140.651183] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [1642140.651192] usb 5-1: Product: RTL2838UHIDIR
    [1642140.651200] usb 5-1: Manufacturer: Realtek
    [1642140.651207] usb 5-1: SerialNumber: 00000001
    

    Pour tester que tout va bien :

    $ rtl_test
    Found 1 device(s):
      0:  Generic RTL2832U OEM
    
    Using device 0: Generic RTL2832U OEM
    Found Rafael Micro R820T tuner
    Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 ...
    read more ...
  9. Comment changer son email dans l'historique des commits git ?

    Je me rend compte que mon email était mal configuré depuis pas mal de temps dans mon .gitconfig. Juste une coquille à la con. Voici apres quelques recherche et tests comment j'ai réussi à changer mon email dans l'historique:

    $ git filter-branch --commit-filter '
          if [ "$GIT_AUTHOR_EMAIL" = "old_email@provider.com" ];
          then
                  GIT_AUTHOR_NAME="NEW NAME";
                  GIT_AUTHOR_EMAIL="new_email@provider.com";
                  GIT_COMMITTER_NAME="NEW NAME";
                  GIT_COMMITTER_EMAIL="new_email@provider.com";
                  git commit-tree "$@";
          else
                  git commit-tree "$@";
          fi' -- --all
    

    Et ensuite, si tout va bien :

    $ rm -r .git/refs/original
    

    Pour pousser tout ca sur un depot remote il faut ajouter un '-f' :

    $ git push -f
    

    Source sur stackoverflow.

    read more ...
  10. Récuperer le binaire d'un arduino (avec un programmeur MkII)

    Arduino fait maison avec le MkII

    Je m'occupe en se moment de mettre à jour un projet a base de cartes arduino "fait maison" (en gros un atmega328 sur une Stripboard). Le projet en question, en deux mots, c'est une petite poubelle qui "parle", télécommandée. C'est pour un spectacle. C'est un projet que j'ai fait pour un amis il y a quelques temps maintenant...

    J'ai bien gardé toutes les sources, mais impossible de retrouver les bibliothèques que j'utilisais à l'époque... Je ne peux donc plus recompiler en l'état. Rien de très grave, je vais pouvoir remplacer ces bibliothèques facilement. Mais quand même, le code actuel fonctionne bien. Je ne voulais pas prendre le risque de tester un nouveau code sans être capable de revenir (en cas de besoin) à cette version.

    Voici donc quelques notes sur comment télécharger (ou lire) le code (binaire) qui tourne sur un arduino, à l'aide d'un programmeur MkII).

    C'est très simple :

    $ avrdude -v -p atmega328 -c stk500v2 -P usb -U flash:r:./THE_FW.hex:i
    

    Note: j'utilise atmega328 et non atmega328p car me cartes n'utilise pas exactement le même atmega que les Arduino.

    Ensuite si l'on veux re-uploader ca sur le proc:

    $ avrdude -v -p atmega328 -c stk500v2 -P usb -U flash:w:THE_FW.hex:i
    

    La doc des options de avrdude est disponible ici.

    read more ...
  11. Petite lib python pour connecter la maison

    Ou comment connecter entre eux objets (capteurs et actioneurs) et bases de données... Voici un petit post pour présenter gsensors, une petite bibliothèque de glue en Python à base de gevent pour brancher entre eux capteurs, actioneurs et bases de données.

    Attention: tout cela est "en construction", l'idée est juste de partager mon experience de bidouillage (du dimanche) avec de "l'internet des objets". Peut-être cette bibliothèque peut vous être utile aussi, mais dans tous les casce n'est pas une solution magique et clés-en-main...

    Une libellule connectée

    Bref, je commence à mettre des capteurs dans ma maison : temperature/humidité, consomation électrique, etc. Je tatonnne aussi sur quelques "actionneurs". Pour le moment en plus d'un CurrentCost, de quelques multiprises mPower, j'ai recyclé une libellule (voir photo) avec un ESP8266 : elle gère un bouton pousoir, mesure la temperature et peut s'allumer ou s'etteindre, le tout en MQTT par wifi (post à venir la dessus).

    Pour "brancher" entre eux tout ces objets et socker les données, je ne me voyais pas utiliser une "grosse" solution existante clé en main (type domoticz ou mFi®Controller). D'une part le hardware que j'utilise est vraiment hétérogène (je fait avec ce que j'ai...), et ensuite j'ai vraiment envie d'expérimenter plein de choses simples qui ne le restent pas forcément quant on doit s'intégrer à un soft qui n'a pas été prévu tout à fait pour ca... Je préfaire m'appuyer sur différents logiciels (influxDB, grafana, MQTT, etc.) et gérer "la glue" directement à la main avec un petit lot de scripts Python qui font chacun une tache précise. J'ai commencer gsensors pour avoir une bibliothèque qui simplifie (et factorise) la rédation de ces scripts.

    Pour donnée une idée, j'ai pour le moment trois scripts : l ...

    read more ...
  12. Petit routeur avec batterie incluse : UPS et passerelle WiFi pour RaspberryPi

    Le petit routeur "3G"

    Je cherche depuis un moment une batterie USB (PowerBank) qui permette de faire un mini UPS (Uninterruptible Power Supply) pour un Raspberry Pi. L'idée est de brancher la batterie sur le secteur (pour la charger) et en même temps d'alimenter le rPi. Ainsi s’il y a une coupure de courant le rPi est toujours alimenté par la batterie.

    Il y a deux problèmes potentiels avec cette solution : il faut que la batterie puisse être chargé en même temps qu'elle fournit de l'énergie (au rPi) et surtout il faut qu'elle ne coupe pas la sortie lorsque l'alimentation secteur disparait ou réapparait. En effet, j'ai pu tester plusieurs batteries qui coupent un court instant la sortie lorsqu'on les branche ou débranche du secteur... Cela provoque un redémarrage brutal du rPi. Pas génial.

    Après pas mal de recherche sur différents forums, je suis tombé sur ces petits routeurs dits "3G" (cf image). Ce sont des mini routeurs avec une batterie intégrée. L'usage de base est de brancher dessus une clé 3G, le routeur se charge ensuite de partager la connexion en WiFi ou en Ethernet. Ce qui m'intéressait au début était donc surtout la batterie : plusieurs personnes indiquaient qu'il n'y avait pas de coupures en cas de plug/unplug du secteur. Donc ça peut fonctionner comme UPS pour rPi. En bonus on a une carte avec un SoC RT5350F avec du WiFi, de l'Ethernet et une prise USB... Et on va le voir ici, il est possible d'installer OpenWRT dessus !

    Point galère : il existe des tas de clones (sur ebay, amazon, et autres) de ces cartes. Certains n'ont que 16M de RAM (ce qui limite pas mal l'usage avec OpenWRT). Toutes n'ont pas câblé de ...

    read more ...