mapid/mapid.py

78 lines
1.3 KiB
Python

"""MAPID utility library.
This module contains an utility class to control MAPID/CP using pyserial.
"""
import os
import time
import dotenv #
import serial
DOTENV_LOADED = False
"""bool: Is .env loaded?
Prevents loading .env multiple times for speed.
"""
def load_dotenv():
"""Load .env file
"""
basedir = os.path.abspath(os.path.dirname(__file__))
dotenv.load_dotenv(os.path.join(basedir, ".env"))
global DOTENV_LOADED
DOTENV_LOADED = True
def get_serial_dev():
"""Get SERIAL_DEV setting from dotenv.
Returns:
str: The device file.
"""
global DOTENV_LOADED
if not DOTENV_LOADED:
load_dotenv()
return os.environ.get("SERIAL_DEV")
def get_serial_speed():
"""Get SERIAL_SPEED setting from dotenv.
Returns:
int: Serial speed in baud.
"""
global DOTENV_LOADED
if not DOTENV_LOADED:
load_dotenv()
return os.environ.get("SERIAL_SPEED")
class MAPIDCP:
arduino = None
def __init__(self):
self.arduino = serial.Serial(port=get_serial_dev(), baudrate=get_serial_speed(), timeout=.1)
def _cmd(self, cmd: str):
self.arduino.write(bytes(cmd + "\r\n", "utf8"))
time.sleep(0.1)
def cls(self):
self._cmd("CLS")
def led(self, state: bool):
if state:
self._cmd("ON")
else:
self._cmd("OFF")
def line(self, line_no: int):
self._cmd("LINE " + str(line_no))
def echo(self, text: str):
self._cmd("ECHO " + text)