serin99
serin ๊ฐœ๋ฐœ ์ผ๊ธฐ
serin99
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (76)
    • FE (25)
      • JavaScript (14)
      • React (6)
      • Web (5)
    • IT (22)
      • [FE] ์œ„ํด๋ฆฌ ํŽ˜์ดํผ (19)
      • CS (2)
    • Project (4)
    • Python (8)
    • DB (2)
    • IoT (14)
      • ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด (9)
      • ์•„๋‘์ด๋…ธ (4)

ํƒœ๊ทธ

  • ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด
  • ๋ถ€ํŠธ์บ ํ”„
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • Python
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
serin99

serin ๊ฐœ๋ฐœ ์ผ๊ธฐ

Project

๊ณต๊ธฐ์ฒญ์ •๊ธฐ์™€ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ

2023. 5. 18. 21:16
728x90

๐Ÿ˜€ ํ”„๋กœ์ ํŠธ ํฌ์ŠคํŒ…์€

๊ฐœ์ธ ์ œ์ž‘ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌ๋ทฐํ•˜๊ณ  ํ•œ ๋ฒˆ ์ •๋ฆฌํ•˜๋Š” ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค.

 

์ด๋ฒˆ์— ์ง„ํ–‰ํ•œ ํ”„๋กœ์ ํŠธ๋Š”

์•„๋‘์ด๋…ธ์™€ 3D ํ”„๋ฆฐํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋ฅผ ์ œ์ž‘ํ•˜๊ณ ,

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๋กœ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


 

์‚ฌ์šฉ ๋ฌผํ’ˆ

 

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด 4 B ๋ชจ๋ธ
๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด LCD ํŒจ๋„
ESP-01 Wifi module
ESP-01 Wifi module adapter
์•„๋‘์ด๋…ธ ์šฐ๋…ธ
์•„๋‘์ด๋…ธ ํŒฌ
์•„๋‘์ด๋…ธ LDC ํŒจ๋„
์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋ณด๋“œ
์•„๋‘์ด๋…ธ ๋ฆด๋ ˆ์ด ๋ชจ๋“ˆ
์†Œํ˜•  ํ•„ํ„ฐ

 

 

 

์œ„ ์‚ฌ์ง„์€ ์ „์ฒด์ ์ธ ์™ธ๊ด€ ์‚ฌ์ง„์ž…๋‹ˆ๋‹ค.

์ƒ๋‹จ๋ถ€์™€ ํ•˜๋‹จ๋ถ€๋กœ ๋‚˜๋ˆ„์–ด ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

์ƒ๋‹จ๋ถ€์—๋Š” ํŒฌ๊ณผ ํ•„ํ„ฐ๋กœ ๊ตฌ์„ฑํ•˜์˜€์œผ๋ฉฐ,

ํ•˜๋‹จ๋ถ€์—๋Š” ์„ผ์„œ๋“ค์„ ์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋ณด๋“œ๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฏธ์„ธ๋จผ์ง€ ์ธก์ •๊ฐ’์„ ๋ณด์—ฌ์ฃผ๋Š” ์•„๋‘์ด๋…ธ LCD ํŒจ๋„๊ณผ

๋ฏธ์„ธ๋จผ์ง€ ๊ฐ’์„ ์ธก์ •ํ•˜๋Š” ๋ฏธ์„ธ๋จผ์ง€ ์„ผ์„œ,

์„ผ์„œ๊ฐ’์„ ์„œ๋ฒ„๋กœ ์ „์†กํ•  Wifi ํ†ต์‹  ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ ์•„๋‘์ด๋…ธ ๋‚˜๋…ธ ๋ณด๋“œ์— ๋ฆด๋ ˆ์ด ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜์—ฌ

ํŠน์ • ์กฐ๊ฑด์ด ์ถฉ์กฑ๋  ๊ฒฝ์šฐ์—๋Š” ๋ฆด๋ ˆ์ด ๋ชจ๋“ˆ์ด ์ž‘๋™๋˜์–ด

์ƒ๋‹จ๋ถ€์— ํŒฌ์ด ํšŒ์ „ํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

 

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ฏธ์„ธ๋จผ์ง€ ์ธก์ • ์„ผ์„œ์—์„œ

ํŠน์ • ์ˆ˜์ค€ ์ด์ƒ์˜ ๊ฐ’์ด ์ธก์ •๋  ๊ฒฝ์šฐ

ํŒฌ์ด ๋™์ž‘ํ•˜์—ฌ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์— ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 


 

 

๋™์ž‘ ์˜ˆ์‹œ

 

  

 

๋˜ํ•œ

 

์„ผ์„œ๊ฐ’์„ ์„œ๋ฒ„๋กœ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ „์†กํ•˜๋ฉฐ,

ํ˜„์žฌ ์ธก์ •๋˜๊ณ  ์žˆ๋Š” ์ตœ์‹ ๊ฐ’๊ณผ ๊ทธ ๋ณ€ํ™”๋Ÿ‰์„ ์ตœ๋Œ€ 7์ผ๊นŒ์ง€

๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ• ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 


 

 

์„œ๋ฒ„ ์ธก ์ฝ”๋”ฉ

 

๋”๋ณด๊ธฐ
<?php

//  ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” JS ํ•จ์ˆ˜์™€ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œ์‹œํ•˜๋Š” <div> ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

function makeChartParts($data, $options, $type)

{

  static $index = 1;
  $package = 'corechart';
  $special_type = array('GeoChart', 'AnnotatedTimeLine','TreeMap', 'OrgChart',
                        'Gauge', 'Table', 'TimeLine', 'GeoMap', 'MotionChart');

  if (in_array($type, $special_type)) {
    $package = strtolower($type);
  }

  $load = 'google.charts.load("current", {"packages":"' . $package . '"});';

  $jsData = json_encode($data);

  $jsonOptions = json_encode($options);



  // ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” JS ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.


  $chart = <<<CHART_FUNC

    {$load}

    google.charts.setOnLoadCallback(drawChart{$index});

    function drawChart{$index}() {

      var data = {$jsData};

      var chartData = new google.visualization.arrayToDataTable(data);

      var options = {$jsonOptions};

      var chartDiv = document.getElementById('chart{$index}');

      var chart = new google.visualization.{$type}(chartDiv);

      chart.draw(chartData, options);

    }\n

 

CHART_FUNC;

  // ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œ์‹œํ•˜๋Š” <div> ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  $div = '<div id="chart' . $index . '"></div>';

  $index++;  

  return array($chart, $div);

}

?>

----------------------

<?php

// ๋‹ค๋ฅธ ํŒŒ์ผ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜ "makeChartParts ()"๋ฅผ ์ฝ์–ด๋“ค์ž…๋‹ˆ๋‹ค.

require_once './example/make_chart_parts.php';

$con=mysqli_connect("localhost","sensor_admin","kApRympaUfsSlA*B","all_sensor_data");

if(mysqli_connect_error()){echo "Failed to MySQL:".mysqli_connect_error();}


$data = array( array('', 'ํ‰๊ท  ์ด์‚ฐํ™”ํƒ„์†Œ'),);

for($count = 15; $count > 0; $count--){

  $temp = mysqli_query($con, "SELECT AVG(CO2_D) FROM `quality_meter` WHERE DATE_FORMAT(Time, '%Y-%m-%d') = CURDATE() - INTERVAL {$count} DAY");

  $temp_row = mysqli_fetch_array($temp);

  $arr = array(date('d', strtotime($day."-$count day")).'์ผ',(int)$temp_row['AVG(CO2_D)']);

  array_push($data,$arr);

}

 

// ๊ทธ๋ž˜ํ”„ ์˜ต์…˜

$options = array(

  'title'  => 'ํ‰๊ท  ์ด์‚ฐํ™”ํƒ„์†Œ ๊ทธ๋ž˜ํ”„ ('.(date('m').'์›”)'),  // ๊ทธ๋ž˜ํ”„ ์ œ๋ชฉ

  'titleTextStyle' => array('fontSize' => 16), // ์ œ๋ชฉ ์Šคํƒ€์ผ

  'vAxes'  => array(0 => array('title'    => 'ํ‰๊ท  ์ด์‚ฐํ™”ํƒ„์†Œ๏ผˆPPM๏ผ‰',  // ์„ธ๋กœ์ถ• ์™ผ์ชฝ

                               'minValue' =>  0, 'minValue' => 2100)),

  'width'  => 1200, 'height' => 500,  // ํญ, ๋†’์ด

  'chartArea' => array('width' => 900, 'height' => 240),  // ์ฐจํŠธ ์˜์—ญ

  'legend' => array('position' => 'bottom', 'alignment' => 'start'));  // ๋ฒ”๋ก€

 
// ๊ทธ๋ž˜ํ”„ ์œ ํ˜• (์„  ๊ทธ๋ž˜ํ”„)

$type = 'LineChart';

// ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆผ์˜ JavaScript ํ•จ์ˆ˜, ํ‘œ์‹œํ•  <div> ํƒœ๊ทธ์˜ ์ƒ์„ฑ

list($chart, $chart_div) = makeChartParts($data, $options, $type);


?>

<!DOCTYPE html>

<html lang="ko">

    <head>

        <meta charset="UTF-8">

        <title>๊บพ์€ ์„  ๊ทธ๋ž˜ํ”„</title>

        <script src="https://www.gstatic.com/charts/loader.js"></script>

        <script>

            // ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

            <?php

        echo $chart;

        echo 'console.log('.json_encode($data).')';

      ?>
        </script>

    </head>

    <body>

        <!-- ์ฐจํŠธ๋ฅผ ํ‘œ์‹œ ํ•  <div> ํƒœ๊ทธ๋ฅผ ์ ๋‹นํ•œ ์œ„์น˜์— ๋ฐฐ์น˜ -->

        <div>

            <?php echo $chart_div; ?>

        </div>

    </body>

</html>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <meta name="description" content="" />
        <meta name="author" content="" />
        <title>Dashboard - SB Admin</title>
        <link href="https://cdn.jsdelivr.net/npm/simple-datatables@latest/dist/style.css" rel="stylesheet" />
        <link href="css/styles.css" rel="stylesheet" />
        <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/js/all.min.js" crossorigin="anonymous"></script>
    </head>
    <body class="sb-nav-fixed">
        <nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
            <!-- Navbar Brand-->
            <a class="navbar-brand ps-3"> ACO </a>
        </nav>
        <div>
            <div>
                <main>
                    <div class="container-fluid px-12">
                        <br>
                        <br>
                        <br>
                        <h5>๋ฏธ์„ธ๋จผ์ง€ ๋ณ€ํ™”๋Ÿ‰ ์ธก์ •</h5>
                        <div class="row">
                            <div class="col-12">
                                <?php
                                $jb_conn = mysqli_connect( 'localhost', 'aco_admin', '20184138', 'Sensor');
                                $jb_sql = "SELECT * FROM Sensor LIMIT 3;";
                                $jb_result = mysqli_query( $jb_conn, $jb_sql );
                                while( $jb_row = mysqli_fetch_array( $jb_result ) ) {
                                  echo '<p>' . $jb_row[ 'id' ] . $jb_row[ 'dust_D' ] . $jb_row[ 'time' ] .'</p>';
                                }
                              ?>
                                </div>
                        </div>
                        <div class="row">
                            <div class="col-12">
                                <div class="card mb-4">
                                    <div class="card-header">
                                        <i class="fas fa-chart-area me-1"></i>
                                        ๋ฏธ์„ธ๋จผ์ง€ ๋ณ€ํ™”๋Ÿ‰ ๊ทธ๋ž˜ํ”„
                                    </div>
                                    <div class="card-body"><canvas id="myAreaChart" width="100%" height="40"></canvas></div>
                                </div>
                            </div>
                        </div>
                    </div>
                </main>
            </div>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
        <script src="js/scripts.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js" crossorigin="anonymous"></script>
        <script src="assets/demo/chart-area-demo.js"></script>
        <script src="assets/demo/chart-bar-demo.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/simple-datatables@latest" crossorigin="anonymous"></script>
        <script src="js/datatables-simple-demo.js"></script>
    </body>
</html>

 

 

 

728x90

'Project' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Django๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ํ”Œ๋žซํผ ๋งŒ๋“ค๊ธฐ  (0) 2023.05.31
๊ณต๊ธฐ์งˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ  (2) 2023.05.19
Python ๊ธฐ๋ฐ˜์˜ ํ™ˆ IoT ๊ตฌํ˜„  (2) 2023.05.10
    'Project' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • Django๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ํ”Œ๋žซํผ ๋งŒ๋“ค๊ธฐ
    • ๊ณต๊ธฐ์งˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ
    • Python ๊ธฐ๋ฐ˜์˜ ํ™ˆ IoT ๊ตฌํ˜„
    serin99
    serin99
    FE ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ํ•˜๋Š” ์‚ฌ๋žŒ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”