Initial commit: Display Startup message on LCD screen
This commit is contained in:
parent
35ad9c474b
commit
8fc2a739d5
3 changed files with 176 additions and 0 deletions
106
octoprint_hd44780/__init__.py
Normal file
106
octoprint_hd44780/__init__.py
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
# coding=utf-8
|
||||||
|
|
||||||
|
import future
|
||||||
|
|
||||||
|
__author__ = "Felix Kunsmann <felix@kunsmann.eu>"
|
||||||
|
__license__ = "GNU Affero General Public License http://www.gnu.org/licenses/agpl.html"
|
||||||
|
__copyright__ = "Copyright (C) 2017 Felix Kunsmann - Released under terms of the AGPLv3 License"
|
||||||
|
|
||||||
|
import octoprint.plugin
|
||||||
|
|
||||||
|
import RPi.GPIO as GPIO
|
||||||
|
|
||||||
|
from RPLCD import CharLCD
|
||||||
|
from RPLCD import CursorMode
|
||||||
|
from RPLCD import cursor
|
||||||
|
|
||||||
|
class LCD_HD44780(octoprint.plugin.StartupPlugin,
|
||||||
|
octoprint.plugin.SettingsPlugin):
|
||||||
|
def __init__(self):
|
||||||
|
self._pin_to_gpio_rev1 = [-1, -1, -1, 0, -1, 1, -1, 4, 14, -1, 15, 17, 18, 21, -1, 22, 23, -1, 24, 10, -1, 9, 25, 11, 8, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ]
|
||||||
|
self._pin_to_gpio_rev2 = [-1, -1, -1, 2, -1, 3, -1, 4, 14, -1, 15, 17, 18, 27, -1, 22, 23, -1, 24, 10, -1, 9, 25, 11, 8, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ]
|
||||||
|
self._pin_to_gpio_rev3 = [-1, -1, -1, 2, -1, 3, -1, 4, 14, -1, 15, 17, 18, 27, -1, 22, 23, -1, 24, 10, -1, 9, 25, 11, 8, -1, 7, -1, -1, 5, -1, 6, 12, 13, -1, 19, 16, 26, 20, -1, 21 ]
|
||||||
|
self._configuredGPIOPins = []
|
||||||
|
|
||||||
|
self.pin_rs = 15
|
||||||
|
self.pin_rw = None
|
||||||
|
self.pin_e = 16
|
||||||
|
self.pin_d4 = 21
|
||||||
|
self.pin_d5 = 22
|
||||||
|
self.pin_d6 = 23
|
||||||
|
self.pin_d7 = 24
|
||||||
|
|
||||||
|
self.cols = 20
|
||||||
|
self.rows = 4
|
||||||
|
|
||||||
|
self._lcd = None
|
||||||
|
|
||||||
|
def on_settings_initialized(self):
|
||||||
|
self._initialize_lcd()
|
||||||
|
|
||||||
|
def _gpio_board_to_bcm(self, pin):
|
||||||
|
if GPIO.RPI_REVISION == 1:
|
||||||
|
pin_to_gpio = self._pin_to_gpio_rev1
|
||||||
|
elif GPIO.RPI_REVISION == 2:
|
||||||
|
pin_to_gpio = self._pin_to_gpio_rev2
|
||||||
|
else:
|
||||||
|
pin_to_gpio = self._pin_to_gpio_rev3
|
||||||
|
|
||||||
|
return pin_to_gpio[pin]
|
||||||
|
|
||||||
|
def _gpio_get_pin(self, pin):
|
||||||
|
if GPIO.getmode() == GPIO.BOARD:
|
||||||
|
return pin
|
||||||
|
elif GPIO.getmode() == GPIO.BCM:
|
||||||
|
return self._gpio_board_to_bcm(pin)
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def _initialize_lcd(self):
|
||||||
|
self._logger.info("Running RPi.GPIO version %s" % GPIO.VERSION)
|
||||||
|
if GPIO.VERSION < "0.6":
|
||||||
|
self._logger.error("RPi.GPIO version 0.6.0 or greater required.")
|
||||||
|
|
||||||
|
GPIO.setwarnings(False)
|
||||||
|
|
||||||
|
for pin in self._configuredGPIOPins:
|
||||||
|
self._logger.debug("Cleaning up pin %s" % pin)
|
||||||
|
try:
|
||||||
|
GPIO.cleanup(self._gpio_get_pin(pin))
|
||||||
|
except (RuntimeError, ValueError) as e:
|
||||||
|
self._logger.error(e)
|
||||||
|
self._configuredGPIOPins = []
|
||||||
|
|
||||||
|
if GPIO.getmode() is None:
|
||||||
|
GPIO.setmode(GPIO.BOARD)
|
||||||
|
|
||||||
|
pin_rs = self._gpio_get_pin(self.pin_rs)
|
||||||
|
|
||||||
|
if self.pin_rw is not None:
|
||||||
|
pin_rw = self._gpio_get_pin(self.pin_rw)
|
||||||
|
else:
|
||||||
|
pin_rw = None
|
||||||
|
|
||||||
|
pin_e = self._gpio_get_pin(self.pin_e)
|
||||||
|
pin_d4 = self._gpio_get_pin(self.pin_d4)
|
||||||
|
pin_d5 = self._gpio_get_pin(self.pin_d5)
|
||||||
|
pin_d6 = self._gpio_get_pin(self.pin_d6)
|
||||||
|
pin_d7 = self._gpio_get_pin(self.pin_d7)
|
||||||
|
|
||||||
|
self._lcd = CharLCD(pin_rs=pin_rs, pin_rw=pin_rw, pin_e=pin_e, pins_data=[pin_d4, pin_d5, pin_d6, pin_d7],
|
||||||
|
numbering_mode=GPIO.getmode(), cols=self.cols, rows=self.rows)
|
||||||
|
|
||||||
|
self._lcd.cursor_mode = CursorMode.hide
|
||||||
|
self._lcd.clear()
|
||||||
|
self._lcd.write_string('Octoprint-LCD-HD44780\n\rVersion: 0.1')
|
||||||
|
|
||||||
|
__plugin_name__ = "LCD: HD44780-compatible"
|
||||||
|
|
||||||
|
def __plugin_load__():
|
||||||
|
global __plugin_implementation__
|
||||||
|
__plugin_implementation__ = LCD_HD44780()
|
||||||
|
|
||||||
|
global __plugin_hooks__
|
||||||
|
__plugin_hooks__ = {
|
||||||
|
# "octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information
|
||||||
|
}
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
OctoPrint
|
||||||
|
RPi.GPIO>=0.6.3
|
||||||
|
RPLCD
|
67
setup.py
Normal file
67
setup.py
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
# coding=utf-8
|
||||||
|
import setuptools
|
||||||
|
|
||||||
|
########################################################################################################################
|
||||||
|
|
||||||
|
plugin_identifier = "hd44780"
|
||||||
|
plugin_package = "octoprint_%s" % plugin_identifier
|
||||||
|
plugin_name = "OctoPrint-LCD-HD44780"
|
||||||
|
plugin_version = "0.1"
|
||||||
|
plugin_description = "Display useful information on a connected HD44780 compatible display."
|
||||||
|
plugin_author = "Felix Kunsmann"
|
||||||
|
plugin_author_email = "felix@kunsmann.eu"
|
||||||
|
plugin_url = "https://github.com/Kunsi/Octoprint-LCD-HD44780"
|
||||||
|
plugin_license = "AGPLv3"
|
||||||
|
plugin_additional_data = []
|
||||||
|
|
||||||
|
########################################################################################################################
|
||||||
|
|
||||||
|
def package_data_dirs(source, sub_folders):
|
||||||
|
import os
|
||||||
|
dirs = []
|
||||||
|
|
||||||
|
for d in sub_folders:
|
||||||
|
folder = os.path.join(source, d)
|
||||||
|
if not os.path.exists(folder):
|
||||||
|
continue
|
||||||
|
|
||||||
|
for dirname, _, files in os.walk(folder):
|
||||||
|
dirname = os.path.relpath(dirname, source)
|
||||||
|
for f in files:
|
||||||
|
dirs.append(os.path.join(dirname, f))
|
||||||
|
|
||||||
|
return dirs
|
||||||
|
|
||||||
|
def params():
|
||||||
|
# Our metadata, as defined above
|
||||||
|
name = plugin_name
|
||||||
|
version = plugin_version
|
||||||
|
description = plugin_description
|
||||||
|
author = plugin_author
|
||||||
|
author_email = plugin_author_email
|
||||||
|
url = plugin_url
|
||||||
|
license = plugin_license
|
||||||
|
|
||||||
|
# we only have our plugin package to install
|
||||||
|
packages = [plugin_package]
|
||||||
|
|
||||||
|
# we might have additional data files in sub folders that need to be installed too
|
||||||
|
#package_data = {plugin_package: package_data_dirs(plugin_package, ['static', 'templates', 'translations'] + plugin_additional_data)}
|
||||||
|
#include_package_data = True
|
||||||
|
|
||||||
|
# If you have any package data that needs to be accessible on the file system, such as templates or static assets
|
||||||
|
# this plugin is not zip_safe.
|
||||||
|
zip_safe = False
|
||||||
|
|
||||||
|
# Read the requirements from our requirements.txt file
|
||||||
|
install_requires = open("requirements.txt").read().split("\n")
|
||||||
|
|
||||||
|
# Hook the plugin into the "octoprint.plugin" entry point, mapping the plugin_identifier to the plugin_package.
|
||||||
|
# That way OctoPrint will be able to find the plugin and load it.
|
||||||
|
entry_points = {
|
||||||
|
"octoprint.plugin": ["%s = %s" % (plugin_identifier, plugin_package)]
|
||||||
|
}
|
||||||
|
|
||||||
|
return locals()
|
||||||
|
|
||||||
|
setuptools.setup(**params())
|
Loading…
Reference in a new issue