Wpis z mikrobloga

#esp8266 #blynk #iot

Cześć, jestem noga w programowaniu, a chciałbym odpalić podwójny odczyt temperatury z dwóch czujnikoŵ z odczytem przez Blynk. Udało mi się uruchomić jeden, ale drugi nie pokazuje odczytu w Blynku. Gdzie może być błąd?

// Template ID, Device Name and Auth Token are provided by the Blynk.Cloud

// See the Device Info tab, or Template settings

#define BLYNKTEMPLATEID "TMPL4swPX0pKP"

#define BLYNKTEMPLATENAME "termometr"

#define BLYNKAUTHTOKEN "gKgqNCNNWSY1FzEPCYkVoO0DBuHwL0B"

// Comment this out to disable prints and save space

#define BLYNK
PRINT Serial

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <BlynkSimpleEsp8266.h>

#include <OneWire.h>

#include <DallasTemperature.h>

// Blynk Authentication Token and WiFi credentials

#define BLYNKTEMPLATEID "mojtemplateID"

#define BLYNKTEMPLATENAME "termometr"

#define BLYNKAUTHTOKEN "moj token"

char ssid[] = "mojewifi";

char pass[] = "mojehaslo";

// Data pin definitions for DS18B20 sensors

#define ONEWIREBUS1 D2

#define ONE
WIREBUS2 D3

OneWire oneWire1(ONEWIREBUS1);

OneWire oneWire2(ONEWIREBUS2);

DallasTemperature DS18B201(&oneWire1);

DallasTemperature DS18B202(&oneWire2);

float temp1, temp2;

void setup() {

  Serial.begin(115200);

  Blynk.begin(BLYNKAUTHTOKEN, ssid, pass);

  DS18B201.begin();

  DS18B20
2.begin();

}

void loop() {

  Blynk.run();

  DS18B201.requestTemperatures();

  temp1 = DS18B20
1.getTempCByIndex(0);

  Serial.print("Temperature 1: ");

  Serial.println(temp1);

  Blynk.virtualWrite(V0, temp1);

  DS18B202.requestTemperatures();

  temp2 = DS18B20
2.getTempCByIndex(0);

  Serial.print("Temperature 2: ");

  Serial.println(temp2);

  Blynk.virtualWrite(V1, temp2);

}
  • 11
  • Odpowiedz
temp2 = DS18B202.getTempCByIndex(0);


@jurii: temp2 = DS18B202.getTempCByIndex(1); I podłącz wszystko do jednego gpio.
  • Odpowiedz
@jurii: Nie potrzebnie robisz wszystko dwa razy. Zrób tak jak dla jednego czujnika, same czujniki podłącz równolegle i czytaj je tak jak pokazałem.
DS18B20.getTempCByIndex(0);
DS18B20.getTempCByIndex(1);
DS18B20.getTempCByIndex(2);

itd w zależności ile masz czujników.
  • Odpowiedz
via Android
  • 0
@dktr niestety dalej czyta tylko jeden. Czujniki zamienialem miejscami i tez odczyt jest tylko z jednego. Oba podlaczone są pod D3.
  • Odpowiedz
@jurii: Ale w moim kodzie masz podłączyć oba czujniki pod D2 czy co tam se ustawisz #define ONEWIREBUS D2
Nie widzę też rezystora PULL_UP pomiędzy DATA a +3.3 V
  • Odpowiedz
@jurii: No i git malina, teraz ogarnij programowanie tego tak abyś najpierw czytał całą magistralę 1wire, zapisywał w tablicy adresy wszystkich czujników i potem czytał te właściwe aby zawsze pomiar się zgadzał i była możliwa podmiana/dołożenie czujnika tak aby się cała reszta nie wysypała. W mieszkaniu aktualnie działa mi 18 esp8266 które sobie coś tam mierzą i wszystko trafia tu http://meteo.lipowa.net/temperatury3.php ;)
  • Odpowiedz