[PYTHON] Utilisez raspberryPi et Julius (reconnaissance vocale). ⑤i2c édition d'affichage des caractères

Article associé

Ça a été un long chemin jusqu'à présent, et je ne sais plus ce que c'est, mais j'aimerais le laisser comme site de référence pour moi-même. Utilisez raspberryPi et julus (reconnaissance vocale). ① Mike Utilisez julius (reconnaissance vocale) avec raspberryPi. ② Installation Utilisez Raspberry Pi et Julius (reconnaissance vocale). ③ Création du dictionnaire Utilisez raspberryPi et Julius (reconnaissance vocale). ④ L Chika Utilisez raspberryPi et Julius (reconnaissance vocale). ⑤i2c Character Display

Quoi utiliser

AQM0802 (en utilisant la version complète du petit écran de connexion i2c) Fil de raccordement (mâle-femelle) 4-5 raspberryPi 3B+ Microphone USB

Connect AQM0802

Configurez l'utilisation d'i2c pour Raspeye. La disposition des broches est UDD, RESET, SCL, SDA, GND à partir du haut, donc câblez en vous référant à l'image ci-dessous. image.png Cité de Utilisation du module LCD avec Raspberry Pi

Vérifiez la connexion.

$ sudo i2cdetect -y 1

image.png J'ai pu confirmer qu'il était connecté avec 3e.

Créez un fichier à titre d'essai et affichez-le sur l'écran ``` $ sudo apt-get -y install i2c-tools $ nano I2C_LCD_TEST.sh ```

I2C_LCD_TEST.sh


#!/bin/sh

# AQM0802A Raspberry Pi I2C control
# http://www.neko.ne.jp/~freewing/
# http://akizukidenshi.com/catalog/g/gP-06669/

# sudo nano I2C_LCD_TEST.sh
# sudo chmod 755 I2C_LCD_TEST.sh
# ./I2C_LCD_TEST.sh

#Initialisation LCD AQM0802A
# 0x38 0x39 Function Set
i2cset -y 1 0x3e 0x00 0x38 0x39 i

# 0x10 Bias selection/Internal OSC frequency adjust
# 0x70 Contrast set(low byte)
# 0x56 Power/ICON control/Contrast set(high byte)
# 0x6C Follower control
i2cset -y 1 0x3e 0x00 0x10 0x70 0x56 0x6C i
sleep 0.3

# 0x38 Function Set
i2cset -y 1 0x3e 0x00 0x38 i

# 0x02 Return Home
i2cset -y 1 0x3e 0x00 0x02 i

# 0x0C Display ON/OFF control
# i2cset -y 1 0x3e 0x00 0x0C i

# 0x0F Display ON/OFF control
i2cset -y 1 0x3e 0x00 0x0F i

# 0x01 Clear Display
i2cset -y 1 0x3e 0x00 0x01 i
sleep 0.5

# 0x40 CGRAM addres = 0x00 CHARACTER CODE = 0x00
i2cset -y 1 0x3e 0x00 0x40 b
i2cset -y 1 0x3e 0x40 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 i
# 0x40 CGRAM addres = 0x08 CHARACTER CODE = 0x01
i2cset -y 1 0x3e 0x00 0x48 b
i2cset -y 1 0x3e 0x40 0x1F 0x1E 0x1D 0x1C 0x1B 0x1A 0x19 0x18 i

#Adresse DDRAM de 1ère ligne= 0x00
i2cset -y 1 0x3e 0x00 0x80 b
# "=FREE =="
i2cset -y 1 0x3e 0x40 0x3D 0x46 0x52 0x45 0x45 0x20 0x3D 0x3D i
sleep 0.5

#Adresse DDRAM de 2e ligne= 0x40
i2cset -y 1 0x3e 0x00 0xc0 b
# "== WING="
i2cset -y 1 0x3e 0x40 0x3D 0x3D 0x20 0x57 0x49 0x4E 0x47 0x3D i
$ chmod 755 I2C_LCD_TEST.sh
$ sudo ./I2C_LCD_TEST.sh

Comment connecter le module à cristaux liquides de type communication I2C AQM0802A au GPIO de Raspberry Pi 3 est essayé tel quel. Il peut être confirmé que l'affichage fonctionne.

Remarque sur la commande

# Initialisation de l'écran
$ i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
$ i2cset -y 1 0x3e 0x00 0x38 0x0c 0x01 i
$ i2cset -y 1 0x3e 0x00 0x80

#Effacez tout et déplacez le curseur au début de la première ligne
sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i

#Afficher les données spécifiées en continu
 sudo i2cset -y 1 0x3e 0x40 [data1] [data2] [data3]  i

#Rompre la ligne et déplacer le curseur au début
sudo i2cset -y 1 0x3e 0x00 0xc0 i

0x3e est la cible d'écriture (I2CBUS). i est "block data", une spécification pour écrire des données en continu. b est une écriture normale en octets. Affichage des caractères d'AQM0802 Citation Afficher les caractères sur l'écran LCD avec Raspberry Pi zéro Explication détaillée de la commande Rasberry PI I2C

L'affichage des mots est créé en se référant aux modèles de caractères de AQM0802.

#Merci
sudo i2cset -y 1 0x3e 0x40 0xb1 0xd8 0xb6 0xde 0xc4 0xb3  i
Ari Kato U

#Bonjour
sudo i2cset -y 1 0x3e 0x40 0xba 0xdd 0xc6 0xc1 0xca i
Bonjour

Essayez de déplacer Julius et AQM0802 en coopération ### Affichez les caractères préparés pour ce que vous dites. Démarrez Julius en mode module et exécutez le fichier suivant.

test_i2c001.py


#!usr/bin/env python
# -*- coding: utf-8 -*-
import smbus
import time
import subprocess
import socket
import string

i2c = smbus.SMBus(1) # 1 is bus number
addr02=0x3e #lcd
_command=0x00
_data=0x40
_clear=0x01
_home=0x02
display_On=0x0f
LCD_2ndline=0x40+0x80
 
#LCD AQM0802/1602
def command( code ):
        i2c.write_byte_data(addr02, _command, code)
        time.sleep(0.1)
  
def writeLCD( message ):
        mojilist=[]
        for moji in message:
                mojilist.append(ord(moji)) 
        i2c.write_i2c_block_data(addr02, _data, mojilist)
        time.sleep(0.1)
 
def init ():
        command(0x38)
        command(0x39)
        command(0x14)
        command(0x73)
        command(0x56)
        command(0x6c)
        command(0x38)
        command(_clear)
        command(display_On)
        
def ari ():
        arigatoulist=[0xb1, 0xd8, 0xb6, 0xde, 0xc4, 0xb3]
        i2c.write_i2c_block_data(addr02, _data, arigatoulist)
        time.sleep(0.1)
        print(arigatoulist)

def konnichiha():
        konnichihalist=[0xba, 0xdd, 0xc6, 0xc1, 0xca]
        i2c.write_i2c_block_data(addr02, _data, konnichihalist)
        time.sleep(0.1)
  
HOST = '127.0.0.1'   #Adresse IP du serveur Julius
PORT = 10500         #port d'écoute du serveur julius
DATESIZE = 1024     #Nombre d'octets de données reçus

class Julius:

    def __init__(self):

        self.sock = None

    def run(self):

        #Connectez-vous au serveur Julius avec communication par socket
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as self.sock:
            self.sock.connect((HOST, PORT))

            strTemp = "" #Variables qui stockent les mots prononcés
            fin_flag = False #Drapeau de fin d'histoire

            while True:

                #Recevoir les données du serveur Julius
                data = self.sock.recv(DATESIZE).decode('utf-8')

                for line in data.split('\n'):
                    #À partir des données reçues<WORD>Extrayez les mots écrits après et stockez-les dans une variable.
                    # <WORD>Après, les mots prononcés sont répertoriés.
                    index = line.find('WORD="')
                    if index != -1:
                        #Stocker les mots prononcés dans strTemp
                        strTemp = strTemp + line[index+6:line.find('"',index+6)]
                        
                    #Pour les données reçues</RECOGOUT>'Si c'est le cas, l'histoire se termine ⇒ Réglez le drapeau sur True
                    if '</RECOGOUT>' in line:
                        fin_flag = True

                #Exécuter une instruction d'impression pour chaque mot prononcé
                if fin_flag == True:
                    if 'Je vous remercie' in strTemp:
                        print("Je vous en prie")
                        init ()
                        command(_clear)
                        ari()
                    elif 'Bonjour' in strTemp:
                        print("Bonsoir")
                        init ()
                        command(_clear)
                        konichiwa()
                    else:
                        print("Mots parlés:" + strTemp)
                    
                    fin_flag = False
                    strTemp = ""

if __name__ == "__main__":

    julius = Julius()
    julius.run()

Convertissez ce que vous avez dit et affichez le perroquet. (Mots du dictionnaire d'origine Julius uniquement)

Créez un fichier de dictionnaire japonais selon les modèles de caractères d'AQM0802.

nihongo.py


nihongo = {"Ah":0xb1,
          "je":0xb2,
          "U":0xb3,
          "e":0xb4,
          "Oh":0xb5,
          "Ou":0xb6,
          "Ki":0xb7,
          "Ku":0xb8,
          "Ke":0xb9,
          "Cette":0xba,
          "Sa":0xbb,
          "Shi":0xbc,
          "Su":0xbd,
          "Ensemble":0xbe,
          "Alors":0xbf,
          "Ta":0xc0,
          "Chi":0xc1,
          "Un":0xc2,
          "main":0xc3,
          "Quand":0xc4,
          "Nana":0xc5,
          "À":0xc6,
          "Nu":0xc7,
          "Hey":0xc8,
          "de":0xc9,
          "Est":0xca,
          "salut":0xcb,
          "Fu":0xcc,
          "Quoi":0xcd,
          "Ho":0xce,
          "bien":0xcf,
          "Seulement":0xd0,
          "Mu":0xd1,
          "Moi":0xd2,
          "Aussi":0xd3,
          "Ou":0xd4,
          "Yu":0xd5,
          "Yo":0xd6,
          "Et al.":0xd7,
          "Ri":0xd8,
          "Ru":0xd9,
          "Ré":0xda,
          "Ro":0xdb,
          "sensationnel":0xdc,
          "Hmm":0xdd,
          "À":0xa6,
          "Ah":0xa7,
          "je":0xa8,
          "U":0xa9,
          "Eh":0xaa,
          "Mm":0xab,
          "Ya":0xac,
          "Shu":0xad,
          "Yo":0xad,
          "Tsu":0xaf,
          "Mais":"182 222",
          "Gi":"183 222",
          "Gu":"184 222",
          "Ge":"185 222",
          "Aller":"186 222",
          "Za":"187 222",
          "Ji":"188 222",
          "Zu":"189 222",
          "Ze":"190 222",
          "Je suis désolé":"191 222",
          "Est":"192 222",
          "Ji":"193 222",
          "Zu":"194 222",
          "alors":"195 222",
          "Faire":"196 222",
          "Si":"202 222",
          "Et":"203 222",
          "Bu":"204 222",
          "Être":"205 222",
          "Bo":"206 222",
          "Pennsylvanie":"202 223",
          "Pi":"203 223",
          "Pu":"204 223",
          "Pe":"205 223",
          "Po":"206 223"
           }

test_i2c003.py


#!usr/bin/env python
# -*- coding: utf-8 -*-
import smbus
import time
import subprocess
import socket
import string
from nihongo import nihongo

i2c = smbus.SMBus(1) # 1 is bus number
addr02=0x3e #lcd
_command=0x00
_data=0x40
_clear=0x01
_home=0x02
display_On=0x0f
LCD_2ndline=0x40+0x80
 
#LCD AQM0802/1602
def command( code ):
        i2c.write_byte_data(addr02, _command, code)
        time.sleep(0.1)
 
def word( message ):
        kotoba = []
        for moji in message:
            kotoba.append(moji)
            
        wordlist = []
        for idx in range(0, len(kotoba)):
            a = kotoba[idx]
            val = nihongo[a]
            if type(val) is int:
                wordlist.append(val)
            else:
                nums = val.split()
                for i in range(2):
                    wordlist.append(int(nums[i]))
        print(wordlist)
        i2c.write_i2c_block_data(addr02, _data, wordlist)
        time.sleep(0.1)
        
def init ():
        command(0x38)
        command(0x39)
        command(0x14)
        command(0x73)
        command(0x56)
        command(0x6c)
        command(0x38)
        command(_clear)
        command(display_On)
 
 
HOST = '127.0.0.1'   #Adresse IP du serveur Julius
PORT = 10500         #port d'écoute du serveur julius
DATESIZE = 1024     #Nombre d'octets de données reçus
 
class Julius:
 
    def __init__(self):
 
        self.sock = None
 
    def run(self):
 
        #Connectez-vous au serveur Julius avec communication par socket
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as self.sock:
            self.sock.connect((HOST, PORT))
 
            strTemp = "" #Variables qui stockent les mots prononcés
            fin_flag = False #Drapeau de fin d'histoire
 
            while True:
 
                #Recevoir les données du serveur Julius
                data = self.sock.recv(DATESIZE).decode('utf-8')
 
                for line in data.split('\n'):
                    #À partir des données reçues<WORD>Extrayez les mots écrits après et stockez-les dans une variable.
                    # <WORD>Après, les mots prononcés sont répertoriés.
                    index = line.find('WORD="')
                    if index != -1:
                        #Stocker les mots prononcés dans strTemp
                        strTemp = strTemp + line[index+6:line.find('"',index+6)]
 
                    #Pour les données reçues</RECOGOUT>'Si c'est le cas, l'histoire se termine ⇒ Réglez le drapeau sur True
                    if '</RECOGOUT>' in line:
                        fin_flag = True
 
                #Exécuter une instruction d'impression pour chaque mot prononcé
                if fin_flag == True:
                    print(strTemp[4:-3])
                    init ()
                    command(_clear)
                    word(strTemp[4:-3])
                  
                    fin_flag = False
                    strTemp = ""
 
if __name__ == "__main__":
 
    julius = Julius()
    julius.run()

J'ai pu afficher les mots reconnus sur l'écran Pourquoi "Merci", "Bonjour". Je veux recréer le dictionnaire et voir si d'autres mots peuvent être affichés.

Référence [Utilisons AQM0802 (petit module LCD avec connexion i2c) avec Raspeye](https://www.cloverfield.co.jp/2019/06/12/%E3%83%A9%E3%82%BA%E3%83 % 91% E3% 82% A4% E3% 81% A7aqm0802i2c% E6% 8E% A5% E7% B6% 9A% E5% B0% 8F% E5% 9E% 8Blcd% E3% 83% A2% E3% 82% B8 % E3% 83% A5% E3% 83% BC% E3% 83% AB% E3% 82% 92% E4% BD% BF% E3% 81% 8A% E3% 81% 86 /) [Utilisation du module LCD avec Raspberry Pi](http://sea-mountain.hatenablog.jp/entry/2013/09/21/231242) [Connexion I2C L'écran LCD à caractères de la série AQM est utilisé pour la tarte aux râpes (1) AQM0802](https://www.denshi.club/pc/raspi/i2caqmlcdarduinode1-aqm0802.html)

Recommended Posts

Utilisez raspberryPi et Julius (reconnaissance vocale). ⑤i2c édition d'affichage des caractères
Utilisez raspberryPi et julius (reconnaissance vocale). ① Mike
Utilisez raspberryPi et Julius (reconnaissance vocale). ④ L Chika
Utilisez julius (reconnaissance vocale) avec raspberryPi. ② Installation
Utilisez raspberryPi et Julius (reconnaissance vocale). ③ Création de dictionnaire
Synthèse vocale et reconnaissance vocale par Microsoft Project Oxford