Skip to content

Commit

Permalink
Merge pull request #3 from sergejey/alpha
Browse files Browse the repository at this point in the history
Alpha
  • Loading branch information
sergejey committed Jan 28, 2019
2 parents db075bc + 34c5c58 commit 3ceff4d
Show file tree
Hide file tree
Showing 22 changed files with 2,652 additions and 999 deletions.
8 changes: 7 additions & 1 deletion megad.php
Expand Up @@ -18,7 +18,13 @@
if ($megad->config['API_DEBUG']) { if ($megad->config['API_DEBUG']) {
DebMes("Request: ".$_SERVER['REQUEST_URI']. " (".$_SERVER['REMOTE_ADDR'].")",'megad'); DebMes("Request: ".$_SERVER['REQUEST_URI']. " (".$_SERVER['REMOTE_ADDR'].")",'megad');
} }
$megad->processRequest(); $result = $megad->processRequest();
if ($result!='') {
echo $result;
}
if ($megad->config['API_DEBUG']) {
DebMes("Result: ".$result,'megad');
}


$db->Disconnect(); $db->Disconnect();


19 changes: 19 additions & 0 deletions modules/megad/libs/mod_dev_bmp180.php
@@ -0,0 +1,19 @@
<?
/*
* Copyright (c) 2016, Andrey_B
* http://ab-log.ru
* Подробнее см. LICENSE.txt или http://www.gnu.org/licenses/
*/

/*
Скрипт для работы с датчиком атмосферного давления BMP180
Использует драйвер BMP180 и библиотеку I2C-PHP
*/

define("SCL", "8");
define("SDA", "9");
define("MD", "http://192.168.0.14/sec/?");
// Вариант реализации I2C: 1 - полностью программный; 2 - частично аппаратный (прошивка 3.43beta1 и выше)
//define("V", "2");
require_once("mod_i2c_bmp180.php");
echo get_pressure()."\n";
30 changes: 30 additions & 0 deletions modules/megad/libs/mod_dev_htu21d.php
@@ -0,0 +1,30 @@
<?
/*
* Copyright (c) 2016, Andrey_B
* http://ab-log.ru
* Подробнее см. LICENSE.txt или http://www.gnu.org/licenses/
*/

/*
Скрипт для получения данных температуры и влажности датчика HTU21D
Использует драйвер HTU21D и библиотеку I2C-PHP
*/

define("SCL", "8");
define("SDA", "9");
define("MD", "http://192.168.0.14/sec/?");

// Вариант реализации I2C: 1 - полностью программный; 2 - частично аппаратный (прошивка 3.43beta1 и выше)
define("V", "2");

require_once("mod_i2c_htu21d.php");

$temperature = get_htu21d_temperature();
echo "Temperature: ".$temperature."\n";

$humidity = get_htu21d_humidity();
echo "Humidity: ".$humidity."\n";

$hum_compensated = $humidity + (25 - $temperature) * -0.15;
echo "Humidity (compensated): ".$hum_compensated."\n";
?>
34 changes: 34 additions & 0 deletions modules/megad/libs/mod_dev_ssd1306.php
@@ -0,0 +1,34 @@
<?
/*
* Copyright (c) 2016, Andrey_B
* http://ab-log.ru
* Подробнее см. LICENSE.txt или http://www.gnu.org/licenses/
*/

/*
Скрипт для отображение данных на дисплее OLED с контроллером SSD1306
Использует драйвер SSD1306 и библиотеку I2C-PHP
*/

define("SCL", "8");
define("SDA", "9");
define("MD", "http://192.168.0.14/sec/?");

// Вариант реализации I2C: 1 - полностью программный; 2 - частично аппаратный (прошивка 3.43beta1 и выше)
define("V", "2");

require_once("mod_i2c_ssd1306.php");

ssd1306_init();
ssd1306_clear_display();

/*** Отображение текста ***/
ssd1306_write_text("Температура: 24.62", "verdana_10", 0, 0); //
//ssd1306_write_text("22.82 ", "verdana_10", 84, 0);
ssd1306_write_text("Влажность: 47%", "verdana_10", 0, 2);
ssd1306_write_text(" ХОРОШЕГО ДНЯ!", "mistral_10", 0, 5);

/*** Отображение графики ***/
//ssd1306_draw_pic("ab_log_logo");

?>
26 changes: 26 additions & 0 deletions modules/megad/libs/mod_dev_tsl2591.php
@@ -0,0 +1,26 @@
<?
/*
* Copyright (c) 2016, Andrey_B
* http://ab-log.ru
* Подробнее см. LICENSE.txt или http://www.gnu.org/licenses/
*/

/*
Скрипт для работы с датчиком освещенности TLS2591
Использует драйвер BH1750 и библиотеку I2C-PHP
*/

define("SCL", "34");
define("SDA", "35");
define("MD", "http://192.168.0.14/sec/?");

// Вариант реализации I2C: 1 - полностью программный; 2 - частично аппаратный (прошивка 3.43beta1 и выше)
define("V", "1");

require_once("mod_i2c_tsl2591.php");

$lux = get_lux();

echo "Lux: $lux\n";

?>
193 changes: 193 additions & 0 deletions modules/megad/libs/mod_i2c_bmp180.php
@@ -0,0 +1,193 @@
<?
/*
* Copyright (c) 2016, Andrey_B
* http://ab-log.ru
* Подробнее см. LICENSE.txt или http://www.gnu.org/licenses/
*/

/*
Это драйвер для датчика атмосферного давления BMP180 для библиотеки I2C-PHP
*/

require_once("mod_i2c_lib.php");
$b5 = 0;

function hexdecs($hex)
{
// ignore non hex characters
$hex = preg_replace('/[^0-9A-Fa-f]/', '', $hex);

// converted decimal value:
$dec = hexdec($hex);

// maximum decimal value based on length of hex + 1:
// number of bits in hex number is 8 bits for each 2 hex -> max = 2^n
// use 'pow(2,n)' since '1 << n' is only for integers and therefore limited to integer size.
$max = pow(2, 4 * (strlen($hex) + (strlen($hex) % 2)));

// complement = maximum - converted hex:
$_dec = $max - $dec;

// if dec value is larger than its complement we have a negative value (first bit is set)
return $dec >= $_dec ? -$_dec : $dec;
}

function get_calibration()
{
$cal_regaddr = array("AC1" => "AA", "AC2" => "AC", "AC3" => "AE", "AC4" => "B0", "AC5" => "B2", "AC6" => "B4", "B1" => "B6", "B2" => "B8", "MB" => "BA", "MC" => "BC", "MD" => "BE" );
$cfg_data = "";

echo "Reading calibration data ";

i2c_init();
i2c_start();

foreach ( $cal_regaddr as $key => $value )
{
i2c_send("EE");
i2c_send($value);
i2c_stop();
i2c_start();
i2c_send("EF");
$msb = i2c_read();
$lsb = i2c_read(1);
if ( strlen($msb) == 1 )
$msb = "0$msb";
if ( strlen($lsb) == 1 )
$lsb = "0$lsb";

if ( $key == "AC4" || $key == "AC5" || $key == "AC6" )
{
$val = hexdec($msb);
$val = $val << 8;
$val = $val + hexdec($lsb);
}
else
$val = hexdecs($msb.$lsb);

//echo "$key => MSB: $msb; LSB: $lsb; Val: $val\n";
$cfg_data .= $val.";";
echo ".";
}
echo " done\n";

$cfg = fopen("mod_i2c_bmp180.cfg", "w");
fwrite($cfg, $cfg_data);
fclose($cfg);

}

function get_temperature()
{
global $b5;

if ( !file_exists("mod_i2c_bmp180.cfg") )
get_calibration();

$cfg = explode(";", file_get_contents("mod_i2c_bmp180.cfg"));

i2c_init();
i2c_start();

i2c_send("EE");
i2c_send("F4");
i2c_send("2E");
i2c_stop();
i2c_start();
i2c_send("EE");
i2c_send("F6");
i2c_stop();
i2c_start();
i2c_send("EF");
$msb = i2c_read();
$lsb = i2c_read(1);
i2c_stop();

if ( strlen($msb) == 1 )
$msb = "0$msb";
if ( strlen($lsb) == 1 )
$lsb = "0$lsb";

$ut = hexdec($msb.$lsb);
//echo "MSB: $msb; LSB: $lsb; UT: $ut\n";
$x1 = round(($ut - $cfg[5]) * $cfg[4] / 32768);
$x2 = round($cfg[9] * 2048 / ($x1 + $cfg[10]));
$b5 = $x1 + $x2;
$t = round(($b5 + 8) / 16);
//echo "temp: $t ($x1, $x2, $b5)\n";
return $t / 10;
}

function get_pressure()
{
global $b5;

if ( !file_exists("mod_i2c_bmp180.cfg") )
get_calibration();

$cfg = explode(";", file_get_contents("mod_i2c_bmp180.cfg"));

get_temperature();
$oss = 1;

i2c_init();
i2c_start();

i2c_send("EE");
i2c_send("F4");
i2c_send("74");
i2c_stop();
//usleep(50000);
i2c_start();
i2c_send("EE");
i2c_send("F6");
i2c_stop();
i2c_start();
i2c_send("EF");
$msb = i2c_read();
$lsb = i2c_read();
$xlsb = i2c_read(1);
i2c_stop();

if ( strlen($msb) == 1 )
$msb = "0$msb";
if ( strlen($lsb) == 1 )
$lsb = "0$lsb";
if ( strlen($xlsb) == 1 )
$xlsb = "0$xlsb";
$up = hexdec($msb.$lsb.$xlsb);
$up = $up >> (8 - $oss);
//echo "MSB: $msb; LSB: $lsb; XLSB: $xlsb; UP: $up\n";

$b6 = $b5 - 4000;
$x1 = round(($cfg[7] * ($b6 * $b6 / 4096)) / 2048);
$x2 = round($cfg[1] * $b6 / 2048);
$x3 = $x1 + $x2;
$b3 = ($cfg[0] * 4 + $x3);
$b3 = $b3 << $oss;
$b3 = round(($b3 + 2)/4);
$x1 = round($cfg[2] * $b6 / 8192);
$x2 = round(($cfg[6] * ($b6 * $b6 / 4096)) / 65536);
$x3 = round((($x1 + $x2) + 2) / 4);
$b4 = round($cfg[3] * ($x3 + 32768) / 32768);
$temp = 50000 >> $oss;
$b7 = ($up - $b3) * ($temp);
if ($b7 < 2147483648 )
$p = round(($b7 * 2) / $b4);
else
$p = round(($b7 / $b4) * 2);
$x1 = round(($p / 256) * ($p / 256));
$x1 = round(($x1 * 3038) / 65536);
$x2 = round((-7357 * $p) / 65536);
$p = round($p + ($x1 + $x2 + 3791) / 16);
$p_mm = round($p / 133.322, 2);

return ($p_mm);

//$p0 = $p / pow(1 - 70/44330, 5.255);
//$p_mm = round($p / 133.322, 2);
//$p0_mm = round($p0 / 133.322, 2);
//echo "Pa: $p; Pa_mm: $p_mm / $p0_mm\n";

}

0 comments on commit 3ceff4d

Please sign in to comment.