การทดลองนี้เพื่อส่งค่าอุณหภูมิจาก Raspberry Pi เข้าไปเก็บไว้ ใน Google Spread Sheet ที่เราสร้างไว้
อุปกรณ์การทดลอง
1.Raspberry pi Board 2.สาย LAN สำหรับ Remote จาก PC 3.Resistor 10k 4.DS18B20 sensor
ขั้นตอนการเตรียมการ
$ sudo apt-get install python-smbus $ sudo apt-get install i2c-tools $ sudo raspi-config Select "Advanced Options" Select "I2C" Select "Yes" Select "Yes" $ sudo apt-get update $ sudo apt-get install python-pip $ sudo pip install gspread oauth2client $ sudo apt-get install python-openssl
Exception Can't install oauth2client
หากเจอปัญหา ไม่สามารถลง oauth2client ได้
แก้ไขได้โดย $ sudo python -m pip install --upgrade --force setuptools $ sudo python -m pip install --upgrade --force pip
อ้างอิงจาก link นี้
เตรียม OAuth.json download จาก Window แล้วนำไปใส่ใน Rpi
(1.)ไปยัง https://console.developers.google.com และ log in Google IDของท่าน
(2.)เลือก Create Credential -> OAuth client ID
![]()
(3.)เลือก Other แล้วตั้งชื่อ
![]()
(4.)Enable APi เพื่อให้สามารถเข้าถึง Google sheetได้
![]()
(5.)คลิก Download JSON จะได้ ไฟล์ .JSON มา แล้วนำไปไว้ใน RPi
![]()
เข้าไปสร้าง Google Sheet
สร้างไฟล์และตั้งชื่อ ตัวอย่างเช่น tempDS18B20
![]()
เตรียมการเรียบร้อย
ลุยโค้ดเลยจร้า
Code python for live temperature google sheet
import os import glob import time import datetime import gspread from oauth2client.service_account import ServiceAccountCredentials scope = ['https://spreadsheets.google.com/feeds'] credentials = ServiceAccountCredentials.from_json_keyfile_name('My Project Raspberry-8d52fa6a989c.json', scope) gc = gspread.authorize(credentials) wks = gc.open("tempDS18B20").sheet1 #ชื่อไฟล์ต้องตรงกับที่สร้างไว้ใน Google Sheet 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' 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 return temp_c while True: x = 0 temp_c = read_temp() times = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') for values in wks.col_values(1): x = x + 1 rowToAdd = [times,temp_c] wks.resize(x) wks.append_row(rowToAdd) print"temperature = " + str(read_temp()) time.sleep(0.3)
base_dir = '/sys/bus/w1/devices/'
ตอบลบdevice_folder = glob.glob(base_dir + '28*')[0]
อยากสอบถามความหมายของ2บรรทัดนี้ค่ะ