Joselito in Discussions
上次活动时间: 2025-6-16

Bom dia se alguém puder me ajudar, meu código abaixo, não estou conseguintdo conectar o meu Esp8266 ao ThingSpeak, o erro tá na conexão. Estou usando o MicroPython e NodeMCU na plataforma Pytohn o sistema operacional Ubuntu 20 # DHT11 -> ESP8266/ESP32 # 1(Vcc) -> 3v3 # 2(Data) -> GPIO12 # 4(Gnd) -> Gnd import time, network, machine from dht import DHT11 from machine import Pin from umqtt.simple import MQTTClient print("Iniciando...") dht = DHT11(Pin(12, Pin.IN, Pin.PULL_UP)) estacao = network.WLAN(network.STA_IF) estacao.active(True) estacao.connect('xxxxxxx', 'xxxxxxxxx') while estacao.isconnected() == False: machine.idle() print('Conexao realizada.') print(estacao.ifconfig()) SERVIDOR = "mqtt.thingspeak.com" CHANNEL_ID = "XXXXXXXXXXXXXXXXX" WRITE_API_KEY = "XXXXXXXXXXXXXXXXXXXXX" topico = "channels/" + CHANNEL_ID + "/publish/" + WRITE_API_KEY cliente = MQTTClient("umqtt_client", SERVIDOR) try: while True: dht.measure() temp = dht.temperature() umid = dht.humidity() print('Temperatura: %3.1f °C' %temp) print('Umidade: %3.1f %%' %umid) conteudo = "field1=" + str(temp) + "&field2=" + str(umid) print ('Conectando a ThingSpeak...') cliente.connect() cliente.publish(topico, conteudo) cliente.disconnect() print ('Envio realizado.') time.sleep(600.0) except KeyboardInterrupt: estacao.disconnect() estacao.active(False) print("Fim.") ***************************************************************************************************** No shell aparece como resposta: MPY: soft reboot Iniciando... Conexao realizada. ('192.168.0.23', '255.255.255.0', '192.168.0.1', '8.8.8.8') Temperatura: 29.0 °C Umidade: 63.0 % Conectando a ThingSpeak... Traceback (most recent call last): File "<stdin>", line 38, in <module> File "umqtt/simple.py", line 67, in connect OSError: -2 linha 38 é cliente.connect() Erro ao conectar: cliente.connect() It appears you're connecting to an incorrect server, mqtt.thingspeak.com instead of mqtt3.thingspeak.com. Start by modifying this example. python ubuntu
cog in MATLAB Answers
上次活动时间: 2023-8-2

I am attempting to bulk write some JSON data to a ThingSpeak channel using the API. An example payload is: % Payload is data = { 'write_api_key': <my_api_write_key>, 'updates': [ {'field5': 833.205, 'field4': 6, 'field3': 775.648, 'field2': 24.2523, 'delta_t': 1, 'field1': 59.1391}, {'field5': 833.199, 'field4': 6, 'field3': 771.03, 'field2': 24.2844, 'delta_t': 2, 'field1': 59.1331}, {'field5': 833.208, 'field4': 6, 'field3': 750.343, 'field2': 24.3008, 'delta_t': 3, 'field1': 59.1405}, {'field5': 833.208, 'field4': 7, 'field3': None, 'field2': 24.2903, 'delta_t': 5, 'field1': 59.1479}, {'field5': 833.216, 'field4': 7, 'field3': 748.45, 'field2': 24.2965, 'delta_t': 6, 'field1': 59.1686}, {'field5': 833.21, 'field4': 8, 'field3': None, 'field2': 24.2914, 'delta_t': 7, 'field1': 59.1756}, {'field5': 833.204, 'field4': 8, 'field3': 738.847, 'field2': 24.2867, 'delta_t': 8, 'field1': 59.1943}, {'field5': 833.208, 'field4': 8, 'field3': 732.472, 'field2': 24.2814, 'delta_t': 10, 'field1': 59.1964}, {'field5': 833.212, 'field4': 8, 'field3': None, 'field2': 24.2599, 'delta_t': 11, 'field1': 59.1971}, {'field5': 833.207, 'field4': 8, 'field3': 737.475, 'field2': 24.2658, 'delta_t': 12, 'field1': 59.2122}, {'field5': 833.212, 'field4': 8, 'field3': None, 'field2': 24.2498, 'delta_t': 14, 'field1': 59.2161}, {'field5': 833.209, 'field4': 7, 'field3': 749.432, 'field2': 24.2503, 'delta_t': 15, 'field1': 59.2298}, {'field5': 833.208, 'field4': 7, 'field3': 760.224, 'field2': 24.2396, 'delta_t': 16, 'field1': 59.2308} ] } I am sending this payload programatically, in Python, with the requests library using the following command: response = requests.post(url='https://api.thingspeak.com/channels/<my_channel_id>/bulk_update.json', ... data=json.dumps(data)) This results in the response below: % Response { "status": "401", "error": { "error_code":"error_auth_required", "message":"Authorization Required", "details":"Please provide proper authentication details." } } I am certain that the API write key and channel_id are correct. I have used both for single writes successfully. I am using a free ThingSpeak account. I have also tried adding headers to the requests.post() call to indicate explicitly that this is json data. I'm not sure why this is occuring and would sincerely appreciate any pointers.
Ismet Perona in Discussions
上次活动时间: 2022-7-27

Hi Everyone, I'm a novice when it comes to programming and i'm trying to figure out why my weather data is not loading into my channel. I've had the code working previously before thingspeak went from MQTT to MQTT3. I'm having issues around the publish.single(). import subprocess import paho.mqtt.publish as publish import psutil import string import json from statistics import median from pms5003 import PMS5003 #weather_iot import requests import time from datetime import datetime from csv import writer import math import paho.mqtt.publish as publish #Thingspeak channel and MQQT protocol mqtt_client_ID = "detail removed" mqtt_username = "detail removed" mqtt_password = "detail removed" channelID = "detail removed" apiKey = "detail removed" topic = "channels/" + channelID + "/publish/" mqttHost = "mqtt3.thingspeak.com" tTransport = "websockets" useSSLWebsockets = False tTLS = None tPort = 80 def csv(): List=[now, Temperature1, IAQ1, Pressure1, Humidity1, PM1_0, PM2_5, PM10] with open('Weather.csv', 'a') as f_object: writer_object = writer(f_object) writer_object.writerow(List) f_object.close() return #PM sensor configuration pms5003 = PMS5003( device='/dev/ttyAMA0', baudrate=9600, pin_enable=22, pin_reset=27 ) #Open C File proc = subprocess.Popen(['./bsec_bme680'], stdout=subprocess.PIPE) listIAQ_Accuracy = [ ] listPressure = [ ] listGas = [ ] listTemperature = [ ] listIAQ = [ ] listHumidity = [ ] listStatus = [ ] for line in iter(proc.stdout.readline, ''): lineJSON = json.loads(line.decode("utf-8")) # process line-by-line lineDict = dict(lineJSON) listIAQ_Accuracy.append(int(lineDict['IAQ_Accuracy'])) listPressure.append(float(lineDict['Pressure'])) listGas.append(int(lineDict['Gas'])) listTemperature.append(float(lineDict['Temperature'])) listIAQ.append(float(lineDict['IAQ'])) listHumidity.append(float(lineDict['Humidity'])) listStatus.append(int(lineDict['Status'])) if len(listIAQ_Accuracy) == 20: #generate the median for each value IAQ_Accuracy = median(listIAQ_Accuracy) Pressure = median(listPressure) Gas = median(listGas) Temperature = median(listTemperature) IAQ = median(listIAQ) Humidity = median(listHumidity) Status = median(listStatus) #clear lists listIAQ_Accuracy.clear() listPressure.clear() listGas.clear() listTemperature.clear() listIAQ.clear() listHumidity.clear() listStatus.clear() #Temperature Offset Temperature = Temperature + 2 IAQ1 = round(IAQ,1) Temperature1 = round(Temperature, 1) Humidity1 = round(Humidity, 1) Pressure1 = round(Pressure, 1) data = pms5003.read() if Humidity1 < 80: CF = 1 else: CF = (Humidity1/100)*1.3 PM1_0 = format(data.pm_ug_per_m3(1.0)) PM2_5 = format(data.pm_ug_per_m3(2.5)) PM10 = format(data.pm_ug_per_m3(10)) PM1_0 = round(int(PM1_0) / CF,) PM2_5 = round((int(PM2_5)/CF/25) * 100,) PM10 = round((int(PM10)/CF/50) * 100,) now = datetime.now() tPayload = "field1=" + str(Temperature1)+ "&field2=" + str(IAQ1)+ "&field3=" + str(Pressure1)+ "&field4=" + str(Humidity1)+ "&field5=" + str(PM1_0)+ "&field6=" + str(PM2_5)+ "&field7=" + str(PM10) try: print ("[INFO] Data prepared to be uploaded") publish.single(topic, payload=tPayload, hostname=mqttHost, transport=tTransport, port=tPort, tls=tTLS, client_id=mqtt_client_ID, auth={'username':mqtt_username,'password':mqtt_password}) print ("[INFO] Data sent for 7 fields: ", Temperature1, IAQ1, Pressure1, Humidity1, PM1_0, PM2_5, PM10) except (KeyboardInterrupt): break except: print ("[INFO] Failure in sending data") csv() Raspberry Pi Weather Station MQTT Can you publish successfully from a desktop app like mqttx or MATLAB? Make sure you have added the permissions for the device to write to the correct channel. What error do you see? Hi Chris, I don't receive any errors. I tried connecting using my creddentials in MQTTX using port 80 and it didn't establish a connection. If I change this to port 1883 it establishes a connection. I only have one channel setup so the details should be correct. Does this part of the program look correct to you? mqtt_client_ID = "detail removed" #same as mqtt_username mqtt_username = "detail removed" mqtt_password = "detail removed" channelID = "detail removed" apiKey = "detail removed" topic = "channels/" + channelID + "/publish/" mqttHost = "mqtt3.thingspeak.com" tTransport = "websockets" useSSLWebsockets = False tTLS = None tPort = 80 publish.single(topic, payload=tPayload, hostname=mqttHost, transport=tTransport, port=tPort, tls=tTLS, client_id=mqtt_client_ID, auth={'username':mqtt_username,'password':mqtt_password}) it looks very similar to the code I tested that is in our doc example. To make sure you have the permissions for the device correct, I would try using mqttx, or MATLAB to publish to the channel. You need to specifically allow an MQTT device to publish to a channel. python mqtt
mohamed arshad peer mohamed in MATLAB Answers
上次活动时间: 2021-12-2

I am sending many values from my python side and I am also getting http response that requests are going but every 15-18 secs only one value at random is being selected and is being shown in my thingspeak graph. How do I lower this time ?
Tim Kendal in MATLAB Answers
上次活动时间: 2021-9-24

Since submitting my query below, I have run my code overnight and found that the data is in fact being uploaded corectly. It now shows in my channel. So my main problem has gone away. The remaining problem is in these lines of code which should print the response from Thingspeak in the console: print(str(response.status) + " " + str(response.reason) + " " + str(timenow) + " " + str(mBars)) #+ " " + str(temp)) print("\n") data = response.read() print(data) conn.close() except: print("connection failed") In short, the line conn.request("POST", "/update", params, headers) works, but lines relating to the response do not. This problem did not arise in my first Channel, mentioned below, where the response in the console is like this: 200 OK 2021-09-24 10:24:25 Any suggestions or help gratefully received! Thanks for looking at this. *********************************** Original post: I have successfully created my first Thingspeak channel and uploaded Mbar data (1 variable). This worked fine. This is the upload function that works - Python3 on my Raspberry Pi. def uploadData(pressure, cTemp): #upload to Thingspeak.com #ctemp is not used mBar = pressure timenow = datetime.now().strftime('%Y-%m-%d %H:%M:%S') params = urllib.parse.urlencode({'field1': mBar, 'key':key }) headers = {"Content-typZZe": "application/x-www-form-urlencoded","Accept": "text/plain"} conn = http.client.HTTPConnection("api.thingspeak.com:80") try: conn.request("POST", "/update", params, headers) response = conn.getresponse() #print(mBar) print(str(response.status) + " " + str(response.reason) + " " + str(timenow) + " " + str(mBar)) #+ " " + str(temp)) #print("\n") data = response.read() conn.close() except: print("connection failed") I am now trying to upload to a new Channel I've created, with 4 variables, all from a BM688 Sensor, and get a "connection faiiled" error every time the code calls the Upload function. The reast of the code works fine, displaying all 4 variables in the Console, and also saving the data to a csv file. This is the upload function that does NOT work: def uploadData(temperature, pressure, humidity, air_quality_score): #upload to Thingspeak.com Mbars = pressure timenow = datetime.now().strftime('%Y-%m-%d %H:%M:%S') params = urllib.parse.urlencode({'field1': temperature, 'field2': Mbars,'field3': humidity,'field4': air_quality_score,'key':key }) headers = {"Content-typZZe": "application/x-www-form-urlencoded","Accept": "text/plain"} conn = http.client.HTTPConnection("api.thingspeak.com:80") try: conn.request("POST", "/update", params, headers) response = conn.getresponse() #print(mBar) print(str(response.status) + " " + str(response.reason) + " " + str(timenow) + " " + str(mBars)) #+ " " + str(temp)) #print("\n") data = response.read() conn.close() except: print("connection failed") I'm not certain the params line of code is correct, but it does not generate any syntax errors, so I think it should be ok. I did try changing the params line to just 1 variable, but that did not work either. The API key I'm using is correct. Can someone try to point me in the right direction to find what is wrong please! I would be very grateful! Tim Kendal
Wolf F.K. in Discussions
上次活动时间: 2021-7-12

Hello to each other, I'm new here and wanted to test how it works with the transfer of data. To do this, I registered with ThingSpeak. I entered the API code in a Python script (see screenshot). Unfortunately, I always get the message: Response 400. When I enter the web address directly in the browser, I get a "0" back. I can't see an error entering the API key. Can you help me? I use a Raspberry 4B with the PIR sensor HC-SR501. The program will later run on a Raspberry Zero. Have a nice weekend everyone. Response 400, test how it works with the transfer One thing to check is to be sure you are using the channel API key and not your user API key. Also you can check the format of the API call in your browser window. See the API keys tab of your channel view for the suggested format. Danke für die schnelle Antwort. Ich habe einfach nochmal einen neuen API Schlüssel erzeugt und diesen per Drag and Trop eingegeben. Danach hat es funktioniert. Grüße aus Ulm/ Baden-Württemberg I'd also recommend removing the extra spaces in your 'requests.get' statement. Specifically, the spaces in this snippet 'api_key = SOMETHING & field1 = SOMEVALUE' should be replaced with 'api_key=SOMETHING&field1=SOMEVALUE'. The spaces get encoded as %20 (ascii character for spaces) and could be the reason you're seeing the 400 response. raspberry pir hc-sr501 python
Stefan Debold in MATLAB Answers
上次活动时间: 2020-7-24

Hi I have an Raspberry Pi Zero W that controlls the status of my Pool. I want to send the Pumpstatus (On/Off) to my Thingspeak-Channel and use the Lamp Indicator Widget to visualize the Status of the Poolpump but I could not find an exampel Python-Script how to send the GPIO Status (High, Low). When the Pump is on an Opptokoppler sends 3,3V to GPIO-Pin (BCM) 24 for the High-Signal. I know how to Setup the Thingspeak-Channel and the Widget but i do not know how to write the Python-Script for sending the GPIO-Status to Thingspeak. Maybe someone can help me. Thanks in advance for any help.
Roger Notknomuch in MATLAB Answers
上次活动时间: 2020-5-26

Hello Community, first of all let me admit, that I am - according to python - a "script-kiddie". I recently learned html5, css3 and javascript, but that is not helpful here. That is why I need your help. I found a script that is reading the data from my sds011 sensor. It passes its data to a webpage. So far so good. Now I would like to pass the data to thingspeak. After a couple of hours trying without really understanding I would appreciate help. I think the code line below ist the one I need for updating my channel in thingspeak. But the channel remains empty. No data shown. What have I done wrong? Help appreciated. Learning python is on my "To-Do-List" ;-) Kind regards, Roger Short code: import urllib .... urllib.request.urlopen("https://api.thingspeak.com/update?api_key=RJASGFLWRVM5JKHM&field1=pm25&field2=pm10") The entire code: #!/usr/bin/python -u # coding=utf-8 # "DATASHEET": http://cl.ly/ekot # https://gist.github.com/kadamski/92653913a53baf9dd1a8 from __future__ import print_function import serial, struct, sys, time, json, subprocess import urllib DEBUG = 0 CMD_MODE = 2 CMD_QUERY_DATA = 4 CMD_DEVICE_ID = 5 CMD_SLEEP = 6 CMD_FIRMWARE = 7 CMD_WORKING_PERIOD = 8 MODE_ACTIVE = 0 MODE_QUERY = 1 PERIOD_CONTINUOUS = 0 JSON_FILE = '/var/www/html/aqi.json' MQTT_HOST = '' MQTT_TOPIC = '/weather/particulatematter' ser = serial.Serial() ser.port = "/dev/ttyUSB0" ser.baudrate = 9600 ser.open() ser.flushInput() byte, data = 0, "" def dump(d, prefix=''): print(prefix + ' '.join(x.encode('hex') for x in d)) def construct_command(cmd, data=[]): assert len(data) <= 12 data += [0,]*(12-len(data)) checksum = (sum(data)+cmd-2)%256 ret = "\xaa\xb4" + chr(cmd) ret += ''.join(chr(x) for x in data) ret += "\xff\xff" + chr(checksum) + "\xab" if DEBUG: dump(ret, '> ') return ret def process_data(d): r = struct.unpack('<HHxxBB', d[2:]) pm25 = r[0]/10.0 pm10 = r[1]/10.0 checksum = sum(ord(v) for v in d[2:8])%256 return [pm25, pm10] #print("PM 2.5: {} μg/m^3 PM 10: {} μg/m^3 CRC={}".format(pm25, pm10, "OK" if (checksum==r[2] and r[3]==0xab) else "NOK")) def process_version(d): r = struct.unpack('<BBBHBB', d[3:]) checksum = sum(ord(v) for v in d[2:8])%256 print("Y: {}, M: {}, D: {}, ID: {}, CRC={}".format(r[0], r[1], r[2], hex(r[3]), "OK" if (checksum==r[4] and r[5]==0xab) else "NOK")) def read_response(): byte = 0 while byte != "\xaa": byte = ser.read(size=1) d = ser.read(size=9) if DEBUG: dump(d, '< ') return byte + d def cmd_set_mode(mode=MODE_QUERY): ser.write(construct_command(CMD_MODE, [0x1, mode])) read_response() def cmd_query_data(): ser.write(construct_command(CMD_QUERY_DATA)) d = read_response() values = [] if d[1] == "\xc0": values = process_data(d) return values def cmd_set_sleep(sleep): mode = 0 if sleep else 1 ser.write(construct_command(CMD_SLEEP, [0x1, mode])) read_response() def cmd_set_working_period(period): ser.write(construct_command(CMD_WORKING_PERIOD, [0x1, period])) read_response() def cmd_firmware_ver(): ser.write(construct_command(CMD_FIRMWARE)) d = read_response() process_version(d) def cmd_set_id(id): id_h = (id>>8) % 256 id_l = id % 256 ser.write(construct_command(CMD_DEVICE_ID, [0]*10+[id_l, id_h])) read_response() def pub_mqtt(jsonrow): cmd = ['mosquitto_pub', '-h', MQTT_HOST, '-t', MQTT_TOPIC, '-s'] print('Publishing using:', cmd) with subprocess.Popen(cmd, shell=False, bufsize=0, stdin=subprocess.PIPE).stdin as f: json.dump(jsonrow, f) if __name__ == "__main__": cmd_set_sleep(0) cmd_firmware_ver() cmd_set_working_period(PERIOD_CONTINUOUS) cmd_set_mode(MODE_QUERY); while True: cmd_set_sleep(0) for t in range(15): values = cmd_query_data(); if values is not None and len(values) == 2: print("PM2.5: ", values[0], ", PM10: ", values[1]) time.sleep(2) # open stored data try: with open(JSON_FILE) as json_data: data = json.load(json_data) except IOError as e: data = [] # check if length is more than 100 and delete first element if len(data) > 100: data.pop(0) # append new values jsonrow = {'pm25': values[0], 'pm10': values[1], 'time': time.strftime("%d.%m.%Y %H:%M:%S")} data.append(jsonrow) # save it with open(JSON_FILE, 'w') as outfile: json.dump(data, outfile) if MQTT_HOST != '': pub_mqtt(jsonrow) #!!!!!!!!!!!!!!!!!!! HERE urllib.request.urlopen("https://api.thingspeak.com/update?api_key=RJASGFLWRVM5JKHM&field1=pm25&field2=pm10") print("Going to sleep for 2 min...") # Alter time.sleep = 1200 cmd_set_sleep(1) time.sleep(120)
Jenna R in MATLAB Answers
上次活动时间: 2020-4-20

Hello all, For context to my issue, I have a Raspberry Pi successfully uploading pH, turbidity, and temperature sensor data to ThingSpeak using a basic program. I was asked to implement a way for the results to be uploaded even if there was no internet connectivity, so in Python, the results should save to a CSV file which will later be automatically uploaded when the program runs and has internet connectivity again. So, the logic is: If the Pi has internet, upload the sensor readings to ThingSpeak using the POST method. That's all. If the Pi does not have internet, save the readings to a CSV file. When the program is ran again, if the internet is still disconnected, it will save the readings to the CSV again by amending the file (not overwriting it). When the program is ran again, if the internet is connected, it will automatically upload the CSV file to ThingSpeak using the POST bulk-write CSV method. I have been searching the web for example code on how to get the bulk CSV upload for ThingSpeak working in Python. Most of the people asking for help are using the JSON method or Arduino code, but the ones who are using POST and Python (like I will be) have fixed their own issue without really going into detail on how they fixed it. I have checked the API thoroughly, but it is still confusing to me, even after checking out the examples that were in the MATLAB (such as this one: https://uk.mathworks.com/help/thingspeak/continuously-collect-data-and-bulk-update-a-thingspeak-channel-using-a-raspberry-pi-board.html ) Let me say that I am still quite new to Python/ThingSpeak. I've done my best to try to understand how the single write process works and apply it to the bulk write process, but I'm just drawing a blank. I guess my main question is that the URL in the API doesn't make sense to me: https://api.thingspeak.com/channels/channel_id/bulk_update.csv I understand I'm supposed to put my channel ID into the URL, but how does my CSV file data apply to the "bulk_update.csv" part of the URL? Am I supposed to read in the results of the CSV and insert them into the URL? Am I thinking about this the wrong way? For reference, here's the Python code I use to upload single entries (I cut out the parts of code that don't apply). Any help is greatly appreciated. import http.client import urllib import time import serial #Assign ThingSpeak read API key to a variable apiKey = 'XXXXXXXXX' def readSensors(): #Read sensor data (Code omitted, but it basically just grabs sensor data from the Arduino) return pH, turbidity, temperature def uploadReadings(): #ThingSpeak upload pH, turbidity, temperature = readSensors() params = urllib.parse.urlencode({'field1': pH, 'field2': turbidity, 'field3': temperature, 'key':apiKey}) headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"} conn = http.client.HTTPConnection("api.thingspeak.com:80") try: print("Attempting to contact ThingSpeak") conn.request("POST", "/update", params, headers) response = conn.getresponse() print ("Upload status: ", response.status, response.reason) conn.close() except: print("Connection failed") while True: uploadReadings() break
Owen Medeiros in MATLAB Answers
上次活动时间: 2019-11-5

Hello, I am trying to write instrument data to a ThingSpeak channel using python. I have installed the urllib package and I am using using the urlopen command to write data. I am able to write data for multiple fields (I have shown t1 as an example but I also have t2, t3), however the rate is inconsistent. More explicitly, the time in between data points varies. I have tried different length delays between events, still inconsistent. Is this because of Thingspeak, or my python script? c1 = 'https://api.thingspeak.com/update?api_key=__________&field4=' t1 = urllib.urlopen(c1+str(temp4)) t1.close() sleep(30)
chrisjx in MATLAB Answers
上次活动时间: 2018-5-14

I am researching the use of matlab engine for python on centos7 in AWS. I'd like to get a trial period of 1 month. I want to perform ongoing calculations to calibrate raw sensor readings from mysql into meaningful values. I've used thingspeak but it has limitations one of which is the 8 field limit per channel. A UI is not needed but a management web console would be cool. So how does it work? ;) As the devops person, I see how to install via: python setup.py install Questions: * Where do the scripts go? Recommended folder structure/framework? * Can I cron job the scripts? * Can I access mysql, make queries, update tables? * Can I convert or re-appropriate my existing thingspeak code? * Is there a management web console? * Can there be quick turn-around for trial period support questions? * Licensing and cost? Any references and/or advice appreciated, Chris.

关于 ThingSpeak

The community for students, researchers, and engineers looking to use MATLAB, Simulink, and ThingSpeak for Internet of Things applications. You can find the latest ThingSpeak news, tutorials to jump-start your next IoT project, and a forum to engage in a discussion on your latest cloud-based project. You can see answers to problems other users have solved and share how you solved a problem.