As part of the cheap home automation project I am currently working on, I needed to get some temperature sensor info to my webserver. For the brain of my project I’ll be using a Raspberry Pi.
I had ordered a 5pk of DS18B20 temperature sensors so i can visualize monthly temperatures and eventually control my thermostat. In order to get the sensors working on the Pi, I needed to do a few things:
First I had to setup the pi to add OneWire support. I started by editing the boot config file with nano by running
sudo nano /boot/config.txt
I scrolled to the bottom and added the following line:
then pressed ctrl+x and y to confirm, then
sudo nano /etc/modules
add the following 2 lines to the bottom:
I again press ctrl+x and y to confirm , then shutdown my pi.
I then hooked my sensors up to a 4.7k pullup resistor using the following diagram:
I booted my Pi back up and tested to see that my sensors were detected by typing the following command into the terminal:
cd 28-xxxx (change this to match what serial number pops up)
if all goes well you shouldn’t have seen any errors and it should have outputted some gibberish like this:
The temperature is shown in the last five digits on the second line. (You need to divide this number by 1000 to get the temperature in degrees Celcius).
You finally need to have Apache2 and PHP5 installed on your Pi.
I had looked online for php code that had outputted the temperature from sensors and found that everyone had hardcoded the sensor ID’s in their code , since I wanted my automation to be as painless as possible, I wrote my own php script to automatically get all the sensor ID’s and then convert the output to Celsius and Fahrenheit. I have this on https://github.com/xillwillx/DS18B20
Add temp.php to /var/www/ then visit http://127.0.0.1/temp.php
Page output should look similar to this:
Sensor ID#: 28-0214640d18ff = 26 °C / 79 °F
Sensor ID#: 28-02146409b9ff = 25 °C / 77 °F
And that’s it! I will be added more posts as i finish each portion of my home automation project. My goal is trying to get it all done for less than $200.