Temperature Sensors and the Raspberry Pi
From KlavoWiki
Work in in Progress
I followed the document Temperature Sensing from Adafruit to configure the breadboard.
Modules
vi /etc/modules
add the following lines
w1-gpio w1-therm
BASH Write to MySQL
I have this file as a CRON job that is ran every minute.
crontab -l * * * * * /root/temp.sh >/dev/null
#! /bin/bash #sudo modprobe w1-gpio #sudo modprobe w1-therm temp1=$(cat /sys/bus/w1/devices/28-0000055018bd/w1_slave | grep -E -o ".{0,0}t=.{0,5}" | cut -c 3-) temp2=$(cat /sys/bus/w1/devices/28-0000055099d2/w1_slave | grep -E -o ".{0,0}t=.{0,5}" | cut -c 3-) temp1=$(echo "scale=3; $temp1 / 1000" | bc -q) temp2=$(echo "scale=3; $temp2 / 1000" | bc -q) mysql temperature -e "insert into temp (no1, no2) values('${temp1}','${temp2}');"
PHP
Read Directly from Sensors
<?php $sensors = array( "/sys/bus/w1/devices/28-0000055018bd/w1_slave", "/sys/bus/w1/devices/28-0000055099d2/w1_slave" ); $count = 0; print "Direct read from sensors<br>"; print "-------------------------<br>"; while ($count <= 1) { // Open resource file for thermometer $thermometer = fopen($sensors[$count], 'r'); // Get the contents of the resource $thermometerReadings = fread($thermometer, filesize($sensors[$count])); // Close resource file for thermometer fclose($thermometer); // We're only interested in the 2nd line, and the value after the t= on the 2nd line preg_match("/t=(.+)/", preg_split("/\n/", $thermometerReadings)[1], $matches); $temperature = $matches[1] / 1000; // Convert to Fahernheit $fahernheit = $temperature*9/5+32; // Output the temperature print "Sensor " . ($count+1) . " : $temperature°C --- $fahernheit°F<br>"; $count++; } ?>
Read from Database
This section is not directly related to the Raspberry Pi or the temperature sensors as this is more about querying data from a database.
<?php print "Data from MySQL<br>"; print "--------------------<br>"; // Connect to MySQL Host,Username,Password,Database $conn = new mysqli('localhost', 'root', '', 'temperature'); // check connection if ($conn->connect_error) { trigger_error('Database connection failed: ' . $conn->connect_error, E_USER_ERROR); } // What is the SQL query (Retrieve the last 35 records) $sqlquery = 'SELECT * FROM temp ORDER BY date DESC LIMIT 35'; // Query SQL and store $info = $conn->query($sqlquery); //check for valid connection if($info === false) { trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->error, E_USER_ERROR); } else { print "Last <b><font color=red>" . $info->num_rows . "</b><font color=black> results.<br>"; while ($row = mysqli_fetch_array($info)) { // printf ("%s (%s) (%s)<br>",$row[0],$row[1],$row[2]); print $row[0] . " <font color=blue>" . $row[1] . " <font color=green>" . $row[2] . '<font color=black><br>'; } } // Close Sql Connection $info->close(); ?>
MySQL Database
create database temperature; use temperature; create table temp ( date TIMESTAMP, no1 FLOAT(5,3), no2 FLOAT(5,3), no3 FLOAT(5,3), no4 FLOAT(5,3), no5 FLOAT(5,3) );