2016-01-06 2 views
0

Я пытаюсь отправить свое измерение температуры с DS18B20, подключенного к малине Pi, к Thingspeak. Я создал канал для Thingspeak для этого проекта.Raspberry tempdata to Thingspeak


Я использую код по этой ссылке.

# Registrador de temperatura Nergiza.com 
# python 
import httplib, urllib, os, glob, time 

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 
     return temp_c 

temperatura = read_temp() 
params = urllib.urlencode({'field1': temperatura, 'key':'Pon_aquí_tu_key'}) 
headers = {"Content-type": "application/x-www-form-urlencoded","Accept": 
    "text/plain"} 
conn = httplib.HTTPConnection("api.thingspeak.com:80") 
conn.request("POST", "/update", params, headers) 
response = conn.getresponse() 
print response.status, response.reason 
data = response.read() 
conn.close() 

Я изменил ключ на свою api_key из Thingspeak. Когда я пытаюсь запустить это в терминале, он возвращает:

400 Bad Request 

400 Bad Request является своим родом плохого синтаксиса.
Thingspeak имеет ограничение на получение данных каждые 15 секунд.
Но даже добавив time.sleep(16) внизу, это ничего не меняет.

Я использую USB-модем/ручку.

Есть ли у кого-нибудь предложения?

ответ

0

Это была ошибка новобранец.
O был изменен на 0 в API_Key.

Script отлично работает для DS18B20 и thingspeak.com

0

Я использую тот же код здесь https://www.nersolar.es/ и работает отлично

+0

Добро пожаловать в SO! Хотя эта ссылка может дать правильный ответ, ссылка может опуститься в будущем, что делает правильный ответ недоступным. Скопируйте соответствующую часть здесь вместо использования ссылок. –

0

i'am используя этот простой код для отправки данных thingspeak от Raspberry Pi и это отлично работает для меня. Попробуйте это ...

import sys 
import RPi.GPIO as GPIO 
import os 
from time import sleep 
import urllib2 

DEBUG = 1 
# Setup the pins we are connect to 

#CONNECT OUT PIN 
co2pin = 16 

#Setup API and delay 
myAPI = "" 
myDelay = 16 #how many seconds between posting data 

GPIO.setmode(GPIO.BCM) 
GPIO.setup(co2pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 


def Cotime(co2pin): 
    co = 0 
    if (GPIO.input(co2pin) == True): 
    co += 1 
    return (str(co)) 


if __name__ == '__main__': 
    baseURL = 'https://api.thingspeak.com/update?api_key=%s' % myAPI 
    print baseURL 

    while True: 
    try: 
     co = Cotime(co2pin) 
     f = urllib2.urlopen(baseURL +"&field3=%s" % (co)) 
     print f.read() 
     print 'Value Detected' +str(co) 
     f.close() 
     sleep(int(myDelay)) 
    except: 
     print 'exiting.' 
     break