IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart



  1. #1
    mweber

    IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart


    ------

    Bonjour à tous,

    Il y a quelques temps, j'avais installé, sous un Raspberry PI (Raspbian) embarqué dans une maquette de bateau, un serveur WEB (Apache).

    Un navigateur web connecté à ce serveur, accédait par le biais de requêtes XMLHttpRequest, à un fichier de données pour les afficher à l'écran.

    Bref, l'idée était de créer une IHM sur une page web pour visualiser la télémétrie du bateau et éventuellement le piloter.

    Les données, créées par un script Python, étaient du genre: vitesse, température cap, gps etc..

    Le fichier était continuellement écrasé par les données les plus récentes, car ici on se contentait d'afficher des valeurs numériques à l'écran, ou même des des graphes mis à jour avec la librairie JavaScript Highchart. (Le navigateur stockait l'historique des données tant que l'on restait sur la page).

    Pour éviter d’user (par les écritures répétées) inutilement la carte SD du Raspberry PI, le fichier était monté sur un RAMdisk (disque dur virtuel placé en mémoire).

    Ma question :

    Peut t'on faire mieux ?

    C'est à dire ne pas passer par un fichier, mais utiliser un "flux" quelconque ?
    Je peux déja tester avec fetch plutot qu'XMLHttpRequest pour rajeunir le code...


    Sur les Microcontrôleurs WiFi ESP8266 ou ESP32, j'utilise des fonctions qui interceptent directement les requêtes du client et lui renvoie les données attendues

    Pour ceux que ça intéressent : https://philpetitpa.pagesperso-orange.fr/ESP_AJAX.pdf

    (Perso, pour les ESP, j'utilise un serveur synchrone plutôt qu'asynchrone car j'ai eu des soucis (plantage aléatoires))


    Merci

    Matt

    -----

  2. #2
    pm42

    Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    On peut faire mieux en créant le site Web directement en Python: il récupère les données et au lieu d'écrire un fichier, il les charge en mémoire et quand un requête arrive, il crée une page mise en forme avec tableaux, éventuellement graphiques...
    Il y a plusieurs frameworks pour faire ça mais j'aime bien dash même s'il faut faire l'effort de rentrer dedans au début.

    https://ledatascientist.com/creer-un...que-avec-dash/

    Et même plus besoin d'Apache.

  3. #3
    mweber

    [RESOLU] Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    Salut PM24,

    Effectivement j'avais creusé de ce coté (serveur python avec les CGI), sans arriver à le faire marcher

    Puis je viens de trouver ça :
    https://stackoverflow.com/questions/...unning-wsgisoa

    Et ca marche il faut juste remplacer les

    return [response_body] par :

    return [response_body.encode()]

    Pour que ça trourne en Python 3.xx

    et éventuellement changer de port si il est déjà occupé...

    Merci !

  4. #4
    pm42

    Re : [RESOLU] Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    Citation Envoyé par mweber Voir le message
    Effectivement j'avais creusé de ce coté (serveur python avec les CGI), sans arriver à le faire marcher
    Normal : les CGI, ça commence à dater et je ne pense pas que ce soit la technologie utilisée par les frameworks Web Python actuels.

    Citation Envoyé par mweber Voir le message
    Puis je viens de trouver ça :
    https://stackoverflow.com/questions/...unning-wsgisoa
    Et ca marche
    Parfait.

  5. A voir en vidéo sur Futura
  6. #5
    mweber

    Re : [RESOLU] Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    Salut, Je me sens obligé de rouvrir mon sujet car j'ai des gros doutes sur les perfs attendu d'un codage basé sur Python...

    En effet il me faut approcher d'un temps réel (souple) avec une boucle de calcul (trigonométrie...) tournant à 250 Hz (acquisition données sur port rs485 (ça, à 100 Hz) et récupération d'une position via sockets UDP )

    Je suis en train te tester les même idées serveur avec Ajax mais en c/c++ cette fois. Par contre j'ai rien trouvé comme exemple concret simple à utiliser (genre code avec zéro commentaires...)

    Quelqu'un aurai t'il un exemple basique d’échange de données ?

    merci je me prends la tête depuis 1 semaine !

  7. #6
    pm42

    Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    Si tu veux des perfs soit tu changes de langage en effet soit tu regardes du côté de Numba ou de Cython par exemple.

    Pour le reste je n’ai pas compris ton problème vu que tu dis pas ce que tu veux faire communiquer.
    Sachant que le C et le C++ commencent à vieillir et que ce ne sont pas les langages les plus adaptés au monde du Web.
    Tu peux aussi jeter un œil à Go et Rust qui sont leurs plus probables successeurs.

  8. #7
    mweber

    Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    Salut !

    Si tu veux des perfs soit tu changes de langage en effet soit tu regardes du côté de Numba ou de Cython par exemple.
    Ah oui c'est bon ça ! Énorme avantage de ne pas avoir à reprendre dans un autre langage mes bouts de codes et garder une certaine flexibilité à tester le code sous Windows avant transfert et compilation.
    Certes j'étais tombé sur Cython, que j'ai survolé, et j'étais resté sur ma faim avec leur exemple, mais, j'étais fatigué hier soir à chercher des solutions dans tout les sens !

    Je vais déjà voir Numba ...qui à l'air de promettre la lune

    Pour le reste je n’ai pas compris ton problème vu que tu dis pas ce que tu veux faire communiquer.
    Ok:

    Je vais avoir une maquette de bateau équipé de propulseurs type pods: (moteur monté sur un servomoteur orientable à 360°)

    Cette maquette évolue en bassin dans un bâtiment => pas de GPS.

    Un système de trajectographie par caméras au bord du bassin (via des trames UDP en wifi) et une centrale inertielle embarquée (via un bus can ou rs485) me donne l'attitude du navire (roulis lacet tangage).
    Les pods sont orientés et poussent plus ou moins fort selon un algo qui, par exemple, maintient la position du bateau à un endroit précis sur le bassin, et ce, malgré la houle.

    Un serveur web passant par le wifi permet de prendre le contrôle du navire ou d'activer un mode automatique (maintient de cap, ou de position...) et de visualiser tout un tas de paramètres (état batterie, attitude, PWM des moteurs, orientation des pods..) et d'activer un enregistrement des paramètres dans un fichier .csv, qui sera récupéré grâce à un serveur samba.

    Et donc on envoie de la houle dans le bassin pour corser l'affaire...

    Et les pods sont un peu particulier, mais cela reste pour le moment confidentiel

    D’où le besoin d'une certaine puissance de calcul avec des contraintes de poids (maquette de 8 kg)
    Beau projet (de recherche scientifique) n'es-ce pas ?


    Sachant que le C et le C++ commencent à vieillir et que ce ne sont pas les langages les plus adaptés au monde du Web
    .

    Oui et non, prends Arduino, ou l'info industrielle. Ok pour le web c'est évident que PHP JAVA JAVASCRIPT et cie sont parfaitement à l'aise.
    Sais tu qu'ici les équipes numériques bossent encore en Fortran !

    Tu peux aussi jeter un œil à Go et Rust qui sont leurs plus probables successeurs.
    C'est vrais que C et C++ on un beau remplaçant avec Rust (surtout avec les segmentationfault et Cie).

    Dommage qu'il aie changés la syntaxe, ça fait encore une nouvelle syntaxe à retenir (que de langages circulent!) !
    Enfin... ça me rappelle les standards Pal Secam Ntsc ou DVI HDMI Displayport, ou Qwerty, azerty, bépo...

    Je ne connais en Go que le jeu Je vais regarder ca

    Merci
    Dernière modification par mweber ; 28/01/2022 à 09h47.

  9. #8
    pm42

    Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    Citation Envoyé par mweber Voir le message
    Beau projet (de recherche scientifique) n'es-ce pas ?
    Oui, c'est un beau projet en effet.
    Perso et dans ton cas je ferais tout en Python sauf les parties qui nécessitent de la grosse perf où je me poserais la question si Python ne suffit pas.
    Numba est très, très efficace sur les bout de code qu'il arrive à compiler. On peut faire de la compilation à la volée ou "classique", statique et on gagne encore un peu en perfs.
    Après, il faut voir si cela colle bien à ton besoin.
    Tu peux aussi regarder Jython, Pypy et d'autres implémentations de Python qui gardent le même langage mais vont plus vite. On perd pas mal de librairies mais pour juste la partie qui traite le temps réel, cela peut répondre à ton besoin.


    Citation Envoyé par mweber Voir le message
    Oui et non, prends Arduino, ou l'info industrielle. Ok pour le web c'est évident que PHP JAVA JAVASCRIPT et cie sont parfaitement à l'aise.
    Sais tu qu'ici les équipes numériques bossent encore en Fortran !
    Oui, je sais et je connais la raison : les compilos Fortran sont parmi les plus efficaces qui soient et il y a de grosses bibliothèques. Je vais t'épargner l'histoire des compilos Fortran mais même le tout 1er était déjà bien optimisé.


    Citation Envoyé par mweber Voir le message
    C'est vrais que C et C++ on un beau remplaçant avec Rust (surtout avec les segmentationfault et Cie).
    J'ai fait beaucoup de C et C++ dans ma carrière. Sauf à n'avoir pas le choix, j'évite à tout prix aujourd'hui.

  10. #9
    mweber

    Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    Dacc, merci !

    Donc si j'ai bien compris, je fais des .py pour mes différentes partie de code (serveur, sockets udp de réception position, traitement et calcul des pwm moteur, enregistrement (loggeur)... etc) en faisant des threads pour pas écrouler le CPU.

    Les parties ayant besoin de hautes performances (genre: les calculs...) je les compiles et inclue ces librairies compilées (des .so ou équivalent, j'imagine ?) dans mon fichier python main.py qui rassemblera tout ce joyeux monde.

    Matt (je ne suis pas du tout un expert en serpent.. )

  11. #10
    pm42

    Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    Oui c’est une bonne approche. Si ça marche parfait. Si ce n’est pas suffisant côté perfs, on pourra toujours regarder les alternatives mais intuitivement je dirais que ça devrait passer.

  12. #11
    mweber

    Re : IHM tournant sur Raspberry PI avec XMLHttpRequest Apache Python et Highchart

    Merci pour tes conseils,

    Je te tiens au courant !
    A+
    Matt

Discussions similaires

  1. Utiliser un afficheur avec une raspberry sur python
    Par TLVD0 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 10/06/2021, 12h08
  2. Python – Raspberry pi - Multithreading – Robotique – Thread interrompant un autre thread
    Par zepeu dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 26/05/2018, 12h49
  3. [Python] subprocess, lancer un autre programme avec python
    Par Loupsio dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 30/11/2016, 18h56
  4. Python-Raspberry pi
    Par invite38dd7265 dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 20/05/2015, 10h40
  5. Raspberry Pi, Python et écran tactile
    Par invite54c8f9c6 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 02/07/2014, 12h46