Archiv für den Monat: Januar 2017

NodeMCU

Dank Heise weiß auch ich nun, dass die ESP8266 jetzt in Arduino integriert sind.

Und so läuft jetzt endlich die Temperaturüberwachung mit DS18B20.

Sehr schön. Und zwischen den Messungen legt er sich brav in Tiefschlaf mit 0,2mA. Da hält der Lipo eine Weile.

Schaltplan ist bocksimpel – NodeMCU 5V-Pin und GND an Akku (1s) und Pin D4 an den Signalpin (Mitte) des DS18B20, dazu noch einen Pullup 4,7k an 3,3V. VDD und GND des DS18B20 noch an 3,3V und GND. Fertig. Der parasitic mode hat bei mir nicht geklappt, dazu hätte ich noch einen FET gebraucht, der während der Messung den Pullup überbrückt. Da ist die normale Versorgung des Sensors einfacher zu haben.

Meinen Code teile ich auch:

#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define D0 16
#define D1 5
#define D2 4
#define D3 0
#define D4 2
#define D5 14
#define D6 12
#define D7 13
#define D8 15
#define D9 3
#define D10 1

#define myPeriodic   60 //in sec
#define ONE_WIRE_BUS D4

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature DS18B20(&oneWire);

float prevTemp = 0;
const char* server = "api.thingspeak.com";
String apiKey ="<<insert API key here>>";
const char* MY_SSID = "my54";
const char* MY_PWD = "<<WLAN password>>";

void setup() {
 Serial.begin(115200);
 delay(1000);
 connectWifi();
}

void loop() {
 float temp;
 
 DS18B20.requestTemperatures();
 temp = DS18B20.getTempCByIndex(0);
 
 Serial.print("t=");
 Serial.println(temp);

 if (temp<84.0)
  sendTemperatureTS(temp);
 
 WiFi.mode(WIFI_OFF);
 WiFi.forceSleepBegin();
 delay(1);
 Serial.println("power down");
 ESP.deepSleep(myPeriodic*1000000);
}

void connectWifi()
{
 Serial.print("Connecting to "+*MY_SSID);
 WiFi.begin(MY_SSID, MY_PWD);
 while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
 }
 Serial.println("Connected");
}//end connect

void sendTemperatureTS(float temp)
{
 WiFiClient client;
 if (client.connect(server, 80)) {
  Serial.println("Transmitting data");
  String postStr = apiKey;
  postStr += "&field1=";
  postStr += String(temp);
  postStr += "\r\n\r\n";
  client.print("POST /update HTTP/1.1\n");
  client.print("Host: api.thingspeak.com\n");
  client.print("Connection: close\n");
  client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
  client.print("Content-Type: application/x-www-form-urlencoded\n");
  client.print("Content-Length: ");
  client.print(postStr.length());
  client.print("\n\n");
  client.print(postStr);
  delay(1000);
 }//end if
 client.stop();
}//end send