{"componentChunkName":"component---src-templates-blog-post-js","path":"/lab-1/","webpackCompilationHash":"f2e780667fa7b13e6baf","result":{"data":{"github_icon":{"childImageSharp":{"fixed":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAACt0lEQVQ4y21UPWtUQRR9b010lURSv5fMZO/EiJ2kiwj+CSOKIRGRWKmNhYKF9lpkU8RCgqKFRT5BsLe201RB4i6oKRUhcb+i587c+94sZuHydmbuOffcj5kkt5Twj7+ZcRX+n1lXxf/Z3LjV3LpGZqmTsxnXhK3B5mCnBJfC13NkJnD5zUR+uaHLcNgZHZ/4ywbCPtN9+HyB71XFYZ0WygoyS08DCQCW/kBFGyRdAL0B1OU9f+bJzzDxYh8pZFaUbKzmHRh8yM6FMg4SqdUz+HYChuqhVFSonIlS2QThFJyWYL9Qzz2sP0PZJ/z/DvuN9Qusp0D6qsTRdZVZBeFOmQI9jFIYx/5IsbZ0GoS1skRuIVL7FWdDaIKb9XUz7mA0pLwkqgdLIsdkSUQ8KD6PGQPCA1F5k2u4KoRdOPSwviQjUOEiw5k7z2o9KchTrTvW52H7wB5KuTY4SkPHAQcfJJVypo74hfMwswi2peOFYLuccgdRuiL5TTys+RGkXqXxSnU66r72lkfLtTgS34JAaN07iZpmkmoutyDsB+XhVum4uddBoZ/TFkds6nzBqQGrCqmmlERdV5Wp3i7gtvkieA5DuxxtLdSPer5jhu5G17CiREqMgL5Rsj+fB2xbSrbJhHN+XKz7AWuKwz3YcUkzvuepjNEA9hew3hdlbWnMLXY6CeYmov3E9wLsrXFnuSZ72HvJgx/VcACgOgeOOtuRL0pHwyr9iqFJ7tRHBBgGcD3UlWTIMY/l7K2M1Sb5rAVcjwnlkZjve7oAeCbKHomakegV4jSPCeF9UdeC+ccBvsta374u4mBRXo9t2HtfE7k1uRIa90DTDfPnnkf4NPmv8NZdA+ibnThXPEtMpgoh4IkhzgSPgaEbEU7JqBxaW4zJCRDcxtlF6WqalaWZBvgOvkP6qGr3meMfi0sXgbOlbzsAAAAASUVORK5CYII=","width":50,"height":50,"src":"/static/b71bc541b323dcd8f0a887920f9670f9/352e5/github-icon.png","srcSet":"/static/b71bc541b323dcd8f0a887920f9670f9/352e5/github-icon.png 1x,\n/static/b71bc541b323dcd8f0a887920f9670f9/aae31/github-icon.png 1.5x,\n/static/b71bc541b323dcd8f0a887920f9670f9/47c2b/github-icon.png 2x"}}},"site":{"siteMetadata":{"title":"Da Post","author":"Matthew Robertson"}},"markdownRemark":{"id":"32d4c620-506c-54a6-ab1e-2b27801d3f39","excerpt":"Objective The purposes of this lab are to: Learn to enumerate requirements from use cases and user stories Learn to utilize the general purpose input/output…","html":"<h3>Objective</h3>\n<p>The purposes of this lab are to:</p>\n<ul>\n<li>Learn to enumerate requirements from use cases and user stories</li>\n<li>Learn to utilize the general purpose input/output (GPIO) pins on the Raspberry Pi to control LEDs.</li>\n<li>Learn to develop a minimum viable product, and deliver new functionality through subsequent updates until the requirements are met, and all of the deliverables are acceptable.</li>\n<li>Learn to use Github for progressive code commits and version tracking.</li>\n</ul>\n<h3>Materials</h3>\n<p>The materials used for this lab were</p>\n<ul>\n<li>Personal computer (MacBook Pro)</li>\n<li>Monitor, keyboard, mouse, and necessary cables to develop on the pi</li>\n<li>1 x Raspberry Pi 3 Model B+</li>\n<li>1 x Breadboard</li>\n<li>1 x Stop light LED component with built in resistors</li>\n<li>4 x Female to male jumper cables</li>\n</ul>\n<h3>References</h3>\n<ol>\n<li><a href=\"https://www.instructables.com/id/Install-Nodejs-and-Npm-on-Raspberry-Pi/\">Installing Node on a Raspbery Pi</a> - This site has a wonderful walk through on how to get NodeJS installed on a Raspberry Pi. Node is what runs the server for this project</li>\n<li><a href=\"https://www.w3schools.com/nodejs/nodejs_raspberrypi_blinking_led.asp\">Basic Blink Tutorial for NodeJS</a> - This is a great tutorial and intro to manipulating GPIO pins on a Raspberry Pi through NodeJS.</li>\n<li><a href=\"https://www.npmjs.com/package/rpi-gpio\">NPM rpi-gpio</a> - This is the package reference to a great library for manipulating GPIO pins on a Raspberry Pi.</li>\n<li><a href=\"https://www.lucidchart.com/\">Lucidchart</a> - A wonderful piece of online software that all the state diagrams were made through</li>\n<li><a href=\"https://github.com/facebook/create-react-app\">Create React App</a> - A wonderful wrapper to quickly create a ReactJS frontend application</li>\n<li><a href=\"https://expressjs.com/\">ExpressJS</a> - The documentation for the library used to create the API in NodeJS</li>\n<li><a href=\"https://www.npmjs.com/package/express-promise-router\">NPM express-promise-router</a> - A useful package for having the Express API be asynchronous </li>\n<li><a href=\"https://www.npmjs.com/package/onoff\">NPM onoff</a> - The package used in this lab to manipulate GPIO pins</li>\n<li><a href=\"https://www.npmjs.com/package/path\">NPM path</a> - A necessary tool for grabbing relative paths to server up certain files from NodeJS</li>\n</ol>\n<h3>Procedures</h3>\n<ol>\n<li>\n<p>Follow the guide in <a href=\"https://www.instructables.com/id/Install-Nodejs-and-Npm-on-Raspberry-Pi/\">Reference 1</a> to install NodeJS onto a Raspberry Pi</p>\n<ul>\n<li>\n<p>Ensure Node installed by running the following command</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">node --version</code></pre></div>\n</li>\n<li>\n<p>Ensure npm installed by running the following command</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">npm</span> --version</code></pre></div>\n</li>\n<li>If either of these don’t return a version number, run through the above tutorial again and try to install it again. Also try and check that npm and node were both successfully added to your PATH variable</li>\n</ul>\n</li>\n<li>\n<p>Once that is installed follow the documentation on how to set up a simple NodeJS server <a href=\"https://expressjs.com/en/starter/hello-world.html\">here</a>. The simple NodeJS + ExpressJS server they provide for you is</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> express <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'express'</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">express</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> port <span class=\"token operator\">=</span> <span class=\"token number\">3000</span>\napp<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> res<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Hello World!'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\napp<span class=\"token punctuation\">.</span><span class=\"token function\">listen</span><span class=\"token punctuation\">(</span>port<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">Example app listening on port </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>port<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">!</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n</li>\n<li>\n<p>Once that is installed, it is time to create the frontend part of the application. Do this by using the following command </p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">npx create-react-app ./</code></pre></div>\n</li>\n<li>Once it has been installed in the directory you want, you are ready to start creating your server to serve up the React app and the API server that will manipulate the GPIO pins.</li>\n<li>\n<p>Follow the following logical state diagrams to model the data flow on the server side\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 573px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b44c052239aa9546f6f8909a84bad2c1/65025/state-diagram-1.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 81.50087260034904%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACOUlEQVQ4y5VU227TQBD1L4MQ74D4CB6aByQu5aVcJCQiBJHa8lCp5bFIiZM4sR3bsR3H92sOc1ycpghIsDTa2d3ZMzNnj1ep6xpVVeHQsWkaLMMIph+glLX6txiFzp+sC6KVZdnOCVaI7w36sE5eIbAtbABUstbFKodUtNlsUOQ50rpBcHGO4skDlI/uIXl/jETWmrraX2EXEMcxXNdFuF5jneXQv3xC9fQhysf34b7uwYsTxGF4W+G+li3Lgu/74FcUBVarFez+BzgnL+GbBkJJmIgxMbtROo52wThnmwzKpVV+oVSxXC5bUM1yobtBux5HEdIsQyRjC8hKeJiTzjgnkOd5ME0TQRAgk0M3cYA+vsR8eI7JeAzbcba0EFRJkgS2bbdtcYEHCbAWzlgp9+lnWYoozuDb18j058j1HhztKyzbk7O3iRW2YhhGm4GgBHAkK8eOAgYbho65bsGafhOwI0TTZ0jtz1iHKRbCJZOSDqWTBlvvtMZxMpm0GQm2WCzatoqiFC4DeLM+VtpbJKElCRvZi7bdKbsC3jUGkENyyTn9FlRo0DRTErnI8qLdj3/dMv2/yqaTCalgIC+EbeWiRU1Xoc6uhZa0Tcx97u0VNo2A1GKaJvLfNpiaQ5xqbzDQXuCHcSUaFMlIy+R8q8N/CZuV3dx2jDCI8V09RV89Qn/Yw9noHVxHLjJNDv9TOmsa0Wsjbcc+LuYfMVCPMXOGgOjyzmvzv88XnxfKaqSOUGQF6qa+E/MTxSvKgKvU/dwAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"State Diagram of Manual Mode\"\n        title=\"State Diagram of Manual Mode\"\n        src=\"/static/b44c052239aa9546f6f8909a84bad2c1/65025/state-diagram-1.png\"\n        srcset=\"/static/b44c052239aa9546f6f8909a84bad2c1/cf440/state-diagram-1.png 148w,\n/static/b44c052239aa9546f6f8909a84bad2c1/d2d38/state-diagram-1.png 295w,\n/static/b44c052239aa9546f6f8909a84bad2c1/65025/state-diagram-1.png 573w\"\n        sizes=\"(max-width: 573px) 100vw, 573px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<ul>\n<li>This diagram shows how the data will flow as far as turning the lights on and off through the API and in turn the front-end of the application.\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 349px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/74b9ed8e4afa3201675a5b52e31c9fc4/31569/state-diagram-2.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 148.13753581661894%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADk0lEQVRIx41VWWsTURTuXxbEBxUXEKFKCz6oiA+2ttaatoIgigruVkHQFqs2bZqtWWa7mckkk8yaz3NuvJpMJtGBy5m7ffd8Z52L4xhZI0kSRFGEfr8P3/cRBAF6vd7YGd4flTzm1MLoJg8GZIBms4l8Po+dnR3oug5N0+ReGlD9z6lJevAmAxqGIQcD27aNUqkk1xk0DEN5Vkkec7PUTz/AF03TnDg7QXkWoJIDkl7HRUsIDAaD6YBKg1H1s/4TACVNR8BgGXcmKE/zMsuA5ubXz8ivL0Ps7SKgNbU/VcNMx0Sk4QAwHm8ivHQSuHoGPknjxWNEpHFEofRfTpE2Yw2Inn50iP78aQwWz8OZPwuQ9BYvwDF0aYZ4xGljTknTtVstWE4b9W+7iK+chr9wHuVzJxATWLhwDqJSxiALcNT4PHjRsiy0CFAGN2WKeWsRuHwKuHYRIMrm0g30mGaG88Yoczh0Oh0ICg3++ALTcg0NVm4Z1vV5WA/X0GkJqV30W4GpccgacXpx3o6lFN12en18ofTrJwNEnHqpdJ3wMk88z5PaqZBgGkN7ChQO8qhUKjg6PCBziNmpp+i22224rjueCbxH9Pp+jNpxDX6Q0D5mZ4p6gR3BNlSHwpCp00O2DrP8FHZ5g+RzuG2BmKjz/tQ4ZK3Yu/yp8sTS83qwiptAaxVobwBiBWbpEdXIcCLnpYbDSx6KxeKfIWQBIFBysTDKiLQViMIdVHdvQt+/TfP7EGYNiaQ+JQ7Zfo1GQ9a8YWWOJC1bNNA7vksga3ArKwgaK+jV1uDYptyfSVl5WFFm0CBMYJRfI6jfIXXvkVyCUd1GFFMcRuH0FsAgjuNITf+W+PB3YY3R0vMo7D1BWxQRRvzoP1oAgzAYg47GIR/qdjvQdAvffx7CEg7Nu38q+Mx6qEr8aBNSTmvU62g2mtLObmcYq2pfacf/Y/WQFxiQAfiCepkT2nYFDqp7cLttcKSne80EZUWPezC3SnWAogf54128LKziVWWV5BqO6j/k+szAHlWbbcRFwu8TuNnE6+J9bGs5vK/l8EF7gDfFnKSd7s+ZLUBpGgQ+DM3Epy/vJdizH0tYf3cNz/eXsd3YQF2vDrWMwv9vUvx1vQ5eFdbx0czhk76FD/o63h5tSTunNZxwSrqxB2SjhIpDRTskkE28qz7A28IWapSO7BjFJtMpWWN4MJTUuKwZraasRjyf1pd/AdZj+xPuPdJ2AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"State Diagram of Auto Mode\"\n        title=\"State Diagram of Auto Mode\"\n        src=\"/static/74b9ed8e4afa3201675a5b52e31c9fc4/31569/state-diagram-2.png\"\n        srcset=\"/static/74b9ed8e4afa3201675a5b52e31c9fc4/cf440/state-diagram-2.png 148w,\n/static/74b9ed8e4afa3201675a5b52e31c9fc4/d2d38/state-diagram-2.png 295w,\n/static/74b9ed8e4afa3201675a5b52e31c9fc4/31569/state-diagram-2.png 349w\"\n        sizes=\"(max-width: 349px) 100vw, 349px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></li>\n<li>In this diagram we see the logic of the automatic timer function. This is what the logic should be when the light will act as a normal stoplight would; cycling through its lights on specified intervals.</li>\n<li>The way these two diagrams talk is that whenever the cycle-on signal is triggered, the lights are turned off and the start point of the cycle is triggered. Whenever any other action is taken, it will then transition back to that state. Here is what the diagrams together look like.\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/1b1b51c5308e9f09c39f1ecd392d048d/db2b8/state-diagram-3.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 82.93577981651377%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACXklEQVQ4y31UuY4TQRD1JxOTkJIhIX6AAERAgMhIEAFISIgVq+Xwar2w2F6vPVcfc/Uc5lGvxz2MF0TQM91dVa9eXT3rug5h9X3v/3Vdw1qLsixRVZU/c8+7pmlGvbZtcdt+Nj3QUGsNY4zsK7RiTAAaEpByOuD6LyA3NCQDKjfO4ReA/X7vF3WKovAAPDuRV7K6A9N/MvRAAupZyDJx7FmRsVLKO/MyuWvoQGUeuD84PAIMQAzR1g7Z1zOk9+4g+fgeTqgWApZlmZd3crabNbL7d2HfvEIrkfST0GchFwTM8xy5MEi+XyJ99hj26gdKAdmLZzItJexC5EWWInn+FOr0ROStTxHZeYb8MC/MEVk0TljmFuubBVKVwpohVIZXViWyVO5EN9Eb2NLKfePTRVIeMORnKEiJNDNIt3Ok8wfYrU4QxQpG2JFhHEfY7iLkJkL07RGS9Vtx7iRlzud7DJnsYimC1gpKDK2RkJYfxJB3FlqcUk6WKRlaA7U9g06uoY31974GwnIW+o8H9l9VSS9ahS+rU+hcSVWHvgtGQx/WuNjMsU6uvLx29ajjAUOjOqHeuA7LaIEXnx/ifPUJdTnkKPQq91obvL54gneXL1HklR+C0McjwzBSg6HDz+0CSRqPzqaj2UhlY32D690SXduNA+EZhrZhUoMB/9hLf/WHqTiMGx0PjS/7yvkKU5eArMPR6AXDwLLr2iNW/NPxOL/9n5FlwUKER4+D7zWOFidiAjbVmS7qcRgCkbFtpgZkMA0xgE9fl1AcOg8Pxl+vzW0WVBwfi4ODqaMAftv2N52dIRVZPg+/AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"State Diagram of Both Auto and Manual Modes\"\n        title=\"State Diagram of Both Auto and Manual Modes\"\n        src=\"/static/1b1b51c5308e9f09c39f1ecd392d048d/b9e4f/state-diagram-3.png\"\n        srcset=\"/static/1b1b51c5308e9f09c39f1ecd392d048d/cf440/state-diagram-3.png 148w,\n/static/1b1b51c5308e9f09c39f1ecd392d048d/d2d38/state-diagram-3.png 295w,\n/static/1b1b51c5308e9f09c39f1ecd392d048d/b9e4f/state-diagram-3.png 590w,\n/static/1b1b51c5308e9f09c39f1ecd392d048d/f9b6a/state-diagram-3.png 885w,\n/static/1b1b51c5308e9f09c39f1ecd392d048d/db2b8/state-diagram-3.png 1090w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></li>\n</ul>\n</li>\n<li>Once you have your server up and running, you are ready to get your GPIO pins wired up and ready to go. This can be done using the following diagrams (remember, the lights in these diagrams have resistors built into them and that is why they are not on the layout diagram but still show up on the logical one. For the sake of the diagram, the fancy 4-pronged light represents a component that has 3 resisted lights on it and a ground pin all on a integrated board.\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/c039fa3dcaa60181b5718acacf6b68ce/b582c/rpi-physical-diagram.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 119.78193146417443%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAEr0lEQVQ4y31UfUyVVRg/t9DIREEJuKPNsjFzy9ZsdGfmxkhnY6suY/mHrRFjSl8yFDKQYClqWIhJBU0nA6fDwFKGBeOCA/nwfr33viAXLx/3XgLUDIESLlzgfe+vc879QIh6t2fnOc85z+/+fs9znkskWQY3ScacJGGpb3ZmbsHevcQdmQYlmk8YELPZOU9Sq70N+Y0ncLKpEBf15WjvasC5ilKU1JWgTFOGqzVXUXOlBpXNlShq/Q7mPhGd/TqM/fUH3BR0HpCxk4Hy+vPIKEvH/vID2HD4Wbxb9AYq6ioQ9X4UonZFofhcMarOVkFdoAZJIXg5fzN2FqhwzfgTJ0R8cmXKeXrGhV6xFyM9Ixi2DmPD8RdA9hFkV2fjlfc2Y92uddhatBVxhXFQ5ipBDhAoMhQgewkOa/I8gHPe2s14JefX5mNb4Taoi9VYmbkSZD8BySQISwhDeHw49xkQs8CDgQjMDgRRE3xTXeBluKiGX1zKQXRuNL9M0iiDdMrgM4KAlAAsT1qO1TtWI/jVYISmhCLmxxioSlQIig3CqdJvFwJ66jiH+isaXL98HaoTKs4i5PUQrIleA3KQcLaRkZFQLlNiU/ImpP6aiqSfkxC2MwwnzxQuljzLAxmXMrA+az2CMoNA0gmCY4IR/Fow9xVpCqzasQpPbVmBtR+vRcL5BKiKVXhsuwKFFaceaYo8L/no5aOIPRaL8JxwT/0oEPmccNncsgie/HIFwo48DeURJSKPPwOSSJBXd+zfkhnT6qpqVF+sxsa8jbyGkdmhIB8SPE6fiIKuT3yyDKFpIYg4pEREZgSez3oOAakERU0LJMv+Lp9pOIv40/F48euX8GZxDL6vzEVichyS9qjxwd53sCf5LexOfhtb9h2C+qMk7E7cjq+KP0XvsHmhZMaOv0XJhRHnAzhnpuB0TWFyehIu+j6nZqcx5ZqGLM3Afv8hfqgdgmXwbzpyM3BOT/HBYDh+hmzjZrPjxn9+bu+Z9Y4TF27cRe89J99Lkhu+5npqSMEmJl0YHZvE2LgTo+OT3PevXn9kdAITD6egt47g9DU7rIPj7G+BAzFjWBxQpj89NPA7dC2tEA1G3BLM0LW2ocssQtDquDFf29IOq2hCVa0JOaVGdFusHiDZq1LikiUOOOBwwCwI6BDNEE0mz2o2cb9TFGE2Cdzv7hRx9jctCn65idvd3fy58RcyJ3FQzpCVxm63Q28wwGg0QqvVwkSTdXo9N+azGDszGgU0Ck1o6riBLouFAy1iKPNi2212GGiyQBP0Oh0HYXtmJsETY4DsvEGnQaOhEZYFgNJCyTabzZ/sW42MMTVfTKCAzG9o0ECjqac1tFDJ0v9Ipkk+yYJAJVNWzJjPYgYKLlDA5qZmtLS0+BnK8vzT8zIEHA47lSnATBvBWHV0iJyRIBi5bzDoIdJGsTtsb7F0cVuSIZNsdwyhrc1AEztgFDrR3k7BTLeg1TGmZu633zTyM71BpL5AAa2eLj9aQx/gg/t/or/bioE+Gwb77bDd7sGQzQF7Tx8c1JjfT2ODtHkDff38/N6du96RXdRlz0bis+Wm+tkFVljZP46+GDuX+R1fzDMl8+s/bPgEVunvsKwAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Physical Diagram of Raspberry Pi LED Wiring\"\n        title=\"Physical Diagram of Raspberry Pi LED Wiring\"\n        src=\"/static/c039fa3dcaa60181b5718acacf6b68ce/b9e4f/rpi-physical-diagram.png\"\n        srcset=\"/static/c039fa3dcaa60181b5718acacf6b68ce/cf440/rpi-physical-diagram.png 148w,\n/static/c039fa3dcaa60181b5718acacf6b68ce/d2d38/rpi-physical-diagram.png 295w,\n/static/c039fa3dcaa60181b5718acacf6b68ce/b9e4f/rpi-physical-diagram.png 590w,\n/static/c039fa3dcaa60181b5718acacf6b68ce/b582c/rpi-physical-diagram.png 642w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span>\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/05f1643abf2ba5dbde62291ca74aed64/993a7/rpi-circuit-diagram.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 65.73604060913705%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAACHVAAAh1QEEnLSdAAACBUlEQVQ4y11Ti5LaMAzM/39dC3PQTguEchTydGLHzjtbrRI6d+cZjRzHWu1KcjTPCz7bjGVZsACYl/WbNm3GO3KsNo4TxmFEVuQ4Xy9o2w7RvF16BXLf9z18CBiGYQVh9JZgGEcE+WetRWEKpGmG+HZFUZd6J/oExsxy2EhAXpToul4vDcLEuQbGGBRliVKsqmq8/Tqg7TqM06SeWMqQIJQ5ta3aLD8FBS5YXN9j3E4nJEmiIFmeI36/aiJjjSro+0HlKkMCEb2SrMl+j+f3nfp0t8fPP2/4cZb9tx2ssOMqTIl7/lfr10pyVTCNoqpZa8iDUuQ1TYO6roVFpdLyLFfvnFNPZl2/1jS+xUiewripcb/fYSqDc3wWFSmiaZmRmQyT1OG1mJlFJ3s2qBOrigKtALMppV3ZPtIHSjlrgocNbpVceoPf2UnbT4BRAgj+atTlctGSOGEepCw8Y5dZeN95BWEM7zA+om5Kfi0y43jwJ+WSHZcTJkFkU7L3K5D3QZP3w6CqOF1RJ8jP51Nr5wQskX0qHaUlj4f6PE21yxyjafoI6DXB8BGQh5QQ5MBzWA+HzY4ojsf/3762OqecOQ49F+Pmr4CUxRroS+DzEsZfbZSyzAJEeSyBlRiWhZ5NIvMQNsDXuNDzNbhmNesaDaitQyXMjdnGSbrNl0IAesbRCMq6/wOk7OykopVItAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Circuit Diagram of Raspberry Pi LED Wiring\"\n        title=\"Circuit Diagram of Raspberry Pi LED Wiring\"\n        src=\"/static/05f1643abf2ba5dbde62291ca74aed64/b9e4f/rpi-circuit-diagram.png\"\n        srcset=\"/static/05f1643abf2ba5dbde62291ca74aed64/cf440/rpi-circuit-diagram.png 148w,\n/static/05f1643abf2ba5dbde62291ca74aed64/d2d38/rpi-circuit-diagram.png 295w,\n/static/05f1643abf2ba5dbde62291ca74aed64/b9e4f/rpi-circuit-diagram.png 590w,\n/static/05f1643abf2ba5dbde62291ca74aed64/993a7/rpi-circuit-diagram.png 788w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></li>\n<li>\n<p>Once you have your server and your interface to manipulate the lights, you are ready to start your server. You can do this using node. If you file name was server.js you would start it simply by running</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">node server.js</code></pre></div>\n</li>\n<li>You can connect to the web page you created by going to <code class=\"language-text\">http://[IP-ADDR]:[PORT]</code></li>\n<li>You have now completed a simple stop light with some automation! Congratulations!!</li>\n<li>If there are any questions or anything, feel free to go to the github repo up at the top of the page to reference the code or just reference the Appendix which will have more screenshots and code snippets.</li>\n</ol>\n<h3>Thought Questions</h3>\n<ol>\n<li><strong>What language did you choose for implementing this project? Why?</strong><br/>\nI chose to do this project in JavaScript. I know this language very well and develop in it every day. Because of this, I felt that I could utilize this knowledge to focusing on learning about the GPIO pins and not nuances of learning a new language.</li>\n<li><strong>What is the purpose of the resistor in this simple circuit? What would happen if you omitted it?</strong><br/>\nThe resistor takes the load for the circuit so the entire load doesn’t go into the LED’s. The LEDs could probably handle this load but it would shorten the lifespan of the bulb in a big way meaning that it would burn out quicker than if we included the resistors in the circuit.</li>\n<li><strong>What are some practical applications for a device similar to this? What enhancements do you think would make this more valuable?</strong><br/>\nThe obvious would be a stoplight. Although there is much more logic that goes into them, this seemed like a good foundation to go off of. As well, this would be an interesting idea to see if you could have some kind of status or something along those lines where it told that something was happening based on a light being turned on. One I can think of is if at work, the API could hit some DB and see if someone is scheduled to be in or not at that time. If they are scheduled to be in at that time, their light would be lit up so everyone could  know that they should be on the clock and working. </li>\n<li><strong>Estimate the time you spent on this lab (from start to finish)?</strong><br/>\nI spent about 45 minutes setting up my environment and everything. I spent probably 3 hours on the server itself and another hour on the frontend. The wiring of the pi took me under 5 minutes. Overall, I would say that this project took me about 5 hours to complete.</li>\n</ol>\n<h3>Certification of Work</h3>\n<p>I certify that the solution presented in this lab represents my own work. In the case where I have borrowed code or ideas from another person, I have provided a link to the author’s work in the references, and included a citation in the comments of my code. (I got this statement from the example lab).</p>\n<p>— Matthew Robertson</p>\n<h3>Appendix</h3>\n<h4>Appendix 1: System Interface - Web Page</h4>\n<p>State: Startup, /lights-out\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/d3e4c54b7531058b67078a58b48e20a4/f570d/stoplight-off.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 77.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABzElEQVQ4y6WTW5OaQBCFeV8FBEE3iwreuKlEZ7hauqwRtSqV/P9/c9IjbqqSrEtVfDh1mJ7uj56btC0rRLzAiuVY8RxhxOHMfAzHLkYT0tgjJ9H4GrvJpthVUx/uPIQbLLH8yiFVlwsOxyMOVYVd+UZ+Jj8gLXKseQaeJNjEMXiaIclzMHKW5IhYfAUkRYEf5Suq0xFxVkByPRdzdwbPF17L9XwEgUffIZKEI01jMM7g+x7lBXD9EM5khqE9wXRGtWGAuRdgOnchyW0FsvyvWq02dL2LvNjidL5gs2F4emrd5mUo5Iqi1mPBaMswDBOSpun4WwLU6WgYDIZYhgusgpA6DmGavTqH5v/Mr73ff4YkCj+Cir+PbAdVkuEnT1AwDoOA9/JF3BQd3ktQb8BXgp3WtPlr1gjs9foNwJGDbZGi3CXgdCiG0QT8ZMmqWgOPb7Tkc4o84+gaj3R4AxZ5iv0uBWcPLlkhoD2yEZdbsPMeG7qLYtMfBDrIvu2Rfi/BqdOHgKragWUNsFxFWEQR3cMFHYrxf8COcIqLOf3FhmG70Mzn37APawTws4v9Hu9aDsyxD71v3e3uPf/Li9UM1HQDWte8PrcmoHh6vwANNaZ7qnb9ywAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Stoplight Page Off\"\n        title=\"Stoplight Page Off\"\n        src=\"/static/d3e4c54b7531058b67078a58b48e20a4/b9e4f/stoplight-off.png\"\n        srcset=\"/static/d3e4c54b7531058b67078a58b48e20a4/cf440/stoplight-off.png 148w,\n/static/d3e4c54b7531058b67078a58b48e20a4/d2d38/stoplight-off.png 295w,\n/static/d3e4c54b7531058b67078a58b48e20a4/b9e4f/stoplight-off.png 590w,\n/static/d3e4c54b7531058b67078a58b48e20a4/f9b6a/stoplight-off.png 885w,\n/static/d3e4c54b7531058b67078a58b48e20a4/f570d/stoplight-off.png 960w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p>State: RED on, during cycle or manual\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/ebaa16bfbc609529750cbc0831e1db5a/4909f/stoplight-red.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 66.03970741901776%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABD0lEQVQ4y62RTW6DMBCFc4AqwTZQIiVAjISNnUTtgr+CCF00qqqepLsepPuetZtXg8SiUtJEkMVoNG+eP82MZ5QyEELR5SGGerGwsFqtUaQZmqpGGIa9durNELP/mpZF4PsBdFFgX9fgUdRrp7xXAyMh8cUTfAcCiVSwzngvApmJuQHuYoEfugHmAUqR4M54GRk5ITFALiU+9o/43D1AKH3We/XK0qzcvJRojiW01kabCBQGeDzkeG1zaHULYCyRHSpkbQV1i5WFuWH21iJ7f4babvu7TgLG5pfTpxxpVSBJ1LQJO912XHh+BG/N4bjeOOBQd5kwG85GwuEK1Hb/9EZNSKkN5i7B7pegBn5pwl9OZErlaIKrmwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Stoplight Page Red\"\n        title=\"Stoplight Page Red\"\n        src=\"/static/ebaa16bfbc609529750cbc0831e1db5a/b9e4f/stoplight-red.png\"\n        srcset=\"/static/ebaa16bfbc609529750cbc0831e1db5a/cf440/stoplight-red.png 148w,\n/static/ebaa16bfbc609529750cbc0831e1db5a/d2d38/stoplight-red.png 295w,\n/static/ebaa16bfbc609529750cbc0831e1db5a/b9e4f/stoplight-red.png 590w,\n/static/ebaa16bfbc609529750cbc0831e1db5a/f9b6a/stoplight-red.png 885w,\n/static/ebaa16bfbc609529750cbc0831e1db5a/4909f/stoplight-red.png 957w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p>State: YELLOW on, during cycle or manual\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b7f68227c9c8ae787bbae0a97ab3fb3d/4909f/stoplight-yellow.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 66.4576802507837%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABH0lEQVQ4y6WTb06DMBiHd4IBbQFnMhYYgQIzgcmfUcIy/WCcHtMDeAJP4AX84A08xM+WuMVMmSb98KTll74P75umE8ZsUCph35DfKrcsgvncQ1lWEK2A7/tD9mvNFxNC6HDoFJUbhgnPW6DebND1PYJgOWRjNYqjUK2nmKaFKIohigIiz8F5Mnr2wFmhIYUJ57hf13goalxlmfyJhtCSwmXIcdc32G9rRHGm2aFhIU043p4FPl46lOsM0ykB1RFyOfLrU4t3Kb3OpdDQEKpLCeXI7U5A3Hb6Iyuh6rDa71A93iBbrYZMSxjHHE3fotkKpKlmhyq3HReXi3DAcS/+L/zBIacMzOewgxSEOUfh2ZcyiiqWQurMQN3ZsCd/dPgJ1rNNyhvfpTQAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Stoplight Page Yellow\"\n        title=\"Stoplight Page Yellow\"\n        src=\"/static/b7f68227c9c8ae787bbae0a97ab3fb3d/b9e4f/stoplight-yellow.png\"\n        srcset=\"/static/b7f68227c9c8ae787bbae0a97ab3fb3d/cf440/stoplight-yellow.png 148w,\n/static/b7f68227c9c8ae787bbae0a97ab3fb3d/d2d38/stoplight-yellow.png 295w,\n/static/b7f68227c9c8ae787bbae0a97ab3fb3d/b9e4f/stoplight-yellow.png 590w,\n/static/b7f68227c9c8ae787bbae0a97ab3fb3d/f9b6a/stoplight-yellow.png 885w,\n/static/b7f68227c9c8ae787bbae0a97ab3fb3d/4909f/stoplight-yellow.png 957w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p>State: GREEN on, during cycle or manual\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b699ce1935b93c6a20e25005a33c8a8e/f4b04/stoplight-green.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 66.11053180396247%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABHklEQVQ4y62T0UrDMBSG9wDi0iZpp7CtbmNNqmB1W9rF6d0qiCBeC76DN76E3uj7yr+TwLxQo2K9+Aj8Ofn5zyGnw7lATPAvYCxGvz/AYmFg7RmyYeY1Hqh3dOKYI4riTzi922UYkImpatjVCqODkddCbxzvhu78CGMRprmCLU9hj0+glA7WbvnRUJPJ1dzgmjjUhddaGeaU8NwYXBCaDKO2hq7NZr3EZbNEUfxDQkUJ19UMDVH4llvOMJ/kqJ7vUL3e0zzbJORkuMugyiPUb0+o8QJdlWA7zN/9LWFECcc5zMMNzOMt9FST1qJlpwuZopdk6MkhZJL+/h8GoXUSYw05oS8jku9r3ab4XSZTHpgL5xIi3SP2wYUMJtvu8gaZeUzBPYvSeQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Stoplight Page Green\"\n        title=\"Stoplight Page Green\"\n        src=\"/static/b699ce1935b93c6a20e25005a33c8a8e/b9e4f/stoplight-green.png\"\n        srcset=\"/static/b699ce1935b93c6a20e25005a33c8a8e/cf440/stoplight-green.png 148w,\n/static/b699ce1935b93c6a20e25005a33c8a8e/d2d38/stoplight-green.png 295w,\n/static/b699ce1935b93c6a20e25005a33c8a8e/b9e4f/stoplight-green.png 590w,\n/static/b699ce1935b93c6a20e25005a33c8a8e/f9b6a/stoplight-green.png 885w,\n/static/b699ce1935b93c6a20e25005a33c8a8e/f4b04/stoplight-green.png 959w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<h4>Appendix 2: Server Output</h4>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 233px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/de59fe45180661b19f529a8448174a27/2d176/server-output.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 158.36909871244634%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAD7UlEQVRIx42W2XbiSBBE/QttFrMYGLy0WQxoV2lHgKH7pedhZv7/U2Iik8U2i81DHenAUSgzb1SUbjqdLtrtNu7v79FqtfS+0Wig2Wzqkvv9/7J6vZ5e7+7u9L/jdeP5AVzXwWK5wqIsYaIYeTGHZVmwZjbiLEVZFhgNBsiKEv/+8x9y/lav184LWrYLE0ZwgxCxMbAtG1OuLE2xXv+GY00QmAibX7/x0OuiVq8fHj5XpQomcUrBAFmSIOLDJo6x2awR8CWGL2mxdR0FBVRkfz0jeuP6oQp6fDilkM8RmDjCarlAyPY938fz0yMeHx/58NfVHSqM+aDDBxNefc+D47jwOFfb9eCz8piVWzMLdxfm9knQdjykaYYwTpDzakyMIAwV0Gb9hp+EUS6WaLK6+oU2zwr6oVEQISuybELJEiR5wZY9RBxFyJHUa9XvK9y2nOgME5mhFyChLeZFAZutJ3xJrVK5COFUkBWKoNhGKEslIcm+rZZqF4ezHI9GGA5HF713ZOyPlBNaJdhC8Vwdg1BOOJLxaEwo9e8FZ5aDaEc5jiJSDVWkJJT12wrPLy8KpdVsXAdFZpgmGQLZckJbK3QobmASQjIhvemrya+CIpSzNIfPeeVK2aAo51hxhgIl5W/V21vUarVDdV9WODuiHLAax3VR5Jm+xHbsbVBwXQXFcvyDoFKmqbVligsMERefPj89fdp6FwX9IGJlW9vIXg5IVnZKOZ9jyf08oGUK3nfu26ywfg0Ub0c50L3ssSJpL+AO8Rhrah+CkiqbDZnfNxW6fqQ+FMqy9QyhDOi5xWLBPNzAtacaEqu3NfrdzqHKy8YO4q1tdpQNvRhzBBIOsiZMGfFhrVoh6StalgqlZS/cUw4xnkyQENBm8wvT15ECW65W6B8l9kVBycM9ZUMoM6bNcrnU3WJZU5o7wnAw5AyvCAcTZ4dw+Eh5Pi+Y2ku8MBRKzvO+3bqOsuMZPUfcD5TFh0HgwSIM8aXLFPe4rjL2gTJFM9m7tIokjsxQvDh6negRK+FwTuDkkBLKWboLhyxDRMHJbKYz/PPnb8wmYwIzWBNQh23/4L6uknjlQui+Q9lTZnWT6ZRwAkhw5HnOkRgMuWMmpC+QLNvBjGd361yFMsOtoFHKAY0torY1o7Cl7Yo/+w99neVoNMRo/KpfGO3mGcEwylRQDnqhHFJYQnaxeA/YebmlfKvtVlGt7FsWkc9xxgpD/RRxPKYOwQhliSyh7JtYTz1JcAnZ7bnc/FDR6d5WKEU+59cCqfKkiygivnvjzvD4koIfTu9Cp+F60vLLwwO6vb+4euj3+/rJ0el29drefb41jlL6K2P/D05OqsY8E/HOAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Server Output\"\n        title=\"Server Output\"\n        src=\"/static/de59fe45180661b19f529a8448174a27/2d176/server-output.png\"\n        srcset=\"/static/de59fe45180661b19f529a8448174a27/cf440/server-output.png 148w,\n/static/de59fe45180661b19f529a8448174a27/2d176/server-output.png 233w\"\n        sizes=\"(max-width: 233px) 100vw, 233px\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<h4>Appendix 3: Server Code</h4>\n<p>Available on <a href=\"https://github.com/mattrobertson14/IT441-Stop-Light\">GitHub</a></p>\n<h4>Appendix 4: Front-end Code</h4>\n<p>Available on <a href=\"https://github.com/mattrobertson14/IT441-Stop-Light\">GitHub</a></p>","frontmatter":{"title":"Lab 1 - Raspberry Pi Stop Light 🚦","date":"September 17, 2019","description":"Lab 1 for IT441. In this lab, a stoplight is implemented using a Raspberry Pi and a breadboard.","github_link":"https://github.com/mattrobertson14/IT441-Stop-Light"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/lab-1/","previous":null,"next":{"fields":{"slug":"/lab-2/"},"frontmatter":{"title":"Lab 2 - Arduino Stop Light 🚦"}}}}}