Nora Mendoza
Published

Summer Bridge NM

I am a participant in the 2022 STEM Core Summer Bridge Program and we learned IoT, programming in C and C++ in this project.

BeginnerFull instructions provided14
Summer Bridge NM

Things used in this project

Hardware components

Argon
Particle Argon
×1
Base Shield V2
Seeed Studio Base Shield V2
×1
Grove - Sunlight Sensor
Seeed Studio Grove - Sunlight Sensor
×1
Grove - 6-Axis Accelerometer&Gyroscope
Seeed Studio Grove - 6-Axis Accelerometer&Gyroscope
×1
Grove - CO2 & Temperature & Humidity Sensor (SCD30)
Seeed Studio Grove - CO2 & Temperature & Humidity Sensor (SCD30)
×1
NeoPixel Ring: WS2812 5050 RGB LED
Adafruit NeoPixel Ring: WS2812 5050 RGB LED
×1

Software apps and online services

VS Code
Microsoft VS Code

Story

Read more

Schematics

Circuit Breadboard

Circuit Schematic

Code

Neopixel

C/C++
/*
 * Project NEO
 * Description:
 * Author:
 * Date:
 */

#include "neopixel.h"
#include "colors.h"
#include "math.h"

#define PIXEL_PIN A2
#define PIXEL_COUNT 16
#define PIXEL_TYPE WS2812B

Adafruit_NeoPixel pixel(PIXEL_COUNT, PIXEL_PIN ,PIXEL_TYPE);

int i,pixelNum, color;
bool buttonState;
float bright, t, freq;

SYSTEM_MODE(SEMI_AUTOMATIC);
SYSTEM_THREAD(ENABLED);




// setup() runs once, when the device is first turned on.
void setup() {
  // Put initialization like pinMode and begin functions here.
  pinMode(D10,INPUT);
freq = 1/3.0;
pixel.begin();
pixel.setPixelColor(5, red);
pixel.show();
}
// loop() runs over and over again, as quickly as it can execute.
void loop() {
  // The core of your code will likely live here.
  pixel.setBrightness(bright);
  buttonState = digitalRead(D10);
  while(buttonState== true) {
    t = millis() / 1000.0;
    bright = 127.5 * sin(2* M_PI *freq *t) +127.5;
    i++;
  pixelNum = i % 14;
  color = i % 6;
  pixel.setPixelColor(pixelNum, rainbow[color]);
  pixel.show(); delay (100);
   buttonState = digitalRead(D10);
    
  }

  
 

}

Motion

C/C++
/*
 * Project Motion
 * Description: Learn to use accelerometer
 * Author: 
 * Date:
 */

#include <ADXL345.h>

int x, y, z;
float ax, ay, az;
float pitch, roll;

ADXL345 adxl; 

    SYSTEM_MODE(SEMI_AUTOMATIC);
    SYSTEM_THREAD(ENABLED);

void setup() {
    Serial.begin(9600);
    adxl.powerOn();
}

void loop() {
    //read the accelerometer values and store them in variables  x,y,z    
    adxl.readXYZ(&x, &y, &z); 
    Serial.printf("values of X = %i, Y = %i, Z = %i\n",x,y,z);

    // Get acceleration in g's
    double xyz[3];
    adxl.getAcceleration(xyz);
    ax = xyz[0];
    ay = xyz[1];
    az = xyz[2];
    pitch = asin(ax)*(360/(2*M_PI));
    roll = atan2(ay,az)*(360/(2*M_PI));
    Serial.printf("values of X = %0.2f, Y = %0.2f, Z = %0.2f, pitch = %0.2f, roll = %0.2f\n",ax,ay,az,pitch,roll);

    delay(500);

}

The Cloud

C/C++
/******************************************************/
//       THIS IS A GENERATED FILE - DO NOT EDIT       //
/******************************************************/

#include "Particle.h"
#line 1 "c:/Users/STEMCore2/Documents/stemcore/summerbridge-nmendoza7/TheCloud/src/TheCloud.ino"
/*
 * Project TheCloud
 * Description: Starter Code for Adafruit.io
 * Author: Brian Rashap
 * Date: 6-Aug-2020
 */

// Need to install library Adafruit_MQTT
#include <Adafruit_MQTT.h>
#include "Adafruit_MQTT/Adafruit_MQTT.h" 
#include "Adafruit_MQTT/Adafruit_MQTT_SPARK.h" 

// We will create credentials.h using the below
#include "credentials.h"
#include <Grove_Temperature_And_Humidity_Sensor.h>
  
  
  

/************ Global State (you don't need to change this!) ***   ***************/ 
void setup();
void loop();
void MQTT_connect();
#line 21 "c:/Users/STEMCore2/Documents/stemcore/summerbridge-nmendoza7/TheCloud/src/TheCloud.ino"
TCPClient TheClient; 

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details. 
Adafruit_MQTT_SPARK mqtt(&TheClient,AIO_SERVER,AIO_SERVERPORT,AIO_USERNAME,AIO_KEY); 




/****************************** Feeds ***************************************/ 
// Setup Feeds to publish or subscribe 
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname> 
Adafruit_MQTT_Publish mqttTemp = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/TempF");
Adafruit_MQTT_Publish mqttHum = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Humidity");
Adafruit_MQTT_Publish mqttLight = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/LightLevel");
Adafruit_MQTT_Subscribe mqttLED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");

/************Declare Variables*************/
unsigned long last, lastTime;
float h,t,f;
int light;
int ledOn;

#define DHTPIN 	D2     // set pin

SYSTEM_THREAD (ENABLED);
SYSTEM_MODE (SEMI_AUTOMATIC);

DHT dht(DHTPIN);


void setup() {
  Serial.begin(9600);
 
  waitFor(Serial.isConnected, 15000); //wait for Serial Monitor to startup

  //Connect to WiFi without going to Particle Cloud
  WiFi.connect();
  while(WiFi.connecting()) {
    Serial.printf(".");
  }

  dht.begin();
  pinMode(A0,INPUT);
  pinMode(D4,OUTPUT);


  // Setup MQTT subscription for onoff feed.
  mqtt.subscribe(&mqttLED);
}

void loop() {
  // Validate connected to MQTT Broker
  MQTT_connect();

  // Ping MQTT Broker every 2 minutes to keep connection alive
  if ((millis()-last)>120000) {
      Serial.printf("Pinging MQTT \n");
      if(! mqtt.ping()) {
        Serial.printf("Disconnecting \n");
        mqtt.disconnect();
      }
      last = millis();
  }

  // publish to cloud every 30 seconds
  f = dht.getTempFarenheit();
  t = dht.getTempCelcius();
  h = dht.getHumidity();
  light = analogRead(A0);


  if((millis()-lastTime > 10000)) {
    if(mqtt.Update()) {
      mqttTemp.publish(f);
      mqttHum.publish(h);
      mqttLight.publish(light);
      Serial.printf("Publishing %0.2f \n",f); 
      } 
    lastTime = millis();
  }


  // this is our 'wait for incoming subscription packets' busy subloop
  Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(1000))) {
    if (subscription == &mqttLED) {
      ledOn= atoi((char *)mqttLED.lastread);
      analogWrite(D4, ledOn);
          Serial.printf("Received %i from Adafruit.io feed LED \n",ledOn);
    }
  }
}

// Function to connect and reconnect as necessary to the MQTT server.
void MQTT_connect() {
  int8_t ret;
 
  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }
 
  Serial.print("Connecting to MQTT... ");
 
  while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
       Serial.printf("%s\n",(char *)mqtt.connectErrorString(ret));
       Serial.printf("Retrying MQTT connection in 5 seconds..\n");
       mqtt.disconnect();
       delay(5000);  // wait 5 seconds
  }
  Serial.printf("MQTT Connected!\n");
}

Credits

Nora Mendoza

Nora Mendoza

1 project • 2 followers

Comments

Add projectSign up / Login