[{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/000/590/original/20240106_195109.jpg?1704646493","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n        \u003cp\u003eThe 3D printed insert can be found here: \u003ca href=\"https://www.printables.com/model/710601-pi-5-official-case-active-cooler-insert-small-came\"\u003ehttps://www.printables.com/model/710601-pi-5-official-case-active-cooler-insert-small-came\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eTo get the display to show stats, first install blinka by following the guide here: \u003ca href=\"https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi\"\u003ehttps://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAssuming you created a python virtual environment in /home/pi/env path, run the following commands:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ecd ~\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003esource ./env/bin/activate\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003epip install adafruit-circuitpython-ssd1306\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eNow create your python file called stats_display.py in the /home/pi directory.\u003c/p\u003e\n      \n\n\n\n\n","metadata":{}},{"element_type":"code","content":"#! /home/pi/env/blinka/bin/python3\n\nimport adafruit_ssd1306\nimport board\nimport busio\nimport digitalio\nimport json\nimport math\nimport requests\nimport signal\nimport subprocess\nimport sys\nimport time\nfrom PIL import Image, ImageDraw, ImageFont\n\ni2c = busio.I2C(board.SCL, board.SDA)\ndisp = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3D)\ndisp.fill(0)\ndisp.show()\nwidth = disp.width\nheight = disp.height\nimage = Image.new(\"1\", (width, height))\ndraw = ImageDraw.Draw(image)\ndraw.rectangle((0, 0, width, height), outline=0, fill=0)\npadding = 0 \ntop = padding\nbottom = height - padding\nx = 2\nfont = ImageFont.load_default()\n\ndef handler(signum = None, frame = None):\n    print('-------------------')\n    print('turning off display')\n    print('-------------------')\n    clearDisplay()\n    sys.exit(0)\n\ndef clearDisplay():\n    draw.rectangle((0, 0, width, height), outline=0, fill=0)\n    disp.image(image)\n    disp.show()\n\nfor sig in [signal.SIGTERM, signal.SIGQUIT]:\n    signal.signal(sig, handler)\n\ndef run():\n    global outsideTemp, currentTime, previousTime\n    #print(pos)\n    draw.rectangle((0, 0, width, height), outline=0, fill=0)\n    cmd = \"hostname -I | cut -d' ' -f1\"\n    IP = subprocess.check_output(cmd, shell=True).decode(\"utf-8\")\n    cmd = 'vcgencmd measure_temp'\n    Temp = subprocess.check_output(cmd, shell=True).decode(\"utf-8\")\n    tempStr = Temp.replace('temp=', '')\n    cmd = 'vcgencmd measure_clock arm'\n    Freq = subprocess.check_output(cmd, shell=True).decode(\"utf-8\")\n    Freq = Freq.replace('frequency(0)=', '')\n    freqNum = int(Freq) / 1000000000\n    freqNum2 = format(freqNum, '.1f') + \" GHz\"\n\n    ipList = IP.split('.')\n    ip1 = '.'.join(map(str, ipList[:2]))\n    if (ip1 != ''):\n        ip1 = ip1 + '.'\n    ip2 = '.'.join(map(str, ipList[2:]))\n\n    draw.text((35, 0), ip1, font=font, fill=255)\n    draw.text((35, 10), ip2, font=font, fill=255)\n    draw.text((35, 25), tempStr, font=font, fill=255)\n    draw.text((35, 40), freqNum2, font=font, fill=255)\n\n    disp.image(image.rotate(90))\n    disp.show()\n    time.sleep(0.1)\n\nwhile True:\n    try:\n        run()\n    except KeyboardInterrupt:\n        clearDisplay()\n        print()\n        sys.exit(0)\n    except Exception:\n        clearDisplay()\n        print()\n        sys.exit(0)","metadata":{"language":"auto","linenums":false}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003ePlease try running the command:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e\u003cspan\u003evcgencmd measure_clock arm\u003c/span\u003e\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIf your output does not start with \u003cspan\u003efrequency(0)= then you will need to change the line:\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e\u003cspan\u003eFreq = Freq.replace(\u003cspan class=\"hljs-string\"\u003e'frequency(0)='\u003c/span\u003e, \u003cspan class=\"hljs-string\"\u003e''\u003c/span\u003e)\u003c/span\u003e\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003cspan\u003eto match the start of your output in the code file above.\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003eNow try to run the code by calling:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003epython ./stats_display.py\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIf the display is working, we can now run this as a service at start up.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eRunning Code as a Service\u003c/h3\u003e\n\u003cp\u003eCreate a file called zzzDisplay.service\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"code","content":"[Unit]\nDescription=OLED Display\nAfter=multi-user.target\n\n[Service]\nType=idle\nExecStart=/home/pi/env/bin/python3 /home/pi/stats_display.py\nRestart=no\nKillMode=process\n\n[Install]\nWantedBy=multi-user.target","metadata":{"language":"auto","linenums":false}},{"element_type":"text","content":"\n  \n  \n        \u003cp\u003eNext run:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003esudo cp ./zzzDisplay.service /lib/systemd/system/\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003esudo systemctl daemon-reload\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003esudo systemctl enable zzzDisplay.service\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003esudo systemctl start zzzDisplay.service\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eNow you can reboot your pi and the display should start working.\u003c/p\u003e\n\u003cp\u003eIf you would like to stop the display, you can run:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003esudo systemctl stop zzzDisplay.service\u003c/code\u003e\u003c/p\u003e\n\u003ch3\u003e\u0026nbsp;\u003c/h3\u003e\n      \n\n","metadata":{}}]