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이므로 애니메이션 기능이 있으면 좋은 것입니다.
참고 링크
Reference
이 문제에 관하여(Ubuntu의 Load Average를 Arudino의 RGBLED로 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mugimugi/items/43ecc763cb359a528ada텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)