Forum Linux.embarqué Des Arduinos sur un bus USB, un serveur de domotique, et une interface de contrôle REST

Posté par  (site web personnel) . Licence CC By‑SA.
4
19
mar.
2014

Alors voila,

je voudrais m'amuser un peu dans la domotique et je me verrais bien utiliser des Arduinos dans chaque pièce pour commander les ampoules, le thermostat, des prises, bref, du basique domotique on/off.
J'aimerais bien pouvoir piloter et communiquer avec ces Arduinos à distance, je me disais que passer par leur port USB était une bonne idée en utilisant le bus série.

Dans les faits on aurait un Arduino par pièce, tous reliés au serveur central par un câble USB. Le serveur serait du type RPi ou autre donc évidemment on utilisera un hub USB avec une alimentation externe, et des câbles USB active extension pour éviter de perdre des données vu que les câbles seront plutôt longs.

Pour la partie logicielle, il est aisé de lire/écrire sur le bus USB, il est aisé de faire une application web qui aurait des boutons, des interrupteurs, etc.
Mais c'est la partie entre les deux que je n'ai pas encore bien conçue dans ma tête.
Je verrais bien une sorte de serveur, écrit en C par exemple qui irait communiquer avec les Arduinos par l'USB, mais je verrais bien ce serveur communiquer avec le monde par une API REST par exemple via un serveur web qu'il implémenterait.
Wikipedia me parle par exemple de gSOAP ou Axis2, mais mon intuition me dit que je vais dans la mauvaise direction…

Bref, vous feriez comment pour créer efficacement une API REST à une application ?

  • # USB ?

    Posté par  . Évalué à 2.

    De mémoire (mais je pense que tu t'es déjà renseigné de ton côté), l'USB c'est 5 m maxi. Avec les câbles USB active extension tu peux augmenter la distance, mais ça ne me semble pas top (ni pour le coût — achat et consommation — ni pour la fiabilité). Tu devrais peut-être avant de te lancer, réfléchir au bus le plus adapté à tes besoins.

    Bonne chance, car c'est un projet intéressant.

    • [^] # Re: USB ?

      Posté par  (site web personnel) . Évalué à 1.

      Merci, je table pour de l'USB pour l'instant parce que ca m'a l'air le plus adapté aux contraintes que je voudrais m'imposer: fiable, pas cher et avoir le serveur dans une pièce tandis que les arduinos sont dans d'autres pièces.

      Bien que je passerais par les câbles USB, je ne serais pas très gourmand en bande passante, même l'USB 1.1 m'a l'air déjà trop rapide pour ce que je veux faire passer comme données. Donc je validerai ma théorie avec un câble USB active extension qu'on peut mettre en série, jusqu'à 25m me disent les internets.
      J'aurai besoin de moins que ca visiblement mais c'est bon à savoir.

      • [^] # Re: USB ?

        Posté par  . Évalué à 1.

        Pour communiquer avec des appareils sur la distance, je crois que d'habitude on utilise des câbles ethernet. Après, rien ne t'empêche de les utiliser pour autre chose que le protocole tcp/ip. Ni de faire un adaptateur usb/rj45 pour ne pas avoir à modifier le câble ou l'arduino.

  • # Module wifi ou bus de type CAN ou mieux adapté à la domotique ?

    Posté par  . Évalué à 2.

    Tu devrais peut-être passer par du wifi, du CPL (mais un peu cher à mon gout) ou par un bus de type CAN par exemple.

    Pour un module CAN : http://lnxpps.de/rpie/

    Un module tout fait, mais un peu cher : http://skpang.co.uk/catalog/pican-canbus-board-for-raspberry-pi-p-1196.html

    Il y a peut-être des bus qui seraient un peu mieux adaptés à ton besoin

    (exemple : http://djynet.net/?p=185).

    • [^] # Re: Module wifi ou bus de type CAN ou mieux adapté à la domotique ?

      Posté par  (site web personnel) . Évalué à 2.

      Le X10 a l'air intéressant mais pour des raisons de pingrerie, je voudrais d'abord utiliser le minimum de matériel et me baser sur la prise USB de l'Arduino que j'utiliserais en bus série pour communiquer avec le serveur, j'ai pas envie d'acheter un module supplémentaire par Arduino si je peux me l'éviter.

      Je garde tes liens sous le coude au cas où je me suis lourdement trompe ! :)

      • [^] # Re: Module wifi ou bus de type CAN ou mieux adapté à la domotique ?

        Posté par  . Évalué à 2.

        pour des raisons de pingrerie, je voudrais d'abord utiliser le minimum de matériel et me baser sur la prise USB de l'Arduino

        Entre le cout des cables USB (longs ?) , du hub, la mise en place, etc …. au final ça risque de revenir cher. Sinon que veux-tu dire par "baser sur la prise USB de l'Arduino que j'utiliserais en bus série pour communiquer avec le serveur" ? J'ai un peu de mal à comprendre ce que tu veux faire en fait.

        Sinon si tu tiens absolument à mettre des cables, il y a aussi modbus; Je me souviens l'avoir utilisé durant mes études : ce n'est pas très complexe à utiliser, il me semble que nous utilisions une liaison RS485. Et tu peux trouver des transceivers pour pas cher

        Mais bon, à toi de voir.

        • [^] # Re: Module wifi ou bus de type CAN ou mieux adapté à la domotique ?

          Posté par  (site web personnel) . Évalué à 2.

          À un Arduino par pièce, le prix peut monter très vite si je rajoute des modules supplémentaires genre ethernet, je vois des prix qui me rebutent, genre 30e ou plus pour l'ethernet shield. Ca peut rajouter des fonctionnalités intéressantes mais peut-être overkill dans mon cas.

          L'avantage de l'USB c'est que les composants sont quand même répandus et peu chers, je vois des cables usb active extension de 5 voire 10m pour 10$.
          Un hub avec alim externe j'en ai acheté un sur ebay à 15$ qui fait du 2A, et il marche très bien.

          D'autres ont mentionné l'I2C et effectivement ca mérite d'être creusé aussi, ca pourrait résoudre le problème plus facilement.
          Je vois que la norme RS485 permet de transmettre des données série sur de longues distances, un shield arduino rs485 coute peu, et si ca veut dire que j'ai juste à tirer des câbles standards d'une pièce à l'autre, en utilisant la transmission série de base dans l'arduino, j'aime autant.

          Bref, je ne suis pas arrêté sur la solution (sinon je ne serais pas venu demander de l'aide ici ;) ) mais je sais à peu près ce que je veux au final, mais continuez à me soumettre des idées, je suis preneur !

          • [^] # Re: Module wifi ou bus de type CAN ou mieux adapté à la domotique ?

            Posté par  . Évalué à 2.

            continuez à me soumettre des idées, je suis preneur !

            A mon avis le choix du bus n'est pas anodin, et tu devrais te poser la question suivante :
            - est-ce que les équipements sur le bus auront besoin d'émettre des messages sans forcément être interrogés par le maitre, et sui les esclaves devront dialoguer entre eux.

            Si c'est oui, il vaut mieux passer par un bus de type CAN qui n'a pas de principe maître/esclave, mais tout le monde peut émettre des messages sur le bus. L'inconvénient, c'est un peu plus cher. l'avantage ; tu n'as pas à te prendre la tête avec des histoires de maitre/esclave et tout le monde peut communiquer avec tout le monde.

            Dans le cas d'un bus maître/esclave, il te faudra pooler sans cesse les équipements de ton bus. Le bus I2C a un mode multimaitre mais tu ne peux pas multiplier les maitres à l'infini, et je ne me rappelle plus comment se passe le dialogue de maître à maitre (ni même si c'est possible) : je vais voir si j'ai encore des docs sur le sujet. Pour le modbus, il y a un seul maître de bus me semble-t-il.

            Dans le cas ou tu as un seul maitre et des esclaves qui doivent discuter entre eux, il te faudra gérer la communication entre esclaves. Il me semble que durant mes études, j'avais fait un TP comme ça sur Modbus, avec un protocole à base de jeton que le maître envoyait tour à tour à chaque esclave (le maitre ne faisait que ça, gestion des communications et non-réponse des esclaves). Chaque esclave répondait au maître en supprimant les messages qui lui étaient destinés et en ajoutant ceux qu'il voulait ajouter à destination des autres esclaves. Je pense que ce genre de protocole sera difficile à réaliser avec I2C, ou les messages échangés sont plus ou moins imposés par l'état des composants sur le bus.

            • [^] # Re: Module wifi ou bus de type CAN ou mieux adapté à la domotique ?

              Posté par  (site web personnel) . Évalué à 1.

              Dans mon idée, le modèle maitre/esclave est le plus probable parce que les arduinos ne feront que répondre à des requêtes de la part du serveur.
              "allume telle lampe", "coupe telle prise", "quelle est la température courante ?", "quel est l'état de tel lampe ?"

              De fait, la bande passante ne risque pas d'être énorme, donc je ne cherche pas un bus avec un débit de fou.

              Le bus USB (bonjour le syndrome RAS !) me plaisait au début mais je commence à pencher vers l'I2C maintenant, dans le sens où c'est un protocole fait pour ca, et qui est présent dans l'Arduino et aussi sous linux, je n'aurais probablement pas trop de problèmes à l'implémenter.

              Bon comme j'en suis à la phase de conception, je vais peut-être essayer plusieurs solutions pour la preuve de concept dans mon laboratoirebureau et je verrai bien.

          • [^] # Re: Module wifi ou bus de type CAN ou mieux adapté à la domotique ?

            Posté par  (site web personnel) . Évalué à 2.

            D'autres ont mentionné l'I2C et effectivement ca mérite d'être creusé aussi,

            l'i2c n'est pas conçu pour de longues distances et commencera à devenir capricieux au dessus de quelques mètres (quelques pouvant aller de 2 à 5 ou 6 si tu as de la chance).

  • # CPL

    Posté par  . Évalué à 2.

    apres tout, tes appareils seront tous connectés à l'electricité, ne serait-ce que pour les alimenter et alimenter l'ampoule, le chauffage, etc.

    du coup le CPL prend tout son interet, le reseau se fait en utilisant les fils electriques, et ensuite ca communique par IP.

    • [^] # Re: CPL

      Posté par  (site web personnel) . Évalué à 1.

      J'ai pensé aussi au CPL mais l'Arduino perd tout son intérêt, dans ce cas, autant utiliser un Raspberry Pi par pièce et y collant un dongle WiFi.

      Je voudrais justement éviter les réseaux pensés pour l'informatique mais pas pour l'embarqué à petit débit, les bus CAN, je vais tenter le coup avec le bus USB dans un premier temps.

      Merci pour vos réponses et votre aide !

  • # Bus I2C

    Posté par  (site web personnel) . Évalué à 2.

    Peut être le plus simple est de faire de l'I2C ?
    http://www.instructables.com/id/I2C-between-Arduinos/

    Avec des câbles cat 5e, tant qu'a faire, c'est pas cher, et peut être réutilisé autrement.

    • [^] # Re: Bus I2C

      Posté par  . Évalué à 3.

      Personnellement je n'utiliserais pas I2C sur ce genre d'application, je passerais plutôt par Modbus ou CAN.

  • # Voila un lien qui ...

    Posté par  (site web personnel) . Évalué à 4.

    Voici un lien qui devrait intéresser :

    MC Hobby

    En plus MC Hobby est une boutique Belge qui a le mérite de mettre en Wiki ENORMEMENT d'informations sur le monde RASPBERRY ARDUINO imprimante 3D etc …

    J'ai beaucoup appris sur leur site.
    Et je préfères de loin acheter chez eux car je sais que j'aurais une doc et une procédure explicite.

    Ensuite une appli REST en C … brrrr … code en python tu iras plus vite
    surtout que tu penses pas atteindre les centaine de connexions / heures :)

  • # RFduino, des Arduinos avec du Bluetooth 4

    Posté par  (site web personnel) . Évalué à 2.

    http://www.rfduino.com/
    et les forums
    http://forum.rfduino.com/

    ウィズコロナ

  • # API REST

    Posté par  . Évalué à 4.

    Pour coder rapidement une API REST, il y a :

    sinatra (en ruby):

    require 'sinatra'
    
    get '/hi' do
      "Hello World!"
    end

    flask (en python):

    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "Hello World!"
    
    if __name__ == "__main__":
        app.run()

    il y en a surement d'autres, et dans d'autres langages, mais je ne connais que ceux là.

    pour l'usb il y a ce qu'il faut en python et ruby aussi. et puis si tu ne connais pas le python, ou le ruby, dans 1 semaine ou 2 tu connaîtras. Pour gSOAP, j'ai aussi l'impression que ce n'est pas la bonne direction, mais je ne connais pas.

    Ah et puis sinon, on peut avoir des échantillons gratuits de atmega328 (le microcontroleur qu'il y a sur l'arduino) chez le fabricant (atmel), mais il faut une adresse pro. ça permet d'éviter d'acheter plusieurs arduinos, c'est plus petit, mais c'est moins "convivial".

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.