수행기록퀘스트3

Pico W - 클라우드 연결
2022. 9. 11 (일) 22:20 츄라이 조회 795 좋아요 1 스크랩 0 댓글 0

이번에는 저번 주차에서 연결한 wifi를 기반으로 HTTP GET 통신을 이용하여 본 프로젝트에서 사용할 데이터를 연결해보고자 한다.

 

GET 통신을 위해서는 클라우드 서버에 다음과 같은 PHP 구문을 작성해준다.

<?php
// DB 접속
$con=mysqli_connect("127.0.0.1","ID","PW","DB_NAME");
// 접속 실패 시 메시지 나오게 하기
if (mysqli_connect_errno($con))
{ echo "MySQL접속 실패: " . mysqli_connect_error(); }

// 기본 클라이언트 문자 집합 설정하기
mysqli_set_charset($con,"utf8");
// 쿼리문 실행, 결과를 res에 저장
$res = mysqli_query($con, "select * from `project_status`");
// 결과를 배열로 변환하기 위한 변수 정의
$result = array();
// 쿼리문의 결과(res)를 배열형식으로 변환(result)
while($row = mysqli_fetch_array($res))
{ array_push($result, array('status'=>$row[0],'R'=>$row[1],'G'=>$row[2],'B'=>$row[3])); }
// 배열형식의 결과를 json으로 변환
echo json_encode(array("result"=>$result),JSON_UNESCAPED_UNICODE);
// DB 접속 종료
mysqli_close($con);
?>

해당 코드는 URL상에서 http://cloud.park-cloud.co19.kr/project/view_status.php 링크를 통해 접속하게 되면 DB에 연결되어 최신데이터 값을 조회할 수 있도록 하였다.

 

다음은 아두이노 코드이다.

//insert 관련
//http://cloud.park-cloud.co19.kr/project/insert.php?temp=45&hum=25&pm1=150&pm2=200&pm3=20 다음과 같은 주소 형식으로 데이터를 보낼 예정

//status 관련
//INSERT INTO `project_status` (`status`, `R`, `G`, `B`) VALUES ('0', '255', '255', '255');
//UPDATE `project_status` SET `status`=1,`R`=255,`G`=250,`B`=250 WHERE 1
//http://cloud.park-cloud.co19.kr/project/update_status.php?status=0&R=200&G=100&B=20

//view 관련
//http://cloud.park-cloud.co19.kr/project/view.php
//http://cloud.park-cloud.co19.kr/project/view_status.php

#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>

#ifndef STASSID
#define STASSID "iptime_projecter"
#define STAPSK "134625wo"
#endif

const char *ssid = STASSID;
const char *pass = STAPSK;

WiFiMulti WiFiMulti;

String sta, R, G, B;
int count = 0;
int mode_number = 0;

//----------------------------LED---------------------------------
#include <NeoPixelConnect.h>
#define MAXIMUM_NUM_NEOPIXELS 16

// Create an instance of NeoPixelConnect and initialize it
// to use GPIO pin 4 (D12) as the control pin, for a string
// of 8 neopixels. Name the instance p

NeoPixelConnect p(4, MAXIMUM_NUM_NEOPIXELS, pio0, 0);
//----------------------------LED---------------------------------

void setup() {

  Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  WiFiMulti.addAP(ssid, pass);
}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    if (http.begin("http://cloud.park-cloud.co19.kr/project/view_status.php")) {  // HTTP


      Serial.print("[HTTP] GET...\n");
      // start connection and send HTTP header
      int httpCode = http.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }

      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
    }
  }

  delay(10000);
}

 

아직 LED 부품이 오지 못하여 미리 코드 선언부만 작성된 상태이지만 HTTP  연동 코드만 작성되었다. 본 코드는 HTTP Respone 구문을 통해서 자신의 mode를 결정 하고 결정된 모드를 통해서 RGB  데이터를 수신 하거나 미세먼지 센서를 받아오는 역활을 수행하게 된다.

 

작동 결과는 다음과 같다.

다음 차시에는 업로드 가능한 페이지와 flutter앱과 dust센서의 업로드  PHP를 작성하고자 한다.

로그인 후
참가 상태를 확인할 수 있습니다.