Hello,
I want so send DHT22 - temperature and humidity values to my own website using an Arduino Uno and an Adafruit CC3000 - Wifi Breakout.
I got a sketch from the internet that seems to do excaptly what I want (see the following code):
#include <Adafruit_CC3000.h>
#include <SPI.h>
#include "DHT.h"
// Define CC3000 chip pins
#define ADAFRUIT_CC3000_IRQ 3 // Interrupt Pin (UNO = 2 und 3)
#define ADAFRUIT_CC3000_VBAT 5 // VBEN
#define ADAFRUIT_CC3000_CS 10 // CS
// Define WiFi Settings
#define WLAN_SSID "IHREWLANSSID" // WLAN SSID - Darf nicht länger als 32 Zeichen sein!
#define WLAN_PASS "IHRWLANPASSWORT"// WLAN Passwort
#define WLAN_SECURITY WLAN_SEC_WPA2 // WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA or WLAN_SEC_WPA2
// Define DHT22 sensor pins
#define DHTPIN 7 // Digitaler Pin an dem der DHT angeschlossen ist
#define DHTTYPE DHT22 // Typ des DHT Sensors (DHT11, DHT22)
// Erzeugen von Instanzen für CC3000 & DHT
DHT dht(DHTPIN, DHTTYPE);
Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT, SPI_CLOCK_DIV2);
// Define website settings
#define WEBSITE "xxx.de" // Domainname
#define WEBPAGE "/Wetterstation/InsertValues.php" // URL + Name der Datei die aufgerufen werden soll
#define privateKey "abcxyz" // Dieser Key steht als sha1 hash in der insertValues.php
uint32_t ip; // IP Adresse des Servers wird im setup() mit getHostByName aus der URL ermittelt
long previousMillis = 0;
long interval = 1; // Upload-Interval in Minuten
int h; // Luftfeuchte
int t; // Temperatur
void setup(void)
{
interval = interval * 1000 * 60; // Das in Minuten angegebene Interval in Millisekunden umrechnen
delay(2000);
Serial.begin(115200);
Serial.println(F("WiFi Wetter-Station (CC3000)\n"));
Serial.println(F("Initialisiere CC3000..."));
if (!cc3000.begin()) {
Serial.println(F("CC3000 - Verkabelung checken!"));
while(1);
}
if (!cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {
Serial.println(F("Fehlgeschlagen!"));
while(1);
}
Serial.println(F("Verbunden!"));
// Wait for DHCP to complete
while (!cc3000.checkDHCP()) {
delay(1000);
}
// IP Adresse, DNS, Gateway, usw ermitteln und ausgeben
while (! displayConnectionDetails()) {
delay(1000);
}
ip = 0;
// Versuchen die IP-Adresse der Website zu ermitteln
Serial.print(WEBSITE); Serial.print(F(" -> "));
while (ip == 0) {
if (!cc3000.getHostByName(WEBSITE, &ip)) {
Serial.println(F("Konnte nicht aufgeloest werden!"));
}
delay(500);
} cc3000.printIPdotsRev(ip);
Serial.println();
}
void loop(void)
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
// Temperatur und Luftfeuchte ermitteln
h = dht.readHumidity();
t = dht.readTemperature();
// Messwerte ausgeben
Serial.print(F("Temperatur: "));
Serial.println(t);
Serial.print(F("Luftfeuchte: "));
Serial.println(h);
Serial.println("");
//Werte des DHT22 an Website senden
send_request(t, h);
}
delay(1000);
}
/**************************************************************************
Messwerte an Server senden und Antwort des Servers ausgeben
/**************************************************************************/
void send_request (int t, int h)
{
// Verbindung zum Server herstellen
Adafruit_CC3000_Client client = cc3000.connectTCP(ip, 80);
// Anfrage senden
if (client.connected()) {
client.fastrprint(F("GET "));
client.fastrprint(WEBPAGE);
client.fastrprint(F("?private_key="));
client.fastrprint(privateKey);
client.fastrprint("&temp=");
client.print(t);
client.fastrprint("&hum=");
client.print(h);
client.fastrprint(F(" HTTP/1.1\r\n"));
client.fastrprint(F("Host: "));
client.fastrprint(WEBSITE);
client.fastrprint(F("\r\n"));
client.println();
}
else {
Serial.println(F("Verbindung fehlgeschlagen"));
}
// Antwort vom Server ausgeben
while (client.connected()) {
while (client.available()) {
char c = client.read();
Serial.print(c);
}
// Verbindung zum Server schließen
Serial.println(F("Verbindung geschlossen"));
Serial.println();
}
client.close();
}
/**************************************************************************
IP-Adresse und andere Verbindungsdetails auslesen
/**************************************************************************/
bool displayConnectionDetails(void)
{
uint32_t ipAddress, netmask, gateway, dhcpserv, dnsserv;
if(!cc3000.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv)) {
Serial.println(F("Unable to retrieve the IP Address!\r\n"));
return false;
}
else {
Serial.print(F("\nIP Addr: ")); cc3000.printIPdotsRev(ipAddress);
Serial.print(F("\nNetmask: ")); cc3000.printIPdotsRev(netmask);
Serial.print(F("\nGateway: ")); cc3000.printIPdotsRev(gateway);
Serial.print(F("\nDHCPsrv: ")); cc3000.printIPdotsRev(dhcpserv);
Serial.print(F("\nDNSserv: ")); cc3000.printIPdotsRev(dnsserv);
Serial.println();
return true;
}
}
In the beginning the sketch runs as it should, but after a while it hangs (sometimes after 2 minutes, sometimes after 10 minutes, sometimes after an hour). After reseting the arduino it runs again up to the next hanging.
If the sketch runs normal it looks like this:
WiFi Wetter-Station (CC3000)
Initialisiere CC3000... (=> initializing)
Verbunden! (=> connected)
IP Addr: 192.168.178.24
Netmask: 255.255.255.0
Gateway: 192.168.178.1
DHCPsrv: 192.168.178.1
DNSserv: 192.168.178.1
xxx.de -> 81.169.145.xx
Temperatur: 22
Luftfeuchte: 44
Verbindung geschlossen (=> connection closed)
HTTP/1.1 200 OK
Date: Sun, 17 Apr 2016 08:58:41 GMT
Server: Apache/2.2.31 (Unix)
X-Powered-By: PHP/5.3.29
Transfer-Encoding: chunked
Content-Type: text/plain
17
Data stored in database
0
Verbindung geschlossen (=> connection closed)
Verbindung geschlossen (=> connection closed)
Verbindung geschlossen (=> connection closed)
[about 20 times]
When the sketch hangs, the last line in the serial monitor ("Verbindung geschlossen" => meaning "Connection closed") is repeated again and again, the Arduino-TX-LED lights permanently.
HTTP/1.1 200 OK
Date: Sun, 17 Apr 2016 09:51:10 GMT
Server: Apache/2.2.31 (Unix)
X-Powered-By: PHP/5.3.29
Transfer-Encoding: chunked
Content-Type: text/plain
17
Data stored in database
0
Verbindung geschlossen (=> connection closed)
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
Verbindung geschlossen
[again and again]
I updated the CC3000 firmware to version 1.32, I am using the current CC3000-library and tried IDE 1.0.6 as well as 1.6.4. Allways the same error.
Any idea what is the reason for this?? Website/database? Or my router (Fritzbox 7490)?
I tried inserting different delays - without success. Using the CC3000-library examples like buildtest.ino, Webclient.ino, etc. is without any difficulties but there are no loops.
Maybe one of you uses a sketch that is already working for a few months.