Why did my Thinkspeak channel suddenly stop receiving data?
조회 수: 5 (최근 30일)
이전 댓글 표시
I've been uploading data from a set of moisture sensors to 6 channels on thingspeak (4 in one account and 2 in another). I am using free versions. I will be uploading less that 1000 messages a day, and there are large intervals inbetween the channels. This system worked fine for the past three weeks or so, but on the 24th of April, the data simply stopped uploading. I first tried to change the API key, then I tried to delete a channel and try again. I even tried sending sample data with no real values using a simplified code. Nothing seems to work. Any idea what may have happened? I am sending the code I've used for reference.
//****************************Connections*****************************//
//D0 ----------> EN (Mux)
//D1 ----------> SCL (Screen)
//D2 ----------> SDA (Screen)
//D3 ----------> Temp Data (DS18B20)
//D4 ----------> S0 (Mux)
//D5 ----------> S1 (Mux)
//D6 ----------> S2 (Mux)
//D7 ----------> S3 (Mux)
//D8 ----------> Relay
//A0 ----------> Z (Mux)
//********************************************************************//
//******************************DS18B20******************************//
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 0
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1 = {0x28, 0x90, 0x7F, 0xC7, 0x1F, 0x13, 0x1, 0xE0 }; //34
DeviceAddress sensor2 = { 0x28, 0xAA, 0x5E, 0x50, 0x19, 0x13, 0x2, 0xA3 }; //04
DeviceAddress sensor3 = { 0x28, 0x60, 0xF4, 0xB8, 0x1F, 0x13, 0x1, 0x1B }; //05
DeviceAddress sensor4 = { 0x28, 0xAA, 0xA2, 0xC, 0x19, 0x13, 0x2, 0xEE }; //03
DeviceAddress sensor5 = { 0x28, 0xAA, 0x9B, 0xF, 0x19, 0x13, 0x2, 0x11 }; //01
DeviceAddress sensor6 = { 0x28, 0xAA, 0x89, 0xF, 0x19, 0x13, 0x2, 0xEE }; //30
DeviceAddress sensor7 = { 0x28, 0xAA, 0xA8, 0xBB, 0x18, 0x13, 0x2, 0xEF }; //02
DeviceAddress sensor8 = { 0x28, 0xAA, 0xC5, 0x5D, 0x19, 0x13, 0x2, 0xF9 }; //32
DeviceAddress sensor9 = { 0x28, 0x36, 0x74, 0x45, 0x92, 0x18, 0x2, 0x13 }; //22
DeviceAddress sensor10 = { 0x28, 0x4F, 0xD2, 0x3C, 0x2F, 0x14, 0x1, 0x8A }; //31
DeviceAddress sensor11 = { 0x28, 0x2, 0x92, 0x45, 0x92, 0x18, 0x2, 0x64 }; //21
DeviceAddress sensor12 = { 0x28, 0xAA, 0x1D, 0x0, 0x19, 0x13, 0x2, 0xDC }; //33
DeviceAddress sensor13 = { 0x28, 0x7B, 0x1B, 0x45, 0x92, 0x5, 0x2, 0x37 }; //28
DeviceAddress sensor14 = { 0x28, 0xB6, 0x0, 0x45, 0x92, 0x11, 0x2, 0x39 }; //14
//********************************************************************//
//******************************74HC4067******************************//
#include "MUX74HC4067.h"
//********************************************************************//
//*******************************SCREEN*******************************//
//SCL ----------> D1
//SDA ----------> D2
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET LED_BUILTIN //4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//********************************************************************//
//******************************74HC4067******************************//
// Creates a MUX74HC4067 instance
// 1st argument is the Arduino PIN to which the EN pin connects
// 2nd-5th arguments are the Arduino PINs to which the S0-S3 pins connect
//MUX74HC4067 mux(7, 8, 9, 10, 11); //Arduino
MUX74HC4067 mux(16, 2, 14, 12, 13); //NodeMCU
//********************************************************************//
//******************************Internet******************************//
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ThingSpeak.h>
const char* ssid = "SSID";
const char* password = "PASSWORD";
WiFiClient client;
unsigned long Channel1 = censored; //2021 Moisture Set 1
const char * myWriteAPIKey1 = "censored";
unsigned long Channel2 = censored; //2021 Moisture Set 2
const char * myWriteAPIKey2 = "censored";
unsigned long Channel3 = censored; //2021 Moisture Set 3
const char * myWriteAPIKey3 = "censored";
unsigned long Channel4 = censored; //2021 Temperature Set 1
const char * myWriteAPIKey4 = "censored";
unsigned long Channel5 = censored; //2021 Temperature Set 2
const char * myWriteAPIKey5 = "censored";
//********************************************************************//
//*****************************Constants******************************//
int timeBetweenReadings = 60000; //1 minute
//int delayForNewReadingCycle = 900000; //15 minutes
//int delayForNewReadingCycle = 1800000; //30 minutes
int delayForNewReadingCycle = 2400000; //40 minutes
int MuxValues[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
//********************************************************************//
//**************************Important pins****************************//
#define relayPin 15
//********************************************************************//
void startup()
{
Serial.println(".");
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Print the IP address
Serial.println(WiFi.localIP());
ThingSpeak.begin(client);
delay(3000);
}
//********************************************************************//
void readMuxVal(int x) {
int data = 0;
int mPerc = 0;
data = mux.read(x); // Reads from channel i. Returns a value from 0 to 1023
mPerc=(-0.000000001219500040736946*(pow(data,4)))+(0.000002433251912455929*(pow(data,3)))+(-0.001531281295811*(pow(data,2)))+(0.227285203001156*(data))+(102.9068673556674);
Serial.print("Potentiometer at channel ");
Serial.print(x);
Serial.print(" is at ");
Serial.print(data);
Serial.print(" (");
Serial.print((double)(data) * 100 / 1023);
Serial.print("%%");
Serial.println(")");
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(WHITE); // Draw white text
if (x >= 0 && x <= 4) display.setCursor(10, ((8 * x) + 17));
if (x >= 5 && x <= 7) display.setCursor(70, ((8 * x) - 23));
if (x >= 8 && x <= 11) display.setCursor(10, ((8 * x) - 47));
if (x >= 12 && x <= 15) display.setCursor(70, ((8 * x) - 79));
display.print("Y");
display.print(x);
display.print(":");
display.print(mPerc);
display.print("%");
if (x >= 0 && x <= 3)
{
ThingSpeak.writeField(Channel1, (x+1), mPerc, myWriteAPIKey1);
delay (40000);
ThingSpeak.writeField(Channel1, (x+5), data, myWriteAPIKey1);
}
if (x >= 4 && x <= 7)
{
ThingSpeak.writeField(Channel2, (x-3), mPerc, myWriteAPIKey2);
delay (40000);
ThingSpeak.writeField(Channel2, (x+1), data, myWriteAPIKey2);
}
if (x >= 8 && x <= 11)
{
ThingSpeak.writeField(Channel3, (x-7), mPerc, myWriteAPIKey3);
delay (40000);
ThingSpeak.writeField(Channel3, (x-3), data, myWriteAPIKey3);
}
display.display();
MuxValues[x] = mPerc;
delay (timeBetweenReadings);
}
void setup()
{
//******************************74HC4067******************************//
Serial.begin(9600); // Initializes serial port
// Waits for serial port to connect. Needed for Leonardo only
while ( !Serial ) ;
// Configures how the SIG pin will be interfaced
// e.g. The SIG pin connects to PIN A0 on the Arduino,
// and PIN A0 is a analog input
mux.signalPin(A0, INPUT, ANALOG);
//********************************************************************//
//*******************************SCREEN*******************************//
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println("SSD1306 allocation failed");
for (;;); // Don't proceed, loop forever
}
//********************************************************************//
//*******************************RELAY********************************//
pinMode(relayPin, OUTPUT);
//********************************************************************//
//******************************DS18B20******************************//
sensors.begin();
//********************************************************************//
}
// Reads the 16 channels and reports on the serial monitor
// the corresponding value read by the A/D converter
void loop()
{
digitalWrite(relayPin, LOW);
display.clearDisplay();
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(WHITE); // Draw white text
display.setCursor(0,20); // Start at top-left corner
display.print("Connecting...");
display.print(ssid);
display.display();
startup();
if (WiFi.status() != WL_CONNECTED)
{
Serial.println("WiFi disconnected, reconnecting now.");
startup();
}
float data = 0;
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(WHITE); // Draw white text
display.setCursor(0, 0); // Start at top-left corner
display.println("Connected to");
display.print(ssid);
digitalWrite(relayPin, HIGH);
readMuxVal(0);
readMuxVal(1);
readMuxVal(2);
readMuxVal(3);
readMuxVal(4);
readMuxVal(5);
readMuxVal(6);
readMuxVal(7);
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(WHITE); // Draw white text
display.setCursor(0, 0); // Start at top-left corner
display.println("Connected to");
display.print(ssid);
readMuxVal(8);
readMuxVal(9);
readMuxVal(10);
readMuxVal(11);
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(WHITE); // Draw white text
display.setCursor(0, 0); // Start at top-left corner
display.println("Connected to");
display.print(ssid);
Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println("DONE");
Serial.print("Sensor 1(*C): ");
data = sensors.getTempC(sensor1);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel4, (1), data, myWriteAPIKey4);
}
display.setCursor(10, 24);
display.print("T1: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 2(*C): ");
data = sensors.getTempC(sensor2);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel4, (2), data, myWriteAPIKey4);
}
display.setCursor(10, 32);
display.print("T2: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
digitalWrite(relayPin, LOW); //RELAY PIN SWITCHES OFF HERE
Serial.print("Sensor 3(*C): ");
data = sensors.getTempC(sensor3);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel4, (3), data, myWriteAPIKey4);
}
display.setCursor(10, 40);
display.print("T3: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 4(*C): ");
data = sensors.getTempC(sensor4);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel4, (4), data, myWriteAPIKey4);
}
display.setCursor(10, 48);
display.print("T4: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 5(*C): ");
data = sensors.getTempC(sensor5);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel4, (5), data, myWriteAPIKey4);
}
display.setCursor(10, 56);
display.print("T5: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 6(*C): ");
data = sensors.getTempC(sensor6);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel4, (6), data, myWriteAPIKey4);
}
display.setCursor(70, 24);
display.print("T6: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 7(*C): ");
data = sensors.getTempC(sensor7);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel4, (7), data, myWriteAPIKey4);
}
display.setCursor(70, 32);
display.print("T7: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 8(*C): ");
data = sensors.getTempC(sensor8);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel4, (8), data, myWriteAPIKey4);
}
display.setCursor(70, 40);
display.print("T8: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 9(*C): ");
data = sensors.getTempC(sensor9);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel5, (1), data, myWriteAPIKey5);
}
display.setCursor(70, 48);
display.print("T9: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 10(*C): ");
data = sensors.getTempC(sensor10);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel5, (2), data, myWriteAPIKey5);
}
display.setCursor(70, 56);
display.print("T10: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(WHITE); // Draw white text
display.setCursor(0, 0); // Start at top-left corner
//display.print("Readings");
display.println("Connected to");
display.print(ssid);
Serial.print("Sensor 11(*C): ");
data = sensors.getTempC(sensor11);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel5, (3), data, myWriteAPIKey5);
}
display.setCursor(10, 24);
display.print("T11: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 12(*C): ");
data = sensors.getTempC(sensor12);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel5, (4), data, myWriteAPIKey5);
}
display.setCursor(10, 32);
display.print("T12: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 13(*C): ");
data = sensors.getTempC(sensor13);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel5, (5), data, myWriteAPIKey5);
}
display.setCursor(10, 40);
display.print("T13: ");// Start at top-left corner
display.print(data);
display.display();
delay (timeBetweenReadings);
Serial.print("Sensor 14(*C): ");
data = sensors.getTempC(sensor14);
Serial.println(data);
if (data != 85 || data != -127)
{
ThingSpeak.writeField(Channel5, (6), data, myWriteAPIKey5);
}
display.setCursor(10, 48);
display.print("T14: ");// Start at top-left corner
display.print(data);
display.display();
delay (delayForNewReadingCycle);
}
댓글 수: 6
Christopher Stapels
2021년 4월 29일
HTTP communication has a standard list of communication codes. They let you know what the server did with the request you sent. You can see all of them here on wiki, and a ThingSpeak specific list for error codes.(200 not included).
the ThingSpeak library has extra codes in addition to the HTTP ones, they have a negative sign. For example, connectivity troubles may result in a -3XX error.
답변 (0개)
커뮤니티
더 많은 답변 보기: ThingSpeak 커뮤니티
참고 항목
카테고리
Help Center 및 File Exchange에서 Read Data from Channel에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!