writing to multiple fields of
2 ビュー (過去 30 日間)
古いコメントを表示
Hi.
I have to modify my question.
I am sending temperature data from 2 sensor installed on NODEMCU ESP8266. (I am using I2C comunication). Each sensor data is being sent to a single field of a channnel. On the serial monitor of Arduino IDE everything is fine. However, data of the fields are not the same of those in serial monitor. For installation of the these sensor on NODEMCU, I have used multiplexet TCA9548 and both sensors are defined on ports 0 and 1 ( tcaselect(0) and tcaselect(1)).
By these two lines of the codes, I am trying to send the temperatures on two fields of ThingSpeak:
ThingSpeak.writeField(myChannelNumber, 1, String(mlx1.readAmbientTempC()), apiKey);
ThingSpeak.writeField(myChannelNumber, 2, String(mlx2.readAmbientTempC()), apiKey);
I do not understand where the problem is. Kindly check the below code and let me know your idea.....
#include <SPI.h> //Load SPI comunication library
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <SoftwareSerial.h> // import the serial library
#include <ESP8266WiFi.h>
#include "ThingSpeak.h"
Adafruit_MLX90614 mlx1 = Adafruit_MLX90614();
Adafruit_MLX90614 mlx2 = Adafruit_MLX90614();
const char * apiKey = "S9GZsefweszxcQ21XP"; // Enter your Write API key from ThingSpeak
unsigned long myChannelNumber = 123456789;
const char *ssid = "iBehnam"; // replace with your wifi ssid and wpa2 key
const char *pass = "behnam555";
const char* server = "api.thingspeak.com";
#define TCAADDR0 0x70 // you need to conec nothing
WiFiClient client;
//OPENING THE FIRST MUX IN THE PORTS
void tcaselect(uint8_t i) {
if (i > 7) return;
Wire.beginTransmission(TCAADDR0);
Wire.write(1 << i);
Wire.endTransmission();
}
////////////CLOSING THE FIRST MUX IN THE PORTS
void endtcaselect(){
Wire.beginTransmission(TCAADDR0);
Wire.write(0); // no channel selected
Wire.endTransmission();
}
void setup() {
// put your setup code here, to run once:
Serial.println("Adafruit MLX90614 test");
Serial.begin(115200);
ThingSpeak.begin(client);
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
//*************INITIALIZING FIRST SENSOR MUX1*******************************
endtcaselect();
tcaselect(0);
mlx1.begin();
endtcaselect();
//*************INITIALIZING 2nd SENSOR MUX1*******************************
tcaselect(1);
mlx2.begin();
endtcaselect();
//*************INITIALIZING 2nd SENSOR MUX1*******************************
// tcaselect(2);
// mlx2.begin();
// endtcaselect();
}
void loop() {
// tcaselect(3);
// Send Day-of-Week
Serial.print("HEAT-SET--6 ");
if (client.connect(server,80)) // api.thingspeak.com
{
ThingSpeak.writeField(myChannelNumber, 1, String(mlx1.readAmbientTempC()), apiKey);
ThingSpeak.writeField(myChannelNumber, 2, String(mlx2.readAmbientTempC()), apiKey);
//*************INITIALIZING 2nd SENSOR MUX1*******************************
endtcaselect();
tcaselect(0);
Serial.print("Amb-1 = ");
Serial.print(mlx1.readAmbientTempC());
Serial.print("*C\tObj-1 = ");
Serial.print(mlx1.readObjectTempC());
Serial.print("*C ");
endtcaselect();
tcaselect(1);
Serial.print(" Amb-2 = ");
Serial.print(mlx2.readAmbientTempC());
Serial.print("*C Obj-2 = ");
Serial.print(mlx2.readObjectTempC());
Serial.println("*C ");
}
client.stop();
Serial.println("Waiting...");
delay(60000); // delay 1 minute
}
3 件のコメント
Christopher Stapels
2021 年 5 月 27 日
Adafruit_MLX90614 mlx1 = Adafruit_MLX90614();
Adafruit_MLX90614 mlx2 = Adafruit_MLX90614();
Adafruit_MLX90614 mlx3 = Adafruit_MLX90614();
The declarations look identical. How does your program know them apart? Are the pre addresssed?
採用された回答
Vinod
2021 年 5 月 27 日
編集済み: Vinod
2021 年 5 月 27 日
Try and log the values to the serial monitor. Do you see different values for each sensor?
Also, maybe your code needs to be like this:
endtcaselect();
tcaselect(0);
Serial.print("Amb-1 = ");
Serial.print(mlx1.readAmbientTempC());
Serial.print("*C\tObj-1 = ");
Serial.print(mlx1.readObjectTempC());
Serial.print("*C ");
ThingSpeak.setField(1, String(mlx1.readAmbientTempC()));
endtcaselect();
tcaselect(1);
Serial.print(" Amb-2 = ");
Serial.print(mlx2.readAmbientTempC());
Serial.print("*C Obj-2 = ");
Serial.print(mlx2.readObjectTempC());
Serial.println("*C ");
ThingSpeak.setField(2, String(mlx2.readAmbientTempC()));
ThingSpeak.writeFields(myChannelNumber, apiKey);
...
その他の回答 (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!