Ubuntu의 Load Average를 Arudino의 RGBLED로 표시

18716 단어 Arduino우분투
Ubuntu의 Load Average를 Arudino의 RGBLED로 표시합니다.

이런 식으로 서버의 현재 Load Average 분을 볼 수 있습니다.

먼저 서버의 로드 평균을 백분율로 반환하는 PHP 프로그램

소스 코드의 리팩토링은 그 중,,

loadAvaragePercent.php
<?php

function get_server_memory_usage(){

    $free = Shell_exec('free');
    $free = (string)trim($free);
    $free_arr = explode("\n", $free);
    $mem = explode(" ", $free_arr[1]);
    $mem = array_filter($mem);
    $mem = array_merge($mem);
    $memory_usage = $mem[2]/$mem[1]*100;

    return $memory_usage;
}

function get_server_cpu_usage(){

    $load = sys_getloadavg();
    return $load[0];

}

exec("grep \"processor\" /proc/cpuinfo | wc -l" , $cpu_num );
//$cpu_num[0]

$load_average = trim( get_server_cpu_usage() );

echo intval( $load_average / $cpu_num[0] * 100 );

//get_server_memory_usage();

반환값은 퍼센트 정수치로 20 라든지 그 변이 돌아옵니다. 이것을 Arduino에서 읽고 그만큼 빨간색을 깜박이게 됩니다.

topRgbLed.ino
// LAN setting
#include <UIPEthernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x78, 0xEE  };  
IPAddress ip(192, 168, 0, 117);
IPAddress myDns(192, 168, 0, 1);                        
EthernetClient client;

// setting server's ip address
char server[] = "192.168.0.104";

#include <Adafruit_NeoPixel.h>

#define PIN            2

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      16

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 250; // delay for half a second

void setup() {

  Serial.begin(9600);

  // LAN start
  delay( 1000 );
  Ethernet.begin(mac, ip , myDns );
  delay( 1000 );

  // get server's data
  Serial.println("Connecting...");
  if (client.connect(server, 80)) {

    Serial.println("Connected");

    // Make a HTTP request:
    client.println("GET /1.php HTTP/1.1");
    client.println("Host: 192.168.0.104" );
    client.println("Connection: close");
    client.println();

  }

  pixels.begin(); // This initializes the NeoPixel library.

}

void loop() {

  Serial.println( "lopp in" );

  // character settings
  char c;
  long c_index = 0;
  boolean is_c_blank = true;

  //Serial.println( "----------header start --------" );
  while (client.connected()) {

    if (client.available()) {

      c = client.read();      

      // check not blank
      if (c == '\n' && is_c_blank) {

        //Serial.println( "----------header end --------" );

        // get server's body data into result[ ]
        //Serial.println( "----------body start --------" );
        char result[ ] = "                ";
        while (client.connected()) {
          if (client.available()) {
            c = client.read();  

            // add text into result[ ] if not \n
            if( c != '\n' ){
              Serial.print( c );
              result[c_index] = c ;
              c_index ++;
            }

          }
        }
        //Serial.println( "----------body end --------" );
        Serial.println( result );

        int active_num = int( String( result ).toInt() / NUMPIXELS );
        Serial.println( active_num );

        // color blank
        for(int i=0;i<active_num;i++){
          pixels.setPixelColor(i, pixels.Color(0,0,0));
          pixels.show();
          delay(delayval);
        }

        // blue
        for(int i=0;i<NUMPIXELS;i++){
          pixels.setPixelColor(i, pixels.Color(0,0,10));
          pixels.show();
          delay(delayval);
        }

        // color red
        for(int i=0;i<active_num;i++){
          pixels.setPixelColor(i, pixels.Color(10,0,0));
          pixels.show();
          delay(delayval);
        }

        delay( ( NUMPIXELS + active_num ) * 1000 );

        break;

      }

      // check read data if \n 
      if (c == '\n') {
        is_c_blank = true;
      } 
      else if (c != '\r') {
        is_c_blank = false;
      }

    }else{

      break;

    }

  }

}

HDD나 메모리의 상태를 볼 수 있어도 재미있을지도 모릅니다. 그리고 모처럼 RGBLED이므로 애니메이션 기능이 있으면 좋은 것입니다.

참고 링크


  • How to save htop output to file? - Ask Ubuntu
  • WS2812 RGB led ring example on Arduino - Arduino Learning
  • php — 서버의 CPU 사용률과 RAM PHP 사용률을 얻는 방법은 무엇입니까?
  • CPU의 탑재수를 확인 - Web엔지니어의 기술 메모~PHP, SQL, Linux등~
  • 좋은 웹페이지 즐겨찾기