質問編集履歴

3

バックォートを追記しました。

2018/02/23 00:08

投稿

tamasa
tamasa

スコア11

test CHANGED
File without changes
test CHANGED
@@ -440,7 +440,11 @@
440
440
 
441
441
  tweet_data()
442
442
 
443
- write_data()```
443
+ write_data()
444
+
445
+
446
+
447
+ ```
444
448
 
445
449
  ### 試したこと
446
450
 

2

バックォートを追記しました。

2018/02/23 00:07

投稿

tamasa
tamasa

スコア11

test CHANGED
File without changes
test CHANGED
@@ -2,23 +2,33 @@
2
2
 
3
3
 
4
4
 
5
- ラズベリーパイにセンサーのBME280を取り付けて温度、湿度、気圧のデータを出力できました。これらのデータをgoogleスプレッドシートに飛ばして記録したく、
5
+  ラズベリーパイにセンサーのBME280を取り付けて温度、湿度、気圧のデータを出力できました。
6
-
6
+
7
+
8
+
7
- 下記のホームページを参考にしましたがエラーが表示されて実行できません。
9
+  これらのデータをgoogleスプレッドシートに飛ばして記録したく、下記のホームページを参考にしましたがエラーが表示されて実行できません。
10
+
11
+ http://www.ogaworks.com/archives/9870
12
+
13
+
14
+
15
+ プログラムはPythonです。
16
+
17
+
8
18
 
9
19
  どなたかgoogleスプレッドシートへ飛ばすエラーを解決して下さいませんか。
10
20
 
21
+
22
+
11
23
  超初心者でプログラミングがよくわかっておらずすみませんが宜しくお願い致します。
12
24
 
13
25
 
14
26
 
15
27
  ### 発生している問題・エラーメッセージ
16
28
 
29
+
30
+
17
- 下記のホームページを参考に実行ファイルの中のプログラムの最後にgoogoleスプレッドシートにデータを飛ばすプログラムを追記しました。
31
+  下記のホームページを参考に実行ファイルの中のプログラムの最後にgoogoleスプレッドシートにデータを飛ばすプログラムを追記しました。
18
-
19
- http://www.ogaworks.com/archives/9870
20
-
21
-
22
32
 
23
33
  すると、下記のエラーが表示されて実行できません。
24
34
 
@@ -40,7 +50,7 @@
40
50
 
41
51
 
42
52
 
43
- '''
53
+ ```
44
54
 
45
55
  #!/usr/bin/python
46
56
 
@@ -430,9 +440,7 @@
430
440
 
431
441
  tweet_data()
432
442
 
433
- write_data()'''
443
+ write_data()```
434
-
435
-
436
444
 
437
445
  ### 試したこと
438
446
 

1

ソースコードを全て記載しました。

2018/02/23 00:05

投稿

tamasa
tamasa

スコア11

test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,10 @@
16
16
 
17
17
  下記のホームページを参考に実行ファイルの中のプログラムの最後にgoogoleスプレッドシートにデータを飛ばすプログラムを追記しました。
18
18
 
19
+ http://www.ogaworks.com/archives/9870
20
+
21
+
22
+
19
23
  すると、下記のエラーが表示されて実行できません。
20
24
 
21
25
  ```
@@ -36,79 +40,385 @@
36
40
 
37
41
 
38
42
 
39
- Python
40
-
41
-
42
-
43
- from twython import Twython, TwythonError
44
-
45
- from datetime import datetime
46
-
47
- :
48
-
49
- tweet_str = ''
50
-
51
- :
43
+ '''
44
+
45
+ #!/usr/bin/python
46
+
47
+ # -*- coding: utf-8 -*-
48
+
49
+
50
+
51
+ from smbus import SMBus
52
+
53
+ import time
54
+
55
+
56
+
57
+ bus_number = 1
58
+
59
+ i2c_address = 0x76
60
+
61
+
62
+
63
+ bus = SMBus(bus_number)
64
+
65
+
66
+
67
+ digT = []
68
+
69
+ digP = []
70
+
71
+ digH = []
72
+
73
+
74
+
75
+ t_fine = 0.0
76
+
77
+
78
+
79
+
80
+
81
+ def writeReg(reg_address, data):
82
+
83
+ bus.write_byte_data(i2c_address,reg_address,data)
84
+
85
+
86
+
87
+ def get_calib_param():
88
+
89
+ calib = []
90
+
91
+
92
+
93
+ for i in range (0x88,0x88+24):
94
+
95
+ calib.append(bus.read_byte_data(i2c_address,i))
96
+
97
+ calib.append(bus.read_byte_data(i2c_address,0xA1))
98
+
99
+ for i in range (0xE1,0xE1+7):
100
+
101
+ calib.append(bus.read_byte_data(i2c_address,i))
102
+
103
+
104
+
105
+ digT.append((calib[1] << 8) | calib[0])
106
+
107
+ digT.append((calib[3] << 8) | calib[2])
108
+
109
+ digT.append((calib[5] << 8) | calib[4])
110
+
111
+ digP.append((calib[7] << 8) | calib[6])
112
+
113
+ digP.append((calib[9] << 8) | calib[8])
114
+
115
+ digP.append((calib[11]<< 8) | calib[10])
116
+
117
+ digP.append((calib[13]<< 8) | calib[12])
118
+
119
+ digP.append((calib[15]<< 8) | calib[14])
120
+
121
+ digP.append((calib[17]<< 8) | calib[16])
122
+
123
+ digP.append((calib[19]<< 8) | calib[18])
124
+
125
+ digP.append((calib[21]<< 8) | calib[20])
126
+
127
+ digP.append((calib[23]<< 8) | calib[22])
128
+
129
+ digH.append( calib[24] )
130
+
131
+ digH.append((calib[26]<< 8) | calib[25])
132
+
133
+ digH.append( calib[27] )
134
+
135
+ digH.append((calib[28]<< 4) | (0x0F & calib[29]))
136
+
137
+ digH.append((calib[30]<< 4) | ((calib[29] >> 4) & 0x0F))
138
+
139
+ digH.append( calib[31] )
140
+
141
+
142
+
143
+ for i in range(1,2):
144
+
145
+ if digT[i] & 0x8000:
146
+
147
+ digT[i] = (-digT[i] ^ 0xFFFF) + 1
148
+
149
+
150
+
151
+ for i in range(1,8):
152
+
153
+ if digP[i] & 0x8000:
154
+
155
+ digP[i] = (-digP[i] ^ 0xFFFF) + 1
156
+
157
+
158
+
159
+ for i in range(0,6):
160
+
161
+ if digH[i] & 0x8000:
162
+
163
+ digH[i] = (-digH[i] ^ 0xFFFF) + 1
164
+
165
+
166
+
167
+ def readData():
168
+
169
+ data = []
170
+
171
+ for i in range (0xF7, 0xF7+8):
172
+
173
+ data.append(bus.read_byte_data(i2c_address,i))
174
+
175
+ pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4)
176
+
177
+ temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4)
178
+
179
+ hum_raw = (data[6] << 8) | data[7]
180
+
181
+
182
+
183
+ compensate_T(temp_raw)
184
+
185
+ compensate_P(pres_raw)
186
+
187
+ compensate_H(hum_raw)
188
+
189
+
190
+
191
+ def compensate_P(adc_P):
192
+
193
+ global t_fine
194
+
195
+ pressure = 0.0
196
+
197
+
198
+
199
+ v1 = (t_fine / 2.0) - 64000.0
200
+
201
+ v2 = (((v1 / 4.0) * (v1 / 4.0)) / 2048) * digP[5]
202
+
203
+ v2 = v2 + ((v1 * digP[4]) * 2.0)
204
+
205
+ v2 = (v2 / 4.0) + (digP[3] * 65536.0)
206
+
207
+ v1 = (((digP[2] * (((v1 / 4.0) * (v1 / 4.0)) / 8192)) / 8) + ((digP[1] * v1) / 2.0)) / 262144
208
+
209
+ v1 = ((32768 + v1) * digP[0]) / 32768
210
+
211
+
212
+
213
+ if v1 == 0:
214
+
215
+ return 0
216
+
217
+ pressure = ((1048576 - adc_P) - (v2 / 4096)) * 3125
218
+
219
+ if pressure < 0x80000000:
220
+
221
+ pressure = (pressure * 2.0) / v1
222
+
223
+ else:
224
+
225
+ pressure = (pressure / v1) * 2
226
+
227
+ v1 = (digP[8] * (((pressure / 8.0) * (pressure / 8.0)) / 8192.0)) / 4096
228
+
229
+ v2 = ((pressure / 4.0) * digP[7]) / 8192.0
230
+
231
+ pressure = pressure + ((v1 + v2 + digP[6]) / 16.0)
232
+
233
+ print ("pressure : %7.2f hPa" % pressure/100)
234
+
235
+
236
+
237
+ def compensate_T(adc_T):
238
+
239
+ global t_fine
240
+
241
+ v1 = (adc_T / 16384.0 - digT[0] / 1024.0) * digT[1]
242
+
243
+ v2 = (adc_T / 131072.0 - digT[0] / 8192.0) * (adc_T / 131072.0 - digT[0] / 8192.0) * digT[2]
244
+
245
+ t_fine = v1 + v2
246
+
247
+ temperature = t_fine / 5120.0
248
+
249
+ print ("temp : %-6.2f ℃" % (temperature))
250
+
251
+
252
+
253
+ def compensate_H(adc_H):
254
+
255
+ global t_fine
256
+
257
+ var_h = t_fine - 76800.0
258
+
259
+ if var_h != 0:
260
+
261
+ 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)))
262
+
263
+ else:
264
+
265
+ return 0
266
+
267
+ var_h = var_h * (1.0 - digH[0] * var_h / 524288.0)
268
+
269
+ if var_h > 100.0:
270
+
271
+ var_h = 100.0
272
+
273
+ elif var_h < 0.0:
274
+
275
+ var_h = 0.0
276
+
277
+ print ("hum : %6.2f %" % (var_h))
278
+
279
+
280
+
281
+
282
+
283
+ def setup():
284
+
285
+ osrs_t = 1 #Temperature oversampling x 1
286
+
287
+ osrs_p = 1 #Pressure oversampling x 1
288
+
289
+ osrs_h = 1 #Humidity oversampling x 1
290
+
291
+ mode = 3 #Normal mode
292
+
293
+ t_sb = 5 #Tstandby 1000ms
294
+
295
+ filter = 0 #Filter off
296
+
297
+ spi3w_en = 0 #3-wire SPI Disable
298
+
299
+
300
+
301
+ ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode
302
+
303
+ config_reg = (t_sb << 5) | (filter << 2) | spi3w_en
304
+
305
+ ctrl_hum_reg = osrs_h
306
+
307
+
308
+
309
+ writeReg(0xF2,ctrl_hum_reg)
310
+
311
+ writeReg(0xF4,ctrl_meas_reg)
312
+
313
+ writeReg(0xF5,config_reg)
314
+
315
+
316
+
317
+
318
+
319
+ setup()
320
+
321
+ get_calib_param()
322
+
323
+
324
+
325
+
326
+
327
+ if __name__ == '__main__':
328
+
329
+ try:
330
+
331
+ readData()
332
+
333
+ except KeyboardInterrupt:
334
+
335
+ pass
336
+
337
+
338
+
339
+
340
+
341
+ import gspread
342
+
343
+ from oauth2client.service_account import ServiceAccountCredentials
344
+
345
+
346
+
347
+ column_datas = []
52
348
 
53
349
 
54
350
 
55
351
  def read_data():
56
352
 
57
- global tweet_str
353
+ global column_datas
58
-
59
- :
354
+
60
-
61
- tweet_str = compensate_T(temp_raw)
355
+
62
-
356
+
63
- tweet_str = tweet_str + ' ' + compensate_P(pres_raw)
357
+ column_datas.append(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
64
-
65
- tweet_str = tweet_str + ' ' + compensate_H(hum_raw)
358
+
66
-
67
- print tweet_str
359
+
68
-
69
- :
360
+
70
-
71
-
72
-
361
+
362
+
73
- def tweet_data():
363
+ def write_data():
364
+
74
-
365
+ global column_datas
366
+
75
- consumerKey = "{Consumer Key (API Key)}"
367
+ filename = '/home/pi/BME280-master/Python27/BME280test-d6e6eab111ef.json'
76
-
368
+
77
- consumerSecret = "{Consumer Secret (API Secret)}"
369
+ client_email = "bme280test@bme280test.iam.gserviceaccount.com"
370
+
78
-
371
+ with open(filename) as f: private_key = f.read()
372
+
373
+ scopes = ['https://spreadsheets.google.com/feeds/', 'https://docs.google.com/feeds']
374
+
375
+ credentials = ServiceAccountCredentials.from_json_keyfile_name(filename, scopes)
376
+
377
+ gs = gspread.authorize(credentials)
378
+
79
- accessToken = "{Access Token}"
379
+ doc = gs.open('bme280_thp')
80
-
380
+
81
- accessSecret = "{Access Token Secret}"
381
+ sheet = doc.worksheet("bme280")
82
-
382
+
83
- twitter = Twython(consumerKey, consumerSecret, accessToken, accessSecret)
383
+ sheet.append_row(column_datas)
84
-
85
- twitter.update_status(status=datetime.now().strftime("%Y/%m/%d %H:%M:%S") + ' ' + tweet_str)
384
+
86
-
87
- :
385
+
88
386
 
89
387
 
90
388
 
91
389
  def compensate_P(adc_P):
92
390
 
93
- :
391
+ global column_datas
94
-
392
+
393
+
394
+
95
- return " / 気圧: %7.2f hPa" % (pressure/100)
395
+ column_datas.append("%7.2f" % (pressure/100))
396
+
397
+
96
398
 
97
399
 
98
400
 
99
401
  def compensate_T(adc_T):
100
402
 
101
- :
403
+ global column_datas
102
-
404
+
405
+
406
+
103
- return " / 温度: %-6.2f" % (temperature)
407
+ column_datas.append("%-6.2f" % (temperature))
408
+
409
+
104
410
 
105
411
 
106
412
 
107
413
  def compensate_H(adc_H):
108
414
 
109
- :
415
+ global column_datas
110
-
416
+
417
+
418
+
111
- return " / 湿度: %6.2f %%" % (var_h)
419
+ column_datas.append("%6.2f" % (var_h))
420
+
421
+
112
422
 
113
423
 
114
424
 
@@ -116,18 +426,18 @@
116
426
 
117
427
  try:
118
428
 
119
- :
120
-
121
- read_data()
429
+ read_data()
122
-
430
+
123
- tweet_data()
431
+ tweet_data()
124
-
432
+
125
- :
433
+ write_data()'''
434
+
435
+
126
436
 
127
437
  ### 試したこと
128
438
 
129
439
 
130
440
 
131
- : は削除しました。
441
+
132
442
 
133
443
  pythonでチェックできる他のエラーは修正しました。