Vicky Lizardi-Lobb
Published

Summer Bridge VLL

Working in CNM Stem Cohort Community and getting a crash course in IoT. I've learned how to code in C/C++ and create an IoT prototype.

BeginnerWork in progress20 hours16
Summer Bridge VLL

Things used in this project

Hardware components

Argon
Particle Argon
×1
Base Shield V2
Seeed Studio Base Shield V2
×1
Grove - Light Sensor
Seeed Studio Grove - Light Sensor
×1
Grove - 6-Axis Accelerometer&Gyroscope
Seeed Studio Grove - 6-Axis Accelerometer&Gyroscope
×1
Grove - Temperature, Humidity, Pressure and Gas Sensor (BME680)
Seeed Studio Grove - Temperature, Humidity, Pressure and Gas Sensor (BME680)
×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; //use float instead of int b/c working in fractions

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();
  i = 0;
}

// loop() runs over and over again, as quickly as it can execute.
void loop() {
  // The core of your code will likely live here.
 
  buttonState = digitalRead(D10);
  while(buttonState == true) {
    t = millis() / 1000.0;
    bright = 127.5 * sin(2 * M_PI *freq *t) + 127.5;
    pixel.setBrightness(bright);
    i++;
    pixelNum = i % 14;
    color = i % 6;
    pixel.setPixelColor(pixelNum, rainbow[color]);
    pixel.show();
    delay(25);
    buttonState = digitalRead(D10);
  }
  

}

Motion

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

#include <ADXL345.h>
#include "math.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]; //double like a float but with higher precision
    adxl.getAcceleration(xyz);
    ax = xyz[0];
    ay = xyz[1];
    az = xyz[2];
    pitch = asin(ax)*(360.0/(2*M_PI));
    roll = atan2(ay,az) *(360.0/(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++
/*
 * 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>

#define DHTPIN D2 //set pin
SYSTEM_THREAD(ENABLED);

/************ Global State (you don't need to change this!) ***   ***************/ 
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;
DHT dht(DHTPIN); 
float h,t,f;
int light;
int ledOn;

SYSTEM_MODE(SEMI_AUTOMATIC);

void setup() {
  Serial.begin(9600);
  Serial.printf("DHT11 Begin!!!");
  dht.begin();
  pinMode(A0, INPUT);
  pinMode(D4, OUTPUT);

  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(".");
  }

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

void loop() {
  // Validate connected to MQTT Broker
  MQTT_connect();
  delay(5000);
  h = dht.getHumidity();
  t = dht.getTempCelcius();
  f = dht.getTempFarenheit();
  light = analogRead(A0);

  if (isnan(h) || isnan(t) || isnan(f)){
    Serial.printf("Failed to read from DHT11 sensor!\n");
    return;
  }
  Serial.printf("Temp(C): %0.2f, Temp(F): %0.2f, Humid: %0.2f\n", t,f,h);


// 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 10 seconds
 
  //Check if any read failed

  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

Vicky Lizardi-Lobb

Vicky Lizardi-Lobb

1 project • 2 followers
I am studying Engineering and Computer Science at CNM and UNM while working as President of the Rio Rancho United Soccer Club.

Comments

Add projectSign up / Login