{"id":126,"date":"2018-01-11T22:11:32","date_gmt":"2018-01-11T21:11:32","guid":{"rendered":"https:\/\/benjaminperonne.fr\/src\/wordpress\/?p=126"},"modified":"2021-04-09T03:36:43","modified_gmt":"2021-04-09T01:36:43","slug":"bluetooth-keyboard-with-mathematical-function-symbol-unfinished","status":"publish","type":"post","link":"https:\/\/benjaminperonne.fr\/src\/wordpress\/2018\/01\/11\/bluetooth-keyboard-with-mathematical-function-symbol-unfinished\/","title":{"rendered":"Bluetooth keyboard with mathematical function &#038; Symbol (unfinished)"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Prerequisite<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The first thing is to install PyBluez,a bluetooth module, Open a terminal (command prompt on Windows) and enter :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install pybluez<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then you need the tkinter module, in order to be able to create a graphical interface :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install tkinter<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We now import our necessary module<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># -*- coding: cp1252 -*-\n\n# Importation\nfrom Tkinter import * # On importe Tkinter\nimport tkMessageBox, tkFileDialog, Tkconstants # On importe le module messagebox et filedialog\nimport serial # On importe le module de communication serie version pyserial-3.4\nimport time # On importe le module temps\nimport codecs\nimport tkFont<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Main Code<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>#-------------------------------------------------------#\n# Code Application #\n#-------------------------------------------------------#\n\n\n# Declaration des variables globales\ncomEtablie=False\nser1=0\n\n# Les fonctions de l'application\ndef scanPort():\n# Scan les ports. retourne une liste des noms des ports\navailable = &#91;\"\"]\nfor i in range(25):\ntry:\nport = \"COM\"+str(i)\ns = serial.Serial(port)\navailable.append(s.portstr)\ns.close()\nexcept serial.SerialException:\npass\nreturn available\n\ndef connecter():\n# Connection \u00c3  la cible\nglobal comEtablie\nglobal ser1\n\ntry:\nser1 = serial.Serial(\"COM3\",timeout=1) #Configurer le com manuellement\nprint \"connexion etablie\"\n\ncomEtablie=True\n\nexcept serial.SerialException:\nprint \"erreur de connexion\"\n\ndef deconnecter():\n# Deconnection de la cible\nglobal comEtablie\nglobal ser1\n\nser1.close()\n\ncomEtablie=False\n\ndef configuration(valString):\n\"\"\"\nvalString : (str) : valeur sous forme de chaine \u00e0 envoyer\n\"\"\"\nglobal comEtablie\nglobal ser1\n\nif comEtablie==True:\nser1.write(valString.encode())\ntime.sleep(0.3)\n\ndef NewFile():\n\"\"\"permet d'afficher a \u00c3  l'\u00e9cran un message d'information sur une ouvelle fen\u00c3\u00aatre\"\"\"\ntkMessageBox.showinfo(\"New File\")\n\ndef about():\ntkMessageBox.showinfo(\"About\", \"This is a build version of serial bluetooth communication\\nAuth : Benjamin Peronne\")\n\ndef Open():\n\"\"\"permet d'ouvrir un fichier ext\u00e9rieur dans la fen\u00eatre\nfichier = open(\"data.txt\", \"a\")\nfichier.write(\"Bonjour monde\")\nfichier.close()\nfen1.filename\n\"\"\"\nglobal chemin_fichier\nchemin_fichier= tkFileDialog.askopenfilename(initialdir = \"\/\",title = \"Select file\",filetypes = ((\"text files\",\"*.txt\"),(\"all files\",\"*.*\")))\nprint (chemin_fichier)\nmon_fichier = open(chemin_fichier, \"r\")\ncontenu = mon_fichier.read()\nprint(contenu)\ntextW.insert(END,contenu)\nmon_fichier.close()\n\ndef Configuration(profil):\n\"\"\"permet d'acceder au profil demander celon l'odre r\u00e9seau\"\"\"\ntkMessageBox.showwarning(profil)\n\ndef Save():\nglobal chemin_fichier\ncontenu=textW.get(\"1.0\",END)\nprint contenu\nmon_fichier = open(chemin_fichier, \"w\")\nmon_fichier.write(contenu)\nmon_fichier.close()\n\ndef recevoir():\n# Recoit les donn\u00e9es sur RXD\nglobal ser1\nglobal comEtablie\nprofilN1=&#91;\"\u222b\",\"profil1\",\"\u221e\",\"\u2264\",\"\u2265\",\"\u221a\",\"\u2208\",\"\u2209\",\"\u2205\",\"\u2229\",\"\u222a\",\"\u2211\"]\nprofilN2=&#91;\"\u00b1\",\"\u2286\",\"\u222a\",\"\u2229\",\"\u2202\",\"\u2287\",\"\u00be\",\"\u2200\",\"\u2207\",\"\u2211\",\"\u2248\",\"\"]\nprofilN3=&#91;\"\u03b1\",\"\u03b2\",\"\u03a8\",\"\u03c6\",\"\u03b4\",\"\u03b5\",\"\u03b6\",\"\u03be\",\"\u03c0\",\"\u2211\",\"\u03c3\",\"\u03c9\"]\n\nif comEtablie == True:\nif ser1.inWaiting() != 0 :\n\"\"\"\nvalrecue = ser1.readline() # Lecture de 10 octets max dans le buffer de reception\n# Valrecue = valrecue.decode('ascii')\nE1.delete(0, END)\nE1.insert(END,valrecue)\n\"\"\"\nvalrecue = ser1.readline() # Lecture de 10 octets max dans le buffer de reception\nValrecue = valrecue.decode('ascii').encode('utf-8')\nindice=int(Valrecue)-1\ncaractere=profilN1&#91;indice]\n#print codecs.decode(caractere,\"utf-8\")\ntextW.insert(END,profilN1&#91;indice])\nelse:\npass\nelse:\npass\nfen1.after(500,recevoir) # Mise \u00e0 jour toutes les 500 ms<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Graphic part<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#-------------------------------------------------------#\n#                    Code Graphique                     #\n#-------------------------------------------------------#\n\n\t\n# Le programme principal\nfen1 = Tk() # Cr\u00e9ation de la fen\u00eatre principale\nfen1.title(\"Fen\u00eatre Graphique du clavier bluetooth\") # Titre ecrit dans la fenetre\nfen1.config(bg='#ffffff') # Couleur de fond\nfen1.geometry(\"400x200+400+100\") # Dimension fen\u00eatre (largeur x hauteur et postion X + Y)\nfen1.resizable(width=True, height=True)  # Fen\u00eatre non redimensionnable\n#fenetre.maxsize(width=500, height=200)\n\n#D\u00e9claration des diff\u00e9rents widgets\nfont1 = tkFont.Font(size=50, family='courier', weight='bold')\ntextW=Text(fen1, height=200, width= 250, wrap=NONE)\nsy = Scrollbar(fen1, orient=VERTICAL, command = textW.yview)\nsx = Scrollbar(fen1, orient=HORIZONTAL, command = textW.xview)\ntextW.config(yscrollcommand = sy.set, xscrollcommand = sx.set, font=font1)\n\n#Placement du widget Text et des Scrollbar associ\u00e9s\nsy.pack(side=RIGHT, fill=Y)\nsx.pack(side=BOTTOM, fill=X)\ntextW.pack(side=RIGHT, fill=Y)\n\n#Barre de menu\nmainMenu = Menu(fen1)\n#Ajout de la barre de menu a la fen\u00eatre\nfen1.config(menu = mainMenu) \n\n#cr\u00e9ation des menu fils\nmenuExample = Menu(mainMenu, tearoff=0)  #Menu fils\nmenuExample.add_command(label=\"New file\", command=NewFile)  #Ajout d'une option au menu fils menuExample\nmenuExample.add_command(label=\"Open\", command=Open)\nmenuExample.add_command(label=\"Save\", command=Save)\nmenuExample.add_command(label=\"Save as\", command=Save)\n\nmenuExample.add_separator()\nmenuExample.add_command(label=\"Quitter\", command=fen1.destroy) \n\nmenuConfiguration = Menu(mainMenu) #Menu fils\nmenuConfiguration.add_command(label=\"Profil 1\", command=lambda :configuration(\"1\")) #appel de la fonction configuration avec profil=\"1\"\nmenuConfiguration.add_command(label=\"Profil 2\", command=lambda :configuration(\"2\"))\nmenuConfiguration.add_command(label=\"Profil 3\", command=lambda :configuration(\"3\"))\nmenuConfiguration.add_command(label=\"Profil 4\", command=lambda :configuration(\"4\"))\n\nmenuBluetooth = Menu(mainMenu)\nmenuBluetooth.add_command(label=\"Connexion\", command=connecter)\nmenuBluetooth.add_command(label=\"D\u00e9connexion\", command=deconnecter)\n\n\nmenuHelp = Menu(mainMenu) #Menu fils\nmenuHelp.add_command(label=\"A propos\", command=about)\n\n\n#Ajout des menus fils a la barre de menus\nmainMenu.add_cascade(label = \"File\", menu=menuExample)\nmainMenu.add_cascade(label = \"Configuration clavier\", menu=menuConfiguration)\nmainMenu.add_cascade(label = \"Bluetooth\", menu=menuBluetooth)\nmainMenu.add_cascade(label = \"Aide\", menu=menuHelp)\n\nrecevoir()  # La fonction qui recupere les donnees presentes en reception RXD\n\nfen1.mainloop() # affiche la fen\u00eatre et lance la scrutation des \u00e9venements <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Read the presentation<\/h3>\n\n\n<a href=\"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-content\/uploads\/2021\/04\/CLAVIER-SCIENTIFIQUE-OLYMPIADES.pdf\" class=\"pdfemb-viewer\" style=\"\" data-width=\"max\" data-height=\"max\"  data-toolbar=\"bottom\" data-toolbar-fixed=\"off\">CLAVIER-SCIENTIFIQUE-OLYMPIADES<br\/><\/a>\n<p class=\"wp-block-pdfemb-pdf-embedder-viewer\"><\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"672\" src=\"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-content\/uploads\/2021\/04\/Capture-decran-2021-04-08-a-21.34.48-1024x672.png\" alt=\"\" data-id=\"212\" data-full-url=\"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-content\/uploads\/2021\/04\/Capture-decran-2021-04-08-a-21.34.48.png\" data-link=\"https:\/\/benjaminperonne.fr\/src\/wordpress\/2018\/01\/11\/bluetooth-keyboard-with-mathematical-function-symbol-unfinished\/capture-decran-2021-04-08-a-21-34-48\/\" class=\"wp-image-212\" srcset=\"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-content\/uploads\/2021\/04\/Capture-decran-2021-04-08-a-21.34.48-1024x672.png 1024w, https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-content\/uploads\/2021\/04\/Capture-decran-2021-04-08-a-21.34.48-300x197.png 300w, https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-content\/uploads\/2021\/04\/Capture-decran-2021-04-08-a-21.34.48-768x504.png 768w, https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-content\/uploads\/2021\/04\/Capture-decran-2021-04-08-a-21.34.48-1140x748.png 1140w, https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-content\/uploads\/2021\/04\/Capture-decran-2021-04-08-a-21.34.48.png 1192w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li><\/ul><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Prerequisite The first thing is to install PyBluez,a bluetooth module, Open a terminal (command prompt on Windows) and enter : Then you need the tkinter module, in order to be able to create a graphical interface : We now import our necessary module Main Code Graphic part Read the presentation<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-126","post","type-post","status-publish","format-standard","hentry","category-python"],"_links":{"self":[{"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/posts\/126","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/comments?post=126"}],"version-history":[{"count":5,"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/posts\/126\/revisions"}],"predecessor-version":[{"id":214,"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/posts\/126\/revisions\/214"}],"wp:attachment":[{"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/media?parent=126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/categories?post=126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/benjaminperonne.fr\/src\/wordpress\/wp-json\/wp\/v2\/tags?post=126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}