Driver pour carte Arduino

Pour parler de tous les Problèmes/Bugs, Questions, Informations ... en rapport avec les drivers existants : Plcbus, X10, 1-Wire, Rfxcom, Zibase...

Modérateur: HoMIDoM

Driver pour carte Arduino

Messagede Peedjy » 20 Déc 2011, 11:51

Bonjour
Je démarre ce fil à propos d’un éventuel Driver pour Arduino qui permettra de suivre son évolution.
Je crois avoir vu quelque part qu’un Driver pour les cartes Arduino était prévu, mais je ne retrouve plus rien.
Pouvez vous SVP confirmer ce qui est prévu et me dire ou en est l’écriture de ce coté. Est-ce qu’il y a déjà quelque chose de dispo pour tester ?

Je pose la question car je compte écrire un petit prog pour Arduino, mais j’aimerais plus tard qu’il soit utilisable avec homidom alors je me demande quelle méthode retenir pour la communication entre Homidom et l’arduino, afin de pouvoir l’adapter facilement et de ne pas avoir à tous recommencer dans quelque temps.

J’imagine 2 méthodes possibles :
Méthode 1: (filaire)
La carte Adruino est directement reliée en USB au PC sur lequel tourne Homidom (Utilisation du moniteur série dans un premier temps puis le remplacer par une ‘interface de commande’ dans homidom par la suite)
Cette méthode à l’avantage d’être simple à mettre en œuvre mais oblige à avoir l’Arduino à proximité du PC ce qui n’est pas très pratique.


Méthode 2 : (sans fil)
La carte Arduino utilise un Shield Ethernet. La communication peut alors se faire via des ‘commandes’ en html. Un peu comme les cartes IPX800. L’avantage de cette méthode est de pouvoir déporter l’Arduino et de pouvoir y accéder par le web. Mais il y a la gestion du serveur web embarqué sur l’Arduino et de sa taille qu’il faut prendre en compte. (Et aussi avoir une connexion réseau a proximité de l’Arduino.)
C’est cette méthode qui me semble la plus intéressante mais est ce que cela pourra facilement s’intégrer dans Homidom par la suite? J’aimerais quelques pistes.
(Sinon on doit aussi pouvoir faire quelque chose avec les shield X-Bee mais dans ce cas il faut au minimum 2 cartes ou plus (Emetteur/récepteur) et donc aussi la question des protocoles de communication entre chaque carte. Par contre dans ce cas plus aucun fil nécessaires.

Donc , Avant de partir sur l’une ou l’autre des solutions et de définir quel moyen de communication je vais utiliser, j’aurais aimé avoir votre point de vu sur le sujet.
Merci
Toute l'actualité Hi-Tech au service de la maison:http://blog.domogy.com
Peedjy
Dieu de domotique
 
Messages: 375
Inscription: 07 Oct 2011, 12:02
Localisation: Macon (71)

Re: Driver pour carte Arduino

Messagede Fritz » 20 Déc 2011, 12:33

Mon avis : soit tu passes par un standard comme xPL, soit tu fais un driver par montage arduino. Un montage arduino ça peut être tout et rien à la fois... tu n'auras donc rien de réellement générique...
Wiki Debian : http://smhteam.info/
Blog domotique : http://smhteam.info/blog/
Avatar de l’utilisateur
Fritz
Dieu de domotique
 
Messages: 483
Inscription: 20 Fév 2009, 12:30

Re: Driver pour carte Arduino

Messagede Peedjy » 20 Déc 2011, 15:43

L’idée d’utiliser quelque chose de standard me plait bien…mais Homidom utilise le protocole SOAP donc quitte à mettre un protocole en place il serait peut être préférable de mettre SOAP en place dans l’Arduino plutôt que XPL ou XaP pour faciliter les échanges.
Mais je ne connais aucun des 3 protocoles et je suis pas certain d’avoir bien compris le fonctionnement. Donc peut être que je raconte n’importe quoi !!
Quel pourrait être la forme d’un message SOAP échangé entre Homidom et l’Arduino ?
Est-ce que dans ce cas on devient indépendant du choix de connexion (USB, Ethernet, RF…)
L’idée serait de pouvoir attribuer des Devices Homidom a certaines broches de l’Arduino pour commander des relais/des transistors ou dans l’autre sens relever toutes sorte de capteurs pour les afficher dans Homidom.
Toute l'actualité Hi-Tech au service de la maison:http://blog.domogy.com
Peedjy
Dieu de domotique
 
Messages: 375
Inscription: 07 Oct 2011, 12:02
Localisation: Macon (71)

Re: Driver pour carte Arduino

Messagede Fritz » 20 Déc 2011, 18:52

A mon avis, faire du soap dans un circuit embarqué me parait lourd et inadapté. Enfin, je peux me tromper ;)
Wiki Debian : http://smhteam.info/
Blog domotique : http://smhteam.info/blog/
Avatar de l’utilisateur
Fritz
Dieu de domotique
 
Messages: 483
Inscription: 20 Fév 2009, 12:30

Re: Driver pour carte Arduino

Messagede sebbergues » 20 Déc 2011, 19:12

Pour moi le plus simple est de créer des commandes "génériques" (que ce soit en RS232, usb, ou ethernet), de toute façon c'est le driver spécifique Homdiom/arduino qui se chargera du reste ;-)

Donc je te conseil de faire une dll (classe) qui pourrait être utilisé par n'importe quel soft (homdiom ou perso) qui utiliserai ta dll comme passerelle (usb, http...) qui metterait à dispo ces commandes?

A+

Seb
Avatar de l’utilisateur
sebbergues
Dieu de domotique
 
Messages: 673
Inscription: 04 Aoû 2008, 10:12

Re: Driver pour carte Arduino

Messagede Laser. » 20 Déc 2011, 19:15

Si homidom gère le protocole XAP, ce qui serait pas mal à mon avis pour s'interconnecter avec d'autre produit, base toi sur ce que j'ai fait dans un autre poste (partie matériel il me semble).
Chez moi je communique en xap avec mes arduinos. Le programme passe ric-rac dans des modèles 368 mais à l'aise dans une mega.
Tu peu paramétrer chaque pin en tant qu'entrée ou sortie.
Laser.
Dieu de domotique
 
Messages: 674
Inscription: 28 Nov 2006, 23:33
Localisation: Loire Atlantique

Re: Driver pour carte Arduino

Messagede Peedjy » 21 Déc 2011, 15:12

Bonjour
J’ai fait quelques recherches sur le net à propos d’une DLL pour Arduino et je suis tombé la dessus
http://www.gyps.nl/arduino/
Il y probablement des parties à récupérer ou à adapter car sa ressemble fortement aux drivers déjà existant dans Homidom

De plus j’ai pu voir ici : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1212766276
Qu’il y avait aussi des similitudes avec la carte K8055 qui utilise une DLL et pour laquelle le driver existe déjà. Donc sa pourrais aussi servir de base de départ…
Petit comparatif :

I K8055 I Arduino
-----------------------------------------------------------------
Digital I/O I 5 In + 8 Out (Donc 13) I 14I/O
-----------------------------------------------------------------
Analog I/O I 2 In + 2 Out I 6 In + 0 Out

Si je comprend bien dans la dll on définie des fonctions qui pourront être appelées par d’autres programmes comme Homidom.

Par exemple pour la carte K8055
Dans le Driver Homidom on trouve :
If commande = ON
SetbinaireChannel(Objet.Adresse1) je suppose que ça appelle la fonction SetDigitalChannel (Channel) que l’on trouve dans la dll
Mais ensuite comment se fait la liaison entre la dll et la carte ? Ou est défini le protocole et comment sait on ce qui doit transiter sur le port USB pour que la bonne broche du MCU soit actionnée ?

J’aimerais bien comprendre le process dans sa globalité pour pouvoir démarrer. Mais la liaison entre le Hard et le Soft n’est pas simple à cause de toutes ces couches.
Toute l'actualité Hi-Tech au service de la maison:http://blog.domogy.com
Peedjy
Dieu de domotique
 
Messages: 375
Inscription: 07 Oct 2011, 12:02
Localisation: Macon (71)

Re: Driver pour carte Arduino

Messagede sebbergues » 23 Déc 2011, 09:13

Tu as tout à fait raison, en fait pour l'exemple du k8055, Homidom utilise une dll "toute faite" qui se charge du protocole et mets à disposition des fonctions toutes prêtes (Open, Close, SetChannel...).

A partir de cette dll j'ai créé un driver au format Homidom qui sert juste de passerelle entre le serveur et cette dll.

A+

Seb
Avatar de l’utilisateur
sebbergues
Dieu de domotique
 
Messages: 673
Inscription: 04 Aoû 2008, 10:12

Re: Driver pour carte Arduino

Messagede sebbergues » 23 Déc 2011, 09:27

Concernant le process:

Côté dll (arduino):

La dll doit mettre à disposition aux clients (ex: homidom) des méthodes, fonctions... (ex: OpenCarte(Port as integer), CloseCarte, SetIO...) de type public.
Derrière ces méthodes la dll doit gérer le protocole associée à la technologie, pour t'expliquer rapidement et "simplement", on va prendre un exemple où la carte électronique est connectée sur le port RS232, et pour activer une entrée tu dois passer le numero de la carte, l'entrée désirée, un ";", la valeur souhaitée et "$" à la fin, et le tous en hexadécimal, ce qui donnerait:

(Le code ci-dessous comporte surement des erreurs c'est juste un exemple ;-) !!!)

Class Arduino
Public Sub ActiveChannel(Carte as integer, Channel as integer, Value as boolean)
Dim RS232 as new port
Dim RS232.port="COM1"

Dim trame() as byte
trame(0)=Hex(Carte)
trame(1)=Hex(Channel)
trame(2)=Hex(";")
trame(3)=Hex(Value)
trame(4)=Hex("$")
RS232.write(trame)
End Sub
End Class

Donc côté client rien de plus simple je vais juste

Dim a as Arduino
a.ActiveChannel(0,1,True)

je n'ai pas à me soucier de la trame à respecter car c'est la dll qui se charge du reste...

J'éspère t'avoir éclairé !!!

Seb
Avatar de l’utilisateur
sebbergues
Dieu de domotique
 
Messages: 673
Inscription: 04 Aoû 2008, 10:12

Re: Driver pour carte Arduino

Messagede Peedjy » 03 Jan 2012, 09:41

Bonjour
Pour être certain d’avoir bien compris j’ai fais quelques exemples de fonctions basics qui pourrais se trouver dans la dll

Par exemple pour changer l’état d’une broche numérique
on a besoin de : Carte, Pin, Value (on a pas besoin de retour)
donc la fonction serait :
Class Arduino
Public Sub SetOutput (Carte as integer, Pin as integer, Value as boolean)

Dim trame() as byte
trame(0)=Hex(Carte)
trame(1)=Hex(Pin)
trame(2)=Hex(";")
trame(3)=Hex(Value)

RS232.write(trame)
End Sub
End Class

Pour lire l’état d’une broche numérique ou analogique
On a besoin de Carte et Pin mais en retour on on doit recevoir Value

Class Arduino
Public Sub ReadInput (Carte as integer, Pin as integer, )et on reçoie Value as integer
Dim Value() as Integer
Dim SendTrame() as byte
trame(0)=Hex(Carte)
trame(1)=Hex(Pin)

RS232.write(trame)
RS232.read (Value)

End Sub
End Class

Pour envoyer un ‘message’ par le port série

Class Arduino
Public Sub SendSerial (Carte as integer, Message)
Dim Message () as String
RS232.write(Message)
End Sub
End Class

C’est surement très incomplet et plein d’erreur, mais c’est juste pour valider le principe…
Par contre je vois toujours pas coté Arduino comment je traite ces fonctions ?
Quel est le lien entre la Dll et le code dans l’Arduino ? Quand la Dll termine sa fonction par write trame l’Arduino peut lire le port COM en boucle ? mais quand il faut lire ?
Est qu’il faut définir un protocole de communication entre la Dll et l’Arduino ?
Toute l'actualité Hi-Tech au service de la maison:http://blog.domogy.com
Peedjy
Dieu de domotique
 
Messages: 375
Inscription: 07 Oct 2011, 12:02
Localisation: Macon (71)

Re: Driver pour carte Arduino

Messagede sebbergues » 03 Jan 2012, 12:04

Salut,

Donc pour répondre à tes questions:

C’est surement très incomplet et plein d’erreur, mais c’est juste pour valider le principe…
C'est bien ça

Par contre je vois toujours pas coté Arduino comment je traite ces fonctions ?
Exemple lors de l'écriture sur une sortie (une fois que Arduino a décodé la fonction carte, sortie, valeur) il fait
if value=0 then
digitalWrite(sortie, HIGH)
else
digitalWrite(sortie, LOW)
end if


Quel est le lien entre la Dll et le code dans l’Arduino ? Quand la Dll termine sa fonction par write trame l’Arduino peut lire le port COM en boucle ? mais quand il faut lire ?

Exemple de l'écriture sur une sortie

Côté Dll:
Function WriteBin(Carte as integer, Sortie as integer, Valeur as Boolean) as integer

Dim trame() as byte
trame(0)=Hex(Carte)
trame(1)=Hex(A)
trame(2)=Hex(Sortie)
trame(3)=Hex(Valeur)
trame(4)=Hex(Carte + A + Sortie + Valeur)
trame(5)=Hex($)

Port.Write(Trame)

DoWhile Port.ReadCount<>0 'tant que je n'ai rien reçu
Loop

If Port.Read=Hex(0) then
Msgbox "OK"
Else
MsgBox "KO"
End if

End Function

Côté Arduino:

int carte =1234
Byte incomingByte()
pinMode(0, OUTPUT)

Sub

if (Serial.available() > 0)
incomingByte = Serial.read();
if incominByte(0) + incominByte(1) + incominByte(2) + incominByte(3) = incominByte(5) then
if incominByte(0)=carte
if incominByte(1)= A 'fonction écriture
if incominByte(3)=0 then
digitalWrite(incominByte(2), HIGH)
else
digitalWrite(incominByte(2), LOW)
end if
Serial.write(0)
end if
if incominByte(1)= B 'fonction lecture
.......
end if
end if
else
'Problème de CheckSum
Serial.write(1)
end if
end if



Est qu’il faut définir un protocole de communication entre la Dll et l’Arduino ?
Oui il est préférable de définir ton protocole par exemple:
2 Octet : N° Carte
1 Octet : N° de fonction
4 Octet : Parametres
1 Octet: Checksum (calcul effectué sur les octets précédent pour vérifier qu'on a bien reçu la bonne trame avec bonne données envoyées)

Mais bon inspire toi de ce qui est déjà existant (X10, PLCBus, Velleman...) pas besoin de réinventer la roue ;-)


A+

Seb
Avatar de l’utilisateur
sebbergues
Dieu de domotique
 
Messages: 673
Inscription: 04 Aoû 2008, 10:12

Re: Driver pour carte Arduino

Messagede Peedjy » 04 Jan 2012, 09:55

Salut Seb.
En continuant mes recherches
J’ai trouvé FirmataVB.dll qui semble correspondre à ce que l’on souhaite faire. Il s’agit de 3 Dll pour lire/écrire dans l’Arduino fournit avec des exemples d’appli en VB.
Voir les détails ici http://www.acraigie.com/programming/firmatavb/

Pour le coup ça servirait vraiment à rien d’écrire son propre protocole si celui fonctionne, dans ce cas il suffirait juste de faire le Driver pour Homidom.
Est-ce que tu penses que ça peut être utilisable ?

De mon coté je vais essayer de tester pour voir si j’arrive à le faire fonctionner.
A+
Toute l'actualité Hi-Tech au service de la maison:http://blog.domogy.com
Peedjy
Dieu de domotique
 
Messages: 375
Inscription: 07 Oct 2011, 12:02
Localisation: Macon (71)

Suivante

Retourner vers Drivers

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

Copyright © 2011 - Touteladomotique.com - Tous droits réservés
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique