質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

1655閲覧

Raspberry Pi Google Driveへのデータ書き込み

raspypy

総合スコア247

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/10/09 04:28

##やろうとしていること

① Raspberry PiでBME280の温度・湿度・気圧データを取得 (済)
② 取得したBME280のデータをGoogle Driveに保存(今ここの段階です。)

↓のプログラムを実行すると、
コンソール画面上に、温度、湿度、気圧のデータが実行されます。
実行時にエラーは発生していません。

##困っていること
Googleスプレッドシートにデータを書き込むプログラムを書いているつもりですが、
スプレッドシートに何もデータが書き込まれません。

プログラムは、エラーがない状態ですが、
何か設定がおかしいのでしょうか。
原因を確認するすべがなく困っています。

##プログラムコード

html

1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3 4from smbus import SMBus 5import time 6 7bus_number = 1 8i2c_address = 0x76 9 10bus = SMBus(bus_number) 11 12digT = [] 13digP = [] 14digH = [] 15 16t_fine = 0.0 17 18 19def writeReg(reg_address, data): 20 bus.write_byte_data(i2c_address,reg_address,data) 21 22def get_calib_param(): 23 calib = [] 24 25 for i in range (0x88,0x88+24): 26 calib.append(bus.read_byte_data(i2c_address,i)) 27 calib.append(bus.read_byte_data(i2c_address,0xA1)) 28 for i in range (0xE1,0xE1+7): 29 calib.append(bus.read_byte_data(i2c_address,i)) 30 31 digT.append((calib[1] << 8) | calib[0]) 32 digT.append((calib[3] << 8) | calib[2]) 33 digT.append((calib[5] << 8) | calib[4]) 34 digP.append((calib[7] << 8) | calib[6]) 35 digP.append((calib[9] << 8) | calib[8]) 36 digP.append((calib[11]<< 8) | calib[10]) 37 digP.append((calib[13]<< 8) | calib[12]) 38 digP.append((calib[15]<< 8) | calib[14]) 39 digP.append((calib[17]<< 8) | calib[16]) 40 digP.append((calib[19]<< 8) | calib[18]) 41 digP.append((calib[21]<< 8) | calib[20]) 42 digP.append((calib[23]<< 8) | calib[22]) 43 digH.append( calib[24] ) 44 digH.append((calib[26]<< 8) | calib[25]) 45 digH.append( calib[27] ) 46 digH.append((calib[28]<< 4) | (0x0F & calib[29])) 47 digH.append((calib[30]<< 4) | ((calib[29] >> 4) & 0x0F)) 48 digH.append( calib[31] ) 49 50 for i in range(1,2): 51 if digT[i] & 0x8000: 52 digT[i] = (-digT[i] ^ 0xFFFF) + 1 53 54 for i in range(1,8): 55 if digP[i] & 0x8000: 56 digP[i] = (-digP[i] ^ 0xFFFF) + 1 57 58 for i in range(0,6): 59 if digH[i] & 0x8000: 60 digH[i] = (-digH[i] ^ 0xFFFF) + 1 61 62def readData(): 63 data = [] 64 for i in range (0xF7, 0xF7+8): 65 data.append(bus.read_byte_data(i2c_address,i)) 66 pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4) 67 temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4) 68 hum_raw = (data[6] << 8) | data[7] 69 70 compensate_T(temp_raw) 71 compensate_P(pres_raw) 72 compensate_H(hum_raw) 73 74def compensate_P(adc_P): 75 global t_fine 76 pressure = 0.0 77 78 v1 = (t_fine / 2.0) - 64000.0 79 v2 = (((v1 / 4.0) * (v1 / 4.0)) / 2048) * digP[5] 80 v2 = v2 + ((v1 * digP[4]) * 2.0) 81 v2 = (v2 / 4.0) + (digP[3] * 65536.0) 82 v1 = (((digP[2] * (((v1 / 4.0) * (v1 / 4.0)) / 8192)) / 8) + ((digP[1] * v1) / 2.0)) / 262144 83 v1 = ((32768 + v1) * digP[0]) / 32768 84 85 if v1 == 0: 86 return 0 87 pressure = ((1048576 - adc_P) - (v2 / 4096)) * 3125 88 if pressure < 0x80000000: 89 pressure = (pressure * 2.0) / v1 90 else: 91 pressure = (pressure / v1) * 2 92 v1 = (digP[8] * (((pressure / 8.0) * (pressure / 8.0)) / 8192.0)) / 4096 93 v2 = ((pressure / 4.0) * digP[7]) / 8192.0 94 pressure = pressure + ((v1 + v2 + digP[6]) / 16.0) 95 print "pressure : %7.2f hPa" % (pressure/100) 96 97def compensate_T(adc_T): 98 global t_fine 99 v1 = (adc_T / 16384.0 - digT[0] / 1024.0) * digT[1] 100 v2 = (adc_T / 131072.0 - digT[0] / 8192.0) * (adc_T / 131072.0 - digT[0] / 8192.0) * digT[2] 101 t_fine = v1 + v2 102 temperature = t_fine / 5120.0 103 print "temp : %-6.2f ℃" % (temperature) 104 105def compensate_H(adc_H): 106 global t_fine 107 var_h = t_fine - 76800.0 108 if var_h != 0: 109 var_h = (adc_H - (digH[3] * 64.0 + digH[4]/16384.0 * var_h)) * (digH[1] / 65536.0 * (1.0 + digH[5] / 67108864.0 * var_h * (1.0 + digH[2] / 67108864.0 * var_h))) 110 else: 111 return 0 112 var_h = var_h * (1.0 - digH[0] * var_h / 524288.0) 113 if var_h > 100.0: 114 var_h = 100.0 115 elif var_h < 0.0: 116 var_h = 0.0 117 print "hum : %6.2f %" % (var_h) 118 119 120def setup(): 121 osrs_t = 1 #Temperature oversampling x 1 122 osrs_p = 1 #Pressure oversampling x 1 123 osrs_h = 1 #Humidity oversampling x 1 124 mode = 3 #Normal mode 125 t_sb = 5 #Tstandby 1000ms 126 filter = 0 #Filter off 127 spi3w_en = 0 #3-wire SPI Disable 128 129 ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode 130 config_reg = (t_sb << 5) | (filter << 2) | spi3w_en 131 ctrl_hum_reg = osrs_h 132 133 writeReg(0xF2,ctrl_hum_reg) 134 writeReg(0xF4,ctrl_meas_reg) 135 writeReg(0xF5,config_reg) 136 137 138setup() 139get_calib_param() 140 141 142if __name__ == '__main__': 143 try: 144 readData() 145 except KeyboardInterrupt: 146 pass 147 148 149import gspread 150from oauth2client.service_account import ServiceAccountCredentials 151 152from datetime import datetime 153column_datas = [] 154 155def read_data(): 156 global column_datas 157 158 column_datas.append(datetime.now().strftime("%Y/%m/%d %H:%M:%S")) 159 160 161def write_data(): 162 global column_datas 163 filename = '/home/pi/dev/JSOBファイル.json' 164 client_email = "サービスアカウントID" 165 with open(filename) as f: private_key = f.read() 166 scopes = ['https://spreadsheets.google.com/feeds/', 'https://docs.google.com/feeds'] 167 credentials = ServiceAccountCredentials.from_json_keyfile_name(filename, scopes) 168 gs = gspread.authorize(credentials) 169 doc = gs.open('スプレッドシート名') 170 sheet = doc.worksheet("シート名") 171 sheet.append_row(column_datas) 172 173 174def compensate_P(adc_P): 175 global column_datas 176 column_datas.append("%7.2f" % (pressure/100)) 177 178 179def compensate_T(adc_T): 180 global column_datas 181 column_datas.append("%-6.2f" % (temperature)) 182 183 184def compensate_H(adc_H): 185 global column_datas 186 column_datas.append("%6.2f" % (var_h)) 187 188 189if __name__ == '__main__': 190 try: 191 read_data() 192 tweet_data() 193 write_data() 194 except: 195 pass

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/10/09 05:34

gspreadと言うライブラリをご利用なのでしょうか。 よくわかりませんが、以下のページはご覧になりましたか? https://qiita.com/a_halka/items/296cd867bb68e3b0c282 あとは、戻り値があるAPIは戻り値を確認して見るとか、エラーチェックをこまめに入れるとか、もっと簡易なスクリプトでどうなのかなど最小限のコードで確認するなどを進めてはいかがでしょうか。
raspypy

2019/10/09 05:49

sheet.append_row(['20191009']) として、数字を書き込むように変更してみましたが、スプレッドシートには何も書き込まれませんでした。
guest

回答1

0

自己解決

httplib2ライブラリへの設定を見直すことで解決できました。

投稿2019/10/23 02:40

raspypy

総合スコア247

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問