[PYTHON] Verwenden Sie raspberryPi und Julius (Spracherkennung). ⑤i2c Character Display Edition

In Verbindung stehender Artikel

Bisher war es ein langer Weg und ich weiß nicht mehr, was es ist, aber ich möchte es als Referenz für mich selbst belassen. Verwenden Sie raspberryPi und julus (Spracherkennung). ① Mike Verwenden Sie julius (Spracherkennung) mit raspberryPi. ② Installation Verwenden Sie Himbeer-Pi und Julius (Spracherkennung). ③ Wörterbucherstellung Verwenden Sie raspberryPi und Julius (Spracherkennung). ④ L Chika Verwenden Sie raspberryPi und Julius (Spracherkennung). ⑤i2c Character Display Edition

Was zu verwenden

AQM0802 (unter Verwendung der fertigen Version des kleinen Displays für die i2c-Verbindung) Überbrückungskabel (Stecker-Buchse) 4-5 raspberryPi 3B+ USB-Mikrofon

Schließen Sie AQM0802 an

Richten Sie die i2c-Nutzung für Raspeye ein. Das Pin-Layout ist von oben UDD, RESET, SCL, SDA, GND. Verdrahten Sie also anhand des folgenden Bilds. image.png Zitiert aus Verwenden des LCD-Moduls mit Raspberry Pi

Überprüfen Sie die Verbindung.

$ sudo i2cdetect -y 1

image.png Ich konnte bestätigen, dass es mit 3e verbunden war.

Erstellen Sie eine Datei als Testversion und zeigen Sie sie auf dem Display an ``` $ 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

#AQM0802A LCD-Initialisierung
# 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

#DDRAM-Adresse der ersten Zeile= 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

#DDRAM-Adresse in der 2. Zeile= 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

So verbinden Sie das Flüssigkristallmodul AQM0802A vom I2C-Kommunikationstyp mit dem GPIO von Raspberry Pi 3 wird derzeit getestet. Es kann bestätigt werden, dass die Anzeige funktioniert.

Hinweis zum Befehl

# Bildschirminitialisierung
$ 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

#Löschen Sie alles und bewegen Sie den Cursor an den Anfang der ersten Zeile
sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i

#Zeigen Sie die angegebenen Daten kontinuierlich an
 sudo i2cset -y 1 0x3e 0x40 [data1] [data2] [data3]  i

#Brechen Sie die Linie und bewegen Sie den Cursor an den Anfang
sudo i2cset -y 1 0x3e 0x00 0xc0 i

0x3e ist das Schreibziel (I2CBUS). i ist "Blockdaten", eine Spezifikation zum kontinuierlichen Schreiben von Daten. b ist ein normaler Schreibvorgang in Bytes. Zeichenanzeige von AQM0802 Zitat Zeichen auf dem LCD-Display mit Raspberry Pi Null anzeigen Detaillierte Erläuterung des Rasberry PI I2C-Befehls

Die Wortanzeige wird unter Bezugnahme auf die Zeichenmuster von AQM0802 erstellt.

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

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

Versuchen Sie, Julius und AQM0802 gemeinsam zu bewegen ### Zeigen Sie die vorbereiteten Zeichen für das an, was Sie sagen. Starten Sie Julius im Modulmodus und führen Sie die folgende Datei aus.

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'   #IP-Adresse des Julius-Servers
PORT = 10500         #Listening-Port des Julius-Servers
DATESIZE = 1024     #Anzahl der empfangenen Datenbytes

class Julius:

    def __init__(self):

        self.sock = None

    def run(self):

        #Stellen Sie über Socket-Kommunikation eine Verbindung zum Julius-Server her
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as self.sock:
            self.sock.connect((HOST, PORT))

            strTemp = "" #Variablen, die gesprochene Wörter speichern
            fin_flag = False #Ende der Geschichte Flagge

            while True:

                #Empfangen Sie Daten vom Julius-Server
                data = self.sock.recv(DATESIZE).decode('utf-8')

                for line in data.split('\n'):
                    #Aus den empfangenen Daten<WORD>Extrahieren Sie die nachgeschriebenen Wörter und speichern Sie sie in einer Variablen.
                    # <WORD>Danach werden die gesprochenen Wörter aufgelistet.
                    index = line.find('WORD="')
                    if index != -1:
                        #Speichern Sie die in strTemp gesprochenen Wörter
                        strTemp = strTemp + line[index+6:line.find('"',index+6)]
                        
                    #Für empfangene Daten</RECOGOUT>'Wenn ja, endet die Geschichte. ⇒ Setzen Sie das Flag auf True
                    if '</RECOGOUT>' in line:
                        fin_flag = True

                #Führen Sie für jedes gesprochene Wort eine Druckanweisung aus
                if fin_flag == True:
                    if 'Vielen Dank' in strTemp:
                        print("Bitte schön")
                        init ()
                        command(_clear)
                        ari()
                    elif 'Hallo' in strTemp:
                        print("Guten Abend")
                        init ()
                        command(_clear)
                        konichiwa()
                    else:
                        print("Gesprochene Worte:" + strTemp)
                    
                    fin_flag = False
                    strTemp = ""

if __name__ == "__main__":

    julius = Julius()
    julius.run()

Konvertieren Sie, was Sie gesagt haben, und zeigen Sie den Papagei zurück. (Nur Julius Originalwörterbuchwörter)

Erstellen Sie eine japanische Wörterbuchdatei gemäß den Zeichenmustern von AQM0802.

nihongo.py


nihongo = {"Ah":0xb1,
          "ich":0xb2,
          "U.":0xb3,
          "e":0xb4,
          "Oh":0xb5,
          "Oder":0xb6,
          "Ki":0xb7,
          "Ku":0xb8,
          "Ke":0xb9,
          "Dies":0xba,
          "Sa":0xbb,
          "Shi":0xbc,
          "Su":0xbd,
          "einstellen":0xbe,
          "Damit":0xbf,
          "Ta":0xc0,
          "Chi":0xc1,
          "Einer":0xc2,
          "Hand":0xc3,
          "Wann":0xc4,
          "Nana":0xc5,
          "Zu":0xc6,
          "Nu":0xc7,
          "Hallo":0xc8,
          "von":0xc9,
          "Ist":0xca,
          "Hallo":0xcb,
          "Fu":0xcc,
          "Was":0xcd,
          "Ho":0xce,
          "Gut":0xcf,
          "Nur":0xd0,
          "Mu":0xd1,
          "Mich":0xd2,
          "Ebenfalls":0xd3,
          "Oder":0xd4,
          "Yu":0xd5,
          "Yo":0xd6,
          "Et al.":0xd7,
          "Ri":0xd8,
          "Ru":0xd9,
          "Re":0xda,
          "Ro":0xdb,
          "Beeindruckend":0xdc,
          "Hmm":0xdd,
          "Zu":0xa6,
          "Ah":0xa7,
          "ich":0xa8,
          "U.":0xa9,
          "Eh":0xaa,
          "Mm":0xab,
          "Ja":0xac,
          "Shu":0xad,
          "Yo":0xad,
          "Tsu":0xaf,
          "Aber":"182 222",
          "Gi":"183 222",
          "Gu":"184 222",
          "Ge":"185 222",
          "Gehen":"186 222",
          "Za":"187 222",
          "Ji":"188 222",
          "Zu":"189 222",
          "Ze":"190 222",
          "Es tut mir Leid":"191 222",
          "Ist":"192 222",
          "Ji":"193 222",
          "Zu":"194 222",
          "damit":"195 222",
          "Machen":"196 222",
          "Wenn":"202 222",
          "Und":"203 222",
          "Bu":"204 222",
          "Sein":"205 222",
          "Bo":"206 222",
          "Pa":"202 223",
          "Pi":"203 223",
          "Pu":"204 223",
          "Sport":"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'   #IP-Adresse des Julius-Servers
PORT = 10500         #Listening-Port des Julius-Servers
DATESIZE = 1024     #Anzahl der empfangenen Datenbytes
 
class Julius:
 
    def __init__(self):
 
        self.sock = None
 
    def run(self):
 
        #Stellen Sie über Socket-Kommunikation eine Verbindung zum Julius-Server her
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as self.sock:
            self.sock.connect((HOST, PORT))
 
            strTemp = "" #Variablen, die gesprochene Wörter speichern
            fin_flag = False #Ende der Geschichte Flagge
 
            while True:
 
                #Empfangen Sie Daten vom Julius-Server
                data = self.sock.recv(DATESIZE).decode('utf-8')
 
                for line in data.split('\n'):
                    #Aus den empfangenen Daten<WORD>Extrahieren Sie die nachgeschriebenen Wörter und speichern Sie sie in einer Variablen.
                    # <WORD>Danach werden die gesprochenen Wörter aufgelistet.
                    index = line.find('WORD="')
                    if index != -1:
                        #Speichern Sie die in strTemp gesprochenen Wörter
                        strTemp = strTemp + line[index+6:line.find('"',index+6)]
 
                    #Für empfangene Daten</RECOGOUT>'Wenn ja, endet die Geschichte. ⇒ Setzen Sie das Flag auf True
                    if '</RECOGOUT>' in line:
                        fin_flag = True
 
                #Führen Sie für jedes gesprochene Wort eine Druckanweisung aus
                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()

Ich konnte die erkannten Wörter auf dem Display anzeigen Was war der Grund, warum "Danke", "Hallo". Ich möchte das Wörterbuch neu erstellen und sehen, ob andere Wörter angezeigt werden können.

Referenz [Verwenden Sie AQM0802 (kleines LCD-Modul mit i2c-Verbindung) mit 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 /) [Verwenden des LCD-Moduls mit Raspberry Pi](http://sea-mountain.hatenablog.jp/entry/2013/09/21/231242) [I2C-Verbindung LCD der Zeichenanzeige der AQM-Serie wird für Raspeltorte (1) AQM0802 verwendet](https://www.denshi.club/pc/raspi/i2caqmlcdarduinode1-aqm0802.html)

Recommended Posts

Verwenden Sie raspberryPi und Julius (Spracherkennung). ⑤i2c Character Display Edition
Verwenden Sie raspberryPi und julius (Spracherkennung). ① Mike
Verwenden Sie raspberryPi und Julius (Spracherkennung). ④ L Chika
Verwenden Sie julius (Spracherkennung) mit raspberryPi. ② Installation
Verwenden Sie raspberryPi und Julius (Spracherkennung). ③ Wörterbucherstellung
Sprachsynthese und Spracherkennung durch Microsoft Project Oxford