2

I would really appreciate any help, my home project has been put on hold for weeks as I haven't been able to figure this out. In a nutshell, I'm connecting to my wifi network, measuring temperature from a sensor, and sending that temperature data to a server via a HTTP Request. All of that stuff works.

I have it in a loop, and on the 3rd HTTP request I get 'Connection Failed' when it's trying to client.connect(server, 80) - I don't understand why it fails. I've tried adding client.stop() and client.flush() after each HTTP request, but nothing fixes it. Below is my sketch file with some of the temperature code removed to make it easier to read

#include <SPI.h>
#include <WiFi101.h>
#include <string.h>
#include <stdlib.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//WiFi Client Setup
char ssid[] = "HIDDEN";  // your network SSID (name)
char pass[] = "HIDDEN";    // your network password
int status = WL_IDLE_STATUS;  // the WiFi radio's status
char server[] = "HIDDEN";
WiFiClient client;
// Setup for temperature sensor
#define ONE_WIRE_BUS A5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
void setup() {
 Serial.begin(9600);
 WiFi.setPins(8,2,A3,-1);
 while (!Serial) {
  Serial.println("Waiting for serial");
 }
 //Connect to wifi shield
 if (WiFi.status() == WL_NO_SHIELD) {
  Serial.println("WiFi shield not present");
  while (true);
 }
 wifiConnect();
 sensors.begin();
}
void loop() {
 while (client.available()) {
  char c = client.read();
  Serial.write(c);
 }
 /*
 Code to get temperature here
 */
 httpRequest(temp);
 delay(10000); // 5min
}
void httpRequest(String temp) {
 String request = "POST /api/webhooks/temp?temperature=" + temp + " HTTP/1.1";
 // if there's a successful connection:
 if (client.connect(server, 80)) {
  Serial.println("connected to server");
  client.println(request);
  client.println("Authorization: Token HIDDEN");
  client.println("Host: HIDDEN");
  client.println("Connection: close");
  client.println();
 }
 else {
  Serial.println("Connection failed");
 }
}
void wifiConnect() {
 //Attempt to connect to WiFi network:
 while ( status != WL_CONNECTED) {
  Serial.print("Attempting to connect to WPA SSID: ");
  Serial.println(ssid);
  status = WiFi.begin(ssid, pass);
  delay(1000);
 }
 Serial.println("You're connected to the network");
}
asked Aug 14, 2017 at 4:27
1
  • I am so disappointed by the lack of support in arduino community, lack of good documentation, and poorly written hardware/libraries. Even the example sketches fail. Commented Aug 15, 2017 at 21:35

1 Answer 1

2

I tried changing the strings to char's, that didn't work. Verified that it was closing connections with the server, check.

Was reading around and saw someone who tried a soft reset of the wifi client here. I added the following to the end of my httpRequest() method

client.stop();
WiFi.end();
delay(10);
WiFi.begin(ssid, pass);

And now it's working just fine. I'm going to have it run all night and see if there are any issues, but it's definitely an improvement as I can make more than 3 requests :|

This seems like a terrible work around. Clearly something isn't getting reset after each HTTP request on the wifi client, and this (right now) is the only way to solve it. I'd really love any other feedback on a better ways to solve it. Seems like some issues with the WiFi101 Library.

answered Aug 16, 2017 at 21:11
2
  • Are you still using this method? Commented Nov 26, 2017 at 4:23
  • I had the same issue. I can send consecutive requests, but if client.connect fails (e.g. timeout or whatever), then all subsequent requests fail. The only way of recovering is doing what you have done WiFi.end() + WiFi.begin(), in my case only after failure. It happens with both WiFi101 and WiFiNINA (my project runs on both boards) Commented Dec 11, 2020 at 18:13

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.