——
#DonLucElectronics #DonLuc #ETextiles #Wearable #FLORA #MicroOLED #BME280 #CCS811 #RTC #Arduino #Project #Programming #Electronics #Microcontrollers #Consultant
——

——

——

——
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 Compensated Crystal Oscillator (TCXO). This RTC is the most precise you can get in a small, low power package.
Most RTCs use an external 32kHz timing crystal that is used to keep time with low current draw. And that’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.
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.
DL2204Mk06
1 x FLORA – Version 1.0a
1 x SparkFun Micro OLED
1 x SparkFun Environmental Combo CCS811/BME280
1 x DS3231 Precision RTC FeatherWing
1 x CR1220 Coin Cell Battery
1 x RGB Smart NeoPixel
1 x Half-Size Breadboard
1 x SparkFun Cerberus USB Cable
FLORA – Version 1.0a
SDA – Digital 2
SCL – Digital 3
NEO – Digital 6
VIN – +5V
GND – GND
——
DL2204Mk06p.ino
/* ***** Don Luc Electronics © *****
Software Version Information
Project #23: E-Textiles - DS3231 Precision RTC - Mk06
23-06
DL2204Mk06p.ino
1 x FLORA - Version 1.0a
1 x SparkFun Micro OLED
1 x SparkFun Environmental Combo CCS811/BME280
1 x DS3231 Precision RTC FeatherWing
1 x CR1220 Coin Cell Battery
1 x RGB Smart NeoPixel
1 x Half-Size Breadboard
1 x SparkFun Cerberus USB Cable
*/
// Include the Library Code
// Wire
#include <Wire.h>
// NeoPixels
#include <Adafruit_NeoPixel.h>
// SparkFun Micro OLED
#include <SFE_MicroOLED.h>
// SparkFun BME280 - Humidity, Temperature, Altitude and Barometric Pressure
#include <SparkFunBME280.h>
// SparkFun CCS811 - eCO2 & tVOC
#include <SparkFunCCS811.h>
// Date and time DS3231 RTC
#include <RTClib.h>
// NeoPixels
// On digital pin 6
#define PIN 6
// NeoPixels NUMPIXELS = 1
#define NUMPIXELS 1
// Pixels
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// Red
int red = 0;
// Green
int green = 0;
// Blue
int blue = 0;
// Neopix
int iNeo = 0;
// Value
int zz = 0;
// SparkFun Micro OLED
#define PIN_RESET 9
#define DC_JUMPER 1
// I2C declaration
MicroOLED oled(PIN_RESET, DC_JUMPER);
// SparkFun BME280 - Temperature, Humidity, Altitude and Barometric Pressure
BME280 myBME280;
// Temperature Celsius
float BMEtempC = 0;
// Humidity
float BMEhumid = 0;
// Altitude Meters
float BMEaltitudeM = 0;
// Barometric Pressure
float BMEpressure = 0;
// SparkFun CCS811 - eCO2 & tVOC
// Default I2C Address
#define CCS811_ADDR 0x5B
CCS811 myCCS811(CCS811_ADDR);
// eCO2
float CCS811CO2 = 0;
// TVOC
float CCS811TVOC = 0;
// Date and time functions using a DS3231 RTC
RTC_DS3231 RTC;
String sDate;
String sTime;
// Software Version Information
String sver = "23-06";
void loop() {
// SparkFun BME280 - Temperature, Humidity, Altitude and Barometric Pressure
isBME280();
// SparkFun CCS811 - eCO2 & tVOC
isCCS811();
// FLORA
isFLORA();
// Dates and Time
timeRTC();
// Micro OLED
isMicroOLED();
}
getBME280.ino
// SparkFun BME280 - Temperature, Humidity, Altitude and Barometric Pressure
// isBME280 - Temperature, Humidity, Altitude and Barometric Pressure
void isBME280(){
// Temperature Celsius
BMEtempC = myBME280.readTempC();
// Humidity
BMEhumid = myBME280.readFloatHumidity() ;
// Altitude Meters
BMEaltitudeM = myBME280.readFloatAltitudeMeters();
// Barometric Pressure
BMEpressure = myBME280.readFloatPressure();
}
getCCS811.ino
// CCS811 - eCO2 & tVOC
// isCCS811 - eCO2 & tVOC
void isCCS811(){
// This sends the temperature & humidity data to the CCS811
myCCS811.setEnvironmentalData(BMEhumid, BMEtempC);
// Calling this function updates the global tVOC and eCO2 variables
myCCS811.readAlgorithmResults();
// eCO2 Concentration
CCS811CO2 = myCCS811.getCO2();
// tVOC Concentration
CCS811TVOC = myCCS811.getTVOC();
}
getFLORA.ino
// FLORA
// isFLORA
void isFLORA() {
// FLORA = Temperature Celsius
// BMEtempC
// FLORA = Temperature Celsius
if ( BMEtempC >= 50 ) {
// 40 <= Temperature Celsius < 50~~~
zz = 2;
isNUMPIXELS();
} else if ( BMEtempC >= 40 ) {
// 30 <= Temperature Celsius < 40
zz = 3;
isNUMPIXELS();
} else if ( BMEtempC >= 30 ) {
// 20 <= Temperature Celsius < 30
zz = 4;
isNUMPIXELS();
} else if ( BMEtempC >= 20 ) {
// 10 <= Temperature Celsius < 20
zz = 0;
isNUMPIXELS();
} else if ( BMEtempC >= 10 ) {
// ~~~0 <= Temperature Celsius < 10
zz = 1;
isNUMPIXELS();
}
}
getMicroOLED.ino
// SparkFun Micro OLED
// Setup Micro OLED
void setupMicroOLED() {
// Initialize the OLED
oled.begin();
// Clear the display's internal memory
oled.clear(ALL);
// Display what's in the buffer (splashscreen)
oled.display();
// Delay 1000 ms
delay(1000);
// Clear the buffer.
oled.clear(PAGE);
}
// Micro OLED
void isMicroOLED() {
// Text Display BME280
// Clear the display
oled.clear(PAGE);
// Set cursor to top-left
oled.setCursor(0, 0);
// Set font to type 0
oled.setFontType(0);
// Temperature Celsius
oled.print("T: ");
oled.print(BMEtempC, 2);
oled.setCursor(0, 10);
// Humidity
oled.print("H: ");
oled.print(BMEhumid, 0);
oled.setCursor(0, 20);
// Altitude Meters
oled.print("A: ");
oled.print(BMEaltitudeM, 1);
oled.setCursor(0, 30);
// Barometric Pressure
oled.print("P: ");
oled.print(BMEpressure, 0);
oled.display();
// Delay
delay( 2000 );
// Text Display CCS811
// Clear the display
oled.clear(PAGE);
// Set cursor to top-left
oled.setCursor(0, 0);
// Set font to type 0
oled.setFontType(0);
// Date
oled.setCursor(0, 0);
oled.print(sDate);
// Time
oled.setCursor(0, 10);
oled.print(sTime);
// eCO2 Concentration
oled.setCursor(0, 20);
oled.print("C: ");
oled.print(CCS811CO2, 0);
// tVOC Concentration
oled.setCursor(0, 30);
oled.print("V: ");
oled.print(CCS811TVOC, 0);
oled.display();
// Delay
delay( 2000 );
}
getNeopix.ino
// NeoPixels
// Neopix
void isNeopix()
{
// Pixels
pixels.setBrightness( 150 );
// Pixels color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor( iNeo, pixels.Color(red,green,blue) );
// This sends the updated pixel color to the hardware
pixels.show();
// Delay for a period of time (in milliseconds)
delay(50);
}
// isNUMPIXELS
void isNUMPIXELS()
{
// Neopix Value
switch ( zz ) {
case 0:
// NeoPixels Green
// Red
red = 0;
// Green
green = 255;
// Blue
blue = 0;
// Neopix
iNeo = 0;
isNeopix();
break;
case 1:
// NeoPixels Blue
// Red
red = 0;
// Green
green = 0;
// Blue
blue = 255;
// Neopix
iNeo = 0;
isNeopix();
break;
case 2:
// NeoPixels Red
// Red
red = 255;
// Green
green = 0;
// Blue
blue = 0;
// Neopix
iNeo = 0;
isNeopix();
break;
case 3:
// NeoPixels Yellow
// Red
red = 255;
// Green
green = 255;
// Blue
blue = 0;
// Neopix
iNeo = 0;
isNeopix();
break;
case 4:
// NeoPixels Magenta
// Red
red = 255;
// Green
green = 0;
// Blue
blue = 255;
// Neopix
iNeo = 0;
isNeopix();
break;
case 5:
// NeoPixels Cyan
// Red
red = 0;
// Green
green = 255;
// Blue
blue = 255;
// Neopix
iNeo = 0;
isNeopix();
break;
case 6:
// NeoPixels White
// Red
red = 255;
// Green
green = 255;
// Blue
blue = 255;
// Neopix
iNeo = 0;
isNeopix();
break;
}
}
// isNUMPIXELSoff
void isNUMPIXELSoff()
{
// Black Off
// NeoPixels
// Red
red = 0;
// Green
green = 0;
// Blue
blue = 0;
isNeopix();
}
getRTCDS3231.ino
// DS3231 Precision RTC
// Setup RTC
void setupRTC() {
// DS3231 Precision RTC
RTC.begin();
if (! RTC.begin()) {
while (1);
}
DateTime now = RTC.now();
if (RTC.lostPower()) {
// Following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// August 2, 2021 at 13:53:0 you would call:
// RTC.adjust(DateTime(2022, 4, 26, 11, 39, 0));
}
}
// timeRTC
void timeRTC() {
// DS3231 Precision RTC
sDate = "";
sTime = "";
// Date Time
DateTime now = RTC.now();
// sData
sDate += String(now.year(), DEC);
sDate += "/";
sDate += String(now.month(), DEC);
sDate += "/";
sDate += String(now.day(), DEC);
// sTime
sTime += String(now.hour(), DEC);
sTime += ":";
sTime += String(now.minute(), DEC);
sTime += ":";
sTime += String(now.second(), DEC);
}
setup.ino
// Setup
void setup() {
// NeoPixels
// This initializes the NeoPixel library
pixels.begin();
// Delay for a period of time (in milliseconds)
delay(50);
// isNUMPIXELS Off
isNUMPIXELSoff();
// Set up I2C bus
Wire.begin();
// Delay for a period of time (in milliseconds)
delay(50);
// SparkFun BME280 - Temperature, Humidity, Altitude and Barometric Pressure
myBME280.begin();
// CCS811 - eCO2 & tVOC
myCCS811.begin();
// Setup RTC
setupRTC();
// Setup Micro OLED
setupMicroOLED();
}
——
People can contact us: https://www.donluc.com/?page_id=1927
Technology Experience
- Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi,Espressif, etc…)
- IoT
- Robotics
- Camera and Video Capture Receiver Stationary, Wheel/Tank and Underwater Vehicle
- Unmanned Vehicles Terrestrial and Marine
- Research & Development (R & D)
- Desktop Applications (Windows, OSX, Linux, Multi-OS, Multi-Tier, etc…)
- Mobile Applications (Android, iOS, Blackberry, Windows Mobile, Windows CE, etc…)
- Web Applications (LAMP, Scripting, Java, ASP, ASP.NET, RoR, Wakanda, etc…)
- Social Media Programming & Integration (Facebook, Twitter, YouTube, Pinterest, etc…)
- Content Management Systems (WordPress, Drupal, Joomla, Moodle, etc…)
- Bulletin Boards (phpBB, SMF, Vanilla, jobberBase, etc…)
- eCommerce (WooCommerce, OSCommerce, ZenCart, PayPal Shopping Cart, etc…)
Instructor and E-Mentor
- IoT
- PIC Microcontrollers
- Arduino
- Raspberry Pi
- Espressif
- Robotics
- DOS, Windows, OSX, Linux, iOS, Android, Multi-OS
- Linux-Apache-PHP-MySQL
Follow Us
J. Luc Paquin – Curriculum Vitae – 2022 English & Español
https://www.jlpconsultants.com/luc/
Web: https://www.donluc.com/
Web: https://www.jlpconsultants.com/
Facebook: https://www.facebook.com/neosteam.labs.9/
YouTube: https://www.youtube.com/channel/UC5eRjrGn1CqkkGfZy0jxEdA
Twitter: https://twitter.com/labs_steam
Pinterest: https://www.pinterest.com/NeoSteamLabs/
Instagram: https://www.instagram.com/neosteamlabs/
Don Luc