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()
|