Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » 3ForALL ! La documentation
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

3ForALL ! La documentation

Posté le 29/01/2020 21:12

nécessite notamment de C.Basic
lien des g1m : Forge
lien des logiciel ou fichier externe (notamment fichier en python) : Fichiers

1. Fabrication du module 3ForAll
Attention : vous réalisez ce tutoriel à vos risques et périls, vous pourriez très bien griller votre matériel en faisant une fausse manip par exemple. Planète-Casio et moi-même ne seront pas responsables de la détérioration de votre matériel ou autres problèmes qui pourrait vous arriver.

Il y a plusieurs manières de faire le module pour différents supports.
Methode 1 (pour PC ou Smartphone):
Pour construire le système qui établira la communication il vous faudra :
-un arduino
-un module Bluetooth
-une diode
-des câbles
-Une prise jack/mini jack

j'ai faits un vidéo tutoriel pour faire un connecteur mini jack rapidement afin que vous ne bousiller pas votre cabe 3-pins, il vous faudra trois câbles dénudés aux extrémités, du papier (cartonné ou simple) et du scotch. Il faut aussi que les câbles ne se touchent pas entre eux une fois replié.
Pour ceux qui ont perdu le câble 3-pins de votre calculatrice il y a une solution (dont moi aussi j'ai utilisé). Souvent lorsque vous achetez un casque bluetooth, on peut quand même connecter un câble sur celui-ci, ce câble est la plupart du temps un câble mini jack d'un côté et jack de l'autre, voilà.






Puis il faut téléverser le code dans l'arduino

    #include <SoftwareSerial.h>

    SoftwareSerial serialCalc(10, 11); // RX, TX

    void setup()  
    {
        // Ouvre les ports serials
        Serial.begin(9600); //Pour la com avec l'ordi. Dont les ports sont Tx:1, Rx:0
        serialCalc.begin(9600); //Pour la com avec la calculatrice. Les  Donc les ports sont Tx:11, Rx:10 (ils sont définis juste au dessus)
    }

    void loop()
    {
        //si la calculatrice nous envoi quelque chose, alors on l'envoi sur l'ordi
        if(serialCalc.available())
            Serial.write(serialCalc.read());
        //si l'ordi nous envoi quelque chose, alors on l'envoi sur la calculatrice
        if(Serial.available())
            serialCalc.write(Serial.read());
    }

pour plus d'informations:
Tutoriel

Méthode 2 (pour PC):
Pour construire le système qui établira la communication il vous faudra les éléments de la méthode 1 mais sans le module bluetooth, et refaire le même schéma sans le module.

Méthode 3 (pour Smartphone):
Pour construire le système qui établira la communication il vous faudra :
-un module Bluetooth
-une diode
-des câbles
-Une prise jack/mini jack
-Une source d'énergie de 3,3V (batterie)

Relier le VCC du module Bluetooth au + de la batterie, le GND du module Bluetooth et de la prise mini jack au - de la batterie, le TXD du module Bluetooth au RX de la prise mini jack et le RXD du module Bluetooth au TX de la prise mini jack.

2. Recevoir des informations depuis la calculatrice
C'est le programme "RECIVE.g1m" qui se gère de la réception.
Code du g1m
Cliquer pour enrouler
{1, 6} -> Dim Mat r
'#Str r
OpenComport38k, 5, 0
Receive38k Str r
CloseComport38k
{1, Exp(Str r)} -> Dim Mat 
'#Str r
Send("&S:", 5)
OpenComport38k, 5, 0
Receive38k Str r
CloseComport38k
Return

Tout d'abord l'ordi ou le Smartphone va envoyer le nombre de caractère du String qu'il va envoyer après.
Puis la calculatrice va précharger le Str avec le bon nombre de caratères et renvoie à l'ordi qu'il peut envoyer le String.
Et enfin la calculatrice reçoit le String dans Str r.

3.Envoyer des informations depuis la calculatrice
il y a qu'une seule ligne qui se gère de ça c'est :
Send("&<domaine>:&<sous domaine>:<valeur>", 5)
Le "domaine" c'est la fonction du programmme d'origine, par exemple si le programme a pour but de lire une vidéo alors le domaine pourrai être "&video:".
Le sous domaine c'est la fonction qui correspond au domaine par exemple si on veut que le pc envoie les images de la vidéo depuis un URL alors le sous domaine pourrai être "&URL:"
Et enfin la valeur dans le cas de l'exemple de la vidéo serai l'url de la vidéo.
résultat final : Send("&video:&URL:https://raw.githubusercontent.com/leofarhi/3ForAll/master/video1.txt", 5)

(dans mon programme du lecteur vidéo, j'ai renplacé "&video:" par "&vlc:" en référence du logiciel VLC sur Windows)

Envoyer et Recevoir des informations depuis un ordinateur (en Python):
Il existe une version compiler du programme en .exe du code python ci dessous :
Code simplifier en Python
Cliquer pour enrouler
from bs4 import BeautifulSoup
import urllib3
import requests
import socket
import serial
import time
import sys
import os
O=False
for i in range(400):
    if O:
        break
    try:
        arduino=serial.Serial("/COM"+str(i),timeout=1,baudrate=9600)#port de l'arduino à régler en fonction de celui que vous utilisez
        O=True
    except:
        ""
print("connecté: /COM",i)
try:
    # Python2
    from urllib2 import urlopen
except ImportError:
    # Python3
    from urllib.request import urlopen
def web(url):
    http = urllib3.PoolManager()
    #print(url)

    try:
            response = requests.get(url)
            map_html = BeautifulSoup(response.content, "html.parser")
            map_html=str(map_html)
            map_html=map_html.replace("</string>","")
            map_html=map_html.replace("é","é")
    except:
            map_html = (urlopen(url).read()).decode()
    return str(map_html)
def sep(texte):
    lst2=["\n","\r","\t"]
    #texte=texte.split("<body")[1]
    a=texte.split(">")
    del a[0]
    b=[]
    for i in a:
        d=i.split("<")[0]
        if d!="":
            if not d in lst2:
                b.append(d)
        
    return b
def write(txt):
    arduino.write(str("000000"[:6-len(str(len(str(txt))))]+str(len(str(txt)))).encode())
    b=0
    while True:
        a=read()
        if a!="":
            break
        if b>3:
            break
        b=b+1
    time.sleep(0.5)
    arduino.write(str(txt).encode())


C'est la fonction write qui permet d'envoyer des données à la calculatrice, on lui fournit le Sting, il calcule le nombre de caractères qu'il y a dans le String puis envoie le nombre à la calto.
Puis il attend une réponse de la calculatrice avant d'envoyer le String au complet.

Pour recevoir les données c'est la fonction read qui s'en charge.


je détaillerai chacun de mes programmes dans d'autres topics.


Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Citer : Posté le 30/01/2020 08:49 | #


J'ai toujours mon câble Util-Pocket quelque part, sur un coup de chance ça peut fonctionner.
"Compiler" un code Python, pourquoi ?
Merci pour le tuto (c'est pas une doc à proprement parler mais ça ira).
Time is running out
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 30/01/2020 10:18 | #


Le code python présent sur ce topic est simplifiée, il y a une version complète dans les liens des fichiers externes. Avec la version complète tu pourras tester la communication pour l'envoie de vidéo par exemple et c'est cette version qui est compiler.
"La créativité est contagieuse faites la tourner"
Albert Einstein
Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Citer : Posté le 30/01/2020 10:27 | #


Je sais, j'ai lu quand même
Je demande pourquoi tu "compiles" un code Python (peu importe duquel tu parles).
Je ne pense pas que ça ait un quelconque intérêt niveau perf dans ce cas là, à part peut-être obfusquer le code
Time is running out
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 30/01/2020 11:20 | #


C'est pour ceux qui ne possèdent pas python mais qu'ils veulent tester 3ForAll
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 30/01/2020 11:27 | #


Notez que compiler vers du bytecode ou de code natif JIT a un véritable impact sur la performance, mais c'est automatique et fait différemment sur chaque machine.

Ici il s'agit surtout de mettre ensemble le bytecode, les bibliothèques et l'interpréteur Python dans un seul exécutable pour que ça puisse être lancé sans effort. La performance ne sera pas différente d'un Python habituel, par contre effectivement ça évite à l'utilisateur d'installer Python.
Dark storm En ligne Labélisateur Points: 11542 Défis: 176 Message

Citer : Posté le 30/01/2020 11:56 | #


Hmm, techniquement ça demande à l'utilisateur d'installer Python pour chaque soft qui l'embarque.

Après on le fait déjà pour Chrome, donc bon
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 30/01/2020 21:37 | #


J'ai essayé de changer le baudrate mais cela m'a provoqué des erreurs
"La créativité est contagieuse faites la tourner"
Albert Einstein

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 86 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd