티스토리 뷰

* FreeTROS 이용

isDataReady인 경우에 valueString을 WiFi를 통해 전송
WiFi 전송 중에서 GPIO 제어에 시간 지연이 발생하지 않음.

 

[예제 코드]

#include <WiFi.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
WiFiServer server(80);

#define LED_PIN 2  // GPIO2를 LED 제어 핀으로 사용

// 🔹 공유 변수 (WiFiTask와 GPIOTask에서 사용)
volatile bool isDataReady = false;  // 데이터 준비 여부
String valueString = "";            // WiFi로 전송할 데이터

void WiFiTask(void *parameter);
void GPIOTask(void *parameter);

void setup() {
    Serial.begin(115200);
    pinMode(LED_PIN, OUTPUT);

    // 🔹 WiFi Task 실행 (Core 0)
    xTaskCreatePinnedToCore(WiFiTask, "WiFiTask", 4096, NULL, 1, NULL, 0);

    // 🔹 GPIO Task 실행 (Core 1)
    xTaskCreatePinnedToCore(GPIOTask, "GPIOTask", 1024, NULL, 1, NULL, 1);
}

void loop() {
    // 메인 루프는 비워두거나 다른 작업 가능
}

// 🔹 WiFi Task (Core 0에서 실행)
void WiFiTask(void *parameter) {
    WiFi.begin(ssid, password);
    Serial.print("Connecting to WiFi...");
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("\nWiFi Connected!");
    server.begin();

    while (true) {
        WiFiClient client = server.available();

        // 🔸 isDataReady가 true이면 데이터를 WiFi로 전송
        if (isDataReady) {
            if (client) {
                Serial.println("Sending data: " + valueString);
                client.println(valueString);
                client.stop();  // 클라이언트 연결 종료
            }

            isDataReady = false;  // 데이터 전송 후 플래그 초기화
        }

        delay(100);  // WiFi Task 실행 주기 설정
    }
}

// 🔹 GPIO Task (Core 1에서 실행)
void GPIOTask(void *parameter) {
    while (true) {
        // 🔸 GPIO를 주기적으로 제어 (예: LED 깜박임)
        digitalWrite(LED_PIN, HIGH);
        delay(500);
        digitalWrite(LED_PIN, LOW);
        delay(500);

        // 🔸 특정 조건 충족 시 데이터 전송 준비
        if (millis() % 5000 < 1000) {  // 5초마다 한 번 실행
            valueString = "Sensor Value: " + String(random(100, 200));  // 임의 데이터 생성
            isDataReady = true;  // 데이터 준비 완료
            Serial.println("Data Ready: " + valueString);
        }
    }
}

 

[테스트 결과]

 

 

반응형
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함