{"id":1071,"date":"2021-06-28T23:27:55","date_gmt":"2021-06-28T23:27:55","guid":{"rendered":"https:\/\/mc.scsiraidguru.com\/?page_id=1071"},"modified":"2024-03-03T17:12:39","modified_gmt":"2024-03-03T17:12:39","slug":"solar_panel","status":"publish","type":"page","link":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/","title":{"rendered":"Solar_Panel"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1071\" class=\"elementor elementor-1071\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2983192 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2983192\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5b706c7\" data-id=\"5b706c7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c8baddc elementor-widget elementor-widget-text-editor\" data-id=\"c8baddc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If I keep the solar panels deployed, they will get damaged underwater.\u00a0\u00a0 No reason to keep them deployed, when the sun isn&#8217;t overhead and providing enough light.\u00a0 I found four Photoresistors and connected one up to each of the slaves.\u00a0\u00a0 The current readings are sent to the master controller and displayed on LCD 0x24 and LCD 0x27.\u00a0\u00a0 pr.py is the main Pi file.\u00a0\u00a0 The Photo Resistors are on the Arduino devices.\u00a0 I use the I2C connection to the Raspberry Pi to display the output on I2C Mini LCD screens.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d048f79 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d048f79\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-d0e6518\" data-id=\"d0e6518\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-474eadd elementor-widget elementor-widget-image\" data-id=\"474eadd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"20210905_120359\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTUxMiwidXJsIjoiaHR0cHM6XC9cL21jLnNjc2lyYWlkZ3VydS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjFcLzA5XC8yMDIxMDkwNV8xMjAzNTkuanBnIn0%3D\">\n\t\t\t\t\t\t\t<img data-opt-id=1580916864  fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:300\/h:169\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg\" class=\"attachment-medium size-medium wp-image-1512\" alt=\"\" srcset=\"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:1920\/h:1080\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg 2560w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:300\/h:169\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg 300w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:1024\/h:576\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg 1024w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:768\/h:432\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg 768w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:1536\/h:864\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg 1536w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:1920\/h:1080\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg 2048w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-d5e6d81\" data-id=\"d5e6d81\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2ca8ec1 elementor-widget elementor-widget-image\" data-id=\"2ca8ec1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120410.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"20210905_120410\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTUxMywidXJsIjoiaHR0cHM6XC9cL21jLnNjc2lyYWlkZ3VydS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjFcLzA5XC8yMDIxMDkwNV8xMjA0MTAuanBnIn0%3D\">\n\t\t\t\t\t\t\t<img data-opt-id=1164891114  fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:300\/h:169\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120410.jpg\" class=\"attachment-medium size-medium wp-image-1513\" alt=\"\" srcset=\"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:1920\/h:1080\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120410.jpg 2560w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:300\/h:169\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120410.jpg 300w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:1024\/h:576\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120410.jpg 1024w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:768\/h:432\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120410.jpg 768w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:1536\/h:864\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120410.jpg 1536w, https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:1920\/h:1080\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120410.jpg 2048w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-517b5eb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"517b5eb\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-69ee0b8\" data-id=\"69ee0b8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a8b5fe8 elementor-widget elementor-widget-text-editor\" data-id=\"a8b5fe8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">Arduino 4 Slave<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-75e57e6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"75e57e6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-136fd3d\" data-id=\"136fd3d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-11b4b31 elementor-widget elementor-widget-text-editor\" data-id=\"11b4b31\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>\/\/ Wire Slave Receiver\n\/\/ by Nicholas Zambetti &lt;http:\/\/www.zambetti.com&gt;\n\n\/\/ Demonstrates use of the Wire library\n\/\/ Receives data as an I2C\/TWI slave device\n\/\/ Refer to the \"Wire Master Writer\" example for use with this\n\n\/\/ Created 29 March 2006\n\n\/\/ This example code is in the public domain.\n\n\/\/ 04-Feb-2018 mcarter adapted\n#include &lt;Wire.h&gt;\n\nconst int ledPin = 13; \/\/ onboard LED\nint ValueA3 = 0;\nstatic_assert(LOW == 0, \"Expecting LOW to be 0\");\n\nvoid requestEvent()\n{\nWire.write(ValueA3);\n}\n\nvoid setup() {\n  Serial.begin(9600);\n  Wire.begin(0x4);                \/\/ join i2c bus with address #4\n  \n  Wire.onReceive(receiveEvent); \/\/ register event\n  Wire.onRequest(requestEvent);  \/\/ send date to Pi\n  \n  pinMode(ledPin, OUTPUT);\n  digitalWrite(ledPin, LOW); \/\/ turn it off\n}\n\nvoid loop() {\n  delay(100);\n\n  \/\/ Photo Resistor\n  ValueA3 = analogRead(A3);\n  ValueA3 = map(ValueA3, 0, 1023, 0, 255);\n\n  Serial.print(ValueA3);\n  Serial.print(\"\\n\");\n  \/\/ Photo Resistor\n}\n\n\/\/ function that executes whenever data is received from master\n\/\/ this function is registered as an event, see setup()\nvoid receiveEvent(int howMany) {\n  while (Wire.available()) { \/\/ loop through all but the last\n    char c = Wire.read(); \/\/ receive byte as a character\n    digitalWrite(ledPin, c);\n  }\n\n\n  \n}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-939ce46 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"939ce46\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-11bc8a5\" data-id=\"11bc8a5\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d32286d elementor-widget elementor-widget-text-editor\" data-id=\"d32286d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">Arduino 5<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6c88a83 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6c88a83\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ea7f7d4\" data-id=\"ea7f7d4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7f05bac elementor-widget elementor-widget-text-editor\" data-id=\"7f05bac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>\/\/ Wire Slave Receiver\n\/\/ by Nicholas Zambetti &lt;http:\/\/www.zambetti.com&gt;\n\n\/\/ Demonstrates use of the Wire library\n\/\/ Receives data as an I2C\/TWI slave device\n\/\/ Refer to the \"Wire Master Writer\" example for use with this\n\n\/\/ Created 29 March 2006\n\n\/\/ This example code is in the public domain.\n\n\/\/ 04-Feb-2018 mcarter adapted\n#include &lt;Wire.h&gt;\n\nconst int ledPin = 13; \/\/ onboard LED\nint ValueA3 = 0;\nstatic_assert(LOW == 0, \"Expecting LOW to be 0\");\n\nvoid requestEvent()\n{\nWire.write(ValueA3);\n}\n\nvoid setup() {\n  Serial.begin(9600);\n  Wire.begin(0x5);                \/\/ join i2c bus with address #5\n  \n  Wire.onReceive(receiveEvent); \/\/ register event\n  Wire.onRequest(requestEvent);  \/\/ send date to Pi\n  \n  pinMode(ledPin, OUTPUT);\n  digitalWrite(ledPin, LOW); \/\/ turn it off\n}\n\nvoid loop() {\n  delay(100);\n\n  \/\/ Photo Resistor\n  ValueA3 = analogRead(A3);\n  ValueA3 = map(ValueA3, 0, 1023, 0, 255);\n\n  Serial.print(ValueA3);\n  Serial.print(\"\\n\");\n  \/\/ Photo Resistor\n}\n\n\/\/ function that executes whenever data is received from master\n\/\/ this function is registered as an event, see setup()\nvoid receiveEvent(int howMany) {\n  while (Wire.available()) { \/\/ loop through all but the last\n    char c = Wire.read(); \/\/ receive byte as a character\n    digitalWrite(ledPin, c);\n  }\n\n\n  \n}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e19f48d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e19f48d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6005cd1\" data-id=\"6005cd1\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a920cb1 elementor-widget elementor-widget-text-editor\" data-id=\"a920cb1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">Arduino 6<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5806aad elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5806aad\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-90238c9\" data-id=\"90238c9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4029a22 elementor-widget elementor-widget-text-editor\" data-id=\"4029a22\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>\/\/ Wire Slave Receiver\n\/\/ by Nicholas Zambetti &lt;http:\/\/www.zambetti.com&gt;\n\n\/\/ Demonstrates use of the Wire library\n\/\/ Receives data as an I2C\/TWI slave device\n\/\/ Refer to the \"Wire Master Writer\" example for use with this\n\n\/\/ Created 29 March 2006\n\n\/\/ This example code is in the public domain.\n\n\/\/ 04-Feb-2018 mcarter adapted\n#include &lt;Wire.h&gt;\n\nconst int ledPin = 13; \/\/ onboard LED\nstatic_assert(LOW == 0, \"Expecting LOW to be 0\");\n\nvoid setup() {\n  Wire.begin(0x6);                \/\/ join i2c bus with address #6\n  Wire.onReceive(receiveEvent); \/\/ register event\n  pinMode(ledPin, OUTPUT);\n  digitalWrite(ledPin, LOW); \/\/ turn it off\n}\n\nvoid loop() {\n  delay(100);\n}\n\n\/\/ function that executes whenever data is received from master\n\/\/ this function is registered as an event, see setup()\nvoid receiveEvent(int howMany) {\n  while (Wire.available()) { \/\/ loop through all but the last\n    char c = Wire.read(); \/\/ receive byte as a character\n    digitalWrite(ledPin, c);\n  }\n}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a29b305 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a29b305\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b1f22ae\" data-id=\"b1f22ae\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d5fcf93 elementor-widget elementor-widget-text-editor\" data-id=\"d5fcf93\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">Arduino Mega 7<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2579ab2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2579ab2\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-21bf06b\" data-id=\"21bf06b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-32c8842 elementor-widget elementor-widget-text-editor\" data-id=\"32c8842\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>\/\/ Wire Slave Receiver\n\/\/ by Nicholas Zambetti &lt;http:\/\/www.zambetti.com&gt;\n\n\/\/ Demonstrates use of the Wire library\n\/\/ Receives data as an I2C\/TWI slave device\n\/\/ Refer to the \"Wire Master Writer\" example for use with this\n\n\/\/ Created 29 March 2006\n\n\/\/ This example code is in the public domain.\n\n\/\/ 04-Feb-2018 mcarter adapted\n#include &lt;Wire.h&gt;\n\nconst int ledPin = 13; \/\/ onboard LED\nstatic_assert(LOW == 0, \"Expecting LOW to be 0\");\n\nvoid setup() {\n  Wire.begin(0x7);                \/\/ join i2c bus with address #7\n  Wire.onReceive(receiveEvent); \/\/ register event\n  pinMode(ledPin, OUTPUT);\n  digitalWrite(ledPin, LOW); \/\/ turn it off\n}\n\nvoid loop() {\n  delay(100);\n}\n\n\/\/ function that executes whenever data is received from master\n\/\/ this function is registered as an event, see setup()\nvoid receiveEvent(int howMany) {\n  while (Wire.available()) { \/\/ loop through all but the last\n    char c = Wire.read(); \/\/ receive byte as a character\n    digitalWrite(ledPin, c);\n  }\n}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0c2bfd5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0c2bfd5\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-182723f\" data-id=\"182723f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9623387 elementor-widget elementor-widget-text-editor\" data-id=\"9623387\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">Arduino 9<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6e5456b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6e5456b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7ae28b8\" data-id=\"7ae28b8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1245c28 elementor-widget elementor-widget-text-editor\" data-id=\"1245c28\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>\/\/ Wire Slave Receiver\n\/\/ by Nicholas Zambetti &lt;http:\/\/www.zambetti.com&gt;\n\n\/\/ Demonstrates use of the Wire library\n\/\/ Receives data as an I2C\/TWI slave device\n\/\/ Refer to the \"Wire Master Writer\" example for use with this\n\n\/\/ Created 29 March 2006\n\n\/\/ This example code is in the public domain.\n\n\/\/ 04-Feb-2018 mcarter adapted\n#include &lt;Wire.h&gt;\n\nconst int ledPin = 13; \/\/ onboard LED\nstatic_assert(LOW == 0, \"Expecting LOW to be 0\");\n\nvoid setup() {\n  Wire.begin(0x9);                \/\/ join i2c bus with address #9\n  Wire.onReceive(receiveEvent); \/\/ register event\n  pinMode(ledPin, OUTPUT);\n  digitalWrite(ledPin, LOW); \/\/ turn it off\n}\n\nvoid loop() {\n  delay(100);\n}\n\n\/\/ function that executes whenever data is received from master\n\/\/ this function is registered as an event, see setup()\nvoid receiveEvent(int howMany) {\n  while (Wire.available()) { \/\/ loop through all but the last\n    char c = Wire.read(); \/\/ receive byte as a character\n    digitalWrite(ledPin, c);\n  }\n}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e7e0d41 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e7e0d41\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8a69ae8\" data-id=\"8a69ae8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-269c5cb elementor-widget elementor-widget-text-editor\" data-id=\"269c5cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">Arduino 10<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d40acf0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d40acf0\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9d2f2c8\" data-id=\"9d2f2c8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7a4df9c elementor-widget elementor-widget-text-editor\" data-id=\"7a4df9c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>\/\/ Wire Slave Receiver\n\/\/ by Nicholas Zambetti &lt;http:\/\/www.zambetti.com&gt;\n\n\/\/ Demonstrates use of the Wire library\n\/\/ Receives data as an I2C\/TWI slave device\n\/\/ Refer to the \"Wire Master Writer\" example for use with this\n\n\/\/ Created 29 March 2006\n\n\/\/ This example code is in the public domain.\n\n\/\/ 04-Feb-2018 mcarter adapted\n#include &lt;Wire.h&gt;\n\nconst int ledPin = 13; \/\/ onboard LED\nint ValueA3 = 0;\nstatic_assert(LOW == 0, \"Expecting LOW to be 0\");\n\nvoid requestEvent()\n{\nWire.write(ValueA3);\n}\n\nvoid setup() {\n  Serial.begin(9600);\n  Wire.begin(0xa);                \/\/ join i2c bus with address #10 or a\n  \n  Wire.onReceive(receiveEvent); \/\/ register event\n  Wire.onRequest(requestEvent);  \/\/ send date to Pi\n  \n  pinMode(ledPin, OUTPUT);\n  digitalWrite(ledPin, LOW); \/\/ turn it off\n}\n\nvoid loop() {\n  delay(100);\n\n  \/\/ Photo Resistor\n  ValueA3 = analogRead(A3);\n  ValueA3 = map(ValueA3, 0, 1023, 0, 255);\n\n  Serial.print(ValueA3);\n  Serial.print(\"\\n\");\n  \/\/ Photo Resistor\n}\n\n\/\/ function that executes whenever data is received from master\n\/\/ this function is registered as an event, see setup()\nvoid receiveEvent(int howMany) {\n  while (Wire.available()) { \/\/ loop through all but the last\n    char c = Wire.read(); \/\/ receive byte as a character\n    digitalWrite(ledPin, c);\n  }\n\n\n  \n}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f3c7a7c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f3c7a7c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-116a20f\" data-id=\"116a20f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-eb29155 elementor-widget elementor-widget-text-editor\" data-id=\"eb29155\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">Arduino 11<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-20c60a8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"20c60a8\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0294adc\" data-id=\"0294adc\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3700ae4 elementor-widget elementor-widget-text-editor\" data-id=\"3700ae4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>\/\/ Wire Slave Receiver\n\/\/ by Nicholas Zambetti &lt;http:\/\/www.zambetti.com&gt;\n\n\/\/ Demonstrates use of the Wire library\n\/\/ Receives data as an I2C\/TWI slave device\n\/\/ Refer to the \"Wire Master Writer\" example for use with this\n\n\/\/ Created 29 March 2006\n\n\/\/ This example code is in the public domain.\n\n\/\/ 04-Feb-2018 mcarter adapted\n#include &lt;Wire.h&gt;\n\nconst int ledPin = 13; \/\/ onboard LED\nstatic_assert(LOW == 0, \"Expecting LOW to be 0\");\n\nvoid setup() {\n  Wire.begin(0xb);                \/\/ join i2c bus with address #11 or b\n  Wire.onReceive(receiveEvent); \/\/ register event\n  pinMode(ledPin, OUTPUT);\n  digitalWrite(ledPin, LOW); \/\/ turn it off\n}\n\nvoid loop() {\n  delay(100);\n}\n\n\/\/ function that executes whenever data is received from master\n\/\/ this function is registered as an event, see setup()\nvoid receiveEvent(int howMany) {\n  while (Wire.available()) { \/\/ loop through all but the last\n    char c = Wire.read(); \/\/ receive byte as a character\n    digitalWrite(ledPin, c);\n  }\n}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-33e331f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"33e331f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a7663f6\" data-id=\"a7663f6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-406e735 elementor-widget elementor-widget-text-editor\" data-id=\"406e735\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">Arduino 12<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4d53f32 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4d53f32\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a6ae2b4\" data-id=\"a6ae2b4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-454e3c7 elementor-widget elementor-widget-text-editor\" data-id=\"454e3c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>\/\/ Wire Slave Receiver\n\/\/ by Nicholas Zambetti &lt;http:\/\/www.zambetti.com&gt;\n\n\/\/ Demonstrates use of the Wire library\n\/\/ Receives data as an I2C\/TWI slave device\n\/\/ Refer to the \"Wire Master Writer\" example for use with this\n\n\/\/ Created 29 March 2006\n\n\/\/ This example code is in the public domain.\n\n\/\/ 04-Feb-2018 mcarter adapted\n#include &lt;Wire.h&gt;\n\nconst int ledPin = 13; \/\/ onboard LED\nstatic_assert(LOW == 0, \"Expecting LOW to be 0\");\n\nvoid setup() {\n  Wire.begin(0xc);                \/\/ join i2c bus with address #12 or c\n  Wire.onReceive(receiveEvent); \/\/ register event\n  pinMode(ledPin, OUTPUT);\n  digitalWrite(ledPin, LOW); \/\/ turn it off\n}\n\nvoid loop() {\n  delay(100);\n}\n\n\/\/ function that executes whenever data is received from master\n\/\/ this function is registered as an event, see setup()\nvoid receiveEvent(int howMany) {\n  while (Wire.available()) { \/\/ loop through all but the last\n    char c = Wire.read(); \/\/ receive byte as a character\n    digitalWrite(ledPin, c);\n  }\n}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1c0eacd elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1c0eacd\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-19ec660\" data-id=\"19ec660\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9e9d458 elementor-widget elementor-widget-text-editor\" data-id=\"9e9d458\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">I2C_Dev.py<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b596a77 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b596a77\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ffd3aca\" data-id=\"ffd3aca\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ebfdfca elementor-widget elementor-widget-text-editor\" data-id=\"ebfdfca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>from smbus import SMBus\nfrom RPi.GPIO import RPI_REVISION\nfrom time import sleep\nfrom re import findall, match\nfrom subprocess import check_output\nfrom os.path import exists\n\n# old and new versions of the RPi have swapped the two i2c buses\n# they can be identified by RPI_REVISION (or check sysfs)\nBUS_NUMBER = 0 if RPI_REVISION == 1 else 1\n\n# other commands\nLCD_CLEARDISPLAY = 0x01\nLCD_RETURNHOME = 0x02\nLCD_ENTRYMODESET = 0x04\nLCD_DISPLAYCONTROL = 0x08\nLCD_CURSORSHIFT = 0x10\nLCD_FUNCTIONSET = 0x20\nLCD_SETCGRAMADDR = 0x40\nLCD_SETDDRAMADDR = 0x80\n\n# flags for display entry mode\nLCD_ENTRYRIGHT = 0x00\nLCD_ENTRYLEFT = 0x02\nLCD_ENTRYSHIFTINCREMENT = 0x01\nLCD_ENTRYSHIFTDECREMENT = 0x00\n\n# flags for display on\/off control\nLCD_DISPLAYON = 0x04\nLCD_DISPLAYOFF = 0x00\nLCD_CURSORON = 0x02\nLCD_CURSOROFF = 0x00\nLCD_BLINKON = 0x01\nLCD_BLINKOFF = 0x00\n\n# flags for display\/cursor shift\nLCD_DISPLAYMOVE = 0x08\nLCD_CURSORMOVE = 0x00\nLCD_MOVERIGHT = 0x04\nLCD_MOVELEFT = 0x00\n\n# flags for function set\nLCD_8BITMODE = 0x10\nLCD_4BITMODE = 0x00\nLCD_2LINE = 0x08\nLCD_1LINE = 0x00\nLCD_5x10DOTS = 0x04\nLCD_5x8DOTS = 0x00\n\n# flags for backlight control\nLCD_BACKLIGHT = 0x08\nLCD_NOBACKLIGHT = 0x00\n\nEn = 0b00000100  # Enable bit\nRw = 0b00000010  # Read\/Write bit\nRs = 0b00000001  # Register select bit\n\nclass I2CDevice:\n    def __init__(self, addr=None, addr_default=None, bus=BUS_NUMBER):\n        if not addr:\n            # try autodetect address, else use default if provided\n            try:\n                self.addr = int('0x{}'.format(\n                    findall(\"[0-9a-z]{2}(?!:)\", check_output(['\/usr\/sbin\/i2cdetect', '-y', BUS_NUMBER]))[0]), base=16) \\\n                    if exists('\/usr\/sbin\/i2cdetect') else addr_default\n            except:\n                self.addr = addr_default\n        else:\n            self.addr = addr\n        self.bus = SMBus(bus)\n\n    # write a single command\n    def write_cmd(self, cmd):\n        self.bus.write_byte(self.addr, cmd)\n        sleep(0.0001)\n\n    # write a command and argument\n    def write_cmd_arg(self, cmd, data):\n        self.bus.write_byte_data(self.addr, cmd, data)\n        sleep(0.0001)\n\n    # write a block of data\n    def write_block_data(self, cmd, data):\n        self.bus.write_block_data(self.addr, cmd, data)\n        sleep(0.0001)\n\n    # read a single byte\n    def read(self):\n        return self.bus.read_byte(self.addr)\n\n    # read\n    def read_data(self, cmd):\n        return self.bus.read_byte_data(self.addr, cmd)\n\n    # read a block of data\n    def read_block_data(self, cmd):\n        return self.bus.read_block_data(self.addr, cmd)\n\n\nclass Lcd:\n    def __init__(self):\n        self.lcd = I2CDevice(addr_default=0x27)\n        self.lcd_write(0x03)\n        self.lcd_write(0x03)\n        self.lcd_write(0x03)\n        self.lcd_write(0x02)\n        self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)\n        self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)\n        self.lcd_write(LCD_CLEARDISPLAY)\n        self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)\n        sleep(0.2)\n\n    # clocks EN to latch command\n    def lcd_strobe(self, data):\n        self.lcd.write_cmd(data | En | LCD_BACKLIGHT)\n        sleep(.0005)\n        self.lcd.write_cmd(((data &amp; ~En) | LCD_BACKLIGHT))\n        sleep(.0001)\n\n    def lcd_write_four_bits(self, data):\n        self.lcd.write_cmd(data | LCD_BACKLIGHT)\n        self.lcd_strobe(data)\n\n    # write a command to lcd\n    def lcd_write(self, cmd, mode=0):\n        self.lcd_write_four_bits(mode | (cmd &amp; 0xF0))\n        self.lcd_write_four_bits(mode | ((cmd &lt;&lt; 4) &amp; 0xF0))\n\n    # put string function\n    def lcd_display_string(self, string, line):\n        if line == 1:\n            self.lcd_write(0x80)\n        if line == 2:\n            self.lcd_write(0xC0)\n        if line == 3:\n            self.lcd_write(0x94)\n        if line == 4:\n            self.lcd_write(0xD4)\n        for char in string:\n            self.lcd_write(ord(char), Rs)\n\n    # put extended string function. Extended string may contain placeholder like {0xFF} for \n    # displaying the particular symbol from the symbol table\n    def lcd_display_extended_string(self, string, line):\n        if line == 1:\n            self.lcd_write(0x80)\n        if line == 2:\n            self.lcd_write(0xC0)\n        if line == 3:\n            self.lcd_write(0x94)\n        if line == 4:\n            self.lcd_write(0xD4)\n        # Process the string\n        while string:\n            # Trying to find pattern {0xFF} representing a symbol\n            result = match(r'\\{0[xX][0-9a-fA-F]{2}\\}', string)\n            if result:\n                self.lcd_write(int(result.group(0)[1:-1], 16), Rs)\n                string = string[6:]\n            else:\n                self.lcd_write(ord(string[0]), Rs)\n                string = string[1:]\n\n    # clear lcd and set to home\n    def lcd_clear(self):\n        self.lcd_write(LCD_CLEARDISPLAY)\n        self.lcd_write(LCD_RETURNHOME)\n\n    # backlight control (on\/off)\n    # options: lcd_backlight(1) = ON, lcd_backlight(0) = OFF\n    def lcd_backlight(self, state):\n        if state == 1:\n            self.lcd.write_cmd(LCD_BACKLIGHT)\n        elif state == 0:\n            self.lcd.write_cmd(LCD_NOBACKLIGHT)\n\nclass CustomCharacters:\n    def __init__(self, lcd):\n        self.lcd = lcd\n        # Data for custom character #1. Code {0x00}.\n        self.char_1_data = [\"11111\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"11111\"]\n        # Data for custom character #2. Code {0x01}\n        self.char_2_data = [\"11111\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"11111\"]\n        # Data for custom character #3. Code {0x02}\n        self.char_3_data = [\"11111\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"11111\"]\n        # Data for custom character #4. Code {0x03}\n        self.char_4_data = [\"11111\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"11111\"]\n        # Data for custom character #5. Code {0x04}\n        self.char_5_data = [\"11111\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"11111\"]\n        # Data for custom character #6. Code {0x05}\n        self.char_6_data = [\"11111\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"11111\"]\n        # Data for custom character #7. Code {0x06}\n        self.char_7_data = [\"11111\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"11111\"]\n        # Data for custom character #8. Code {0x07}\n        self.char_8_data = [\"11111\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"10001\",\n                            \"11111\"]\n\n    # load custom character data to CG RAM for later use in extended string. Data for  \n    # characters is hold in file custom_characters.txt in the same folder as i2c_dev.py \n    # file. These custom characters can be used in printing of extended string with a \n    # placeholder with desired character codes: 1st - {0x00}, 2nd - {0x01}, 3rd - {0x02},\n    # 4th - {0x03}, 5th - {0x04}, 6th - {0x05}, 7th - {0x06} and 8th - {0x07}.\n    def load_custom_characters_data(self):\n        self.chars_list = [self.char_1_data, self.char_2_data, self.char_3_data,\n                           self.char_4_data, self.char_5_data, self.char_6_data,\n                           self.char_7_data, self.char_8_data]\n\n        # commands to load character adress to RAM srarting from desired base adresses:\n        char_load_cmds = [0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78]\n        for char_num in range(8):\n            # command to start loading data into CG RAM:\n            self.lcd.lcd_write(char_load_cmds[char_num])\n            for line_num in range(8):\n                line = self.chars_list[char_num][line_num]\n                binary_str_cmd = \"0b000{0}\".format(line)\n                self.lcd.lcd_write(int(binary_str_cmd, 2), Rs)<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5faf62a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5faf62a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fbaadd0\" data-id=\"fbaadd0\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-aca5f39 elementor-widget elementor-widget-text-editor\" data-id=\"aca5f39\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">pr.py<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6e718df elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6e718df\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-14a253b\" data-id=\"14a253b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-513651d elementor-widget elementor-widget-text-editor\" data-id=\"513651d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>#! \/usr\/bin\/env python3\n#include &lt;iostream&gt;\n#include &lt;wiringPiI2C.h&gt;\nimport time\n\nfrom smbus import SMBus\nimport I2C_LCD_driver_24\nimport I2C_LCD_driver_27\n\nlcd_24 = I2C_LCD_driver_24.lcd()\nlcd_27 = I2C_LCD_driver_27.lcd()\n\nard_addr = bytearray([0x04, 0x05, 0x06, 0x07, 0x09, 0x0a, 0x0b, 0x0c])\nnumber = bytearray([0, 0, 0, 0, 0, 0, 0, 0])\n\nbus = SMBus(1) # indicates \/dev\/ic2-1\nlcd_24 = I2C_LCD_driver_24.lcd()\nlcd_27 = I2C_LCD_driver_27.lcd()\ncnt = 0\nwhile True:     \n    while cnt &lt; 8:\n        number[cnt] = bus.read_byte(ard_addr[cnt])\n        print(\"Arduino\", ard_addr[cnt], \"PR reporting\", number[cnt])\n        bus.write_byte(ard_addr[cnt], 0x1) # switch it on\n        time.sleep(2)\n        bus.write_byte(ard_addr[cnt], 0x0) # switch it on\n        cnt +=1\n        ## LCD 24\n        # Arduino 4\n        str_addr = \"{}\".format(ard_addr[0])\n        str_num = \"{}\".format(number[0])\n        lcd_24.lcd_display_string(str_addr, 1, 0)\n        lcd_24.lcd_display_string(\": \", 1, 1)\n        lcd_24.lcd_display_string(str_num, 1, 2)\n        \n        # Arduino 5\n        str_addr = \"{}\".format(ard_addr[1])\n        str_num = \"{}\".format(number[1])\n        lcd_24.lcd_display_string(str_addr , 1, 6)\n        lcd_24.lcd_display_string(\": \", 1, 7)\n        lcd_24.lcd_display_string(str_num, 1, 8)\n        \n        # Arduino 6\n        str_addr = \"{}\".format(ard_addr[2])\n        str_num = \"{}\".format(number[2])\n        lcd_24.lcd_display_string(str_addr , 1, 12)\n        lcd_24.lcd_display_string(\": \", 1, 13)\n        lcd_24.lcd_display_string(str_num, 1, 14)\n        \n        # Arduino 7\n        str_addr = \"{}\".format(ard_addr[3])\n        str_num = \"{}\".format(number[3])\n        lcd_24.lcd_display_string(str_addr, 2, 0)\n        lcd_24.lcd_display_string(\": \", 2, 1)\n        lcd_24.lcd_display_string(str_num, 2, 2)\n        \n        # Arduino 8\n        str_addr = \"{}\".format(ard_addr[4])\n        str_num = \"{}\".format(number[4])\n        lcd_24.lcd_display_string(str_addr , 2, 6)\n        lcd_24.lcd_display_string(\": \", 2, 7)\n        lcd_24.lcd_display_string(str_num, 2, 8)\n        \n        # Arduino 9\n        str_addr = \"{}\".format(ard_addr[5])\n        str_num = \"{}\".format(number[5])\n        lcd_24.lcd_display_string(str_addr , 2, 12)\n        lcd_24.lcd_display_string(\": \", 2, 14)\n        lcd_24.lcd_display_string(str_num, 2, 15)\n        \n        # Arduino 10\n        str_addr = \"{}\".format(ard_addr[6])\n        str_num = \"{}\".format(number[6])\n        lcd_24.lcd_display_string(str_addr, 3, 0)\n        lcd_24.lcd_display_string(\": \", 3, 2)\n        lcd_24.lcd_display_string(str_num, 3, 3)\n        \n        # Arduino 11\n        str_addr = \"{}\".format(ard_addr[7])\n        str_num = \"{}\".format(number[7])\n        lcd_24.lcd_display_string(str_addr , 3, 6)\n        lcd_24.lcd_display_string(\": \", 3, 8)\n        lcd_24.lcd_display_string(str_num, 3, 9)\n        \n        ##LCD 27\n        lcd_27.lcd_display_string(\"I2C Mini LCD\", 1, 0)\n        lcd_27.lcd_display_string(\"Address\", 2, 0)\n        lcd_27.lcd_display_string(\"0x27\", 3, 0)\n        \n    cnt = 0\n    print(\" \")\n\n\n<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8850993 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8850993\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9b9f1a8\" data-id=\"9b9f1a8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8068668 elementor-widget elementor-widget-text-editor\" data-id=\"8068668\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">I2c_LCD_driver_24.py<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6a8e2d7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6a8e2d7\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-81c832b\" data-id=\"81c832b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d6520f1 elementor-widget elementor-widget-text-editor\" data-id=\"d6520f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre># -*- coding: utf-8 -*-\n# Original code found at:\n# https:\/\/gist.github.com\/DenisFromHR\/cc863375a6e19dce359d\n\n\"\"\"\nCompiled, mashed and generally mutilated 2014-2015 by Denis Pleic\nMade available under GNU GENERAL PUBLIC LICENSE\n\n# Modified Python I2C library for Raspberry Pi\n# as found on http:\/\/www.recantha.co.uk\/blog\/?p=4849\n# Joined existing 'i2c_lib.py' and 'lcddriver.py' into a single library\n# added bits and pieces from various sources\n# By DenisFromHR (Denis Pleic)\n# 2015-02-10, ver 0.1\n\n\"\"\"\n\n# i2c bus (0 -- original Pi, 1 -- Rev 2 Pi)\nI2CBUS = 1\n\n# LCD Address\nADDRESS = 0x24\n\nimport smbus\nfrom time import sleep\n\nclass i2c_device:\n   def __init__(self, addr, port=I2CBUS):\n      self.addr = addr\n      self.bus = smbus.SMBus(port)\n\n# Write a single command\n   def write_cmd(self, cmd):\n      self.bus.write_byte(self.addr, cmd)\n      sleep(0.0001)\n\n# Write a command and argument\n   def write_cmd_arg(self, cmd, data):\n      self.bus.write_byte_data(self.addr, cmd, data)\n      sleep(0.0001)\n\n# Write a block of data\n   def write_block_data(self, cmd, data):\n      self.bus.write_block_data(self.addr, cmd, data)\n      sleep(0.0001)\n\n# Read a single byte\n   def read(self):\n      return self.bus.read_byte(self.addr)\n\n# Read\n   def read_data(self, cmd):\n      return self.bus.read_byte_data(self.addr, cmd)\n\n# Read a block of data\n   def read_block_data(self, cmd):\n      return self.bus.read_block_data(self.addr, cmd)\n\n\n# commands\nLCD_CLEARDISPLAY = 0x01\nLCD_RETURNHOME = 0x02\nLCD_ENTRYMODESET = 0x04\nLCD_DISPLAYCONTROL = 0x08\nLCD_CURSORSHIFT = 0x10\nLCD_FUNCTIONSET = 0x20\nLCD_SETCGRAMADDR = 0x40\nLCD_SETDDRAMADDR = 0x80\n\n# flags for display entry mode\nLCD_ENTRYRIGHT = 0x00\nLCD_ENTRYLEFT = 0x02\nLCD_ENTRYSHIFTINCREMENT = 0x01\nLCD_ENTRYSHIFTDECREMENT = 0x00\n\n# flags for display on\/off control\nLCD_DISPLAYON = 0x04\nLCD_DISPLAYOFF = 0x00\nLCD_CURSORON = 0x02\nLCD_CURSOROFF = 0x00\nLCD_BLINKON = 0x01\nLCD_BLINKOFF = 0x00\n\n# flags for display\/cursor shift\nLCD_DISPLAYMOVE = 0x08\nLCD_CURSORMOVE = 0x00\nLCD_MOVERIGHT = 0x04\nLCD_MOVELEFT = 0x00\n\n# flags for function set\nLCD_8BITMODE = 0x10\nLCD_4BITMODE = 0x00\nLCD_2LINE = 0x08\nLCD_1LINE = 0x00\nLCD_5x10DOTS = 0x04\nLCD_5x8DOTS = 0x00\n\n# flags for backlight control\nLCD_BACKLIGHT = 0x08\nLCD_NOBACKLIGHT = 0x00\n\nEn = 0b00000100 # Enable bit\nRw = 0b00000010 # Read\/Write bit\nRs = 0b00000001 # Register select bit\n\nclass lcd:\n   #initializes objects and lcd\n   def __init__(self):\n      self.lcd_device = i2c_device(ADDRESS)\n\n      self.lcd_write(0x03)\n      self.lcd_write(0x03)\n      self.lcd_write(0x03)\n      self.lcd_write(0x02)\n\n      self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)\n      self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)\n      self.lcd_write(LCD_CLEARDISPLAY)\n      self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)\n      sleep(0.2)\n\n\n   # clocks EN to latch command\n   def lcd_strobe(self, data):\n      self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)\n      sleep(.0005)\n      self.lcd_device.write_cmd(((data &amp; ~En) | LCD_BACKLIGHT))\n      sleep(.0001)\n\n   def lcd_write_four_bits(self, data):\n      self.lcd_device.write_cmd(data | LCD_BACKLIGHT)\n      self.lcd_strobe(data)\n\n   # write a command to lcd\n   def lcd_write(self, cmd, mode=0):\n      self.lcd_write_four_bits(mode | (cmd &amp; 0xF0))\n      self.lcd_write_four_bits(mode | ((cmd &lt;&lt; 4) &amp; 0xF0))\n\n   # write a character to lcd (or character rom) 0x09: backlight | RS=DR&lt;\n   # works!\n   def lcd_write_char(self, charvalue, mode=1):\n      self.lcd_write_four_bits(mode | (charvalue &amp; 0xF0))\n      self.lcd_write_four_bits(mode | ((charvalue &lt;&lt; 4) &amp; 0xF0))\n  \n   # put string function with optional char positioning\n   def lcd_display_string(self, string, line=1, pos=0):\n    if line == 1:\n      pos_new = pos\n    elif line == 2:\n      pos_new = 0x40 + pos\n    elif line == 3:\n      pos_new = 0x14 + pos\n    elif line == 4:\n      pos_new = 0x54 + pos\n\n    self.lcd_write(0x80 + pos_new)\n\n    for char in string:\n      self.lcd_write(ord(char), Rs)\n\n   # clear lcd and set to home\n   def lcd_clear(self):\n      self.lcd_write(LCD_CLEARDISPLAY)\n      self.lcd_write(LCD_RETURNHOME)\n\n   # define backlight on\/off (lcd.backlight(1); off= lcd.backlight(0)\n   def backlight(self, state): # for state, 1 = on, 0 = off\n      if state == 1:\n         self.lcd_device.write_cmd(LCD_BACKLIGHT)\n      elif state == 0:\n         self.lcd_device.write_cmd(LCD_NOBACKLIGHT)\n\n   # add custom characters (0 - 7)\n   def lcd_load_custom_chars(self, fontdata):\n      self.lcd_write(0x40);\n      for char in fontdata:\n         for line in char:\n            self.lcd_write_char(line)   <\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b8df536 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b8df536\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c6a8f6e\" data-id=\"c6a8f6e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5389a60 elementor-widget elementor-widget-text-editor\" data-id=\"5389a60\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\">I2c_LCD_driver_27.py<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-112839f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"112839f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-37f4a39\" data-id=\"37f4a39\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a2828eb elementor-widget elementor-widget-text-editor\" data-id=\"a2828eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre># -*- coding: utf-8 -*-\n# Original code found at:\n# https:\/\/gist.github.com\/DenisFromHR\/cc863375a6e19dce359d\n\n\"\"\"\nCompiled, mashed and generally mutilated 2014-2015 by Denis Pleic\nMade available under GNU GENERAL PUBLIC LICENSE\n\n# Modified Python I2C library for Raspberry Pi\n# as found on http:\/\/www.recantha.co.uk\/blog\/?p=4849\n# Joined existing 'i2c_lib.py' and 'lcddriver.py' into a single library\n# added bits and pieces from various sources\n# By DenisFromHR (Denis Pleic)\n# 2015-02-10, ver 0.1\n\n\"\"\"\n\n# i2c bus (0 -- original Pi, 1 -- Rev 2 Pi)\nI2CBUS = 1\n\n# LCD Address\nADDRESS = 0x27\n\nimport smbus\nfrom time import sleep\n\nclass i2c_device:\n   def __init__(self, addr, port=I2CBUS):\n      self.addr = addr\n      self.bus = smbus.SMBus(port)\n\n# Write a single command\n   def write_cmd(self, cmd):\n      self.bus.write_byte(self.addr, cmd)\n      sleep(0.0001)\n\n# Write a command and argument\n   def write_cmd_arg(self, cmd, data):\n      self.bus.write_byte_data(self.addr, cmd, data)\n      sleep(0.0001)\n\n# Write a block of data\n   def write_block_data(self, cmd, data):\n      self.bus.write_block_data(self.addr, cmd, data)\n      sleep(0.0001)\n\n# Read a single byte\n   def read(self):\n      return self.bus.read_byte(self.addr)\n\n# Read\n   def read_data(self, cmd):\n      return self.bus.read_byte_data(self.addr, cmd)\n\n# Read a block of data\n   def read_block_data(self, cmd):\n      return self.bus.read_block_data(self.addr, cmd)\n\n\n# commands\nLCD_CLEARDISPLAY = 0x01\nLCD_RETURNHOME = 0x02\nLCD_ENTRYMODESET = 0x04\nLCD_DISPLAYCONTROL = 0x08\nLCD_CURSORSHIFT = 0x10\nLCD_FUNCTIONSET = 0x20\nLCD_SETCGRAMADDR = 0x40\nLCD_SETDDRAMADDR = 0x80\n\n# flags for display entry mode\nLCD_ENTRYRIGHT = 0x00\nLCD_ENTRYLEFT = 0x02\nLCD_ENTRYSHIFTINCREMENT = 0x01\nLCD_ENTRYSHIFTDECREMENT = 0x00\n\n# flags for display on\/off control\nLCD_DISPLAYON = 0x04\nLCD_DISPLAYOFF = 0x00\nLCD_CURSORON = 0x02\nLCD_CURSOROFF = 0x00\nLCD_BLINKON = 0x01\nLCD_BLINKOFF = 0x00\n\n# flags for display\/cursor shift\nLCD_DISPLAYMOVE = 0x08\nLCD_CURSORMOVE = 0x00\nLCD_MOVERIGHT = 0x04\nLCD_MOVELEFT = 0x00\n\n# flags for function set\nLCD_8BITMODE = 0x10\nLCD_4BITMODE = 0x00\nLCD_2LINE = 0x08\nLCD_1LINE = 0x00\nLCD_5x10DOTS = 0x04\nLCD_5x8DOTS = 0x00\n\n# flags for backlight control\nLCD_BACKLIGHT = 0x08\nLCD_NOBACKLIGHT = 0x00\n\nEn = 0b00000100 # Enable bit\nRw = 0b00000010 # Read\/Write bit\nRs = 0b00000001 # Register select bit\n\nclass lcd:\n   #initializes objects and lcd\n   def __init__(self):\n      self.lcd_device = i2c_device(ADDRESS)\n\n      self.lcd_write(0x03)\n      self.lcd_write(0x03)\n      self.lcd_write(0x03)\n      self.lcd_write(0x02)\n\n      self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)\n      self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)\n      self.lcd_write(LCD_CLEARDISPLAY)\n      self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)\n      sleep(0.2)\n\n\n   # clocks EN to latch command\n   def lcd_strobe(self, data):\n      self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)\n      sleep(.0005)\n      self.lcd_device.write_cmd(((data &amp; ~En) | LCD_BACKLIGHT))\n      sleep(.0001)\n\n   def lcd_write_four_bits(self, data):\n      self.lcd_device.write_cmd(data | LCD_BACKLIGHT)\n      self.lcd_strobe(data)\n\n   # write a command to lcd\n   def lcd_write(self, cmd, mode=0):\n      self.lcd_write_four_bits(mode | (cmd &amp; 0xF0))\n      self.lcd_write_four_bits(mode | ((cmd &lt;&lt; 4) &amp; 0xF0))\n\n   # write a character to lcd (or character rom) 0x09: backlight | RS=DR&lt;\n   # works!\n   def lcd_write_char(self, charvalue, mode=1):\n      self.lcd_write_four_bits(mode | (charvalue &amp; 0xF0))\n      self.lcd_write_four_bits(mode | ((charvalue &lt;&lt; 4) &amp; 0xF0))\n  \n   # put string function with optional char positioning\n   def lcd_display_string(self, string, line=1, pos=0):\n    if line == 1:\n      pos_new = pos\n    elif line == 2:\n      pos_new = 0x40 + pos\n    elif line == 3:\n      pos_new = 0x14 + pos\n    elif line == 4:\n      pos_new = 0x54 + pos\n\n    self.lcd_write(0x80 + pos_new)\n\n    for char in string:\n      self.lcd_write(ord(char), Rs)\n\n   # clear lcd and set to home\n   def lcd_clear(self):\n      self.lcd_write(LCD_CLEARDISPLAY)\n      self.lcd_write(LCD_RETURNHOME)\n\n   # define backlight on\/off (lcd.backlight(1); off= lcd.backlight(0)\n   def backlight(self, state): # for state, 1 = on, 0 = off\n      if state == 1:\n         self.lcd_device.write_cmd(LCD_BACKLIGHT)\n      elif state == 0:\n         self.lcd_device.write_cmd(LCD_NOBACKLIGHT)\n\n   # add custom characters (0 - 7)\n   def lcd_load_custom_chars(self, fontdata):\n      self.lcd_write(0x40);\n      for char in fontdata:\n         for line in char:\n            self.lcd_write_char(line)   <\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>If I keep the solar panels deployed, they will get damaged underwater.\u00a0\u00a0 No reason to keep them deployed, when the sun isn&#8217;t overhead and providing enough light.\u00a0 I found four Photoresistors and connected one up to each of the slaves.\u00a0\u00a0 The current readings are sent to the master controller and displayed on LCD 0x24 and [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":968,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"custom","ocean_center_header_left_menu":"0","ocean_custom_header_template":"7124","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","osh_disable_topbar_sticky":"default","osh_disable_header_sticky":"default","osh_sticky_header_style":"default","osh_sticky_header_effect":"","osh_custom_sticky_logo":0,"osh_custom_retina_sticky_logo":0,"osh_custom_sticky_logo_height":0,"osh_background_color":"","osh_links_color":"","osh_links_hover_color":"","osh_links_active_color":"","osh_links_bg_color":"","osh_links_hover_bg_color":"","osh_links_active_bg_color":"","osh_menu_social_links_color":"","osh_menu_social_hover_links_color":"","footnotes":""},"class_list":["post-1071","page","type-page","status-publish","hentry","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Solar_Panel -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Solar_Panel -\" \/>\n<meta property=\"og:description\" content=\"If I keep the solar panels deployed, they will get damaged underwater.\u00a0\u00a0 No reason to keep them deployed, when the sun isn&#8217;t overhead and providing enough light.\u00a0 I found four Photoresistors and connected one up to each of the slaves.\u00a0\u00a0 The current readings are sent to the master controller and displayed on LCD 0x24 and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-03T17:12:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:300\/h:169\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/30-days-in-space\\\/solar_panel\\\/\",\"url\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/30-days-in-space\\\/solar_panel\\\/\",\"name\":\"Solar_Panel -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/30-days-in-space\\\/solar_panel\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/30-days-in-space\\\/solar_panel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\/\\/mc.scsiraidguru.com\\/wp-content\\/uploads\\/2021\\/09\\/20210905_120359-300x169.jpg\",\"datePublished\":\"2021-06-28T23:27:55+00:00\",\"dateModified\":\"2024-03-03T17:12:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/30-days-in-space\\\/solar_panel\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/30-days-in-space\\\/solar_panel\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/30-days-in-space\\\/solar_panel\\\/#primaryimage\",\"url\":\"https:\\/\\/mc.scsiraidguru.com\\/wp-content\\/uploads\\/2021\\/09\\/20210905_120359.jpg\",\"contentUrl\":\"https:\\/\\/mc.scsiraidguru.com\\/wp-content\\/uploads\\/2021\\/09\\/20210905_120359.jpg\",\"width\":2560,\"height\":1440},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/30-days-in-space\\\/solar_panel\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Arduino\",\"item\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"30 Days in Space\",\"item\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/index.php\\\/arduino\\\/30-days-in-space\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Solar_Panel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/#website\",\"url\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/\",\"name\":\"SCSIraidGURU MC World\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/#\\\/schema\\\/person\\\/f21e3238456a7c2adea5944cb376cddc\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/mc.scsiraidguru.com\\\/#\\\/schema\\\/person\\\/f21e3238456a7c2adea5944cb376cddc\",\"name\":\"Michael McKenney\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\/\\/mc.scsiraidguru.com\\/wp-content\\/uploads\\/2021\\/09\\/20210925_105558.jpg\",\"url\":\"https:\\/\\/mc.scsiraidguru.com\\/wp-content\\/uploads\\/2021\\/09\\/20210925_105558.jpg\",\"contentUrl\":\"https:\\/\\/mc.scsiraidguru.com\\/wp-content\\/uploads\\/2021\\/09\\/20210925_105558.jpg\",\"width\":2560,\"height\":1440,\"caption\":\"Michael McKenney\"},\"logo\":{\"@id\":\"https:\\/\\/mc.scsiraidguru.com\\/wp-content\\/uploads\\/2021\\/09\\/20210925_105558.jpg\"},\"sameAs\":[\"http:\\\/\\\/mc.scsiraidguru.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Solar_Panel -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/","og_locale":"en_US","og_type":"article","og_title":"Solar_Panel -","og_description":"If I keep the solar panels deployed, they will get damaged underwater.\u00a0\u00a0 No reason to keep them deployed, when the sun isn&#8217;t overhead and providing enough light.\u00a0 I found four Photoresistors and connected one up to each of the slaves.\u00a0\u00a0 The current readings are sent to the master controller and displayed on LCD 0x24 and [&hellip;]","og_url":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/","article_modified_time":"2024-03-03T17:12:39+00:00","og_image":[{"url":"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:300\/h:169\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/","url":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/","name":"Solar_Panel -","isPartOf":{"@id":"https:\/\/mc.scsiraidguru.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/#primaryimage"},"image":{"@id":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/#primaryimage"},"thumbnailUrl":"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:300\/h:169\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg","datePublished":"2021-06-28T23:27:55+00:00","dateModified":"2024-03-03T17:12:39+00:00","breadcrumb":{"@id":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/#primaryimage","url":"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg","contentUrl":"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210905_120359.jpg","width":2560,"height":1440},{"@type":"BreadcrumbList","@id":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/solar_panel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mc.scsiraidguru.com\/"},{"@type":"ListItem","position":2,"name":"Arduino","item":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/"},{"@type":"ListItem","position":3,"name":"30 Days in Space","item":"https:\/\/mc.scsiraidguru.com\/index.php\/arduino\/30-days-in-space\/"},{"@type":"ListItem","position":4,"name":"Solar_Panel"}]},{"@type":"WebSite","@id":"https:\/\/mc.scsiraidguru.com\/#website","url":"https:\/\/mc.scsiraidguru.com\/","name":"SCSIraidGURU MC World","description":"","publisher":{"@id":"https:\/\/mc.scsiraidguru.com\/#\/schema\/person\/f21e3238456a7c2adea5944cb376cddc"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mc.scsiraidguru.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/mc.scsiraidguru.com\/#\/schema\/person\/f21e3238456a7c2adea5944cb376cddc","name":"Michael McKenney","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210925_105558.jpg","url":"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210925_105558.jpg","contentUrl":"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210925_105558.jpg","width":2560,"height":1440,"caption":"Michael McKenney"},"logo":{"@id":"https:\/\/mlbxg5wzacc0.i.optimole.com\/cb:FyJ0.12d22\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/mc.scsiraidguru.com\/wp-content\/uploads\/2021\/09\/20210925_105558.jpg"},"sameAs":["http:\/\/mc.scsiraidguru.com"]}]}},"_links":{"self":[{"href":"https:\/\/mc.scsiraidguru.com\/index.php\/wp-json\/wp\/v2\/pages\/1071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mc.scsiraidguru.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mc.scsiraidguru.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mc.scsiraidguru.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mc.scsiraidguru.com\/index.php\/wp-json\/wp\/v2\/comments?post=1071"}],"version-history":[{"count":140,"href":"https:\/\/mc.scsiraidguru.com\/index.php\/wp-json\/wp\/v2\/pages\/1071\/revisions"}],"predecessor-version":[{"id":7638,"href":"https:\/\/mc.scsiraidguru.com\/index.php\/wp-json\/wp\/v2\/pages\/1071\/revisions\/7638"}],"up":[{"embeddable":true,"href":"https:\/\/mc.scsiraidguru.com\/index.php\/wp-json\/wp\/v2\/pages\/968"}],"wp:attachment":[{"href":"https:\/\/mc.scsiraidguru.com\/index.php\/wp-json\/wp\/v2\/media?parent=1071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}