#!/usr/bin/python3 # # Check O/S bitness # This routine runs at startup and checks the O/S's bitness # and sets Dex's eyes to green (32 bit) or blue (64 bit import os import signal import sys import logging from time import sleep from gopigo3 import FirmwareVersionError from easygopigo3 import EasyGoPiGo3 # Waveshare e-Ink path definitions picdir = "/home/pi/Project_Files/e-Paper_Hat/e-Paper/RaspberryPi_JetsonNano/python/pic" libdir = "/home/pi/Project_Files/e-Paper_Hat/e-Paper/RaspberryPi_JetsonNano/python/lib" if os.path.exists(libdir): sys.path.append(libdir) # Waveshare e-Ink imports import logging from waveshare_epd import epd2in13b_V3 import time from PIL import Image,ImageDraw,ImageFont import traceback logging.basicConfig(level = logging.DEBUG) # check if it's ran with Python3 assert sys.version_info[0:1] == (3,) # Set the brightness of Dex's eyes to a reasonable value brightness = 10 # Start an instance of the GoPiGo robot class via # EasyGoPiGo3 try: gopigo3_robot = EasyGoPiGo3() except IOError: logging.critical('\nGoPiGo3 is not detected.\n') sys.exit(1) except FirmwareVersionError: logging.critical('\nGoPiGo3 firmware needs to be updated\n') sys.exit(2) except Exception: logging.critical('\nUnexpected error when initializing GoPiGo3 object\n') sys.exit(3) # Instantiate WaveShare e-Ink objects try: logging.info('Instantiate WaveShare e-Ink objects') epd = epd2in13b_V3.EPD() except IOError as e: logging.info(e) exit() except KeyboardInterrupt: logging.info("ctrl + c:") epd2in13b_V3.epdconfig.module_exit() exit() # Define fonts for e-Ink screen font1 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 16) font2 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18) font3 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 13) # Define essential e-ink constants HBlackimage = Image.new('1', (epd.height, epd.width), 255) # 298*126 HRYimage = Image.new('1', (epd.height, epd.width), 255) # 298*126 ryimage: red or yellow image drawblack = ImageDraw.Draw(HBlackimage) drawry = ImageDraw.Draw(HRYimage) # Initialize and start the e-ink display logging.info("Starting WaveShare e-Ink display") epd.init() epd.Clear() def check_bitness(): # check to see which kernel is being run os_version = os.popen('uname -m').read() # os_version = "aarch64\n" print("os_version is", os_version) if os_version == "aarch64\n": logging.info("Operating System Kernel Version is 64 Bit\n") logging.info("Eyes are Blue\n") gopigo3_robot.left_eye_color = (0, 0, (brightness + 5)) # set eyes blue if 64 bit gopigo3_robot.right_eye_color = (0, 0, (brightness + 5)) # add ofset because blue is not as bright gopigo3_robot.open_eyes() # enable eyes. write_eink("blue") # update() else: logging.info("Operating System Kernel Version is 32 Bit\n") logging.info("Eyes are Green\n") gopigo3_robot.left_eye_color = (0, brightness, 0) # otherwise, set to green if 32 bit gopigo3_robot.right_eye_color = (0, brightness, 0) gopigo3_robot.open_eyes() # enable eyes. write_eink("green") # update() def write_eink(color): if color == "green": logging.info("Writing test message. . .") drawblack.text((10, 0), 'GoPiGo OS version 3.0.1 updated', font = font3, fill = 0) drawblack.text((20, 20), 'Running kernel is 32 Bit', font = font1, fill = 0) drawblack.text((50, 40), 'Eyes are Green', font = font1, fill = 0) drawry.text((20, 60), 'pigpiod is NOT updated', font = font1, fill = 0) epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) else: logging.info("Writing test message. . .") drawblack.text((10, 0), 'GoPiGo OS version 3.0.1 updated', font = font3, fill = 0) drawblack.text((20, 20), 'Running kernel is 64 Bit', font = font1, fill = 0) drawblack.text((50, 40), 'Eyes are Blue', font = font1, fill = 0) drawry.text((20, 60), 'pigpiod is NOT updated', font = font1, fill = 0) epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) def update(): drawry.text((20, 60), 'pigpiod is NOT updated', font = font1, fill = 0) epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) #------------------------------------ # Main routine entry point is here #------------------------------------ if __name__ == "__main__": check_bitness() logging.info("Finished!") sys.exit(0)