Home/Support/Support Forum/xbee and arduino wifi shield

xbee and arduino wifi shield

0 votes
I'm in the middle of a project at the moment that takes data from an arduino with an xbee s2 connected to it and sends that data to a coordinator xbee connected to an arduino.

What i'm trying to do at the moment and failing is to send the data from the coordinator xbee to ThingSpeak via wifi.

I only have the normal arduino wifi shield thats piggy backed onto the arduino.

I've connected the xbee s2 to the 5v, ground and the Rx of the wifi shield.
I don't have access to any other shields and was hoping that it would be a straight forward thing but alas not.

When i receive data from the end device to the coordinator attached to the arduino, i'm able to see that data. I also have a sensor on the coordinator arduino that i wish to push to ThingSpeak. The issue arrises when i try to receive data from the end device and then push it through the wifi sheild.

I really just don't know if its my code, wiring error or compatibility issues with the xbee and the wifi shield.

This is my code


#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
#include "WiFi.h"
#include "ThingSpeak.h"
#include <SoftwareSerial.h>
SoftwareSerial XBee(2, 3);

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

char ssid[] = "WiFi_Booster"; // your network SSID (name)
char pass[] = "RWTFYWTBLY"; // your network password (use for WPA, or use as key for WEP)

int status = WL_IDLE_STATUS;

WiFiServer server(80);

// ThingSpeak Settings
char thingSpeakAddress[] = "api.thingspeak.com";
char APIKey[] = "7N09113FNS651OWF"; // enter your channel's Write API Key
unsigned long channel_id = "914317";
const int updateThingSpeakInterval = 20 * 1000; // 20 second interval at which to update ThingSpeak

// Variable Setup
long lastConnectionTime = 0;
boolean lastConnected = false;

// Initialize Arduino Ethernet Client
WiFiClient client;

void setup() {


Serial.begin(9600);
while (!Serial);


if (!bme.begin(0x76)) { // ********** change from the default address (0x77) to 0x76
Serial.println("Could not find a valid BME680 sensor, check wiring!");
while (1);
}

// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue:
while (true);
}

// attempt to connect to Wifi network:
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);

// wait 10 seconds for connection:
delay(10000);


}


// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms

printWifiStatus();
ThingSpeak.begin(client);
}


void loop() {

while (XBee.available() > 0)
{ // If data comes in from XBee, send it out to serial monitor
//Serial.write(XBee.read());

float airQuality = XBee.read();
Serial.println(airQuality);

Serial.println("Posting " + String(airQuality, 2) + " to ThingSpeak");
ThingSpeak.setField(5, String(airQuality, 2));


if (! bme.performReading()) {
Serial.println("Failed to perform reading :(");
return;
}
Serial.print("Temperature = ");
Serial.print(bme.temperature);
Serial.println(" *C");

//ThingSpeak temp field
Serial.println("Posting " + String(bme.temperature, 2) + " to ThingSpeak");
ThingSpeak.setField(1, String(bme.temperature, 2));

Serial.print("Pressure = ");
Serial.print(bme.pressure / 100.0);
Serial.println(" hPa");

//ThinSpeak Pressure field
Serial.println("Posting " + String(bme.pressure, 2) + " to ThingSpeak");
ThingSpeak.setField(2, String(bme.pressure, 2));

Serial.print("Humidity = ");
Serial.print(bme.humidity);
Serial.println(" %");

//ThingSpeak humidity field
Serial.println("Posting " + String(bme.humidity, 2) + " to ThingSpeak");
ThingSpeak.setField(3, String(bme.humidity, 2));

Serial.print("Gas = ");
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(" KOhms");

//ThingSpeak gas field
Serial.println("Posting " + String(bme.gas_resistance / 1000.0, 2) + " to ThingSpeak");
ThingSpeak.setField(4, String(bme.gas_resistance / 1000.0, 2));

Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");

Serial.println();

ThingSpeak.writeFields(channel_id, APIKey);
delay(2000);
}

void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());

// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);

// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}

Thanks in advance
asked Dec 10, 2019 in RF Solutions and XBee by Dave401 New to the Community (0 points)

Please log in or register to answer this question.

1 Answer

0 votes
I don't know anything about the Wifi shield you are referring to but I can tell you is that if you are getting the data from the XBee, then it is not an issue with the XBee side of it. You might want to ask this question on a forum that is devoted to Arduino products as then the right folks will see it.
answered Dec 10, 2019 by mvut Veteran of the Digi Community (11,642 points)
...