組込みソフト
Julius 究極のLチカ 2020/11/23
LEDを音声認識でコントロールします。究極のLチカです。
動画です
ちょっとした解説
Juliusは起動オプションに-moduleをつけるとサーバーになります。
①LXTerminalでJuliusをサーバモードで立ち上げます。
$ julius -C ~/julius-4.6/julius-kit/grammar-kit-4.3.1/testmic.jconf -module

②LXTerminalをもう1つ立ち上げLチカをするアプリを起動します。
$ python3 julius_led.py

アプリはjulius_led.pyとしました。
IPアドレス:localhost
ポート:10500
で接続します。
サーバーから送られてくるデータから「点灯」「消灯」「点滅」を受信したら所定の動作をします。 プログラムは少しのコードを書くだけでした。

#-*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import signal
import time
import subprocess
import os
import socket

LED = 7
TURN_OFF = 0
TURN_ON  = 1
BLINK = 2

g_OnOff = 0
g_LedStatus = 0
def unitTimer(arg1, arg2):
    global g_OnOff, g_LedStatus

    if g_LedStatus == TURN_OFF:
        GPIO.output(LED, 0) 
    elif g_LedStatus == TURN_ON:   
        GPIO.output(LED, 1) 
    else:
        if g_OnOff == 1:
            g_OnOff = 0
        else:
            g_OnOff = 1
        GPIO.output(LED, g_OnOff) 



def run():
    global g_LedStatus
    #timer process
    signal.signal(signal.SIGALRM, unitTimer)
    signal.setitimer(signal.ITIMER_REAL, 0.5, 0.5)
    #GPIO init
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(LED,GPIO.OUT)
    #TCPIP
    host = 'localhost'
    port = 10500
#    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 #   client.connect(host, port)
    data = ''
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect(('127.0.0.1', port))
        try:
            while True:
                data = data + s.recv(1024).decode('utf-8')
                if '\n.' in data:
                    if '消灯' in data:
                        g_LedStatus = TURN_OFF
                    elif  '点灯' in data:
                        g_LedStatus = TURN_ON
                    elif  '点滅' in data:
                        g_LedStatus = BLINK
                    data = ''    
        except KeyboardInterrupt:
            GPIO.output(LED, 0)
            GPIO.cleanup()

if __name__ == "__main__":
    run()