• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом Монитор интернет ресурса с дисплеем от нокиа

recosh

New member
Запилил на espruino себе мониторинг работы СРМ системы. Данные обрабатываются в json формате.
Прошивка espruino, все на JavaScript.

На будущее добавил слушатель события на кнопку flash для переключения экранов ну и сразу буду готовить корпус, шьётся эта чтука по воздуху.

Код проекта:
JavaScript:
var g;
var last_data = false;
function begin () {
  var http = require("http");
  var aktivnost_clicks = 0;
 
  pinMode(NodeMCU.D3, 'input_pullup');
  setWatch(function(e) {
    console.log("Button pressed");
  }, NodeMCU.D3, { repeat: true, edge: 'rising', debounce: 50 });
 
  console.log("begin");
  SPI1.setup({ sck:NodeMCU.D5, mosi:NodeMCU.D7 });
  g = require("PCD8544").connect(SPI1,
    NodeMCU.D2 /* RS / DC */,
    NodeMCU.D8 /* CS / CE */,
    NodeMCU.D1 /*RST*/, function() {
  
    //console.log("executing with contrast " + contrast);
    g.clear();
    g.setContrast(0.46);
    g.setRotation(2); //Flip display 180
    g.drawString("Hi Esp8266",0,0);
    g.drawString("Hi Esp8266",0,10);
    g.drawString("Hi Esp8266",0,20);
    g.drawString("Hi Esp8266",0,30);
    g.drawString("Hi Esp8266",0,40);
    g.drawLine(0,0,84,48);
    g.drawCircle(40,40,5);
    g.flip();
  
    digitalWrite(NodeMCU.D6, 0);
  
    wifi.connect('ss2', {password: 'lokoloko'}, function(){
      print(wifi.getIP());

      g.clear();
      g.drawString(wifi.getIP().ip,0,20);
      g.flip();
    
      setInterval(function(){
        http.get("http://61minuta.ru/admin/robot/test_esp1", function(res) {
          res.on('data', function(data) {
            data = JSON.parse(data);
            if(last_data == false){
              last_data = data;
              print("nachalno");
            }
          
          
            g.clear();
            //g.setFont6x12();
            g.drawString('Clicks '+data.Clicks,0,0);
            if(data.Clicks != last_data.Clicks){
              if(aktivnost_clicks < 80)
                aktivnost_clicks += 4 * (data.Clicks - last_data.Clicks);
            }
            g.drawLine(0,7, aktivnost_clicks,7);
          
          
            g.drawString('Zayavok '+data.Zayavki,0,10);
            if(data.Zayavki != last_data.Zayavki){
              g.drawLine(0,17, 84,17);
            }
          
            g.drawString('CPU '+data.cpu+' %',0,20);
            g.drawLine(0,27, data.cpu/84*100,27);

            g.flip();
          
            if(aktivnost_clicks > 1)
              aktivnost_clicks -= 1;
          
            last_data = data;
            console.log(data);
          });
          res.on('close', function(data) {
            console.log("Connection closed");
          });
        });
      }, 4000);
    
    });
  
    console.log("Executed");
  });
 
  var wifi = require('Wifi');
 
}
E.on("init", begin);
save();
Код сервера:
PHP:
$data = array(
            'Clicks' => 22,
            'Zayavki' => 33,
            'cpu' => 'Error'
        );

        //проверяем возможность чтения виртуальной директории
        if (@is_readable('/proc/stat')){

            //делаем первый замер
            $file_first = file("/proc/stat");

            //определяем значения состояний (описаны выше)
            $tmp_first = explode(" ",$file_first[0]);

            $cpu_user_first = $tmp_first[2];
            $cpu_nice_first = $tmp_first[3];
            $cpu_sys_first = $tmp_first[4];
            $cpu_idle_first = $tmp_first[5];
            $cpu_io_first = $tmp_first[6];

            sleep(1);//промежуток до второго замера

            //делаем второй замер
            $file_second = file("/proc/stat");
            $tmp_second = explode(" ",$file_second[0]);

            $cpu_user_second= $tmp_second[2];
            $cpu_nice_second= $tmp_second[3];
            $cpu_sys_second = $tmp_second[4];
            $cpu_idle_second= $tmp_second[5];
            $cpu_io_second = $tmp_second[6];

            //определяем разницу использованного процессорного времени
            $diff_used = ($cpu_user_second-$cpu_user_first)+($cpu_nice_second-$cpu_nice_first)+($cpu_sys_second-$cpu_sys_first)+($cpu_io_second-$cpu_io_first);

            //определяем разницу общего процессорного времени
            $diff_total = ($cpu_user_second-$cpu_user_first)+(

            $cpu_nice_second-$cpu_nice_first)+($cpu_sys_second-$cpu_sys_first)+($cpu_io_second-$cpu_io_first)+($cpu_idle_second-$cpu_idle_first);

            //определение загрузки cpu
            $cpu = round($diff_used/$diff_total, 2)*100;

            $data['cpu'] = $cpu;

        }
       
        $str_sjon = json_encode($data);
        $this->output->set_output($str_sjon);
Код пока сыроват и написан, лижбы работало, но работает! Буду ещё дорабатывать.

 
Последнее редактирование:
Сверху Снизу