Gambas France BETA


Pas de compte ? Incription

Gambas3 et Raspberry PI 3 B

123
AuteurMessages
linuxos#16 Posté le 20/11/2017 à 00:13:41
Un peu de sel, de poivre et la crevette sera... Olivier,
J'ai regardé ton code et c'est pas mal. Si cela te tente nous pouvons mettre nos efforts en commun pour ton projet car j'avais déja dans l'idée de faire une interface pour interagir avec le Bus GPIO du Raspberry.
A ce sujet, j'ai mis a disposition mon début de projet sur la Forge dans Divers: testwebform
J'ai essayé plusieurs approches pour une interface en Gambas3 vers le GPIO et au final l'idée d'une interface Web me parait le mieux.
Ensuite, j'ai commencé a faire un composant en Gambas3 spécialement pour le GPIO et la libgpio.so car j'ai déja fait ça par le passé pour plusieurs composants (SSH, SNMP, RRDTOOL, GOIP) et cela me semble un bon départ que de standardiser l'utilisation de cette librairie sur Raspberry dans Gambas3.
Si cela intéresse quelqu'un, j'ai aussi récemment testé le projet 'testwebform' que j'ai mis dans la forge, entièrement dans un container Docker basée sur une Distribution Fedora25 ou 26 et je peux fournir le Dockerfile bien sur.

Voila
Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
O.Coquet#17 Posté le 20/11/2017 à 13:53:49
Ce qui n'est pas devra-t-être inventéSalut linuxos,
je viens de jeter un œil sur ton code, pas mal mais sauf si j'ais pas tout compris, il ne fait qu'afficher le gpio, il n'a aucune interaction avec ce dernier ?????

amitié
Olivier
Raspberry pi 3 et 4
Quelques autres "vieux" ordinateurs !
O.Coquet#18 Posté le 20/11/2017 à 15:59:09
Ce qui n'est pas devra-t-être inventéAlors en fait je prends le temps de m'expliquer un peu.

Suite à un cambriolage, nous avons fait installer des volets roulants à toutes nos fenêtres, soit 10 volets.
Le système est basé sur un protocole SOMFY io homecontrôle !
Ce protocole est réputé incommandable par autre chose que la box tahoma qui, outre son prix, présente l'immense désavantage de fonctionner à l'aide du cloud. Hors j'ai une sainte horreur que des éléments de ma vie soient stockés sur des serveurs d'une société commerciale.

Voila, j'ai donc décidé de réaliser l'irréalisable, à savoir commander mes volets avec une box perso :)

Cela sous-tend que:
- j'ai un système programmable, autonome et accessible de l'extérieur d'ou le raspberry (wifi, 5v faible conso, linux et gambas sans souci)
- Que le programme réalisé soit capable de commander mes volets par groupe ou individuellement, manuellement ou automatiquement à heures déterminées.
- Accessoirement que la commande des volets puisse se faire en fonction de la température extérieure, de la luminosité etc......
- et enfin que je puisse "détourner" le fonctionnement d'une télécommande de la marque somfy pour envoyer les différentes commandes.

Voila, donc le modèle de télécommande que j'ai sélectionnée ne coûte pas trop cher (environ 70 euros) et est capable de piloter 5 volets (donc il m'en faut deux). Chaque télécommande nécessite 4 sorties (pour simuler les boutons) et 4 entrées (pour lire les leds qui affichent le numéro de volet actif).
Donc: 8 bits io par télécommande soit 16 bits au total, et ça tombe bien le raspberry dispose de 16 entrées sorties si on n'active pas les deuxième module spi du gpio.

Il me reste à réaliser, le programme de commande.
l'interface web liée au programme pour le rendre accessible depuis un navigateur de nos téléphones
l'interface matériel pour rendre les io compatibles avec les télécommandes
les fonctions basiques (sélectionner un volet, monter/ descendre, position favorite) qui vont activer les télécommandes.

Le premier source que j'ai mis en ligne correspond à un échauffement (savoir piloter les io du rasp depuis gambas).

Je viens de passer depuis ce matin à la réalisation du programme final en utilisant l'expérience du premier.

Voila pour les explications.
Je vais poster régulièrement sur ce thread en fonction de l'avancement. Ça peut donner des idées à certains :)

Amitié à tous
Olivier
Raspberry pi 3 et 4
Quelques autres "vieux" ordinateurs !
spheris#19 Posté le 22/11/2017 à 08:24:43
Hors j'ai une sainte horreur que des éléments de ma vie soient stockés sur des serveurs d'une société commerciale.

D'accord à 100% avec toi !!!


Voila, j'ai donc décidé de réaliser l'irréalisable, à savoir commander mes volets avec une box perso :)

Beau challenge, et je suis prêt à t'aider si je peu.

et est capable de piloter 5 volets (donc il m'en faut deux)
.
tant qu'à détourner le système je ferais tout simplement un premier sélectionne un groupe de volet et le deuxième sélectionne le volet, ou une combinaison de touches.
J'utiliserais qu'une seule télécommande comme ceci:
Soit 4 boutons : 1,2,3,4 sur la télécommande:
11 inverse état volet groupe 1,numéro 1
12 inverse état volet groupe 1, numéro 2
43 Scénario programmable, ferme tous les volets qu'à moitié..
222, tous les volets du groupe 2 se ferment, etc...
3 appuies sur la télécommande c'est raisonnable et le laisse beaucoup de possibilités.
Ensuite, tu peux y aller sans télécommande :
un petit module bluetooth sur la framboise, et hop ton install est pilotable directement par ton smartphone.
...et une appli android en qtpython ou kivy est un jeu d'enfant.


l'interface matériel pour rendre les io compatibles avec les télécommandes

N'oublie pas, des optocoupleurs sont OBLIGATOIRES sinon pouf le raspberry!!!
Je me suis fais avoir de nombreuses fois!!



les fonctions basiques (sélectionner un volet, monter/ descendre, position favorite) qui vont activer les télécommandes.

As-tu des cames de retour d'info sur chaque volet pour en connaitre l'état? fermé ou ouvert? ou ton système n'est pas asservi?
Si non, ton logiciel passe par une initialisation de l'état de tous les volets.
Si le système est asservi, soit prudent dans ton codage, car une petite panne sur un volet et il n'y a plus rien qui fonctionne.


Le premier source que j'ai mis en ligne correspond à un échauffement (savoir piloter les io du rasp depuis gambas).

Comment fais-tu dans le code pour activer toutes les entrées d'un coup à l'état 1 par exemple?
Je vois que tu ne pilotes qu'une après l'autre...

Voila pour les explications.
Je vais poster régulièrement sur ce thread en fonction de l'avancement. Ça peut donner des idées à certains :)

Je le suivrai avec intérêt!!

;) ;)
O.Coquet#20 Posté le 22/11/2017 à 16:33:21
Ce qui n'est pas devra-t-être inventéBien, si tu veux me donner un coup de main....welcome.

Par contre je te conseille de regarder de près les télécommandes IO Pure de somfy, en effet elles sont particulières et le protocole est verrouillé.

Amitié
Olivier
Raspberry pi 3 et 4
Quelques autres "vieux" ordinateurs !
linuxos#21 Posté le 22/11/2017 à 18:36:42
Un peu de sel, de poivre et la crevette sera... Salut Olivier,

Tout d'abords le projet que j'ai posté n'est pas fonctionnel pour le moment mais cela arrive bientot, meme très bientot.
Dans un premier temps je me concentre sur la possibilité de piloter les GPIOs a partir d'une interface, après je me rapprocherai plus de ton besoin.

1er point:
L'acces au GPIO sur le Raspberry Pi (dans mon cas présentement Raspberry Pi3), il existe 2 librairies utilisables dans Gambas:
- libGPIO
- wiringPI

Les 2 librairies sont disponibles par packages sur la distribution Raspbian ou celles basées dessus (Ex: dietpi)

1ere Tentative: avec la librairie 'libgpio'
Pour ma part, comme toi je n'ai pas pu accéder au GPIO avec la librairie 'libgpio', dans un programme Gambas avec un utilisateur non root.
J'ai eu beau me battre avec toutes les permissions sur /dev/gpiomem ou /dev/mem, rien a faire. Je n'ai pas lâché le morceau mais plus tard.

2eme tentative: avec la librarie 'wiringPI'

Site Web: http://wiringpi.com/reference/

Je préfère de loin cette librairie et son utilisation a la précédente car elle offre plus de possibilités que juste (grosso modo) activer/désactiver un port GPIO, mais j'y reviendrai plus tard avec plus d'explications.
De plus, cette librairie offre plusieurs modes de fonctionnement:
- Soit le pilotage de la puce broadcom (BCM) directement (nécessite les droits 'root')
- Soit le pilotage des GPIOs (Nécessite de modifier les droits et le group pour l'utilisateur non 'root', Ex: user 'pi', ou user 'dietpi')
- Soit le mode WiringPI faisant abstraction des différents bus GPIO des version de Raspberry Pi (v1, v2, v3, etc...) en normalisant les numéros de port GPIOs a piloter (nécessite les droits 'root')
- Soit le mode 'sysfs', identique au pilotage des ports GPIOs en shell par l'interface /sys/class/gpio. Cette derniere solution est utilisable sous un utilisateur landa et ne necessite pas forcement les droits 'root' comme les 3 précedantes (Dans mon cas cela n'a pas fonctionné et j'ai du me rabattre sur le mode 'pilotage des GPIOs'.

* Dans le package, est fourni la commande 'gpio', offrant toutes les possibitées de la librairies et plus encore donc au final il y a vraiment plein de façons de faire son affaire.


C'est donc sur cette derniere solution que je suis parti a faire mes tests:
- Librairie 'wiringPI'
- Mode: pilotage des GPIOs (avec modification des droits pour mon utilisateur 'dietpi' au groupe 'gpio')

Donc le projet 'testwebform', derniere version que je vais poser sous peu, te permettra de tester et voir plus concretement comme cela se passe sous le capot si je puis dire.

Nota: Afin de pouvoir gerer facilement tous les boutons et Checkbox dans mon l'interface, j'ai utilisé les options 'Group' + 'Tag' et je te suggére de partir avec ceci car cela simplifie grandement le code.
Le principe est que pour chaque CheckBox/Bouton, on lui indique un nom de 'Group' identique et pour chacun un 'Tag' différent pour les différencier.
Ainsi on obtient 1 seule procedure d'evenement pour tout ces CheckBox/Bouton et on les identifie grace a leur Tag.
Moins de code et plsu de souplesse... et surtout pas besoin de 'EVAL' au final... :)

Voila pour l'instant, la suite très bientot... car j'ai encore plein de choses en cours pour ton projet...

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
O.Coquet#22 Posté le 22/11/2017 à 20:47:34
Ce qui n'est pas devra-t-être inventépour ma part le mode root ne me dérange pas plus que ça, la librairie pigpio est tout aussi complète que la wiringpi (va voir la page de références ici: http://abyz.me.uk/rpi/pigpio/cif.html)

en fait a mon avis les deux se valent !

pour ta gestion des contrôles c'est une solution qui permet de gérer de façon groupée les événement, mais si tu dois parcourir une liste de contrôles qui ne sont pas proches dans la hiérarchie, ça ne marche pas.

avec eval, ça roule tout seul, tu nome tes contrôles xxx1,xxx2,......xxx21 et tu peux parcourir les contrôles avec une simple boucle for-next....

si tu veux un exemple, je peux te le donner, tu verras c'est assez pratique !

Pour spheris, regarde le lien ci-dessus, il existe des fonctions dans la librairie qui permettent d'écrire un mot sur le port, ce qui permet de set/reset, tous les bits que tu veux en une seule fois :)

amitié
Olivier
Raspberry pi 3 et 4
Quelques autres "vieux" ordinateurs !
didier18#23 Posté le 22/11/2017 à 23:41:46
Bonjour

Une petite question, linuxos dans le projet testwebform tu as mis tout un tas de RadioButton (1 pour le On et 1 pour le Off (qui annule l'état du précédent)), n'aurait-il pas été plus judicieux d'utiliser des SwitchButton ?
A l'utilisation ce serai plus parlant et à programmer moins de composants à gérer...

O.Coquet, oui un exemple de la fonction eval, c'est toujours bon "apprendre" ;-)

En tout cas beau projet...

Bonne continuation.
linuxos#24 Posté le 23/11/2017 à 00:10:18
Un peu de sel, de poivre et la crevette sera... Bonjour,

Voila, j'ai déposé la 2eme version du projet: testwebform , qui permet cette fois de piloter les GPIOs (simplement pour le moment).

didier18, Oui en effet, j'aurais pu et je ne sais pas pourquoi je suis parti sur des RadioButton.... :) Merci

O.Coquet, c'est une autre façon de faire les choses. Je pensais simplement que tu n'avais pas vu ces options de 'Group' car moi même je ne les ai découverte que tard dans Gambas. Pas eu besoin avant pour être plus exacte. Un exemple serait pas de trop comm eproposé par didier18.

Merci pour le lien, je m'aperçois que j'avais vraiment survolé la librarie 'pigpio', il y a plein de choses que j'avais pas vu. Je vais rapidement y jetter un oeil.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
O.Coquet#25 Posté le 23/11/2017 à 08:06:19
Ce qui n'est pas devra-t-être inventéVoici un exemple:

<---
For i = 1 To 5
str_cmd = "let principal.grpbtn" & i & ".enabled = True"
Eval(str_cmd)
str_cmd = "let principal.indiv_btn" & i & ".enabled = True"
Eval(str_cmd)
str_cmd = "let principal.spec_btn" & i & ".enabled = True"
Eval(str_cmd)
Next
--->

Dans cet exemple j'ai 3 série de 5 boutons qui sont désactivés (.Enabled=false) au démarrage du programme.
Après initialisation concluante de la bibliothèque, je souhaite les activer (.Enabled = true).
Quand j'ai créé l'interface dans l'IDE de gambas, j'ai créé le premier de chaque bouton avec un nom se terminant par "1", puis copier/coller pour les quatre autres.
L'ide étant bien faite, elle les a numérotés au faire et à mesure des "coller" => ..2,3,4,5
la boucle ci dessus me permet de les activer séquentiellement comme si ils étaient indexés !

Voila pour l'exemple :D

amitié
Olivier
Raspberry pi 3 et 4
Quelques autres "vieux" ordinateurs !
O.Coquet#26 Posté le 23/11/2017 à 08:10:09
Ce qui n'est pas devra-t-être inventéA noter qu'avec la fonction Eval() il est indispensable de qualifier intégralement le contrôle depuis son parent. Dans mon exemple les contrôles se trouvent sur la Form "principal" donc : "principal.grpbtn" & i équivaut à grpbtn3 si i vaut 3 !
Idem pour le let, Eval() ne peut effectuer une assignation que si on utilise ce mot clef dans la chaîne de commande.

amitié
Olivier
Raspberry pi 3 et 4
Quelques autres "vieux" ordinateurs !
didier18#27 Posté le 23/11/2017 à 23:53:47
Bonsoir

J'ai posté un petit exemple pour étayer l'utilisation des groupes et de la propriété "Tag" (exempleappgroupe) dans Accessoires. Oups je me suis trompé, j'aurai du le mettre dans divers...
En fait Linuxos, avec cet exemple tu n'as même plus besoin de passer par des RadioButton ou des SwitchButton, il suffit juste de cliquer sur la pbx concernée (toujours des boutons en moins à gérer).
O.Coquet, l'exemple se rapproche de ce que tu fais, sauf que tu gères au moins 3 groupes et que tu récupère l'index du composant "sa valeur i" (str_cmd = "let principal.grpbtn" & i & ".enabled = True") alors que je met cette valeur dans la propriété "Tag" du composant. Il y a au moins 1 avantage à passer par la propriété "Tag" du composant, c'est lorsque tu déplaces ton composant d'un form sur un autre, le "Tag" reste identique. Bien sur on peut ajouter plein d'autres choses dans le "Tag", pas uniquement un n° d'index...

Bonne soirée.

Edit du 24/11/2017 Changement de catégorie pour le code exempleappgroupe (de Accessoires => Divers)

O.Coquet#28 Posté le 24/11/2017 à 09:01:01
Ce qui n'est pas devra-t-être inventéserte mais tu ne peux pas (avec ton exemple) accéder a un contrôle par son index dans une boucle for next ?

de plus tu es obligé de parcourir tous les contrôles et de les tester (valeur tag) pour en modifier un seul :)

amitié
olivier
Raspberry pi 3 et 4
Quelques autres "vieux" ordinateurs !
didier18#29 Posté le 24/11/2017 à 10:09:09
Bonjour

serte mais tu ne peux pas (avec ton exemple) accéder a un contrôle par son index dans une boucle for next ?

Si, si on peux... Regarde par exemple la procédure
1
2
3
4
5
PRIVATE SUB actusetat() 'actualise setat
...
FOR i = 0 TO 15 'pour chaque pbx on va relever sa valeur
IF pbx[i].Picture = Picture["icon:/16/lamp"] THEN 'si la pbx affiche cette image
...


i sert non seulement au comptage dans la boucle, mais sert aussi à indiquer la valeur tag de la pbx.

...parcourir tous les contrôles et de les tester (valeur tag) pour en modifier un seul

Ce n'est pas une obligation, tu peux accéder à 1 seul élément si tu le souhaite, par exemple la procédure grpbx_MouseDown(). En gros j'indique à gambas de lire la valeur tag de la dernière pbx sur laquelle j'ai cliqué pbx[Last.Tag], si je clique sur la 3ème pbx en partant du haut, son tag est 2 donc c'est comme si j'avais écrit directement pbx[2].

C'est encore plus flagrant dans la procédure grpbx_Enter().
1
2
3
PUBLIC SUB grpbx_Enter() 'lorsque le pointeur passe sur une des pbx
pbx[LAST.Tag].Tooltip = ("pbx ") & pbx[LAST.Tag].Tag 'affiche la valeur Tag de la pbx dans son tooltip
END

Là tu vois bien que je n'accède qu'à une seule pbx à la fois...

Bonne journée.
O.Coquet#30 Posté le 25/11/2017 à 16:22:50
Ce qui n'est pas devra-t-être inventébon, ca avance, côté programation c'est au point à quelques chouchouilles près.

la je bosse sur la réalisation de la partie interface électronique, pas plus compliqué mais plus long.

amité
Olivier
Raspberry pi 3 et 4
Quelques autres "vieux" ordinateurs !
123