Forum: Mikrocontroller und Digitale Elektronik TCRT5000 und DHT mit einem ESP32 auslesen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Fritz B. (kleinfritzchen)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Hab hier folgenden Code verfasst:
1
#include <Basecamp.hpp>
2
#include <DHTesp.h>
3
#include <AsyncMqttClient.h>
4
5
Basecamp iot;
6
#define LED_pin 2
7
8
AsyncMqttClient mqttClient;
9
/** Initialize DHT sensor */
10
DHTesp dht;
11
/** Task handle for the light value read task */
12
TaskHandle_t tempTaskHandle = NULL;
13
/** Pin number for DHT11 data pin */
14
int dhtPin = 25;
15
char tempBuf[2]={0};
16
17
TempAndHumidity lastValues;
18
char feuchtBuf[2]={0};
19
20
/*
21
hw_timer_t * timer = NULL;
22
volatile uint8_t ledstat = 0; 
23
24
void IRAM_ATTR onTimer(){
25
 // ledstat=1-ledstat;
26
 // digitalWrite(16, ledstat);   // turn the LED on or off
27
  // lastValues = dht.getTempAndHumidity();
28
 Serial.println("*************************auslesen*********************");
29
}
30
*/
31
void setup() {
32
  // put your setup code here, to run once:
33
34
35
  // Initialize temperature sensor
36
  dht.setup(dhtPin, DHTesp::DHT22);
37
38
  iot.begin();
39
  pinMode(LED_pin, OUTPUT);
40
  Serial.begin(115200);
41
  iot.mqtt.onConnect(mqttConnected);
42
  iot.mqtt.onMessage(mqttMessage);
43
44
 /*  Serial.println("start timer ");
45
  timer = timerBegin(0, 80, true);  // timer 0, MWDT clock period = 12.5 ns * TIMGn_Tx_WDT_CLK_PRESCALE -> 12.5 ns * 80 -> 1000 ns = 1 us, countUp
46
  timerAttachInterrupt(timer, &onTimer, true); // edge (not level) triggered 
47
  timerAlarmWrite(timer, 2000000, true); // 1000000 * 1 us = 1 s, autoreload true
48
timerAlarmEnable(timer); // enable
49
*/
50
}
51
void mqttConnected(bool sessionPresent) {
52
  iot.mqtt.subscribe("example1/led", 0);
53
  iot.mqtt.publish("stromzaehler/temp", 1, true,tempBuf );
54
  iot.mqtt.publish("stromzaehler/relFeucht", 1, true, feuchtBuf );
55
  Serial.print("*****************");
56
  Serial.println(tempBuf);
57
}
58
59
void mqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len,
60
                 size_t index, size_t total) {
61
  payload[len] = '\0';
62
  String strTopic = String(topic);
63
  String strPayload = String((char * ) payload);
64
65
  if (strTopic == "example1/led") {
66
    if (strPayload == "off" || strPayload == "0" || strPayload == "false") {
67
      digitalWrite(LED_pin, LOW);
68
      Serial.println("Lampe aus");
69
    }
70
    if (strPayload == "on" || strPayload == "1" || strPayload == "true") {
71
      digitalWrite(LED_pin, HIGH);
72
      Serial.println("Lampe an");
73
    }
74
  }
75
76
  
77
}
78
79
void loop() {
80
  // put your main code here, to run repeatedly:
81
  // Reading temperature and humidity takes about 250 milliseconds!
82
  // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
83
 
84
  lastValues = dht.getTempAndHumidity();
85
  Serial.println("Temperature: " + String(lastValues.temperature, 0));
86
  Serial.println("Humidity: " + String(lastValues.humidity, 0));
87
  dtostrf((lastValues.humidity),2, 0, feuchtBuf);
88
  dtostrf((lastValues.temperature),2, 0, tempBuf);
89
 delay(1000);
90
}

ich möchte jetztnoch den Impuls (roteer Strich) an meinem Ferrarie 
Zähler mit einem TCRT5000 ablesen. Hier kommt mir aber das Delay in die 
quere. Ich hab schon versucht das Delay durch einen Timer zu ersetzen 
was abe bisher noch nicht funktioniert hat. Wenn ich den Sensor DHT22 in 
der Rutine nach der abgelaufenen Zeit auslese vermute ich das das zu 
lange dauert (ca.250ms).
Wie kann ich das Problem angehen ohne gleich einen neues ESP für die 
Aufgabe verwenden zu müssen?

MfG Fritz

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.