{"id":3075,"date":"2022-06-04T06:03:13","date_gmt":"2022-06-04T13:03:13","guid":{"rendered":"https:\/\/www.donluc.com\/?p=3075"},"modified":"2022-06-04T06:03:13","modified_gmt":"2022-06-04T13:03:13","slug":"project-23-e-textiles-ds3231-precision-rtc-mk06","status":"publish","type":"post","link":"https:\/\/www.donluc.com\/?p=3075","title":{"rendered":"Project #23: E-Textiles &#8211; DS3231 Precision RTC &#8211; Mk06"},"content":{"rendered":"<div style=\"width: 720px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-3075-1\" width=\"720\" height=\"480\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06W.mp4?_=1\" \/><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06W.mp4\">https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06W.mp4<\/a><\/video><\/div>\n<p>&#8212;&#8212;<\/p>\n<p>#DonLucElectronics #DonLuc #ETextiles #Wearable #FLORA #MicroOLED #BME280 #CCS811 #RTC #Arduino #Project #Programming #Electronics #Microcontrollers #Consultant<\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06a.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06a.png\" alt=\"DS3231 Precision RTC\" width=\"720\" height=\"457\" class=\"alignnone size-full wp-image-3077\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06a.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06a-300x190.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06b.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06b.png\" alt=\"DS3231 Precision RTC\" width=\"720\" height=\"480\" class=\"alignnone size-full wp-image-3078\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06b.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06b-300x200.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06c.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06c.png\" alt=\"DS3231 Precision RTC\" width=\"720\" height=\"480\" class=\"alignnone size-full wp-image-3079\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06c.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2022\/06\/DL2204Mk06c-300x200.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><strong>DS3231 Precision RTC FeatherWing<\/strong><\/p>\n<p>A Feather board without ambition is a Feather board without FeatherWings. This is the DS3231 Precision RTC FeatherWing it adds an extremely accurate I2C-integrated Real Time Clock (RTC) with a Temperature Compensated Crystal Oscillator (TCXO). This RTC is the most precise you can get in a small, low power package.<\/p>\n<p>Most RTCs use an external 32kHz timing crystal that is used to keep time with low current draw. And that&#8217;s all well and good, but those crystals have slight drift, particularly when the temperature changes, the temperature changes the oscillation frequency very very very slightly but it does add up. This RTC is in a beefy package because the crystal is inside the chip, and right next to the integrated crystal is a temperature sensor. That sensor compensates for the frequency changes by adding or removing clock ticks so that the timekeeping stays on schedule.<\/p>\n<p>With a CR1220 12mm coin cell plugged into the top of the FeatherWing, you can get years of precision time keeping, even when main power is lost. Great for datalogging and clocks or anything where you need to really know the time.<\/p>\n<p><strong>DL2204Mk06<\/strong><\/p>\n<p>1 x FLORA &#8211; Version 1.0a<br \/>\n1 x SparkFun Micro OLED<br \/>\n1 x SparkFun Environmental Combo CCS811\/BME280<br \/>\n1 x DS3231 Precision RTC FeatherWing<br \/>\n1 x CR1220 Coin Cell Battery<br \/>\n1 x RGB Smart NeoPixel<br \/>\n1 x Half-Size Breadboard<br \/>\n1 x SparkFun Cerberus USB Cable<\/p>\n<p><strong>FLORA &#8211; Version 1.0a<\/strong><\/p>\n<p>SDA &#8211; Digital 2<br \/>\nSCL &#8211; Digital 3<br \/>\nNEO &#8211; Digital 6<br \/>\nVIN &#8211; +5V<br \/>\nGND &#8211; GND<\/p>\n<p>&#8212;&#8212;<\/p>\n<p><strong>DL2204Mk06p.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/* ***** Don Luc Electronics \u00a9 *****\r\nSoftware Version Information\r\nProject #23: E-Textiles - DS3231 Precision RTC - Mk06\r\n23-06\r\nDL2204Mk06p.ino\r\n1 x FLORA - Version 1.0a\r\n1 x SparkFun Micro OLED\r\n1 x SparkFun Environmental Combo CCS811\/BME280\r\n1 x DS3231 Precision RTC FeatherWing\r\n1 x CR1220 Coin Cell Battery\r\n1 x RGB Smart NeoPixel\r\n1 x Half-Size Breadboard\r\n1 x SparkFun Cerberus USB Cable\r\n*\/\r\n\r\n\/\/ Include the Library Code\r\n\/\/ Wire\r\n#include &lt;Wire.h&gt;\r\n\/\/ NeoPixels\r\n#include &lt;Adafruit_NeoPixel.h&gt;\r\n\/\/ SparkFun Micro OLED\r\n#include &lt;SFE_MicroOLED.h&gt;\r\n\/\/ SparkFun BME280 - Humidity, Temperature, Altitude and Barometric Pressure\r\n#include &lt;SparkFunBME280.h&gt;\r\n\/\/ SparkFun CCS811 - eCO2 &amp; tVOC\r\n#include &lt;SparkFunCCS811.h&gt;\r\n\/\/ Date and time DS3231 RTC\r\n#include &lt;RTClib.h&gt;\r\n\r\n\/\/ NeoPixels\r\n\/\/ On digital pin 6\r\n#define PIN 6\r\n\/\/ NeoPixels NUMPIXELS = 1\r\n#define NUMPIXELS 1\r\n\/\/ Pixels\r\nAdafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);\r\n\/\/ Red\r\nint red = 0;\r\n\/\/ Green\r\nint green = 0;\r\n\/\/ Blue\r\nint blue = 0;\r\n\/\/ Neopix\r\nint iNeo = 0;\r\n\/\/ Value\r\nint zz = 0;\r\n\r\n\/\/ SparkFun Micro OLED\r\n#define PIN_RESET 9\r\n#define DC_JUMPER 1\r\n\/\/ I2C declaration\r\nMicroOLED oled(PIN_RESET, DC_JUMPER);\r\n\r\n\/\/ SparkFun BME280 - Temperature, Humidity, Altitude and Barometric Pressure\r\nBME280 myBME280;\r\n\/\/ Temperature Celsius\r\nfloat BMEtempC = 0;\r\n\/\/ Humidity\r\nfloat BMEhumid = 0;\r\n\/\/ Altitude Meters\r\nfloat BMEaltitudeM = 0;\r\n\/\/ Barometric Pressure\r\nfloat BMEpressure = 0;\r\n\r\n\/\/ SparkFun CCS811 - eCO2 &amp; tVOC\r\n\/\/ Default I2C Address\r\n#define CCS811_ADDR 0x5B \r\nCCS811 myCCS811(CCS811_ADDR);\r\n\/\/ eCO2\r\nfloat CCS811CO2 = 0;\r\n\/\/ TVOC\r\nfloat CCS811TVOC = 0;\r\n\r\n\/\/ Date and time functions using a DS3231 RTC\r\nRTC_DS3231 RTC;\r\nString sDate;\r\nString sTime;\r\n\r\n\/\/ Software Version Information\r\nString sver = &quot;23-06&quot;;\r\n\r\nvoid loop() {\r\n\r\n  \/\/ SparkFun BME280 - Temperature, Humidity, Altitude and Barometric Pressure\r\n  isBME280();\r\n\r\n  \/\/ SparkFun CCS811 - eCO2 &amp; tVOC\r\n  isCCS811();\r\n\r\n  \/\/ FLORA\r\n  isFLORA();\r\n\r\n  \/\/ Dates and Time\r\n  timeRTC();\r\n\r\n  \/\/ Micro OLED\r\n  isMicroOLED();\r\n \r\n}\r\n<\/pre>\n<p><strong>getBME280.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ SparkFun BME280 - Temperature, Humidity, Altitude and Barometric Pressure\r\n\/\/ isBME280 - Temperature, Humidity, Altitude and Barometric Pressure\r\nvoid isBME280(){\r\n\r\n  \/\/ Temperature Celsius\r\n  BMEtempC = myBME280.readTempC();\r\n  \/\/ Humidity\r\n  BMEhumid = myBME280.readFloatHumidity() ;\r\n  \/\/ Altitude Meters\r\n  BMEaltitudeM = myBME280.readFloatAltitudeMeters();\r\n  \/\/ Barometric Pressure\r\n  BMEpressure = myBME280.readFloatPressure();\r\n  \r\n}\r\n<\/pre>\n<p><strong>getCCS811.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ CCS811 - eCO2 &amp; tVOC\r\n\/\/ isCCS811 - eCO2 &amp; tVOC\r\nvoid isCCS811(){\r\n\r\n  \/\/ This sends the temperature &amp; humidity data to the CCS811\r\n  myCCS811.setEnvironmentalData(BMEhumid, BMEtempC);\r\n\r\n  \/\/ Calling this function updates the global tVOC and eCO2 variables\r\n  myCCS811.readAlgorithmResults();\r\n\r\n  \/\/ eCO2 Concentration\r\n  CCS811CO2 = myCCS811.getCO2();\r\n  \r\n  \/\/ tVOC Concentration\r\n  CCS811TVOC = myCCS811.getTVOC();\r\n  \r\n}\r\n<\/pre>\n<p><strong>getFLORA.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ FLORA\r\n\/\/ isFLORA\r\nvoid isFLORA() {\r\n\r\n  \/\/ FLORA = Temperature Celsius\r\n  \/\/ BMEtempC\r\n\r\n  \/\/ FLORA = Temperature Celsius\r\n  if ( BMEtempC &gt;= 50 ) {\r\n\r\n    \/\/ 40 &lt;= Temperature Celsius &lt; 50~~~\r\n    zz = 2;\r\n    isNUMPIXELS();\r\n\r\n  } else if ( BMEtempC &gt;= 40 ) {\r\n\r\n    \/\/ 30 &lt;= Temperature Celsius &lt; 40\r\n    zz = 3;\r\n    isNUMPIXELS();\r\n    \r\n  }  else if ( BMEtempC &gt;= 30 ) {\r\n\r\n    \/\/ 20 &lt;= Temperature Celsius &lt; 30\r\n    zz = 4;\r\n    isNUMPIXELS();\r\n    \r\n  } else if ( BMEtempC &gt;= 20 ) {\r\n\r\n    \/\/ 10 &lt;= Temperature Celsius &lt; 20\r\n    zz = 0;\r\n    isNUMPIXELS();\r\n    \r\n  } else if ( BMEtempC &gt;= 10 ) {\r\n\r\n    \/\/ ~~~0 &lt;= Temperature Celsius &lt; 10\r\n    zz = 1;\r\n    isNUMPIXELS();\r\n    \r\n  }\r\n    \r\n}\r\n<\/pre>\n<p><strong>getMicroOLED.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ SparkFun Micro OLED\r\n\/\/ Setup Micro OLED\r\nvoid setupMicroOLED() {\r\n\r\n  \/\/ Initialize the OLED\r\n  oled.begin();\r\n  \/\/ Clear the display&#039;s internal memory\r\n  oled.clear(ALL);\r\n  \/\/ Display what&#039;s in the buffer (splashscreen)\r\n  oled.display();\r\n\r\n  \/\/ Delay 1000 ms\r\n  delay(1000);\r\n\r\n  \/\/ Clear the buffer.\r\n  oled.clear(PAGE);\r\n  \r\n}\r\n\/\/ Micro OLED\r\nvoid isMicroOLED() {\r\n\r\n  \/\/ Text Display BME280\r\n  \/\/ Clear the display\r\n  oled.clear(PAGE);\r\n  \/\/ Set cursor to top-left\r\n  oled.setCursor(0, 0);\r\n  \/\/ Set font to type 0\r\n  oled.setFontType(0);\r\n  \/\/ Temperature Celsius\r\n  oled.print(&quot;T: &quot;);\r\n  oled.print(BMEtempC, 2);\r\n  oled.setCursor(0, 10);\r\n  \/\/ Humidity\r\n  oled.print(&quot;H: &quot;);\r\n  oled.print(BMEhumid, 0);\r\n  oled.setCursor(0, 20);\r\n  \/\/ Altitude Meters\r\n  oled.print(&quot;A: &quot;);\r\n  oled.print(BMEaltitudeM, 1);\r\n  oled.setCursor(0, 30);\r\n  \/\/ Barometric Pressure\r\n  oled.print(&quot;P: &quot;);\r\n  oled.print(BMEpressure, 0);\r\n  oled.display();\r\n\r\n  \/\/ Delay\r\n  delay( 2000 );\r\n\r\n  \/\/ Text Display CCS811\r\n  \/\/ Clear the display\r\n  oled.clear(PAGE);\r\n  \/\/ Set cursor to top-left\r\n  oled.setCursor(0, 0);\r\n  \/\/ Set font to type 0\r\n  oled.setFontType(0);\r\n  \/\/ Date\r\n  oled.setCursor(0, 0);\r\n  oled.print(sDate);\r\n  \/\/ Time\r\n  oled.setCursor(0, 10);\r\n  oled.print(sTime);\r\n  \/\/ eCO2 Concentration\r\n  oled.setCursor(0, 20);\r\n  oled.print(&quot;C: &quot;);\r\n  oled.print(CCS811CO2, 0);\r\n  \/\/ tVOC Concentration\r\n  oled.setCursor(0, 30);\r\n  oled.print(&quot;V: &quot;);\r\n  oled.print(CCS811TVOC, 0);  \r\n  oled.display();\r\n\r\n  \/\/ Delay\r\n  delay( 2000 );\r\n\r\n}\r\n<\/pre>\n<p><strong>getNeopix.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ NeoPixels\r\n\/\/ Neopix\r\nvoid isNeopix() \r\n{ \r\n\r\n    \/\/ Pixels\r\n    pixels.setBrightness( 150 );\r\n    \/\/ Pixels color takes RGB values, from 0,0,0 up to 255,255,255\r\n    pixels.setPixelColor( iNeo, pixels.Color(red,green,blue) ); \r\n    \/\/ This sends the updated pixel color to the hardware\r\n    pixels.show(); \r\n    \/\/ Delay for a period of time (in milliseconds)\r\n    delay(50);     \r\n  \r\n}\r\n\/\/ isNUMPIXELS\r\nvoid isNUMPIXELS()\r\n{\r\n\r\n  \/\/ Neopix Value\r\n  switch ( zz ) {  \r\n    case 0:\r\n      \/\/ NeoPixels Green\r\n      \/\/ Red\r\n      red = 0;\r\n      \/\/ Green\r\n      green = 255;\r\n      \/\/ Blue\r\n      blue = 0;\r\n      \/\/ Neopix\r\n      iNeo = 0;   \r\n      isNeopix();\r\n      break;  \r\n    case 1:\r\n      \/\/ NeoPixels Blue\r\n      \/\/ Red\r\n      red = 0;\r\n      \/\/ Green\r\n      green = 0;\r\n      \/\/ Blue\r\n      blue = 255;\r\n      \/\/ Neopix\r\n      iNeo = 0;\r\n      isNeopix();\r\n      break;\r\n    case 2:\r\n      \/\/ NeoPixels Red\r\n      \/\/ Red\r\n      red = 255;\r\n      \/\/ Green\r\n      green = 0;\r\n      \/\/ Blue\r\n      blue = 0;\r\n      \/\/ Neopix\r\n      iNeo = 0;   \r\n      isNeopix();\r\n      break;\r\n    case 3:\r\n      \/\/ NeoPixels Yellow\r\n      \/\/ Red\r\n      red = 255;\r\n      \/\/ Green\r\n      green = 255;\r\n      \/\/ Blue\r\n      blue = 0;\r\n      \/\/ Neopix\r\n      iNeo = 0;\r\n      isNeopix();\r\n      break;\r\n    case 4:\r\n      \/\/ NeoPixels Magenta\r\n      \/\/ Red\r\n      red = 255;\r\n      \/\/ Green\r\n      green = 0;\r\n      \/\/ Blue\r\n      blue = 255;\r\n      \/\/ Neopix\r\n      iNeo = 0;\r\n      isNeopix();\r\n      break;\r\n    case 5:\r\n      \/\/ NeoPixels Cyan\r\n      \/\/ Red\r\n      red = 0;\r\n      \/\/ Green\r\n      green = 255;\r\n      \/\/ Blue\r\n      blue = 255;\r\n      \/\/ Neopix\r\n      iNeo = 0;\r\n      isNeopix();\r\n      break;\r\n    case 6:\r\n      \/\/ NeoPixels White\r\n      \/\/ Red\r\n      red = 255;\r\n      \/\/ Green\r\n      green = 255;\r\n      \/\/ Blue\r\n      blue = 255;\r\n      \/\/ Neopix\r\n      iNeo = 0;\r\n      isNeopix();    \r\n      break;\r\n  }\r\n  \r\n}\r\n\/\/ isNUMPIXELSoff\r\nvoid isNUMPIXELSoff()\r\n{\r\n\r\n   \/\/ Black Off\r\n   \/\/ NeoPixels\r\n   \/\/ Red\r\n   red = 0;\r\n   \/\/ Green\r\n   green = 0;\r\n   \/\/ Blue\r\n   blue = 0;\r\n   isNeopix();\r\n \r\n}\r\n<\/pre>\n<p><strong>getRTCDS3231.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ DS3231 Precision RTC\r\n\/\/ Setup RTC\r\nvoid setupRTC() {\r\n\r\n  \/\/ DS3231 Precision RTC   \r\n  RTC.begin();\r\n  if (! RTC.begin()) {\r\n    while (1);\r\n  }\r\n  \r\n  DateTime now = RTC.now();\r\n\r\n  if (RTC.lostPower()) {\r\n    \r\n    \/\/ Following line sets the RTC to the date &amp; time this sketch was compiled\r\n    RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));\r\n    \/\/ This line sets the RTC with an explicit date &amp; time, for example to set\r\n    \/\/ August 2, 2021 at 13:53:0 you would call:\r\n    \/\/ RTC.adjust(DateTime(2022, 4, 26, 11, 39, 0));\r\n    \r\n  }\r\n  \r\n}\r\n\/\/ timeRTC\r\nvoid timeRTC() {\r\n\r\n    \/\/ DS3231 Precision RTC\r\n    sDate = &quot;&quot;;\r\n    sTime = &quot;&quot;;\r\n    \/\/ Date Time\r\n    DateTime now = RTC.now();\r\n\r\n    \/\/ sData\r\n    sDate += String(now.year(), DEC);\r\n    sDate += &quot;\/&quot;;\r\n    sDate += String(now.month(), DEC);\r\n    sDate += &quot;\/&quot;;\r\n    sDate += String(now.day(), DEC);\r\n  \r\n    \/\/ sTime\r\n    sTime += String(now.hour(), DEC);\r\n    sTime += &quot;:&quot;;\r\n    sTime += String(now.minute(), DEC);\r\n    sTime += &quot;:&quot;;\r\n    sTime += String(now.second(), DEC);\r\n\r\n}\r\n<\/pre>\n<p><strong>setup.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Setup\r\nvoid setup() {\r\n\r\n  \/\/ NeoPixels\r\n  \/\/ This initializes the NeoPixel library\r\n  pixels.begin();\r\n  \/\/ Delay for a period of time (in milliseconds)\r\n  delay(50);\r\n  \/\/ isNUMPIXELS Off\r\n  isNUMPIXELSoff();\r\n\r\n  \/\/ Set up I2C bus\r\n  Wire.begin();\r\n\r\n  \/\/ Delay for a period of time (in milliseconds)\r\n  delay(50);\r\n  \/\/ SparkFun BME280 - Temperature, Humidity, Altitude and Barometric Pressure\r\n  myBME280.begin();\r\n\r\n  \/\/ CCS811 - eCO2 &amp; tVOC\r\n  myCCS811.begin();\r\n\r\n  \/\/ Setup RTC\r\n  setupRTC();\r\n\r\n  \/\/ Setup Micro OLED\r\n  setupMicroOLED();\r\n\r\n}\r\n<\/pre>\n<p>&#8212;&#8212;<\/p>\n<p><strong>People can contact us:<\/strong> https:\/\/www.donluc.com\/?page_id=1927<\/p>\n<p><strong>Technology Experience<\/strong><\/p>\n<ul>\n<li>Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi,Espressif, etc&#8230;)<\/li>\n<li>IoT<\/li>\n<li>Robotics<\/li>\n<li>Camera and Video Capture Receiver Stationary, Wheel\/Tank and Underwater Vehicle<\/li>\n<li>Unmanned Vehicles Terrestrial and Marine<\/li>\n<li>Research &#038; Development (R &#038; D)<\/li>\n<li>Desktop Applications (Windows, OSX, Linux, Multi-OS, Multi-Tier, etc&#8230;)<\/li>\n<li>Mobile Applications (Android, iOS, Blackberry, Windows Mobile, Windows CE, etc&#8230;)<\/li>\n<li>Web Applications (LAMP, Scripting, Java, ASP, ASP.NET, RoR, Wakanda, etc&#8230;)<\/li>\n<li>Social Media Programming &#038; Integration (Facebook, Twitter, YouTube, Pinterest, etc&#8230;)<\/li>\n<li>Content Management Systems (WordPress, Drupal, Joomla, Moodle, etc&#8230;)<\/li>\n<li>Bulletin Boards (phpBB, SMF, Vanilla, jobberBase, etc&#8230;)<\/li>\n<li>eCommerce (WooCommerce, OSCommerce, ZenCart, PayPal Shopping Cart, etc&#8230;)<\/li>\n<\/ul>\n<p><strong>Instructor and E-Mentor<\/strong><\/p>\n<ul>\n<li>IoT<\/li>\n<li>PIC Microcontrollers<\/li>\n<li>Arduino<\/li>\n<li>Raspberry Pi<\/li>\n<li>Espressif<\/li>\n<li>Robotics<\/li>\n<li>DOS, Windows, OSX, Linux, iOS, Android, Multi-OS<\/li>\n<li>Linux-Apache-PHP-MySQL<\/li>\n<\/ul>\n<p><strong>Follow Us<\/strong><\/p>\n<p><strong>J. Luc Paquin \u2013 Curriculum Vitae &#8211; 2022 English &#038; Espa\u00f1ol<\/strong><br \/>\nhttps:\/\/www.jlpconsultants.com\/luc\/<\/p>\n<p><strong>Web:<\/strong> https:\/\/www.donluc.com\/<br \/>\n<strong>Web:<\/strong> https:\/\/www.jlpconsultants.com\/<br \/>\n<strong>Facebook:<\/strong> https:\/\/www.facebook.com\/neosteam.labs.9\/<br \/>\n<strong>YouTube:<\/strong> https:\/\/www.youtube.com\/channel\/UC5eRjrGn1CqkkGfZy0jxEdA<br \/>\n<strong>Twitter:<\/strong> https:\/\/twitter.com\/labs_steam<br \/>\n<strong>Pinterest:<\/strong> https:\/\/www.pinterest.com\/NeoSteamLabs\/<br \/>\n<strong>Instagram:<\/strong> https:\/\/www.instagram.com\/neosteamlabs\/<\/p>\n<p><strong>Don Luc<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8212;&#8212; #DonLucElectronics #DonLuc #ETextiles #Wearable #FLORA #MicroOLED #BME280 #CCS811 #RTC #Arduino #Project #Programming #Electronics #Microcontrollers #Consultant &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; DS3231 Precision RTC FeatherWing A Feather board without ambition is a Feather board without FeatherWings. This is the DS3231 Precision RTC FeatherWing it adds an extremely accurate I2C-integrated Real Time Clock (RTC) with a Temperature &#8230; <a title=\"Project #23: E-Textiles &#8211; DS3231 Precision RTC &#8211; Mk06\" class=\"read-more\" href=\"https:\/\/www.donluc.com\/?p=3075\" aria-label=\"Read more about Project #23: E-Textiles &#8211; DS3231 Precision RTC &#8211; Mk06\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[208,47,50,38,59,5,58,10,43],"tags":[86,6,102,4,87,219,212,19,85,24,9,27,109,33,34,213],"class_list":["post-3075","post","type-post","status-publish","format-standard","hentry","category-e-textiles","category-adafruit","category-arduino","category-digitalelectronics","category-fritzing","category-microcontrollers","category-arduino-programming","category-projects","category-sparkfun","tag-adafruit","tag-arduino","tag-components","tag-consultant","tag-display","tag-ds3231-precision-rtc","tag-e-textiles","tag-electronics","tag-fritzing","tag-microcontroller","tag-programming","tag-projects-2","tag-sparkfun","tag-technology","tag-video-blog","tag-wearable"],"_links":{"self":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3075"}],"version-history":[{"count":1,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3075\/revisions"}],"predecessor-version":[{"id":3080,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3075\/revisions\/3080"}],"wp:attachment":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}