Courbe du header
  • Logo de maison 70 Rue de la République
  • Logo de courier hello@reactic.io
  • Logo de téléphone
    • 06 76 44 42 18
    • 06 59 69 32 12
Accueil > Nouvelles technologies > Lifi > Li-Fi et Visible Light Communication : Transférer des données au travers de la lumière visible

Li-Fi et Visible Light Communication : Transférer des données au travers de la lumière visible

Usage de la technologie visible light communication dans un batiment connecté

Publié par Nicolas Facciolo Le 31 janvier 2020

Cet article est une mise en pratique de la documentation originale d'openVLC.

L'objectif sera de créer un système de communication permettant d'envoyer une chaîne de caractère sous forme de JSON au travers de la lumière visible à partir d'un éméteur Li-Fi VLC et vers un recepteur Li-Fi VLC.

De façon générale, une fois cet objectif atteint, il sera possible de communiquer tout modèle de données au travers de la lumière. Vous pourrez donc donner libre cours à votre imagination.

Pour réussir cet objectif vous allez devoir :

  1. Flasher un Beaglebone
  2. Réaliser une configuration commune à l’émetteur et recepteur Li-Fi VLC (TX et RX)
  3. Configurer un émetteur Li-Fi VLC (TX)
  4. Configurer un récepteur Li-Fi VLC (RX)
  5. Pour aller plus loin

Juste avant de commencer voici quelques notions et définitions importantes afin de savoir ce qu'est le Li-Fi et la communication visible par la lumière et contrairement à beaucoup d'idée reçues, il ne s'agit pas de Li-Fi

Lumière
La lumière est une onde éléctromagnétique donc la longueur est comprise entre 1 nm et 1 mm.
Li-Fi
Le Li-Fi est une technologie de communication utilisant la lumière. La lumière étant une onde dont la longueur est comprise entre 1 nm et 1 mm donc le Lifi permet de communiquer en utilisant toutes les ondes dont la longueur est comprise entre 1 nm et 1 mm.
VLC
Visible Light Communication ou en français communication par la lumière visible. La lumière étant une onde dont la longueur est comprise entre 10 nm et 1 mm et que l'oeil humain permet de voir uniquement les ondes ayant une longueur comprisent entre 380 et 780 nm (fin des ultraviolet et début des infrarouges), les dispositifs VLC permettent de communiquer via la lumière en utilisant uniquement les longueurs d'ondes dont le spectre est compris 380 et 780 nm.
OpenVLC
OpenVLC est un projet open source permettant de communiquer des informations via le spectre visible de la lumière

Après la lecture de ces définitions, on comprend qu'utiliser le terme Li-Fi pour parler de VLC est un abus de langage qui permet de se faire comprendre rapidement par les néophytes.

Dans la suite du tutoriel nous parlerons de Li-Fi VLC afin de parler de communication visible par la lumière.

1. Flasher un Beaglebone black

Préparer la carte SD

Afin de flasher un BB, nous aurons besoin d'une carte SD d'au moins 4GB sur laquelle une image Débian aura été installée.

  1. Formatter la carte SD à l'aide d'un logiciel spécialisé avec le mode 'overwrite'
  2. Télécharger l'image bone-debian-8.7-armhf
  3. Mettez l'image téléchargé sur la carte SD à l'aide de Win32 Disk Imager

Flasher le Beagle Bone Black

Maintenant que la carte SD est prête, nous allons pouvoir installer l'OS sur le BBB

  1. Sans que le Beagle soit alimenté, insérer la carte SD dans l'emplacement prévu à cet effet

  2. Alimentez le Beagle bone grâce à votre ordinateur et sur le port USB

  3. Une fois démarré, connectez vous via le port ssh

    ssh debian@192.168.7.2

    A ce stade, nous avons lancé l'os installé sur la carte SD, il nous faut maintenant installer l'OS sur la mémoire interne du BB

  4. se déplacer dans le répertoire /opt/scripts/tools/eMMC

    cd /opt/scripts/tools/eMMC
  5. Installer l'OS sur la mémoire interne du BB

    sudo ./bbb-eMMC-flasher-eewiki-ext4.sh

    Attendre jusqu'à ce que vous voyez écrit à l'écran

    eMMC has been flashed
  6. Déconnecter le câble, enlever la carte SD et redémarrer le BBB

Bravo, vous venez de finir de flasher un BB

Configurer une connexion internet

Afin de configurer votre connexion internet, il est nécessaire de configurer les interfaces réseaux du Beaglebone. Bien que l'interface 192.168.7.2 soit configurée par défaut, aucune passerelle par défaut n'est encore configurée sur le BB.

Nous vous proposons un tutoriel permettant de configurer les interfaces réseau et la connexion internet d'un Beaglebone à adapter suivant vos besoins.

Une fois la connexion à internet obtenue, vous pouvez passer à l'étape 3.

2. Configuration commune à l'éméteur (TX) et au récepteur (RX)

La carte openVLC a besoin de plusieurs pins afin de fonctionner avec le BB. Notamment la pin HDMi qui est déja utilisée. C'est pourquoi nous allons tout d'abord la désactiver.

  1. Désactiver l'utilisation de la pin HDMI

    sudo nano /boot/uEnv.txt

    Puis commenter les lignes suivantes

    dtb=am335x-boneblack-emmc-overlay.dtb
  2. Si ça n'est pas déjà fait, mettre à jour la liste des dépots officiels

    sudo apt-get update
  3. Installer le header

    sudo apt-get install linux-headers-$(uname -r)
  4. Télécharger le repository contenant le kernel et le code

    git clone https://github.com/nfacciolo/Reactic.io-OpenVLC.git

    Le repository OpenVLC que je propose a été modifier par rapport à l'original. Il s'agit principalement d'améliorer les explications fournies dans la documentation officielle, de supprimer les retours chariots qui empêchaient d'exécuter certains scripts ainsi que la création de quelques scripts.

3. Configurer au moins un TX

  1. Compiler le programme

    cd /home/debian/OpenVLC/OpenVLC1.3_revA/
    chmod +x ./compile-open-vlc-kernel.sh
    ./compile-open-vlc-kernel.sh 192.168.0.1 255.255.255.252

    Le Tx et le RX doivent avoir des adresses Ip configurées différentes. Vous pouvez utiliser ce script afin changer la configuration.

  2. Deployer le programme

    Dans le même dossier exécuter les actions suivantes

    chmod +x ./deploy-open-vlc-tx.sh
    ./deploy-open-vlc-tx.sh
  3. Activer l'ip forwarding

    echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward

    L'ip forwarding permet de recevoir une requête sur une interface et la faire suivre sur une autre. Il sera utile si vous décider d'implémenter une configuration plus complexe que celle vue dans notre tutoriel.

  4. Vérifier la configuration réseau

    1. Vérifier la configuration de la table de routage

      route -n

      Le résultat devrait être similaire au résultat ci-dessous

      Kernel IP routing table
      Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
      0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
      192.168.0.0     0.0.0.0         255.255.255.252 U     0      0        0 vlc0
      192.168.6.0     0.0.0.0         255.255.255.252 U     0      0        0 usb1
      192.168.7.0     0.0.0.0         255.255.255.252 U     0      0        0 usb0
      192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

      On peut observer ici que nous disposons d'une nouvelle interface vlc0 dont le réseau est 192.168.0.0/30

    2. Vérifier la configuration ip

      ifconfig

      Le résultat devrait être similaire au résultat ci-dessous

      vlc0      Link encap:Local Loopback
      inet addr:192.168.0.1  Mask:255.255.255.252
      UP RUNNING NOARP  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:100
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

      Afin de simplifier la lecture j'ai volontairement supprimé l'affichage des autres interfaces réseau configurées.

      On peut observer qu'on a attribué l'adresse ip 192.168.0.1 à l'interface vlc0. Ce qui est cohérent avec la configuration vue précédemment.

  5. Tester l'emission d'un ping vers le RX (Réseau 192.168.0.0)

    ping 192.168.0.2

    Si tout s'est bien déroulé, vous devriez voir la lumière du TX s'alumer une fraction de seconde à chaque ping envoyé ainsi qu'un message vous expliquant que 100% des paquets ont été perdu. Ce qui est normal puisque l'éméteur et le récepteur open vlc dans cette configuration est prévu pour travailler avec le protocole de communication UDP, donc en emission seulement et sans garantir la réception des données.

  6. Installer un client udp envoyant des données à une adresse ip spécifique

    1. Télécharger le client udp créé par Reactic

      git clone https://github.com/nfacciolo/Reactic.io-udp-client-loop
    2. Lancer le client udp

      cd Reactic.io-udp-client-loop
      node ./main.js
    3. Visualiser les données envoyées
      Les données envoyées sont présentes dans le fichier data.json

      nano ./data.json

      Il s'agit d'un fichier Json initialement rempli comme ci-dessous

      {
          "lifi_open_vlc_id": 1,
          "lifi_open_vlc_dataExample": "Another Li-Fi OpenVLC data example"
      }

    !! Attention en fonction de la taille du message que vous aurez à envoyer, il faudra moduler le temps entre chaque message envoyés par le client. Pour cela, il faudra modifier la variable TIMEOUT_BETWEEN_REQUESTS présente dans le fichier /home/debian/Reactic.io-udp-client-loop/udp-client.js. Si un temps trop court est configuré, le système prendra du retard lors de l'envoi de données, puis lorsque la mémoire vive sera pleine, il finira par crasher !!

  7. Configurer une tâche CRON afin de lancer automatiquement le client UDP

    Juste pour vous, nous avons créé des scripts que vous pourrez lancer automatiquement au démarrage du TX et du RX qui effectueront toutes les actions nécessaires pour faire fonctionner le système.

    Il existe 3 manières de lancer un programme au démarrage d'un système d'exploitation Linux. Afin d'exécuter un script, la méthode la plus commode reste la tâche CRON.

    Le script du TX à exécuter se trouve à l'emplacement /home/debian/Reactic.io-OpenVLC/OpenVLC1.3_revA/deploy-open-vlc-tx.sh

Tester la configuration du TX

  1. Redémarrer l'émeteur Li-Fi

    sudo reboot

Félicitation, à ce stade vous venez de finir de configurer le TX. Vous pouvez envoyer n'importe quel type de données en modifiant le fichier data.json

Il reste encore à configurer la reception du signal lumineux sur le RX afin permettre l'utilisation des données envoyées.

4. Configurer au moins un RX

Reproduire les étapes 2-3-4

  1. Compiler le programme

    cd /home/debian/Reactic.io-OpenVLC/OpenVLC1.3_revA/
    chmod +x ./compile-open-vlc-kernel.sh
    ./compile-open-vlc-kernel.sh 192.168.0.2 255.255.255.252

    Le Tx et le RX doivent avoir des adresses Ip configurées différentes. Vous pouvez utiliser ce script afin changer la configuration.

  2. Deployer le programme

    Dans le même dossier exécuter les actions suivantes :

    chmod +x ./deploy-open-vlc-rx.sh
    ./deploy-open-vlc-rx.sh
  3. Activer l'ip forwarding

    echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward

    L'ip forwarding permet de recevoir une requête sur une interface et la faire suivre sur une autre. Il sera utile si vous décider d'implémenter une configuration plus complexe que celle vue dans notre tutoriel.

  4. Vérifier la configuration réseau

    1. Vérifier la configuration de la table de routage

      route -n

      Le résultat devrait être similaire au résultat ci-dessous

      Kernel IP routing table
      Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
      0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
      192.168.0.0     0.0.0.0         255.255.255.252 U     0      0        0 vlc0
      192.168.6.0     0.0.0.0         255.255.255.252 U     0      0        0 usb1
      192.168.7.0     0.0.0.0         255.255.255.252 U     0      0        0 usb0
      192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

      On peut observer ici que nous disposons d'une nouvelle interface vlc0 dont le réseau est 192.168.0.0/30

    2. Vérifier la configuration ip

      ifconfig

      Le résultat devrait être similaire au résultat ci-dessous

      vlc0      Link encap:Local Loopback
      inet addr:192.168.0.2  Mask:255.255.255.252
      UP RUNNING NOARP  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:100
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

      On peut observer qu'on a attribué l'adresse ip 192.168.0.2 à l'interface vlc0. Ce qui est cohérent avec la configuration vue précédemment.

  5. Installer un serveur udp permettant de traiter les données envoyées par le TX

    1. Télécharger le serveur udp créé par Reactic

      git clone https://github.com/nfacciolo/Reactic.io-udp-server
    2. Lancer le serveur udp

      cd Reactic.io-udp-server
      node ./udp-server.js
    3. Visualiser les données envoyées

      Mettre le RX et le TX face à face. Afin d'optimiser le taux de réussite de transmission des messages, éloignez vous des sources de lumières fortes et surface réfléchissantes.

      Vous devriez voir apparaitre dans la console le message configuré dans le fichier data.json

      server got: a msg from 192.168.0.1:52658
                  {
          "lifi_open_vlc_id": 1,
          "lifi_open_vlc_dataExample": "Another Li-Fi OpenVLC data example"
      }
  6. Configurer une tâche CRON afin de lancer automatiquement le server UDP

    Comme vu à l'étape 3.7 nous avons créé des script que vous pouvez lancer au démarrage et qui efféctueront toutes les actions nécessaires au lancement du RX.

    Le script du RX à exécuter se trouve à l'emplacement /home/debian/Reactic.io-OpenVLC/OpenVLC1.3_revA/deploy-open-vlc-rx.sh

Pour aller plus loin

Afin de mieux connaître les enjeux du Li-Fi, je vous propose de lire un article expliquant ce qu'est le Li-Fi.
Si vous êtes êtes à un niveau un peu plus avancé de connaissance, que vous souhaitez augmenter votre productivité ou simplement vous renseigner sur Docker, vous pouvez lire un article expliquant ce qu'est Docker et les conteneurs.

0 Partages
Partagez
Tweetez
Partagez