• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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);
Код пока сыроват и написан, лижбы работало, но работает! Буду ещё дорабатывать.

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