Architecture du projet (temps reel)

Hello a tous,

Je suis sur un projet de controle climatique, et je ne vois pas trop comment aborder le probleme J'ai un Arduino UNO qui controle le climat, il envoie toutes les secondes sur le port série un status du climat mesuré. Pour le configurer, je peux aussi lui envoyer par ce meme port série des commandes (j'ai codé une sorte de protocole de communication série) Pour le moment un pc est connecte en USB a cet Arduino, et un programme C# me permet de lire les valeurs de mon climat et d'y envoyer mes commandes, tout ca marche super, et en réseau je prends juste le controle du pc pour un acces mondial :)

Maintenant mon probleme c'est que j'aimerais remplacer mon pc par un Raspberry (ou n'importe quel mini pc linux). Les adaptations seraient donc au minimum: -Exit le programme C# pour la communication avec l'arduino -Exit l'interface graphique (c'est vraiment pas pour brancher un écran le raspberry) -Exit la prise de controle du pc (le raspberry en ssh, c'est pas terrible pour dessiner les graphiques)

Ce que j'aimerais garder: -La communication série entre l'arduino et le pc qui le controle (c'est facile a gerer, debugger, et pas besoin de faire un serveur web (shield), stocker des pages internet etc...) -L'arduino en lui meme, j'ai besoin de toutes les pins, digital, analogique I2C et SPI :)

Ce que j'imaginais: Un raspberry connecte en USB avec l'arduino Serveur Apache + php (+mysql, possible ca?) pour le service des pages internet Le script php se connectant a l'arduino

Mais: Comment afficher une page resultant d'un script php qui ne se termine jamais (la lecture est sans fin, les data se mettent a jour tout le temps), je vais certainement me choper un timeout Je n'imagine meme pas 2 connections simultanées sur le meme script, forcément un des 2 va se voir refuser la connection (port com déja utilisé)

Idée et questions: Créer un daemon sur le raspberry qui va lire les infos du port série pour les rendre disponibles dans la mémoire du raspberry Un script php lis la mémoire pour afficher les résultats, et peut envoyer les commandes en mémoire directement pour etre captées par le daemon

La question que je me pose maintenant c'est en quoi/comment je vais pouvoir mettre ca en oeuvre. J'ai lu un peu sur le python, ca a l'air intéressant, mais comment faire passer des infos entre 2 programmes en general ? (le script internet, et le programme "pc")

Si qqn a une idée, suggestion concernant l'architecture de mon projet dans les grandes lignes :)

Merci d'avance

Sna

Snaaaa:
J’ai un Arduino UNO qui controle le climat,

bonsoir

[HUM]
ça fait un peu peur quand même :grin:

bonjour,

Comment afficher une page resultant d'un script php qui ne se termine jamais (la lecture est sans fin, les data se mettent a jour tout le temps), je vais certainement me choper un timeout Je n'imagine meme pas 2 connections simultanées sur le meme script, forcément un des 2 va se voir refuser la connection (port com déja utilisé)

CAD? tu peux pas avoir un délai entre 2 data? histoire de vérifier si une infos n'est pas envoyée vers le nono? si pas d'infos, on recharge les données, sinon on écoute le port ACM0(linux)

c'est ce que je fais avec mon rasp et un gsm en rx/tx, toutes les 2s, il écoute pour vérifier si rien ne rentre.

Artouste:

Snaaaa: J'ai un Arduino UNO [u]qui controle[/u] le climat,

bonsoir

[HUM] ça fait un peu peur quand même :grin:

Tout dépend du volume d'air a contrôler, c'est amusant de jouer a Dieu :P

Sinon je ne vois pas trop comment ca se passe En C#, j'ouvre mon port com au début du programme, et a chaque arrivée de data je lis le port com en question C'est un accès exclusif depuis le moment ou j'ouvre le port, et je ne le ferme qu'a la fermeture du programme

Ca se passe comment en php? Car si un script doit ouvrir le port, lire le port et le fermer (pour afficher la page) il ne recevra pas de data pendant ce temps. Et si il laisse le port ouvert, ca se passe comment au niveau du chargement? et si 2 personnes accèdent au php en même temps, il se passe quoi? (il n'essaye pas d'ouvrir 2 fois le même port en même temps?) dans mon esprit il manque un morceau, dans mon c# c'est l'objet qui se met a jour tout seul et sur lequel je base mon affichage

Sinon j'ai bien sur un intervalle entre mes acquisitions de données, les envois se font toutes les secondes

si 2 personnes interrogent le php, ca passe, mais tout dépend de ta prog. tu peux envoyer les datas dans mysql afin de les interroger sans ouvrir le COM ;) un prog en jquery affichant si le COM est ouvert par exemple et bloque l'autre pc pour l'ouvrir. un script en python dédié et le php pour lire les data

Ok, c’est un peu ce que je pensais aussi
un programme en python qui remplit une db MySQL avec un record unique, la page php lira ce record
je peux même mettre déjà une 2e db pour l’historique :slight_smile:
je voulais éviter la db ou les fichiers de transferts mais je ne vais pas pouvoir je crois :slight_smile:

Ca va juste faire une connection par seconde par client sur la db, faudra pas se connecter a trop, mais on peut vivre avec :slight_smile:

merci de tes conseils :slight_smile:

ca le fera sans trop de soucis. faut pas avoir 25000 connexions quand même :grin: j'ai testé motion sur raspberry avec mise en bdd tout en utilisant une autre connexion pour consulter l'historique, ca bronche pas. il suffit de ne pas installer le Xserver de debian pour libérer de la ram.

Snaaaa je suis très intéresse par votre code C# de communication entre PC Linux et Arduino je développe un projet de Domotique est je suis complétement bloqué pour faire communiquer mon PC Linux et ma Leonardo (il faut que ma carte Linux récupère les valeurs de capteurs analogiques branchés sur ma Leonardo pour alimenter une interface web (je suis expert PHP et Mysql si vous avez des question hésitez pas)...). Pouvez-vous poster les codes de votre programme de communication USB entre PC Linux et Arduino ?