WIFI Noob needs help with a weather station project

I have an Arduino Yun wired to a DHT22 and BMP280 sensor. It’s wired correctly, and I can get the darn contraption to post to Thingspeak and a personal weather station on Weather Underground once after uploading the code to the board. Only once and not every 20 seconds! I have no idea what’s happening. All of the tutorials that I’ve found on the googlebox don’t reference a Yun. Can somebody help by highlighting what I am missing?

/* WeatherUnderground-ThingSpeak Weather Station
 * by Willy Kjellstrom, http://www.willykjellstrom.com
 * 
 * GY-BMP280 Pinout for SPI Connection
 * VCC - 3.3V
 * GND - GND
 * SCL - D13
 * SDA - D11
 * CSB - D10
 * SDO - D12
 */

#include "DHT.h"
#include <Wire.h>
#include "SPI.h"
#include <Adafruit_Sensor.h>
#include "Adafruit_BMP280.h"
#include "ThingSpeak.h"
#include "YunClient.h"
#include <YunServer.h>

#define DHTPIN 2
#define DHTTYPE DHT22
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11 
#define BMP_CS 10

DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);
YunClient client;

char SERVER[] = "rtupdate.wunderground.com"; // Realtime update server - RapidFire
char WEBPAGE [] = "GET /weatherstation/updateweatherstation.php?";
char ID [] = "KVACHARL95";
char PASSWORD [] = "******";

unsigned long myChannelNumber = 97037;
const char * myWriteAPIKey = "******";

void setup() {
  Serial.begin(9600);
  dht.begin();
  bmp.begin();
  Bridge.begin();
  ThingSpeak.begin(client);
}

void loop() {
  Serial.println(String("Temperature: ") + String(tempF()) + String(" F"));
  //Serial.println(String("Temperature: ") + String(tempC()) + String(" C"));
  Serial.println(String("Humidity: ") + String(humP()) + String(" %"));
  Serial.println(String("Heat Index: ") + String(heatI()) + String(" F"));
  //Serial.println(String("Heat Index: ") + String(heatIc()) + String(" C"));
  Serial.println(String("Dew Point: ") + String(dewPfah()) + String(" F"));
  //Serial.println(String("Dew Point: ") + String(dewP()) + String(" C"));
  //Serial.println(String("Pressure: ") + String(barP()) + String(" hPa"));
  Serial.println(String("Pressure: ") + String(barI()) + String(" inHg"));
  Serial.println(String("Altitude: ") + String(altF()) + String(" ft"));
  //Serial.println(String("Altitude: ") + String(altM()) + String(" m"));
  Serial.println("----------");

  ThingSpeak.setField(1,tempF());
  ThingSpeak.setField(2,humP());
  ThingSpeak.setField(3,heatI());
  ThingSpeak.setField(4,dewPfah());
  ThingSpeak.setField(5,barI());
  ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

  if (client.connect(SERVER, 80)) { 
    client.print(WEBPAGE); 
    client.print("ID=");
    client.print(ID);
    client.print("&PASSWORD=");
    client.print(PASSWORD);
    client.print("&dateutc=");
    client.print("now");
    client.print("&tempf=");
    client.print(tempF());
    client.print("&baromin=");
    client.print(barI());
    client.print("&dewptf=");
    client.print(dewPfah());
    client.print("&humidity=");
    client.print(humP());
    client.print("&softwaretype=Arduino%20Yun%20version1&action=updateraw&realtime=1&rtfreq=20");//Rapid Fire
    client.println();
  }
  else {
    Serial.println(F("Connection failed")); 
    delay(2000); 
    return;
  }
  client.stop();
  delay(20000);
}

float tempF(){
  float tF = dht.readTemperature(true);
  return tF;
}

float tempC(){
  float tC = dht.readTemperature();
  return tC;
}

float humP(){
  float hP = dht.readHumidity();
  return hP;
}

float dewPfah(){
  float dPf = (dht.readTemperature() - ((100 - dht.readHumidity())/5));
  float dewF = ((dPf * 1.8) + 32);
  return dewF;
}

float dewP(){
  float dP = (dht.readTemperature() - ((100 - dht.readHumidity())/5));
  return dP;
}

float heatI(){
  float hIn = dht.computeHeatIndex(dht.readTemperature(true), dht.readHumidity());
  return hIn;
}

float heatIc(){
  float hInc = dht.computeHeatIndex(dht.readTemperature(), dht.readHumidity(), false);
  return hInc;
}

float barP(){
  float bP = (bmp.readPressure() / 100);
  return bP;
}

float barI(){
  float bI = (bmp.readPressure() * .0002953);
  return bI;
}

float altF(){
  float aF = (bmp.readAltitude(1013.00) * 3.28084); // Change 1013.00 to current SLP for >accuracy http://w1.weather.gov/obhistory/KCHO.html
  return aF;
}

float altM(){
  float aM = (bmp.readAltitude(1013.00)); // Change 1013.00 to current SLP for >accuracy http://w1.weather.gov/obhistory/KCHO.html
  return aM;
}