——
#DonLucElectronics #DonLuc #RadioFrequency #Bluetooth #GPS #SparkFun #BME280 #CCS811 #IMU #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant
——

——

——

——
GPS Receiver – GP-20U7 (56 Channel)
The GP-20U7 is a compact GPS receiver with a built-in high performances all-in-one GPS chipset. The GP-20U7 accurately provides position, velocity, and time readings as well possessing high sensitivity and tracking capabilities. Thanks to the low power consumption this receiver requires, the GP-20U7 is ideal for portable applications such as tablet PCs, smart phones, and other devices requiring positioning capability. With 56 channels in search mode and 22 channels “All-In-View” tracking, the GP-20U7 is quite the work horse for its size.
DL2307Mk05
1 x SparkFun Thing Plus – ESP32 WROOM
1 x Arduino Uno
1 x SparkFun Bluetooth Mate Silver
1 x SparkFun BME280 – Temperature, Humidity, Barometric Pressure, and Altitude
1 x SparkFun Air Quality Breakout – CCS811
1 x Pololu AltIMU-10 v5
1 x GPS Receiver – GP-20U7
1 x Lithium Ion Battery – 850mAh
2 x SparkFun Cerberus USB Cable
SparkFun Thing Plus – ESP32 WROOM
LED – LED_BUILTIN
SDA – Digital 23
SCL – Digital 22
GPR – Digital 16
GPT – Digital 17
RX2 – Bluetooth
TX2 – Bluetooth
VIN – +3.3V
GND – GND
——
DL2307Mk05ps.ino
/* ***** Don Luc Electronics © *****
Software Version Information
Project #26 - Radio Frequency - Bluetooth GPS Receiver GP-20U7 - Mk24
26-24
DL2307Mk05pr.ino
1 x SparkFun Thing Plus - ESP32 WROOM
1 x Arduino Uno
1 x SparkFun Bluetooth Mate Silver
1 x SparkFun BME280 - Temperature, Humidity, Barometric Pressure, and Altitude
1 x SparkFun Air Quality Breakout - CCS811
1 x Pololu AltIMU-10 v5
1 x GPS Receiver - GP-20U7
1 x Lithium Ion Battery - 85mAh
2 x SparkFun Cerberus USB Cable
*/
// Include the Library Code
// Bluetooth Serial
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
// Two Wire Interface (TWI/I2C)
#include <Wire.h>
// SparkFun BME280 - Temperature, Humidity, Barometric Pressure, and Altitude
#include <SparkFunBME280.h>
// SparkFun CCS811 - eCO2 & tVOC
#include <SparkFunCCS811.h>
// Includes and variables for IMU integration
// STMicroelectronics LSM6DS33 gyroscope and accelerometer
#include <LSM6.h>
// STMicroelectronics LIS3MDL magnetometer
#include <LIS3MDL.h>
// STMicroelectronics LPS25H digital barometer
#include <LPS.h>
// GPS Receiver
#include <TinyGPS++.h>
// ESP32 Hardware Serial
#include <HardwareSerial.h>
// Bluetooth Serial
BluetoothSerial SerialBT;
// SparkFun BME280 - Temperature, Humidity, Barometric Pressure, and Altitude
BME280 myBME280;
float BMEtempC = 0;
float BMEhumid = 0;
float BMEpressure = 0;
float BMEaltitudeM = 0;
String FullString = "";
// SparkFun CCS811 - eCO2 & tVOC
// Default I2C Address
#define CCS811_ADDR 0x5B
CCS811 myCCS811(CCS811_ADDR);
float CCS811CO2 = 0;
float CCS811TVOC = 0;
String FullStringA = "";
// 9DoF IMU
// STMicroelectronics LSM6DS33 gyroscope and accelerometer
LSM6 imu;
// Accelerometer and Gyroscopes
// Accelerometer
int imuAX;
int imuAY;
int imuAZ;
String FullStringB = "";
// Gyroscopes
int imuGX;
int imuGY;
int imuGZ;
String FullStringC = "";
// STMicroelectronics LIS3MDL magnetometer
LIS3MDL mag;
// Magnetometer
int magX;
int magY;
int magZ;
String FullStringD = "";
// STMicroelectronics LPS25H digital barometer
LPS ps;
// Digital Barometer
float pressure;
float altitude;
float temperature;
String FullStringF = "";
// ESP32 HardwareSerial
HardwareSerial tGPS(2);
// GPS Receiver
#define gpsRXPIN 16
// This one is unused and doesnt have a conection
#define gpsTXPIN 17
// The TinyGPS++ object
TinyGPSPlus gps;
// Latitude
float TargetLat;
// Longitude
float TargetLon;
String FullStringG = "";
// GPS Date, Time, Speed, Altitude
// GPS Date
String TargetDat;
// GPS Time
String TargetTim;
// GPS Speeds M/S
String TargetSMS;
// GPS Speeds Km/h
String TargetSKH;
// GPS Altitude Meters
String TargetALT;
// GPS Status
String GPSSt = "";
String FullStringH = "";
// Software Version Information
String sver = "26-24";
void loop() {
// SparkFun BME280 - Temperature, Humidity, Barometric Pressure, and Altitude
isBME280();
// SparkFun CCS811 - eCO2 & tVOC
isCCS811();
// Accelerometer and Gyroscopes
isIMU();
// Magnetometer
isMag();
// Barometer
isBarometer();
// isGPS
isGPS();
// Delay 1 sec
delay(1000);
}
getAccelGyro.ino
// Accelerometer and Gyroscopes
// Setup IMU
void setupIMU() {
// Setup IMU
imu.init();
// Default
imu.enableDefault();
}
// Accelerometer and Gyroscopes
void isIMU() {
// Accelerometer and Gyroscopes
imu.read();
// Accelerometer x, y, z
imuAX = imu.a.x;
imuAY = imu.a.y;
imuAZ = imu.a.z;
// Gyroscopes x, y, z
imuGX = imu.g.x;
imuGY = imu.g.y;
imuGZ = imu.g.z;
// FullString B
FullStringB = "Accelerometer X = " + String(imuAX) + " Accelerometer Y = "
+ String(imuAY) + " Accelerometer Z = " + String(imuAZ)
+ "\r\n";
// FullStringB Bluetooth Serial + Serial
for(int i = 0; i < FullStringB.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringB.c_str()[i]);
// Serial
Serial.write(FullStringB.c_str()[i]);
}
// FullString C
FullStringC = "Gyroscopes X = " + String(imuGX) + " Gyroscopes Y = "
+ String(imuGY) + " Gyroscopes Z = " + String(imuGZ)
+ "\r\n";
// FullStringC Bluetooth Serial + Serial
for(int i = 0; i < FullStringC.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringC.c_str()[i]);
// Serial
Serial.write(FullStringC.c_str()[i]);
}
}
getBME280.ino
// SparkFun BME280 - Temperature, Humidity, Barometric Pressure, and Altitude
// isBME280 - Temperature, Humidity, Barometric Pressure, and Altitude
void isBME280(){
// Temperature Celsius
BMEtempC = myBME280.readTempC();
// Humidity
BMEhumid = myBME280.readFloatHumidity();
// Barometric Pressure
BMEpressure = myBME280.readFloatPressure();
// Altitude Meters
BMEaltitudeM = (myBME280.readFloatAltitudeMeters(), 2);
// FullString
FullString = "Temperature = " + String(BMEtempC,2) + " Humidity = "
+ String(BMEhumid,2) + " Barometric = " + String(BMEpressure,2)
+ " Altitude Meters = " + String(BMEaltitudeM,2) + "\r\n";
// FullString Bluetooth Serial + Serial
for(int i = 0; i < FullString.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullString.c_str()[i]);
// Serial
Serial.write(FullString.c_str()[i]);
}
}
getBarometer.ino
// STMicroelectronics LPS25H digital barometer
// Setup Barometer
void isSetupBarometer(){
// Setup Barometer
ps.init();
// Default
ps.enableDefault();
}
// Barometer
void isBarometer(){
// Barometer
pressure = ps.readPressureMillibars();
// Altitude Meters
altitude = ps.pressureToAltitudeMeters(pressure);
// Temperature Celsius
temperature = ps.readTemperatureC();
// FullStringF
FullStringF = "Barometer = " + String(pressure,2) + " Altitude Meters = "
+ String(altitude,2) + " Temperature Celsius = "
+ String(temperature,2) + "\r\n";
// FullStringF Bluetooth Serial + Serial
for(int i = 0; i < FullStringF.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringF.c_str()[i]);
// Serial
Serial.write(FullStringF.c_str()[i]);
}
}
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();
// FullStringA
FullStringA = "TVOCs = " + String(CCS811TVOC,2) + " eCO2 = "
+ String(CCS811CO2,2) + "\r\n";
// FullStringA Bluetooth Serial + Serial
for(int i = 0; i < FullStringA.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringA.c_str()[i]);
// Serial
Serial.write(FullStringA.c_str()[i]);
}
}
getGPS.ino
// GPS Receiver
// Setup GPS
void setupGPS() {
// Setup GPS
tGPS.begin( 9600 , SERIAL_8N1 , gpsRXPIN , gpsTXPIN );
}
// isGPS
void isGPS(){
// Receives NEMA data from GPS receiver
// This sketch displays information every time a new sentence is correctly encoded
while ( tGPS.available() > 0)
if (gps.encode( tGPS.read() ))
{
// GPS Vector Pointer Target
displayInfo();
// GPS Date, Time, Speed, Altitude
displayDTS();
}
if (millis() > 5000 && gps.charsProcessed() < 10)
{
while(true);
}
}
// GPS Vector Pointer Target
void displayInfo(){
// Location
if (gps.location.isValid())
{
// Latitude
TargetLat = gps.location.lat();
// Longitude
TargetLon = gps.location.lng();
// GPS Status 2
GPSSt = "Yes";
// FullStringG
FullStringG = "Latitude = " + String(TargetLat) + " Longitude = "
+ String(TargetLon) + "\r\n";
// FullStringG Bluetooth Serial + Serial
for(int i = 0; i < FullStringG.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringG.c_str()[i]);
// Serial
Serial.write(FullStringG.c_str()[i]);
}
}
else
{
// GPS Status 0
GPSSt = "No";
}
}
// GPS Date, Time, Speed, Altitude
void displayDTS(){
// Date
TargetDat = "";
if (gps.date.isValid())
{
// Date
// Year
TargetDat += String(gps.date.year(), DEC);
TargetDat += "/";
// Month
TargetDat += String(gps.date.month(), DEC);
TargetDat += "/";
// Day
TargetDat += String(gps.date.day(), DEC);
// FullStringH
FullStringH = "Date = " + String(TargetDat) + "\r\n";
// FullStringH Bluetooth Serial + Serial
for(int i = 0; i < FullStringH.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringH.c_str()[i]);
// Serial
Serial.write(FullStringH.c_str()[i]);
}
}
// Time
TargetTim = "";
if (gps.time.isValid())
{
// Time
// Hour
TargetTim += String(gps.time.hour(), DEC);
TargetTim += ":";
// Minute
TargetTim += String(gps.time.minute(), DEC);
TargetTim += ":";
// Secound
TargetTim += String(gps.time.second(), DEC);
// FullStringH
FullStringH = "Time = " + String(TargetTim) + "\r\n";
// FullStringH Bluetooth Serial + Serial
for(int i = 0; i < FullStringH.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringH.c_str()[i]);
// Serial
Serial.write(FullStringH.c_str()[i]);
}
}
// Speed
TargetSMS = "";
TargetSKH = "";
if (gps.speed.isValid())
{
// Speed
// M/S
int x = gps.speed.mps();
TargetSMS = String( x, DEC);
// Km/h
int y = gps.speed.kmph();
TargetSKH = String( y, DEC);
// FullStringH
FullStringH = "Speed = " + String(TargetSMS) + "\r\n";
// FullStringH Bluetooth Serial + Serial
for(int i = 0; i < FullStringH.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringH.c_str()[i]);
// Serial
Serial.write(FullStringH.c_str()[i]);
}
}
// Altitude
TargetALT = "";
if (gps.altitude.isValid())
{
// Altitude
// Meters
int z = gps.altitude.meters();
TargetALT = String( z, DEC);
// FullStringH
FullStringH = "Altitude = " + String(TargetALT) + "\r\n";
// FullStringH Bluetooth Serial + Serial
for(int i = 0; i < FullStringH.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringH.c_str()[i]);
// Serial
Serial.write(FullStringH.c_str()[i]);
}
}
}
getMagnetometer.ino
// Magnetometer
// Setup Magnetometer
void setupMag() {
// Setup Magnetometer
mag.init();
// Default
mag.enableDefault();
}
// Magnetometer
void isMag() {
// Magnetometer
mag.read();
// Magnetometer x, y, z
magX = mag.m.x;
magY = mag.m.y;
magZ = mag.m.z;
// FullString D
FullStringD = "Magnetometer X = " + String(magX) + " Magnetometer Y = "
+ String(magY) + " Magnetometer Z = " + String(magZ)
+ "\r\n";
// FullStringD Bluetooth Serial + Serial
for(int i = 0; i < FullStringD.length(); i++)
{
// Bluetooth Serial
SerialBT.write(FullStringD.c_str()[i]);
// Serial
Serial.write(FullStringD.c_str()[i]);
}
}
setup.ino
// Setup
void setup()
{
// Serial Begin
Serial.begin(9600);
Serial.println("Starting BLE work!");
// Bluetooth Serial
SerialBT.begin("Don Luc Electronics");
Serial.println("Bluetooth Started! Ready to pair...");
// Give display time to power on
delay(100);
// Wire - Inialize I2C Hardware
Wire.begin();
// Give display time to power on
delay(100);
// SparkFun BME280 - Temperature, Humidity, Barometric Pressure, and Altitude
myBME280.begin();
// CCS811 - eCO2 & tVOC
myCCS811.begin();
// Setup IMU
setupIMU();
// Setup Magnetometer
setupMag();
// Setup Barometer
isSetupBarometer();
// GPS Receiver
// Setup GPS
setupGPS();
// Initialize digital pin LED_BUILTIN as an output
pinMode(LED_BUILTIN, OUTPUT);
// Turn the LED on HIGH
digitalWrite(LED_BUILTIN, HIGH);
}
——
Arduino Uno
RX – Digital 3
TX – Digital 2
VIN – +3.3V
GND – GND
——
DL2307Mk05pr.ino
/* ***** Don Luc Electronics © *****
Software Version Information
Project #26 - Radio Frequency - Bluetooth GPS Receiver GP-20U7 - Mk24
26-24
DL2307Mk05pr.ino
1 x Arduino Uno
1 x SparkFun RedBoard Qwiic
1 x SparkFun Bluetooth Mate Silver
1 x SparkFun BME280 - Temperature, Humidity, Barometric Pressure, and Altitude
1 x SparkFun Air Quality Breakout - CCS811
1 x Pololu AltIMU-10 v5
1 x GPS Receiver - GP-20U7
1 x Lithium Ion Battery - 85mAh
2 x SparkFun Cerberus USB Cable
*/
// Include the Library Code
// Software Serial
#include <SoftwareSerial.h>
// Software Serial
// TX-O pin of bluetooth mate, Arduino D2
int bluetoothTx = 2;
// RX-I pin of bluetooth mate, Arduino D3
int bluetoothRx = 3;
// Bluetooth
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
// BTA
//String BTA = "0006664FDC9E";
// Software Version Information
String sver = "26-24";
void loop() {
// isBluetooth
isBluetooth();
}
getBluetooth.ino
// Bluetooth
// Setup Bluetooth
void isSetupBluetooth(){
// Setup Bluetooth
// Begin the serial monitor at 9600bps
Serial.begin(9600);
// Bluetooth
// The Bluetooth Mate defaults to 115200bps
bluetooth.begin(115200);
// Print three times individually
bluetooth.print("$");
bluetooth.print("$");
bluetooth.print("$");
// Enter command mode
// Short delay, wait for the Mate to send back CMD
delay(100);
// Temporarily Change the baudrate to 9600, no parity
bluetooth.println("U,9600,N");
// 115200 can be too fast at times for NewSoftSerial to relay the data reliably
// Start bluetooth serial at 9600
bluetooth.begin(9600);
}
// isBluetooth
void isBluetooth() {
// If the bluetooth sent any characters
if(bluetooth.available())
{
// Send any characters the bluetooth prints to the serial monitor
Serial.print((char)bluetooth.read());
}
// If stuff was typed in the serial monitor
if(Serial.available())
{
// Send any characters the Serial monitor prints to the bluetooth
bluetooth.print((char)Serial.read());
}
}
setup.ino
// Setup
void setup()
{
// Setup Bluetooth
isSetupBluetooth();
}
——
People can contact us: https://www.donluc.com/?page_id=1927
Technology Experience
- Programming Language
- Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi,Espressif, etc…)
- IoT
- Wireless (Radio Frequency, Bluetooth, WiFi, Etc…)
- Robotics
- Camera and Video Capture Receiver Stationary, Wheel/Tank and Underwater Vehicle
- Unmanned Vehicles Terrestrial and Marine
- Machine Learning
- RTOS
- Research & Development (R & D)
Instructor, E-Mentor, STEAM, and Arts-Based Training
- Programming Language
- IoT
- PIC Microcontrollers
- Arduino
- Raspberry Pi
- Espressif
- Robotics
Follow Us
Luc Paquin – Curriculum Vitae – 2023
https://www.donluc.com/luc/
Web: https://www.donluc.com/
Facebook: https://www.facebook.com/neosteam.labs.9/
YouTube: https://www.youtube.com/@thesass2063
Twitter: https://twitter.com/labs_steam
Pinterest: https://www.pinterest.com/NeoSteamLabs/
Instagram: https://www.instagram.com/neosteamlabs/
Don Luc