def main(): oled.init() #initialze SEEED OLED display oled.setNormalDisplay() #Set display to normal mode (i.e non-inverse mode) oled.setHorizontalMode() oled.drawImage(Image.open('friendllyelec.png').convert('1')) time.sleep(1) signal.signal(signal.SIGUSR1, receive_signal) signal.signal(signal.SIGUSR2, receive_signal) signal.signal(signal.SIGALRM, receive_signal) currentView = VnstatView() while True: try: try: event = eventQueue.get(True, screenUpdateTime) currentView = currentView.processEvent(event) except Queue.Empty: pass # Draw a black filled box to clear the image draw.rectangle((0, 0, width, height), outline=0, fill=0) currentView.render(draw) oled.drawImage(image) except KeyboardInterrupt: break except IOError as e: print("Error:", e) # Cleanup before exit oled.clearDisplay()
def shutdown(self, g_vars): self.simple_table_obj.display_dialog_msg(g_vars, 'Shutting down...', back_button_req=0) time.sleep(1) oled.clearDisplay() g_vars['screen_cleared'] = True os.system('systemctl poweroff') g_vars['shutdown_in_progress'] = True return
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ''' import bakebit_128_64_oled as oled from PIL import Image from PIL import ImageFont from PIL import ImageDraw oled.init() #initialze SEEED OLED display oled.clearDisplay( ) #clear the screen and set start position to top left corner oled.setNormalDisplay() #Set display to normal mode (i.e non-inverse mode) oled.setHorizontalMode() image = Image.open('friendllyelec.png').convert('1') oled.drawImage(image)
try: draw_page() lock.acquire() page_index = pageIndex lock.release() if page_index == 5: time.sleep(2) while True: lock.acquire() is_drawing = drawing lock.release() if not is_drawing: lock.acquire() drawing = True lock.release() oled.clearDisplay() break else: time.sleep(.1) continue time.sleep(1) os.system('systemctl reboot') break time.sleep(0.1) except KeyboardInterrupt: break except IOError: print("Error")
def draw_page(): global drawing global image global draw global oled global font global font14 global smartFont global width global height global pageCount global pageIndex global showPageIndicator global width global height global lock global pageSleepCountdown global disableTimeSeconds global disableCounter global status global enabledMarkerShownSeconds global enabledCounter lock.acquire() is_drawing = drawing page_index = pageIndex lock.release() if is_drawing: return if disableCounter > 0: disableCounter = disableCounter - 1 #if the countdown is zero we should be sleeping (blank the display to reduce screenburn) if pageSleepCountdown == 1: oled.clearDisplay() pageSleepCountdown = pageSleepCountdown - 1 return if pageSleepCountdown == 0: return pageSleepCountdown = pageSleepCountdown - 1 lock.acquire() drawing = True lock.release() # Draw a black filled box to clear the image. draw.rectangle((0, 0, width, height), outline=0, fill=0) # Draw current page indicator if showPageIndicator: dotWidth = 4 dotPadding = 2 dotX = width - dotWidth - 1 dotTop = (height - pageCount * dotWidth - (pageCount - 1) * dotPadding) / 2 for i in range(pageCount): if i == page_index: draw.rectangle( (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth), outline=255, fill=255) else: draw.rectangle( (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth), outline=255, fill=0) dotTop = dotTop + dotWidth + dotPadding if page_index == 0: text = time.strftime("%A") draw.text((2, 2), text, font=font14, fill=255) text = time.strftime("%e %b %Y") draw.text((2, 18), text, font=font14, fill=255) text = time.strftime("%X") draw.text((2, 40), text, font=fontb24, fill=255) elif page_index == 1: # Draw some shapes. # First define some constants to allow easy resizing of shapes. padding = 2 top = padding bottom = height - padding # Move left to right keeping track of the current x position for drawing shapes. x = 0 try: IPAddress = get_ip_address('eth0') except: IPAddress = get_ip() cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'" CPU = subprocess.check_output(cmd, shell=True) cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'" MemUsage = subprocess.check_output(cmd, shell=True) cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'" Disk = subprocess.check_output(cmd, shell=True) tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read()) if tempI > 1000: tempI = tempI / 1000 tempStr = "CPU TEMP: %sC" % str(tempI) cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .dns_queries_today" Queries = subprocess.check_output(cmd, shell=True).strip() cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .ads_blocked_today" AdsToday = subprocess.check_output(cmd, shell=True).strip() cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .ads_percentage_today" AdsPercentage = subprocess.check_output(cmd, shell=True).strip() cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .clients_ever_seen" ClientsEver = subprocess.check_output(cmd, shell=True).strip() cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .unique_clients" ClientsUnique = subprocess.check_output(cmd, shell=True).strip() draw.text((x, top + 2), "IP: " + str(IPAddress), font=smartFont, fill=255) draw.text((x, top + 2 + 12), "Queries: " + str(Queries), font=smartFont, fill=255) draw.text((x, top + 2 + 24), "Blocked: " + str(AdsToday), font=smartFont, fill=255) draw.text((x, top + 2 + 36), "Percent: " + str(AdsPercentage), font=smartFont, fill=255) draw.text((x, top + 2 + 48), "Clients: " + str(ClientsUnique), font=smartFont, fill=255) elif page_index == 3: #Disable Pi-Hole for some senconds? -- no draw.text( (2, 2), 'Disable ' + str(int(float(disableTimeSeconds) / 60)) + 'min?', font=fontb14, fill=255) draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=0) draw.text((4, 22), 'Yes', font=font11, fill=255) draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=255) draw.text((4, 40), 'No', font=font11, fill=0) elif page_index == 4: #Disable Pi-Hole for some senconds? -- yes draw.text( (2, 2), 'Disable ' + str(int(float(disableTimeSeconds) / 60)) + 'min?', font=fontb14, fill=255) draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=255) draw.text((4, 22), 'Yes', font=font11, fill=0) draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=0) draw.text((4, 40), 'No', font=font11, fill=255) elif page_index == 5: cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .status" status = subprocess.check_output(cmd, shell=True).strip() if str(status) == "\"disabled\"": enabledCounter = 0 draw.text((2, 2), 'Disabled', font=fontb14, fill=255) if disableCounter > 0: draw.text((2, 20), str(datetime.timedelta(seconds=disableCounter)), font=fontb24, fill=255) draw.rectangle( (2, 47, int( float(width - 4) * (float(disableCounter) / float(disableTimeSeconds))), 47 + 15), outline=0, fill=255) elif str(status) == "\"enabled\"": disableCounter = 0 draw.text((2, 2), 'Enabled', font=fontb14, fill=255) if enabledCounter < enabledMarkerShownSeconds: enabledCounter = enabledCounter + 1 else: enabledCounter = 0 update_page_index(1) else: draw.text((2, 2), 'Disabled', font=fontb14, fill=255) oled.drawImage(image) lock.acquire() drawing = False lock.release()
def draw_page(): global drawing global image global draw global oled global font global font14 global smartFont global width global height global pageCount global pageIndex global showPageIndicator global width global height global lock global pageSleepCountdown global os lock.acquire() is_drawing = drawing page_index = pageIndex lock.release() if is_drawing: return #if the countdown is zero we should be sleeping (blank the display to reduce screenburn) if pageSleepCountdown == 1: oled.clearDisplay() pageSleepCountdown = pageSleepCountdown - 1 return if pageSleepCountdown == 0: return pageSleepCountdown = pageSleepCountdown - 1 lock.acquire() drawing = True lock.release() # Draw a black filled box to clear the image. draw.rectangle((0,0,width,height), outline=0, fill=0) # Draw current page indicator if showPageIndicator: dotWidth=4 dotPadding=2 dotX=width-dotWidth-1 dotTop=(height-pageCount*dotWidth-(pageCount-1)*dotPadding)/2 for i in range(pageCount): if i==page_index: draw.rectangle((dotX, dotTop, dotX+dotWidth, dotTop+dotWidth), outline=255, fill=255) else: draw.rectangle((dotX, dotTop, dotX+dotWidth, dotTop+dotWidth), outline=255, fill=0) dotTop=dotTop+dotWidth+dotPadding # Draw Home if page_index==0: text = time.strftime("%e %b %Y") draw.text((2,2),text,font=font14,fill=255) text = time.strftime("%X") draw.text((2,20),text,font=fontb24,fill=255) cmd = "wstat" wstat = subprocess.check_output(cmd, shell = True ) draw.text((2,48),str(wstat, encoding='utf-8', errors='ignore'),font=font14,fill=255) # Draw Settings elif page_index==1: # Draw some shapes. # First define some constants to allow easy resizing of shapes. padding = 2 top = padding bottom = height-padding # Move left to right keeping track of the current x position for drawing shapes. x = 0 cmd = "ip a | grep wlan0 | grep inet | awk '{print $2}' | rev | cut -c4- | rev" IPAddress = subprocess.check_output(cmd, shell = True ) cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'" CPU = subprocess.check_output(cmd, shell = True ) cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'" MemUsage = subprocess.check_output(cmd, shell = True ) cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'" Disk = subprocess.check_output(cmd, shell = True ) tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read()); if tempI>1000: tempI = tempI/1000 tempStr = "CPU TEMP: %sC" % str(tempI) draw.text((x, top+2), "IP: " + str(IPAddress, encoding='utf-8', errors='ignore'), font=smartFont, fill=255) draw.text((x, top+2+12), str(CPU, encoding='utf-8', errors='ignore'), font=smartFont, fill=255) draw.text((x, top+2+24), str(MemUsage, encoding='utf-8', errors='ignore'), font=smartFont, fill=255) draw.text((x, top+2+36), str(Disk, encoding='utf-8', errors='ignore'), font=smartFont, fill=255) draw.text((x, top+2+48), tempStr, font=smartFont, fill=255) # Draw Shutdown -- no elif page_index==3: draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255) draw.rectangle((2,20,width-4,20+16), outline=0, fill=0) draw.text((4, 22), 'Yes', font=font11, fill=255) draw.rectangle((2,38,width-4,38+16), outline=0, fill=255) draw.text((4, 40), 'No', font=font11, fill=0) # Draw Shutdown -- yes elif page_index==4: draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255) draw.rectangle((2,20,width-4,20+16), outline=0, fill=255) draw.text((4, 22), 'Yes', font=font11, fill=0) draw.rectangle((2,38,width-4,38+16), outline=0, fill=0) draw.text((4, 40), 'No', font=font11, fill=255) # Draw Shutdown Message elif page_index==5: draw.text((2, 2), 'Shutting down', font=fontb14, fill=255) draw.text((2, 22), 'Please wait...', font=font11, fill=255) # Draw Change Wifi - Wifi Client elif page_index==6: draw.text((2, 2), 'Wifi Mode', font=fontb14, fill=255) draw.rectangle((2,18,width-4,18+16), outline=0, fill=255) draw.text((4, 20), 'Wifi Client', font=smartFont, fill=0) draw.rectangle((2,32,width-4,32+16), outline=0, fill=0) draw.text((4, 34), 'Hotspot', font=smartFont, fill=255) draw.rectangle((2,46,width-4,46+16), outline=0, fill=0) draw.text((4, 48), 'NanoGate', font=smartFont, fill=255) # Draw Chang Wifi - Hotspot elif page_index==7: draw.text((2, 2), 'Wifi Mode', font=fontb14, fill=255) draw.rectangle((2,18,width-4,18+16), outline=0, fill=0) draw.text((4, 20), 'Wifi Client', font=smartFont, fill=255) draw.rectangle((2,32,width-4,32+16), outline=0, fill=255) draw.text((4, 34), 'Hotspot', font=smartFont, fill=0) draw.rectangle((2,46,width-4,46+16), outline=0, fill=0) draw.text((4, 48), 'NanoGate', font=smartFont, fill=255) # Draw Chang Wifi - NanoGate elif page_index==8: draw.text((2, 2), 'Wifi Mode', font=fontb14, fill=255) draw.rectangle((2,18,width-4,18+16), outline=0, fill=0) draw.text((4, 20), 'Wifi Client', font=smartFont, fill=255) draw.rectangle((2,32,width-4,32+16), outline=0, fill=0) draw.text((4, 34), 'Hotspot', font=smartFont, fill=255) draw.rectangle((2,46,width-4,46+16), outline=0, fill=255) draw.text((4, 48), 'NanoGate', font=smartFont, fill=0) # Draw Change to Wifi Client elif page_index==9: draw.text((2, 2), 'Wifi Client', font=fontb14, fill=255) draw.text((2, 22), 'Please wait...', font=font11, fill=255) # Draw Change to Hotspot elif page_index==10: draw.text((2, 2), 'Hotspot', font=fontb14, fill=255) draw.text((2, 22), 'Please wait...', font=font11, fill=255) # Draw Change to NanoGate elif page_index==11: draw.text((2, 2), 'NanoGate', font=fontb14, fill=255) draw.text((2, 22), 'Please wait...', font=font11, fill=255) # Draw DHCP Leases elif page_index==12: draw.text((2, 2), 'Last 4 DHCP Leases', font=font11, fill=255) os.system('ldhcp') cmd = "sed -n 1p /tmp/dhcp.list" txt = subprocess.check_output(cmd, shell = True) draw.text((2, 16), str(txt, encoding='utf-8', errors='ignore'), font=smartFont, fill=255) cmd = "sed -n 2p /tmp/dhcp.list" txt = subprocess.check_output(cmd, shell = True) draw.text((2, 28), str(txt, encoding='utf-8', errors='ignore'), font=smartFont, fill=255) cmd = "sed -n 3p /tmp/dhcp.list" txt = subprocess.check_output(cmd, shell = True) draw.text((2, 40), str(txt, encoding='utf-8', errors='ignore'), font=smartFont, fill=255) cmd = "sed -n 4p /tmp/dhcp.list" txt = subprocess.check_output(cmd, shell = True) draw.text((2, 52), str(txt, encoding='utf-8', errors='ignore'), font=smartFont, fill=255) oled.drawImage(image) lock.acquire() drawing = False lock.release()
def draw_page(): global drawing global image global draw global oled global font global font14 global smartFont global width global height global pageCount global pageIndex global showPageIndicator global width global height global lock global pageSleepCountdown lock.acquire() is_drawing = drawing page_index = pageIndex lock.release() if is_drawing: return #if the countdown is zero we should be sleeping (blank the display to reduce screenburn) if pageSleepCountdown == 1: oled.clearDisplay() pageSleepCountdown = pageSleepCountdown - 1 return if pageSleepCountdown == 0: return pageSleepCountdown = pageSleepCountdown - 1 lock.acquire() drawing = True lock.release() # Draw a black filled box to clear the image. draw.rectangle((0,0,width,height), outline=0, fill=0) # Draw current page indicator if showPageIndicator: dotWidth=4 dotPadding=2 dotX=width-dotWidth-1 dotTop=(height-pageCount*dotWidth-(pageCount-1)*dotPadding)/2 for i in range(pageCount): if i==page_index: draw.rectangle((dotX, dotTop, dotX+dotWidth, dotTop+dotWidth), outline=255, fill=255) else: draw.rectangle((dotX, dotTop, dotX+dotWidth, dotTop+dotWidth), outline=255, fill=0) dotTop=dotTop+dotWidth+dotPadding if page_index==0: text = time.strftime("%a %e %b %Y") draw.text((2,2),text,font=font14,fill=255) year = time.strftime('%Y') now = time.time() start_date = time.mktime(time.strptime(year, '%Y')) end_date = time.mktime(time.strptime(str(int(year)+1), '%Y')) percent = int((now-start_date)/(end_date-start_date)*1000)/10.0 bar = int(round(percent/10, 0)) text = bar * u'\u2593' + (10 - bar) * u'\u2591' + str(percent) + '%' draw.text((2,20),text, font=font14, fill=255) text = time.strftime("%X") draw.text((8,38),text, font=fontb24, fill=255) elif page_index==1: # Draw some shapes. # First define some constants to allow easy resizing of shapes. padding = 2 top = padding bottom = height-padding # Move left to right keeping track of the current x position for drawing shapes. x = 0 try: IPAddress = get_ip_address('eth0') except: IPAddress = get_ip() cmd = "cat /proc/loadavg| awk '{printf \"CPU Load: %.2f\", $(1)}'" CPU = subprocess.check_output(cmd, shell = True ).decode("utf-8", errors="ignore") cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.1f%%\", int($3/1024),int($2/1024),$3*100/$2 }'" MemUsage = subprocess.check_output(cmd, shell = True ).decode("utf-8", errors="ignore") cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'" Disk = subprocess.check_output(cmd, shell = True ).decode("utf-8", errors="ignore") tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read()); if tempI>1000: tempI = tempI/1000 tempStr = u"CPU TEMP: %s\u00b0C" % int(tempI) draw.text((x+2, top), "IP: " + str(IPAddress), font=smartFont, fill=255) draw.text((x+2, top+12), str(CPU), font=smartFont, fill=255) draw.text((x+2, top+24), str(MemUsage), font=smartFont, fill=255) draw.text((x+2, top+36), str(Disk), font=smartFont, fill=255) draw.text((x+2, top+48), tempStr, font=smartFont, fill=255) elif page_index==3: #shutdown -- no draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255) draw.rectangle((2,20,width-4,20+16), outline=0, fill=0) draw.text((4, 22), 'Yes', font=font11, fill=255) draw.rectangle((2,38,width-4,38+16), outline=0, fill=255) draw.text((4, 40), 'No', font=font11, fill=0) elif page_index==4: #shutdown -- yes draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255) draw.rectangle((2,20,width-4,20+16), outline=0, fill=255) draw.text((4, 22), 'Yes', font=font11, fill=0) draw.rectangle((2,38,width-4,38+16), outline=0, fill=0) draw.text((4, 40), 'No', font=font11, fill=255) elif page_index==5: draw.text((2, 2), 'Shutting down', font=fontb14, fill=255) draw.text((2, 20), 'Please wait', font=font11, fill=255) oled.drawImage(image) lock.acquire() drawing = False lock.release()
def draw_page(): global drawing global image global draw global oled global font global font14 global smartFont global width global height global pageCount global pageIndex global showPageIndicator global width global height global lock global pageSleepCountdown lock.acquire() is_drawing = drawing page_index = pageIndex lock.release() if is_drawing: return #if the countdown is zero we should be sleeping (blank the display to reduce screenburn) if pageSleepCountdown == 0: oled.clearDisplay() return pageSleepCountdown = pageSleepCountdown - 1 lock.acquire() drawing = True lock.release() # Draw a black filled box to clear the image. draw.rectangle((0, 0, width, height), outline=0, fill=0) # Draw current page indicator if showPageIndicator: dotWidth = 4 dotPadding = 2 dotX = width - dotWidth - 1 dotTop = (height - pageCount * dotWidth - (pageCount - 1) * dotPadding) / 2 for i in range(pageCount): if i == page_index: draw.rectangle( (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth), outline=255, fill=255) else: draw.rectangle( (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth), outline=255, fill=0) dotTop = dotTop + dotWidth + dotPadding # Draw bottom of screen button indicators bottomLine = 55 # Define the starting vertical pixel if showButtonIndicator: draw.text((0, bottomLine), "Home", font=smartFont, fill=255) draw.text((50, bottomLine), "Next", font=smartFont, fill=255) draw.text((93, bottomLine), "Select", font=smartFont, fill=255) if page_index == 0: # Default page, shows WLANpi version, hostname, and eth0 IP address ver = "grep \"WLAN Pi v\" /var/www/html/index.html | sed \"s/<[^>]\+>//g\"" # Pull the version from a file by building the command VER = subprocess.check_output(ver, shell=True) # and saving the result draw.text((0, 1), str(VER), font=smartFont, fill=255) # and then draw it on screen HOSTNAME = subprocess.check_output( 'hostname', shell=True) # Get the current device hostname draw.text((0, 11), str(HOSTNAME), font=font11, fill=255) # and then draw it on screen draw.text((95, 20), "eth0", font=smartFont, fill=255) ip_eth0 = "ip addr show eth0 | grep -Po \'inet \K[\d.]+\'" # Pull the IP address for eth0 by building the command IP_ETH0 = subprocess.check_output(ip_eth0, shell=True) # and saving the result draw.text((0, 29), str(IP_ETH0), font=font14, fill=255) # and then draw it on screen elif page_index == 1: # Displays IP for usb0, wlan1, and CPU temp draw.text((95, 0), "usb0", font=smartFont, fill=255) # usb0 interface marker ip_usb0 = "ip addr show usb0 | grep -Po \'inet \K[\d.]+\'" # Pull the IP address for usb0 by building the command IP_USB0 = subprocess.check_output(ip_usb0, shell=True) # and saving the result draw.text((0, 9), str(IP_USB0), font=font14, fill=255) # and then draw it on screen # This check does not work consistently for wlan1. The APIPA address takes a long time to appear, and until it does this check will # pass as the path exists. The address has not always populated, and so the subprocess.check_output function fails # Currently unsure of a fix for this. #if os.path.exists('/sys/class/net/wlan1'): # If the directory doesn't exist do not display wlan1 # draw.text((95,23),"wlan1",font=smartFont,fill=255) # wlan1 interface marker # ip_wlan1 = "ip addr show wlan1 | grep -Po \'inet \K[\d.]+\'" # Pull the IP address for wlan1 by building the command # IP_WLAN1 = subprocess.check_output(ip_wlan1, shell = True ) # and saving the result # draw.text((0,31),str(IP_WLAN1),font=font14,fill=255) # and then draw it on screen # Draw some shapes. # First define some constants to allow easy resizing of shapes. padding = 2 top = padding bottom = height - padding # Move left to right keeping track of the current x position for drawing shapes. x = 0 tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read()) if tempI > 1000: tempI = tempI / 1000 tempStr = "CPU TEMP: %sC" % str(tempI) draw.text((x, 40), tempStr, font=font11, fill=255) elif page_index == 2: #shutdown -- yes draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255) draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=255) draw.text((4, 22), 'B3 to confirm', font=font11, fill=0) #draw.rectangle((2,38,width-4,38+16), outline=0, fill=0) #draw.text((4, 40), 'No', font=font11, fill=255) elif page_index == 3: draw.text((2, 2), 'Shutting down', font=fontb14, fill=255) draw.text((2, 20), 'Please wait', font=font11, fill=255) oled.drawImage(image) lock.acquire() drawing = False lock.release()
def draw_page(): global drawing global image global draw global oled global font global font14 global smartFont global width global height global pageCount global pageIndex global showPageIndicator global width global height global lock global pageSleepCountdown lock.acquire() is_drawing = drawing page_index = pageIndex lock.release() if is_drawing: return #if the countdown is zero we should be sleeping (blank the display to reduce screenburn) if pageSleepCountdown == 1: oled.clearDisplay() pageSleepCountdown = pageSleepCountdown - 1 return if pageSleepCountdown == 0: return pageSleepCountdown = pageSleepCountdown - 1 lock.acquire() drawing = True lock.release() # Draw a black filled box to clear the image. draw.rectangle((0, 0, width, height), outline=0, fill=0) # Draw current page indicator if showPageIndicator: dotWidth = 4 dotPadding = 2 dotX = width - dotWidth - 1 dotTop = (height - pageCount * dotWidth - (pageCount - 1) * dotPadding) / 2 for i in range(pageCount): if i == page_index: draw.rectangle( (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth), outline=255, fill=255) else: draw.rectangle( (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth), outline=255, fill=0) dotTop = dotTop + dotWidth + dotPadding if page_index == 0: text = time.strftime("%A") draw.text((2, 2), text, font=font14, fill=255) text = time.strftime("%e %b %Y") draw.text((2, 18), text, font=font14, fill=255) text = time.strftime("%X") draw.text((2, 40), text, font=fontb24, fill=255) elif page_index == 1: # Draw some shapes. # First define some constants to allow easy resizing of shapes. padding = 0 top = padding bottom = height - padding # Move left to right keeping track of the current x position for drawing shapes. x = 0 try: IPAddress = get_ip_address('eth0') except: IPAddress = get_ip() cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'" CPU = subprocess.check_output(cmd, shell=True) cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'" MemUsage = subprocess.check_output(cmd, shell=True) cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'" Disk = subprocess.check_output(cmd, shell=True) tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read()) if tempI > 1000: tempI = tempI / 1000 tempStr = "CPU TEMP: %sC" % str(tempI) draw.text((x, top + 5), "IP: " + str(IPAddress), font=smartFont, fill=255) draw.text((x, top + 5 + 12), str(CPU), font=smartFont, fill=255) draw.text((x, top + 5 + 24), str(MemUsage), font=smartFont, fill=255) draw.text((x, top + 5 + 36), str(Disk), font=smartFont, fill=255) draw.text((x, top + 5 + 48), tempStr, font=smartFont, fill=255) elif page_index == 3: #shutdown -- no draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255) draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=0) draw.text((4, 22), 'Yes', font=font11, fill=255) draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=255) draw.text((4, 40), 'No', font=font11, fill=0) elif page_index == 4: #shutdown -- yes draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255) draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=255) draw.text((4, 22), 'Yes', font=font11, fill=0) draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=0) draw.text((4, 40), 'No', font=font11, fill=255) elif page_index == 5: draw.text((2, 2), 'Shutting down', font=fontb14, fill=255) draw.text((2, 20), 'Please wait', font=font11, fill=255) oled.drawImage(image) lock.acquire() drawing = False lock.release()