initial push
This commit is contained in:
0
echo-master/echo_serial/__init__.py
Normal file
0
echo-master/echo_serial/__init__.py
Normal file
BIN
echo-master/echo_serial/__pycache__/__init__.cpython-37.pyc
Normal file
BIN
echo-master/echo_serial/__pycache__/__init__.cpython-37.pyc
Normal file
Binary file not shown.
BIN
echo-master/echo_serial/__pycache__/__init__.cpython-38.pyc
Normal file
BIN
echo-master/echo_serial/__pycache__/__init__.cpython-38.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
122
echo-master/echo_serial/serial_controller.py
Normal file
122
echo-master/echo_serial/serial_controller.py
Normal file
@@ -0,0 +1,122 @@
|
||||
import serial
|
||||
import _thread
|
||||
import time
|
||||
import sys
|
||||
import os
|
||||
|
||||
import echo_db.database as EchoDB
|
||||
import echo_controller.controller as Controller
|
||||
|
||||
class EchoSerial:
|
||||
|
||||
arduino = serial.Serial()
|
||||
allow_control = True
|
||||
|
||||
@staticmethod
|
||||
def init():
|
||||
try:
|
||||
print('Starting Serial Connection with arduino...')
|
||||
# Start Serial Connection
|
||||
EchoSerial.arduino.baudrate = 115200
|
||||
EchoSerial.arduino.port = '/dev/ttyACM0'
|
||||
EchoSerial.arduino.timeout = .1
|
||||
EchoSerial.arduino.open()
|
||||
|
||||
if not EchoSerial.arduino.is_open:
|
||||
print('Could not open Serial Connection with arduino!')
|
||||
|
||||
print('Serial Connection Opened with arduino!')
|
||||
print('Starting Serial Handling Thread...')
|
||||
_thread.start_new_thread(EchoSerial.handle_serial, ("Main Serial Thread", 2, ))
|
||||
except:
|
||||
print('Error Initializing Serial Controller!')
|
||||
print('Serial Error: ' + str(sys.exc_info()[0]))
|
||||
EchoSerial.allow_control = False
|
||||
|
||||
@staticmethod
|
||||
def handle_serial(threadname, delay):
|
||||
print('Serial Handling Thread Started!')
|
||||
while EchoSerial.arduino.isOpen():
|
||||
time.sleep(.02)
|
||||
try:
|
||||
data = EchoSerial.arduino.readline()[:-2]
|
||||
if data:
|
||||
# Parse Incoming Data > Decode to UTF-8
|
||||
parsed_data = data.decode("utf-8")
|
||||
|
||||
# Start new thread to handle the reponse
|
||||
_thread.start_new_thread(EchoSerial.handle_serial_data, ("Serial Response Handler Tread", 2, parsed_data))
|
||||
|
||||
except:
|
||||
print('Error Occured on Serial handling Thread!')
|
||||
print('Serial Error: ' + str(sys.exc_info()[0]))
|
||||
EchoSerial.allow_control = False
|
||||
EchoSerial.reopen_serial_connection()
|
||||
# _thread.interrupt_main()
|
||||
|
||||
@staticmethod
|
||||
def reopen_serial_connection():
|
||||
try:
|
||||
EchoSerial.arduino.close()
|
||||
except:
|
||||
print("Error closing serial connection")
|
||||
|
||||
while not EchoSerial.arduino.isOpen():
|
||||
try:
|
||||
EchoSerial.arduino.open()
|
||||
except:
|
||||
print("Error reopening serial connection")
|
||||
finally:
|
||||
time.sleep(1)
|
||||
|
||||
EchoSerial.allow_control = True
|
||||
print("Serial Connection Established!")
|
||||
|
||||
@staticmethod
|
||||
def handle_serial_data(threadNamee, delay, data):
|
||||
# Command Example:
|
||||
# 9472-4f60:temp_data:data
|
||||
# Data is if needed separated by ,
|
||||
print('Parsing Packet: ' + data)
|
||||
|
||||
# Remove packet Markers
|
||||
data = data[1:-1]
|
||||
|
||||
# Parse command
|
||||
parsed_data = data.split(':')
|
||||
|
||||
# Check if startup command
|
||||
if parsed_data[0] == "0":
|
||||
print('Echo Controller Ready!')
|
||||
return
|
||||
|
||||
# Check if startup command
|
||||
if parsed_data[0] == "1":
|
||||
print('Echo LED Controller Ready!')
|
||||
return
|
||||
|
||||
# Get Device
|
||||
collection = EchoDB.EchoDB.database['Devices']
|
||||
device = collection.find_one({'uuid': parsed_data[0]})
|
||||
|
||||
# Send to controller
|
||||
Controller.Controller.handle_output_device(device, parsed_data[1], parsed_data)
|
||||
|
||||
@staticmethod
|
||||
def send_serial(command):
|
||||
# Command Example:
|
||||
# 9472-4f60:get_data:data
|
||||
# data is if needed separated by ,
|
||||
EchoSerial.arduino.write(command.encode())
|
||||
|
||||
@staticmethod
|
||||
def send_commmand(device, action, value = "0"):
|
||||
serial_command = "<" + device['uuid'] + ":" + action + ":" + value + ">"
|
||||
print('Sending Packet: ' + serial_command)
|
||||
EchoSerial.send_serial(serial_command)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user