본문 바로가기
SSAFY/관통 PJT

관통 PJT #공정코드

by ballbig 2024. 5. 23.
728x90

 

red

 

더보기
더보기
#include <WiFi.h>
#include "EspMQTTClient.h"
#include <FirebaseESP32.h>
#include "time.h"
#include <Stepper.h>

#define WIFI_SSID "Galaxy"
#define WIFI_PASSWORD "12345678"
#define FIREBASE_HOST "[firebase url]" //url
#define FIREBASE_AUTH "[firebase password]"   //password

// ULN2003 Motor Driver Pins
#define IN1 19
#define IN2 18
#define IN3 5
#define IN4 17

//mqtt
EspMQTTClient client(
  WIFI_SSID,    // SSID
  WIFI_PASSWORD,      // Password
  "192.168.19.207",  // MQTT Broker server IP (=ras ip)
  "MQTTUsername",   
  "MQTTPassword",   
  "RedClient",     // Device name, used for identifying the device
  1883              // MQTT Broker port
);

const char *topic = "redESP";
const char *topic2 = "red";
const long  gmtOffset_sec = 3600;
const int   daylightOffset_sec = 3600;
const int stepsPerRevolution = 2048;  // change this to fit the number of steps per revolution
String nowTime;

FirebaseData firebaseData;
FirebaseJson json;
FirebaseConfig config;
FirebaseAuth auth;

Stepper myStepper(stepsPerRevolution, IN1, IN3, IN2, IN4);

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("No time available (yet)");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}

void timeavailable(struct timeval *t)
{
  Serial.println("Got time adjustment from NTP!");
  printLocalTime();
}

void setup()
{
  myStepper.setSpeed(10);
  Serial.begin(115200);

  
  Serial.printf("Connecting to %s ", WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  printLocalTime();     // it will take some time to sync time :)

  //mqtt
  Serial.println("Mqtt start");
  client.enableDebuggingMessages(); 
  client.enableHTTPWebUpdater(); 
  client.enableOTA(); 
  client.enableLastWillMessage("TestClient/lastwill", "I am going offline");

  //wifi
  int wifi_attempts = 0;
  const int max_wifi_attempts = 30; // Adjust this as needed
  while (WiFi.status() != WL_CONNECTED && wifi_attempts < max_wifi_attempts) {
    Serial.print(".");
    delay(500);
    wifi_attempts++;
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println();
    Serial.print("Connected with IP: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println();
    Serial.println("Failed to connect to WiFi.");
  }

  //firebase
  Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
  config.database_url = FIREBASE_HOST;
  config.signer.tokens.legacy_token = FIREBASE_AUTH;

  Firebase.begin(&config, &auth);

  //working pin
  pinMode(LED_BUILTIN, OUTPUT);
}

void modifyLastSecond() {
  String dateTime = nowTime;
  int lastColonPos = dateTime.lastIndexOf(':');
  String secondsStr = dateTime.substring(lastColonPos + 1);
  int seconds = secondsStr.toInt();
  seconds++;
  if (seconds < 10) {
    secondsStr = "0" + String(seconds);
  } else {
    secondsStr = String(seconds);
  }
  String newDateTime = dateTime.substring(0, lastColonPos + 1) + secondsStr;
  Serial.println(newDateTime);

  nowTime = newDateTime;
}

void writeData()
{
  modifyLastSecond();
  String write_key = nowTime;

  // Create the programStatus JSON object
  FirebaseJson programStatus;
  programStatus.set("area", "red");
  programStatus.set("status", "end");

  // Write to Firebase
  if (Firebase.setJSON(firebaseData, "/robotStatus/" + write_key, programStatus)) {
    Serial.println("Data written to Firebase successfully");
  } else {
    Serial.println("Failed to write data to Firebase");
    Serial.println("Reason: " + firebaseData.errorReason());
  }
}

void working(){
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(1000);
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(1000);
  Serial.print("working done!!");
  writeData();
}

void onConnectionEstablished(){
  client.subscribe(topic2, [](const String & payload) {
    Serial.println(payload);
    nowTime = payload;
    working();
  });
}

void loop()
{
  client.loop();
}

 

yellow
더보기
더보기
#include <WiFi.h>
#include "EspMQTTClient.h"
#include <FirebaseESP32.h>
#include "time.h"

#define WIFI_SSID "Galaxy"
#define WIFI_PASSWORD "12345678"
#define FIREBASE_HOST "[firebase url]" //url
#define FIREBASE_AUTH "[firebase password]"   //password


//mqtt
EspMQTTClient client(
  WIFI_SSID,    // SSID
  WIFI_PASSWORD,      // Password
  "192.168.19.207",  // MQTT Broker server IP (=ras ip)
  "MQTTUsername",   
  "MQTTPassword",   
  "YellowClient",     // Device name, used for identifying the device
  1883              // MQTT Broker port
);

char *topic = "yellowESP";
char *topic2 = "yellow";

const long  gmtOffset_sec = 3600;
const int   daylightOffset_sec = 3600;
const int ledChannel1 = 0;
const int ledChannel2 = 1;
const int pwmFreq = 5000;
const int pwmResolution = 8; // 8-bit resolution
String nowTime;

FirebaseData firebaseData;
FirebaseJson json;
FirebaseConfig config;
FirebaseAuth auth;

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("No time available (yet)");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}

void timeavailable(struct timeval *t)
{
  Serial.println("Got time adjustment from NTP!");
  printLocalTime();
}

void setup()
{
  ledcSetup(ledChannel1, pwmFreq, pwmResolution); // 채널1 설정
  ledcSetup(ledChannel2, pwmFreq, pwmResolution); // 채널2 설정
  ledcAttachPin(16, ledChannel1);
  ledcAttachPin(17, ledChannel2);
  Serial.begin(115200);
  
  Serial.printf("Connecting to %s ", WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  printLocalTime();     // it will take some time to sync time :)

  //mqtt
  Serial.println("Mqtt start");
  client.enableDebuggingMessages(); 
  client.enableHTTPWebUpdater(); 
  client.enableOTA(); 
  client.enableLastWillMessage("TestClient/lastwill", "I am going offline");

  //wifi
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  
  int wifi_attempts = 0;
  const int max_wifi_attempts = 30; // Adjust this as needed
  while (WiFi.status() != WL_CONNECTED && wifi_attempts < max_wifi_attempts) {
    Serial.print(".");
    delay(500);
    wifi_attempts++;
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println();
    Serial.print("Connected with IP: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println();
    Serial.println("Failed to connect to WiFi.");
  }

  //firebase
  Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
  config.database_url = FIREBASE_HOST;
  config.signer.tokens.legacy_token = FIREBASE_AUTH;

  Firebase.begin(&config, &auth);

  //working pin
  pinMode(LED_BUILTIN, OUTPUT);
}

void modifyLastSecond() {
  String dateTime = nowTime;
  int lastColonPos = dateTime.lastIndexOf(':');
  String secondsStr = dateTime.substring(lastColonPos + 1);
  int seconds = secondsStr.toInt();
  seconds++;
  if (seconds < 10) {
    secondsStr = "0" + String(seconds);
  } else {
    secondsStr = String(seconds);
  }
  String newDateTime = dateTime.substring(0, lastColonPos + 1) + secondsStr;
  Serial.println(newDateTime);

  nowTime = newDateTime;
}

void writeData()
{
  modifyLastSecond();
  String write_key = nowTime;

  // Create the programStatus JSON object
  FirebaseJson programStatus;
  programStatus.set("area", "yellow");
  programStatus.set("status", "end");

  // Write to Firebase
  if (Firebase.setJSON(firebaseData, "/robotStatus/" + write_key, programStatus)) {
    Serial.println("Data written to Firebase successfully");
  } else {
    Serial.println("Failed to write data to Firebase");
    Serial.println("Reason: " + firebaseData.errorReason());
  }
}

void working(){
    ledcWrite(ledChannel1, 0);     // 채널1(0번 핀) 0 출력
    ledcWrite(ledChannel2, 225);   // 채널2(2번 핀) 225 출력 (3V)
    delay(100);                    // 100ms 동안 대기
    ledcWrite(ledChannel1, 0);     // 채널1(0번 핀) 0 출력
    ledcWrite(ledChannel2, 150);    // 채널2(2번 핀) 80 출력
    delay(6000);                    // 100ms 동안 대기
    ledcWrite(ledChannel1, 0);     // 채널1(0번 핀) 0 출력
    ledcWrite(ledChannel2, 0);    // 채널2(2번 핀) 80 출력
    delay(500);                    // 100ms 동안 대기

  Serial.print("working done!!");
  //printLocalTime();
  writeData();
}

void onConnectionEstablished(){
  client.subscribe(topic2, [](const String & payload) {
    Serial.println(payload);
    nowTime = payload;
    working();
  });
}

void loop()
{
  client.loop();
}

 

 

orange
더보기
더보기
#include <WiFi.h>
#include "EspMQTTClient.h"
#include <FirebaseESP32.h>
#include "time.h"
#include "sntp.h"
#include <Stepper.h>

#define WIFI_SSID "Galaxy"
#define WIFI_PASSWORD "12345678"
#define FIREBASE_HOST "[firebase url]" //url
#define FIREBASE_AUTH "[firebase password]"   //password

// ULN2003 Motor Driver Pins
#define IN1 19
#define IN2 18
#define IN3 5
#define IN4 17

//mqtt
EspMQTTClient client(
  WIFI_SSID,    // SSID
  WIFI_PASSWORD,      // Password
  "192.168.19.207",  // MQTT Broker server IP (=ras ip)
  "MQTTUsername",   
  "MQTTPassword",   
  "OrangeClient",     // Device name, used for identifying the device
  1883              // MQTT Broker port
);

const char *topic = "orangeESP";
const char *topic2 = "orange";
const char* ntpServer1 = "pool.ntp.org";
const char* ntpServer2 = "time.nist.gov";
const long  gmtOffset_sec = 3600;
const int   daylightOffset_sec = 3600;
const int stepsPerRevolution = 800;  // change this to fit the number of steps per revolution
String nowTime;

FirebaseData firebaseData;
FirebaseJson json;
FirebaseConfig config;
FirebaseAuth auth;

Stepper myStepper(stepsPerRevolution, IN1, IN3, IN2, IN4);

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("No time available (yet)");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}

void timeavailable(struct timeval *t)
{
  Serial.println("Got time adjustment from NTP!");
  printLocalTime();
}

void setup()
{
  myStepper.setSpeed(10);
  Serial.begin(115200);

  //time
  sntp_set_time_sync_notification_cb( timeavailable );
  sntp_servermode_dhcp(1);    // (optional)
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer1, ntpServer2);
  
  Serial.printf("Connecting to %s ", WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  printLocalTime();     // it will take some time to sync time :)

  //mqtt
  Serial.println("Mqtt start");
  client.enableDebuggingMessages(); 
  client.enableHTTPWebUpdater(); 
  client.enableOTA(); 
  client.enableLastWillMessage("TestClient/lastwill", "I am going offline");

  //wifi
  int wifi_attempts = 0;
  const int max_wifi_attempts = 30; // Adjust this as needed
  while (WiFi.status() != WL_CONNECTED && wifi_attempts < max_wifi_attempts) {
    Serial.print(".");
    delay(500);
    wifi_attempts++;
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println();
    Serial.print("Connected with IP: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println();
    Serial.println("Failed to connect to WiFi.");
  }

  //firebase
  Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
  config.database_url = FIREBASE_HOST;
  config.signer.tokens.legacy_token = FIREBASE_AUTH;

  Firebase.begin(&config, &auth);

  //working pin
  pinMode(16, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(0, OUTPUT);
  pinMode(2, OUTPUT);
  
  digitalWrite(4, LOW);
  digitalWrite(0, LOW);
  digitalWrite(2, LOW);
}

void modifyLastSecond() {
  String dateTime = nowTime;
  int lastColonPos = dateTime.lastIndexOf(':');
  String secondsStr = dateTime.substring(lastColonPos + 1);
  int seconds = secondsStr.toInt();
  seconds++;
  if (seconds < 10) {
    secondsStr = "0" + String(seconds);
  } else {
    secondsStr = String(seconds);
  }
  String newDateTime = dateTime.substring(0, lastColonPos + 1) + secondsStr;
  Serial.println(newDateTime);

  nowTime = newDateTime;
}

void writeData()
{
  modifyLastSecond();
  String write_key = nowTime;

  // Create the programStatus JSON object
  FirebaseJson programStatus;
  programStatus.set("area", "orange");
  programStatus.set("status", "end");

  // Write to Firebase
  if (Firebase.setJSON(firebaseData, "/robotStatus/" + write_key, programStatus)) {
    Serial.println("Data written to Firebase successfully");
  } else {
    Serial.println("Failed to write data to Firebase");
    Serial.println("Reason: " + firebaseData.errorReason());
  }
}

void working(){
    Serial.println("clockwise");
    myStepper.step(stepsPerRevolution);
    delay(500);

    digitalWrite(16, HIGH); // GPIO16 켜기
    digitalWrite(4, HIGH);
    digitalWrite(0, HIGH);
    digitalWrite(2, HIGH);
    delay(5000);
    digitalWrite(16, LOW); // GPIO16 끄기
    digitalWrite(4, LOW);
    digitalWrite(0, LOW);
    digitalWrite(2, LOW);
    Serial.println("counterclockwise");
    myStepper.step(-stepsPerRevolution);
    delay(500);
  Serial.print("working done!!");
  writeData();
}

void onConnectionEstablished(){
  client.subscribe(topic2, [](const String & payload) {
    Serial.println(payload);
    nowTime = payload;
    working();
  });
}

void loop()
{
  client.loop();
}

 

 

green
더보기
더보기
#include <WiFi.h>
#include "EspMQTTClient.h"
#include <FirebaseESP32.h>
#include "time.h"
#include "LedControl.h" // dot matrix를 사용하기 위한 라이브러리 호출

#define WIFI_SSID "Galaxy"
#define WIFI_PASSWORD "12345678"
#define FIREBASE_HOST "[firebase url]" //url
#define FIREBASE_AUTH "[firebase password]"   //password
#define dataIn 12   // DIN 12번 핀으로 사용
#define cs 13       // CS 13번 핀으로 사용
#define clk 14      // CLK 14번 핀으로 사용


//mqtt
EspMQTTClient client(
  WIFI_SSID,    // SSID
  WIFI_PASSWORD,      // Password
  "192.168.19.207",  // MQTT Broker server IP (=ras ip)
  "MQTTUsername",   
  "MQTTPassword",   
  "GreenClient",     // Device name, used for identifying the device
  1883              // MQTT Broker port
);

char *topic = "greenESP";
char *topic2 = "green";
const long  gmtOffset_sec = 3600;
const int   daylightOffset_sec = 3600;
const int servoPin = 15;  // corresponds to GPIO 15
// setting PWM properties
const int servoChannel = 0;
const int freq = 50;
const int resolution = 16;
const int maxDeg = 90;
int deg, duty;
String nowTime;

byte heart[] = {
  B00011100,
  B00111110,
  B01111110,
  B11111100,
  B11111100,
  B01111110,
  B00111110,
  B00011100,
};

FirebaseData firebaseData;
FirebaseJson json;
FirebaseConfig config;
FirebaseAuth auth;

LedControl lc = LedControl(dataIn, clk, cs, 1); // LedControl('DIN핀 번호', 'CLK핀 번호', 'CS핀 번호', 'dot matrix 갯수')

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("No time available (yet)");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}

void timeavailable(struct timeval *t)
{
  Serial.println("Got time adjustment from NTP!");
  printLocalTime();
}

void setup()
{
  lc.shutdown(0, false);
  lc.setIntensity(0, 15); // LED 도트매트릭스 밝기
  lc.clearDisplay(0); // LED 도트매트릭스 모두 지우기

  //servo PWM Setup
  ledcSetup(servoChannel, freq, resolution);  // PWM CH0, Frequncy 50 Hz, 16bit resolution
  ledcAttachPin(servoPin, servoChannel);        // PWM CH0을 GPIO 15번으로 출력
  Serial.begin(115200);

  
  Serial.printf("Connecting to %s ", WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  printLocalTime();     // it will take some time to sync time :)

  //mqtt
  Serial.println("Mqtt start");
  client.enableDebuggingMessages(); 
  client.enableHTTPWebUpdater(); 
  client.enableOTA(); 
  client.enableLastWillMessage("TestClient/lastwill", "I am going offline");

  //wifi
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  
  int wifi_attempts = 0;
  const int max_wifi_attempts = 30; // Adjust this as needed
  while (WiFi.status() != WL_CONNECTED && wifi_attempts < max_wifi_attempts) {
    Serial.print(".");
    delay(500);
    wifi_attempts++;
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println();
    Serial.print("Connected with IP: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println();
    Serial.println("Failed to connect to WiFi.");
  }

  //firebase
  Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
  config.database_url = FIREBASE_HOST;
  config.signer.tokens.legacy_token = FIREBASE_AUTH;

  Firebase.begin(&config, &auth);

  //working pin
  pinMode(LED_BUILTIN, OUTPUT);
}

void modifyLastSecond() {
  String dateTime = nowTime;
  int lastColonPos = dateTime.lastIndexOf(':');
  String secondsStr = dateTime.substring(lastColonPos + 1);
  int seconds = secondsStr.toInt();
  seconds++;
  if (seconds < 10) {
    secondsStr = "0" + String(seconds);
  } else {
    secondsStr = String(seconds);
  }
  String newDateTime = dateTime.substring(0, lastColonPos + 1) + secondsStr;
  Serial.println(newDateTime);

  nowTime = newDateTime;
}

void writeData()
{
  modifyLastSecond();
  String write_key = nowTime;

  // Create the programStatus JSON object
  FirebaseJson programStatus;
  programStatus.set("area", "green");
  programStatus.set("status", "end");

  // Write to Firebase
  if (Firebase.setJSON(firebaseData, "/robotStatus/" + write_key, programStatus)) {
    Serial.println("Data written to Firebase successfully");
  } else {
    Serial.println("Failed to write data to Firebase");
    Serial.println("Reason: " + firebaseData.errorReason());
  }
}

void working(){
  for (deg = maxDeg; deg >= 0; deg--) { // 시계 반대 방향 회전 (90도에서 0도로)
    servoWrite(servoChannel, deg);
  }
  delay(1000);
  showLED(heart, 1); // 하트모양 보이기
  delay(3000); // 3초 기다리기

  showLED(heart, 0); // 모두 지우기
  delay(1000); // 1초 기다리기

  for (deg = 0; deg <= maxDeg; deg++) { // 시계 방향 회전 (0도에서 90도로)
      servoWrite(servoChannel, deg);
  }
  Serial.print("working done!!");
  //printLocalTime();
  writeData();
}

void onConnectionEstablished(){
  client.subscribe(topic2, [](const String & payload) {
    Serial.println(payload);
    // if (payload == "ON") {
    //   Serial.println("ON!!");
    //   working();
    // }
    nowTime = payload;
    working();
  });
}

// LED 도트매트릭스 제어용 함수
void showLED(byte arr[], int a) {
  if (a == 1) {
    for (int i = 0; i < 8; i++) {
      lc.setRow(0, i, arr[i]);
    }
  } else {
    for (int i = 0; i < 8; i++) {
      lc.setRow(0, i, B00000000);
    }
  }
}

// deg는 0~90도 까지
void servoWrite(int ch, int deg)
{
    duty = map(deg, 0, 180, 1638, 8192);
    ledcWrite(ch, duty);
    delay(15);                             // delay를 줄이면 180도가 완전히 돌지 않음
}

void loop()
{
  client.loop();
}

 

 

purple
더보기
더보기
#include <WiFi.h>
#include "EspMQTTClient.h"
#include <FirebaseESP32.h>
#include "time.h"
#include <Stepper.h>

#define WIFI_SSID "Galaxy"
#define WIFI_PASSWORD "12345678"
#define FIREBASE_HOST "[firebase url]" //url
#define FIREBASE_AUTH "[firebase password]"   //password

// ULN2003 Motor Driver Pins
#define IN1 19
#define IN2 18
#define IN3 5
#define IN4 17

#define IN1b 32
#define IN2b 33
#define IN3b 25
#define IN4b 26

const int stepsPerRevolution = 1400;  // Change this to fit the number of steps per revolution
const int simultaneousSteps = 5;     // Number of steps to take simultaneously

//mqtt
EspMQTTClient client(
  WIFI_SSID,    // SSID
  WIFI_PASSWORD,      // Password
  "192.168.19.207",  // MQTT Broker server IP (=ras ip)
  "MQTTUsername",   
  "MQTTPassword",   
  "PurpleClient",     // Device name, used for identifying the device
  1883              // MQTT Broker port
);

const char *topic = "purpleESP";
const char *topic2 = "purple";
String nowTime;

FirebaseData firebaseData;
FirebaseJson json;
FirebaseConfig config;
FirebaseAuth auth;

// Initialize the stepper library
Stepper myStepper1(stepsPerRevolution, IN1, IN3, IN2, IN4);
Stepper myStepper2(stepsPerRevolution, IN1b, IN3b, IN2b, IN4b);

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("No time available (yet)");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}

void timeavailable(struct timeval *t)
{
  Serial.println("Got time adjustment from NTP!");
  printLocalTime();
}

void setup()
{
  myStepper1.setSpeed(15);
  myStepper2.setSpeed(15);
  Serial.begin(115200);

  
  Serial.printf("Connecting to %s ", WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  printLocalTime();     // it will take some time to sync time :)

  //mqtt
  Serial.println("Mqtt start");
  client.enableDebuggingMessages(); 
  client.enableHTTPWebUpdater(); 
  client.enableOTA(); 
  client.enableLastWillMessage("TestClient/lastwill", "I am going offline");

  //wifi
  int wifi_attempts = 0;
  const int max_wifi_attempts = 30; // Adjust this as needed
  while (WiFi.status() != WL_CONNECTED && wifi_attempts < max_wifi_attempts) {
    Serial.print(".");
    delay(500);
    wifi_attempts++;
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println();
    Serial.print("Connected with IP: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println();
    Serial.println("Failed to connect to WiFi.");
  }

  //firebase
  Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
  config.database_url = FIREBASE_HOST;
  config.signer.tokens.legacy_token = FIREBASE_AUTH;

  Firebase.begin(&config, &auth);

  //working pin
  pinMode(LED_BUILTIN, OUTPUT);
}

void modifyLastSecond() {
  String dateTime = nowTime;
  int lastColonPos = dateTime.lastIndexOf(':');
  String secondsStr = dateTime.substring(lastColonPos + 1);
  int seconds = secondsStr.toInt();
  seconds++;
  if (seconds < 10) {
    secondsStr = "0" + String(seconds);
  } else {
    secondsStr = String(seconds);
  }
  String newDateTime = dateTime.substring(0, lastColonPos + 1) + secondsStr;
  Serial.println(newDateTime);

  nowTime = newDateTime;
}

void writeData()
{
  modifyLastSecond();
  String write_key = nowTime;

  // Create the programStatus JSON object
  FirebaseJson programStatus;
  programStatus.set("area", "purple");
  programStatus.set("status", "end");

  // Write to Firebase
  if (Firebase.setJSON(firebaseData, "/robotStatus/" + write_key, programStatus)) {
    Serial.println("Data written to Firebase successfully");
  } else {
    Serial.println("Failed to write data to Firebase");
    Serial.println("Reason: " + firebaseData.errorReason());
  }
}

void working(){
  Serial.println("clockwise");
  for (int i = 0; i < stepsPerRevolution*3; i += simultaneousSteps) {
    myStepper1.step(-simultaneousSteps);
    myStepper2.step(-simultaneousSteps);
  }
  writeData();
}

void onConnectionEstablished(){
  client.subscribe(topic2, [](const String & payload) {
    Serial.println(payload);
    nowTime = payload;
    working();
  });
}

void loop()
{
  client.loop();
}

'SSAFY > 관통 PJT' 카테고리의 다른 글

관통 PJT - visualization  (0) 2024.05.22
관통PJT #보드 코드  (0) 2024.05.20
관통PJT #firebase, MQTT 통신 코드  (0) 2024.05.20
관통 PJT #보드설명  (0) 2024.05.19
관통 PJT # 자료정리  (0) 2024.05.12