Cesar J. Silva
Published

Matrix Remote (IoT Midterm 1)

A Matrix themed remote that connects to wireless lights and reads temperature, humidity and button presses with an OLED screen.

BeginnerShowcase (no instructions)38
Matrix Remote (IoT Midterm 1)

Things used in this project

Hardware components

TinyScreen-OLED TinyShield
TinyCircuits TinyScreen-OLED TinyShield
×1
Temp&Humi&Barometer Sensor (BME280)
Seeed Studio Temp&Humi&Barometer Sensor (BME280)
×1
Gravity:Digital Push Button (Yellow)
DFRobot Gravity:Digital Push Button (Yellow)
×1
Photon 2
Particle Photon 2
×1
Breadboard (generic)
Breadboard (generic)
×1

Software apps and online services

Visual Studio Code Extension for Arduino
Microsoft Visual Studio Code Extension for Arduino

Hand tools and fabrication machines

Hot glue gun (generic)
Hot glue gun (generic)
Laser cutter (generic)
Laser cutter (generic)

Story

Read more

Code

IoT_Midterm_1_Silva

C/C++
Source code for my first IoT midterm.
/* 
 * Project: IoT_Midterm_1_Silva
 * Author: Cesar J. Silva
 * Date: July 1, 2025
 * For comprehensive documentation and examples, please visit:
 * https://docs.particle.io/firmware/best-practices/firmware-template/
 */

// Include Particle Device OS APIs
#include "Particle.h"
#include "Adafruit_BME280.h"
#include "Adafruit_SSD1306.h"
#include "Adafruit_GFX.h"
#include "IoTClassroom_CNM.h"
#include "hue.h"
#include "Colors.h"


SYSTEM_MODE(MANUAL);
Adafruit_BME280 bme;
bool showDigitalRain;
bool showrealworldtext;
bool sendHueCommand;
bool status;
bool buttonState;
bool AutoOrManual;
bool onOff;
float tempC;
float tempF;
float humidRH;
const int OLED_RESET = -1;
Adafruit_SSD1306 display(OLED_RESET);
const int ABULB = 1;
const int BBULB = 2;
const int CBULB = 3;
const int DBULB = 4;
const int EBULB = 5;
const int FBULB = 6;
const int AWEMO = 0;
const int BWEMO = 1;
const int CWEMO = 2;
const int DWEMO = 4;
const int EWEMO = 5;
const int hexAddress = 0x76;
const int REDPILL = D19;
const int BLUEPILL = D18;
Button matrixButton(D18);
Button realworldButton(D19);
int position;
int color;
int y, x;

void setup() {
  Serial.begin(9600);
  waitFor (Serial.isConnected, 10000);

WiFi.on();
WiFi.clearCredentials();
WiFi.setCredentials("IoTNetwork");

WiFi.connect();
while(WiFi.connecting()){
  Serial.printf(".");
}
Serial.printf("\n\n");
position = 255;

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 47);
  display.printf("1 1 01 001 01;? 0101; 070 1 ;1 7 ? 0 1!0 019 ;!09 ?917 01;0!01?0717; 1! 0 0<1 01;010.1;0 10, 1.1.01 9 0<!?1! 19100710!981>79871 0 0 1 0 0:1;0 1? 09 0 9 1 91!0 1 < 1 1 !0\n");
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.printf("NEBUCHANDNEZZAR SYSTEM: ON_\n");
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.display();
  display.clearDisplay();



  status = bme.begin(hexAddress);
  if (status == false){
    Serial.printf("BME280 at address 0x%02X failed to start", hexAddress);
  }
  sendHueCommand = true;
}

void loop() {

  display.clearDisplay();

  
  if (matrixButton.isClicked()){
    showDigitalRain = true;
    showrealworldtext = false;
    
  }

  if (realworldButton.isClicked()){
    showDigitalRain = false;
    showrealworldtext = true;
   
  }
if (showDigitalRain == true){
    display.setCursor(0, 0);
    display.printf("1 1 01 001 01;? 0101; 070 1 ;1 7 ? 0 1!0 019 ;!09 ?917 01;0!01?0717; 1! 0 0<1 01;010.1;0 10, 1.1.01 9 0<!?1! 19100710!981>7987\n");
    display.display();
}

if(showrealworldtext ==true){
    display.setCursor(0, 0);
    display.printf("NEBUCHANDNEZZAR SYSTEM: ON_\n");
    display.display();
}

  tempC = bme.readTemperature();
  // convert tempC to tempF
  tempF = (tempC * 1.8) + 32;
  Serial.printf("temperature: %0.1f\n", tempF);
  // show humidity
  humidRH = bme.readHumidity();
  Serial.printf("TEMP = %0.1f, HUMID = %0.1f\n", tempF, humidRH);
  display.drawLine(0, 48, 128, 48, WHITE);
  display.setCursor(0,49);
  display.printf("TEMP = %0.1f, HUMID = %0.1f\n", tempF, humidRH);
  display.display();

  if ((tempF <= 71.5)){
    Serial.printf("Setting color of bulb %i to color HueBlue\n", ABULB);
    setHue(ABULB, true, HueBlue, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueRed\n", BBULB);
    setHue(BBULB, true, HueRed, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueBlue\n", CBULB);
    setHue(CBULB, true, HueBlue, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueRed\n", DBULB);
    setHue(DBULB, true, HueRed, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueBlue\n", EBULB);
    setHue(EBULB, true, HueBlue, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueRed\n", FBULB);
    setHue(FBULB, true, HueRed, position, 255);
    Serial.printf("position = %i\n", position);
  }
  else{
     Serial.printf("Setting color of bulb %i to color HueGreen\n", ABULB);
    setHue(ABULB, true, HueGreen, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueGreen\n", BBULB);
    setHue(BBULB, true, HueGreen, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueGreen\n", CBULB);
    setHue(CBULB, true, HueGreen, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueGreen\n", DBULB);
    setHue(DBULB, true, HueGreen, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueGreen\n", EBULB);
    setHue(EBULB, true, HueGreen, position, 255);
    Serial.printf("position = %i\n", position);

     Serial.printf("Setting color of bulb %i to color HueGreen\n", FBULB);
    setHue(FBULB, true, HueGreen, position, 255);
    Serial.printf("position = %i\n", position);
  }
  
  if ((tempF >= 71.5)){

    wemoWrite(AWEMO, HIGH);
    wemoWrite(BWEMO, HIGH);
    wemoWrite(CWEMO, HIGH);
    wemoWrite(DWEMO, HIGH);
    wemoWrite(EWEMO, HIGH);
  }
  else{
    wemoWrite(AWEMO, LOW);
    wemoWrite(BWEMO, LOW);
    wemoWrite(CWEMO, LOW);
    wemoWrite(DWEMO, LOW);
    wemoWrite(EWEMO, LOW);
  }
}

Credits

Cesar J. Silva
3 projects • 6 followers

Comments