сразу прошу прощения за немного офтопик но node.js ближе по концепции к espruino чем к теме raspberry.Pi Код (Javascript): //read gpio state var onoff = require('onoff'); var Gpio = onoff.Gpio, relayIn1 = new Gpio(2,'out' ); relayIn2 = new Gpio(6,'out' ); // пороги макимального и минимального значения температуры var maxTemp = 28; var minTemp = 23; //LCD part var LCD = require('lcdi2c'); var lcd = new LCD( 0, 0x27, 20, 4 ); //lcd.createChar(0,[0x18,0x18,0x3,0x4,0x4,0x4,0x3] ); lcd.on(); //lcd.setBacklight(); lcd.clear(); lcd.home(); function run() { var valueL=1; var valueF=1; var ip = require('ip'); var ds18b20 = require('ds18b20'); var light = 'Light ON '; var fito = 'Fito ON' now = new Date(); var time1 = now.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false}); var date1 = now.toLocaleDateString([], {month: 'short',day: 'numeric', year: 'numeric'}); var myip=ip.address(); valueL = (relayIn1.readSync()) % 2; valueF = (relayIn2.readSync()) % 2; if (valueL==0){ light = 'Light ON '; } else light = 'Light OFF'; if (valueF==0){ fito = 'Fito ON '; } else fito = 'Fito OFF'; var temp = ds18b20.temperatureSync('28-041663a8bcff') if (temp>=maxTemp){ lcd.println( ' WATER IS HOT! ' , 4); } else if (temp<=minTemp){ lcd.println( ' WATER IS COLD! ' , 4 ); } else { lcd.println( 'IP= '+myip + ' ', 4 ); } lcd.println( date1 + ' ' + time1 + ' ', 1 ); lcd.println( light + ' | ' + fito, 2 ); lcd.println( 'Aqua Temp C = '+ temp + ' ' , 3 ); setInterval(() => run(), 100); }; run(); /* function lcdError( err ) { clearInterval( int1 ); console.log( 'Unable to print to LCD on bus 1 at address 0x27. Error: ' + JSON.stringify( err ) ); }; */ после запуска прога память кушает прямо как не в себя... и после 5-7 часов работы выгружается где косяк?
Не уверен до пяток в том что говорю, но полагаю косяками две вещи: рекурсивный вызов функции таймером внутри себя; вызов опроса ds18b20 чаще секунды. Избавляйтесь от обоих и должно заработать. Вытащите из функции run строку setInterval и сделайте ее самой последней в скрипте: Код (Javascript): setInterval(run, 1000);