RPi Google Docs Spreadsheet 02

วัตถุประสงค์

ทำการส่งค่าอุณหภูมิขึ้นไปบน Google Spreadsheet.


อุปกรณ์

1. Raspberry Pi Model B+

2. DS18B20 Sensor

3. Resistor 10 ohm

4. สายไฟ

5. Wired LAN  (Cross)

1. ส่งค่าอุณหภูมิขึ้น Google Spreadsheet

 

ขั้นตอนการทำ



1.1  เข้าไปที่ google แล้วพิมพ์ Google Spreadsheet เพื่อเข้าสู่ Spreadsheet และทำการสร้าง Sheet ขึ้นมา


1.2 ทำการลงสิ่งที่จำเป็น ต่อการทำครั้งนี้

$ sudo apt-get install python-smbus

$ sudo apt-get install i2c-tools

$ sudo raspi-config 

 

$ sudo apt-get update
$ sudo apt-get install python-pip
$ sudo apt-get install git
$ sudo pip install gspread oauth2client PyOpenSSL  

1.3 ทำการเข้า ไปที่  Google Developers Console เพื่อทำการสร้าง Service Account Key แล้วดำเนินการตามภาพ



1.4 แล้วทำการเขียนโค๊ดเพื่อให้ DS18B20 สามารถส่งค่าได้ ซึ่งไฟล์ Json ที่ได้จาก 1.3 จะนำไปไว้ใน Directory เดียวกัน ซึ่งถ้าดูจากซอสโค๊ดข้างล่างจะต้องไปเปลี่ยนชื่อไฟล์ให้ตรงกับที่เราโหลดมา (JSON) ในบรรทัดที่ 11 ให้เป็นของคุณเอง


Source Code.


import requests

import datetime

import os

import glob

import time

import gspread

from oauth2client.service_account import ServiceAccountCredentials



scope = [‘https://spreadsheets.google.com/feeds’%5D



credentials = ServiceAccountCredentials.from_json_keyfile_name(‘Yournamefile.json’, scope)



gc = gspread.authorize(credentials)



wks = gc.open(“temp00”).sheet1



#api_key=’R8JBJR9T16DW4Z1Y’

os.system(‘modprobe w1-gpio’)

os.system(‘modprobe w1-therm’)



base_dir = ‘/sys/bus/w1/devices/’

device_folder = glob.glob(base_dir + ’28*’)[0]

device_file = device_folder + ‘/w1_slave’



Temp = [0,0]



def read_temp_raw():

f = open(device_file, ‘r’)

lines = f.readlines()

f.close()

return lines



def read_temp():

lines = read_temp_raw()

while lines[0].strip()[-3:] != ‘YES’:

time.sleep(0.2)

lines = read_temp_raw()

equals_pos = lines[1].find(‘t=’)

if equals_pos != -1:

temp_string = lines[1] [equals_pos+2:]

temp_c = float(temp_string) / 1000.0

temp_f = temp_c * 9.0 / 5.0 + 32.0

Temp[0]= temp_c

Temp[1]= temp_f

return temp_c, temp_f

#return temp_c



while True:

x = 0

times = datetime.datetime.strftime(datetime.datetime.now(), ‘%Y-%m-%d %H:%M:%S’)

#temperatures = sensor.get_temperatures([DS18B20.DEGREES_C, DS18B20.DEGREES_F])

temp = str(read_temp())

for values in wks.col_values(1): ## loop count row

x = x + 1

rowToAdd = [times, Temp[0],Temp[1]] ## your data want to send

wks.resize(x)

wks.append_row(rowToAdd)

print “temperature = ” + temp

#payload = {‘api_key’: api_key, ‘field1’: temp}

#r = requests.post(‘https://api.thingspeak.com/update’,params=payload)

time.sleep(0.2)import requests

import datetime

import os

import glob

import time

import gspread

from oauth2client.service_account import ServiceAccountCredentials



scope = [‘https://spreadsheets.google.com/feeds’%5D



credentials = ServiceAccountCredentials.from_json_keyfile_name(‘Yournamefile.json’, scope)



gc = gspread.authorize(credentials)



wks = gc.open(“temp00”).sheet1



#api_key=’R8JBJR9T16DW4Z1Y’

os.system(‘modprobe w1-gpio’)

os.system(‘modprobe w1-therm’)



base_dir = ‘/sys/bus/w1/devices/’

device_folder = glob.glob(base_dir + ’28*’)[0]

device_file = device_folder + ‘/w1_slave’



Temp = [0,0]



def read_temp_raw():

f = open(device_file, ‘r’)

lines = f.readlines()

f.close()

return lines



def read_temp():

lines = read_temp_raw()

while lines[0].strip()[-3:] != ‘YES’:

time.sleep(0.2)

lines = read_temp_raw()

equals_pos = lines[1].find(‘t=’)

if equals_pos != -1:

temp_string = lines[1] [equals_pos+2:]

temp_c = float(temp_string) / 1000.0

temp_f = temp_c * 9.0 / 5.0 + 32.0

Temp[0]= temp_c

Temp[1]= temp_f

return temp_c, temp_f

#return temp_c



while True:

x = 0

times = datetime.datetime.strftime(datetime.datetime.now(), ‘%Y-%m-%d %H:%M:%S’)

#temperatures = sensor.get_temperatures([DS18B20.DEGREES_C, DS18B20.DEGREES_F])

temp = str(read_temp())

for values in wks.col_values(1): ## loop count row

x = x + 1

rowToAdd = [times, Temp[0],Temp[1]] ## your data want to send

wks.resize(x)

wks.append_row(rowToAdd)

print “temperature = ” + temp

#payload = {‘api_key’: api_key, ‘field1’: temp}

#r = requests.post(‘https://api.thingspeak.com/update’,params=payload)

time.sleep(0.2)

1.5 ดูผลลัพธ์


 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s