1"use strict";(globalThis.webpackChunkwebsite=globalThis.webpackChunkwebsite||[]).push([[862],{684:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"ps-85/software-setup/muthur","title":"MU/TH/UR LED Matrix","description":"Light up the LED Matrix","source":"@site/docs/ps-85/software-setup/muthur.md","sourceDirName":"ps-85/software-setup","slug":"/ps-85/software-setup/muthur","permalink":"/docs/ps-85/software-setup/muthur","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"title":"MU/TH/UR LED Matrix","sidebar_position":5,"description":"Light up the LED Matrix"},"sidebar":"docsSidebar","previous":{"title":"Terminal","permalink":"/docs/ps-85/software-setup/terminal-config"},"next":{"title":"Gallery","permalink":"/docs/ps-85/gallery"}}');var i=t(4848),r=t(8453);const a={title:"MU/TH/UR LED Matrix",sidebar_position:5,description:"Light up the LED Matrix"},l="MU/TH/UR LED Matrix",h={},c=[{value:"1. Installation",id:"1-installation",level:3},{value:"2. Controlling the Lights",id:"2-controlling-the-lights",level:3},{value:"Manually with the Python script",id:"manually-with-the-python-script",level:4},{value:"With the Bash scripts",id:"with-the-bash-scripts",level:4}];function o(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"muthur-led-matrix",children:"MU/TH/UR LED Matrix"})}),"\n",(0,i.jsxs)(n.p,{children:["If you opted to include the ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/MU_/_TH_/_UR",children:"MU/TH/UR"})," LED Matrix in your PS-85 build, you can set it up to display a simple blinking pattern similar that seen in the Alien movies."]}),"\n",(0,i.jsxs)(n.p,{children:["The CharliePlex LED Matrix Bonnet is well documented over on ",(0,i.jsx)(n.a,{href:"https://learn.adafruit.com/adafruit-charlieplex-bonnet/python-examples",children:"Adafruit's website"})," if you want to explore more functionality."]}),"\n",(0,i.jsx)(n.h3,{id:"1-installation",children:"1. Installation"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Make the MU/TH/UR Directory"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd /home/pi\nmkdir muthur\ncd muthur\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Download the Script and Bash Files"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"wget https://raw.githubusercontent.com/jeffmerrick/typeframe/main/ps-85/software/muthur/lights.py\nwget https://raw.githubusercontent.com/jeffmerrick/typeframe/main/ps-85/software/muthur/start.sh\nwget https://raw.githubusercontent.com/jeffmerrick/typeframe/main/ps-85/software/muthur/stop.sh\nchmod +x start.sh stop.sh\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create Virtual Environment"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"python3 -m venv venv\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Activate Virtual Environment"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"source venv/bin/activate\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install Dependencies"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"pip install adafruit-circuitpython-is31fl3731 adafruit-circuitpython-framebuf RPi.GPIO Pillow\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Enable I2C (if not already enabled)"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo raspi-config nonint do_i2c 0\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"2-controlling-the-lights",children:"2. Controlling the Lights"}),"\n",(0,i.jsx)(n.h4,{id:"manually-with-the-python-script",children:"Manually with the Python script"}),"\n",(0,i.jsx)(n.p,{children:"With the virtual environment activated:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"python3 lights.py\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"python3 lights.py off\n"})}),"\n",(0,i.jsx)(n.p,{children:"When you're done:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"deactivate\n"})}),"\n",(0,i.jsx)(n.h4,{id:"with-the-bash-scripts",children:"With the Bash scripts"}),"\n",(0,i.jsx)(n.p,{children:"To turn on the lights:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"./start.sh\n"})}),"\n",(0,i.jsx)(n.p,{children:"To turn off the lights:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"./stop.sh\n"})})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>l});var s=t(6540);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.