For some days now i am trying to build a simple system to measure temp. and hum. using a DHT22 sensor connected to a MKR100 that has a 3.7V 1000maH Li-On acuu..
I wrote a sketch that acts as a webserver displaying some data on a webpage. This the skektch:
/*
WiFi Web Server
A simple web server that shows the value of the analog input pins.
using a WiFi shield.
This example is written for a network using WPA encryption. For
WEP or WPA, change the WiFi.begin() call accordingly.
Circuit:
WiFi shield attached
Analog inputs attached to pins A0 through A5 (optional)
created 13 July 2010
by dlf (Metodo2 srl)
modified 31 May 2012
by Tom Igoe
*/
#include "DHT.h"
#define DHTPIN 6 // what digital pin we're connected to
#include <SPI.h>
#include <WiFi101.h>
#include <WiFiMDNSResponder.h>
char ssid[] = "TimeTech"; // your network SSID (name)
char pass[] = "secret"; // your network password (use for WPA, or use as key for WEP)
//int status = WL_IDLE_STATUS;
//char ssid[] = "yourNetwork"; // your network SSID (name)
//char pass[] = "secretPassword"; // your network password
int keyIndex = 0; // your network key Index number (needed only for WEP)
int status = WL_IDLE_STATUS;
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);
float tF;
float dP;
float dPF;
int countIndex=0;
WiFiServer server(80);
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue:
while (true);
}
IPAddress ip(192, 168, 178, 222);
WiFi.config(ip);
// analogReference();
// for(int i=0; i<8; i++; analogRead(A0));
// 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);
}
server.begin();
// you're connected now, so print out the status:
printWiFiStatus();
}
void loop() {
// listen for incoming clients
WiFiClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
int sensorValue1 = analogRead(A1);
int sensorValue3 = analogRead(A3);
float voltage1 = sensorValue1 * (3.3 / 1023.0);
float voltage3 = sensorValue3 * (3.3 / 1023.0);
client.print("analog input1 ");
client.print(" is ");
client.print(voltage1);
client.println(" V<br />");
client.print("analog input3 ");
client.print(" is ");
client.print(voltage3);
client.println(" V<br />");
client.println("<br />");
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
countIndex++;
float h = dht.readHumidity();
client.print("Aantal meetingen vandaag: ");
client.println(countIndex);
client.print("<BR />");
client.print("Temperatuur: ");
client.print(t);
client.print("℃<BR />");
client.print("Luchtvochtigheid: ");
client.print(h);
client.print("%<BR />");
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}
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");
}
The problem i notice is as folloows: If the MKR100 is connected tru the USB then the device wil start if i open the serial monitor on the IDE (No Lipo attached) iget
Attempting to connect to SSID: TimeTech
SSID: TimeTech
IP Address: 192.168.178.225
signal strength (RSSI):-59 dBm
and then if i open the page in the used IP adress i get
analog input1 is 0.02 V
analog input3 is 3.30 V
Aantal meetingen vandaag: 10
Temperatuur: 29.80℃
Luchtvochtigheid: 32.80%
And the the serialmonitor produces this output:
n
ew client
GET / HTTP/1.1
Host: 192.168.178.225
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
client disonnected
new client
GET / HTTP/1.1
Host: 192.168.178.225
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Then i connect the LIPO and remove the USB connection.
If i do this the connection stays stable and present.
But if i remove the USB first and then plugin the LIPO then the device wont connect to the router.
So the question is, is this a known problem with the MKR1000 of do i something wrong in the sketch??
Regards
Harry