-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathesp32-demo.ino
94 lines (79 loc) · 2.21 KB
/
esp32-demo.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "mj_ht_sensor.h"
#include "telegram_bot.h"
#include <TinyGsmClientSIM800.h>
#include <BLEDevice.h>
#include <BLEAddress.h>
#include <HardwareSerial.h>
#include <StreamString.h>
static const BLEAddress MJHT_ADDRESS("4c:65:a8:d3:e5:bc");
MjHtSensor mjHtSensor(MJHT_ADDRESS);
static const uint8_t MODEM_TX_PIN = 27;
static const uint8_t MODEM_RX_PIN = 25;
HardwareSerial modemSerial(1);
TinyGsmSim800 modem(modemSerial);
TinyGsmSim800::GsmClient gsmClient(modem);
TelegramBot bot(gsmClient);
long lastSendTime = 0;
void checkConnection()
{
if (!modem.isNetworkConnected()) {
Serial.println("Initializing modem");
if (!modem.restart()) {
Serial.println("Failed to initialize modem");
ESP.restart();
}
Serial.println("Connecting to mobile network");
if (!modem.waitForNetwork()) {
Serial.println("Failed to connect to mobile network");
ESP.restart();
}
}
if (!modem.isGprsConnected()) {
Serial.println("Connecting to Internet");
if (!modem.gprsConnect("internet", nullptr, nullptr)) {
Serial.println("Failed to connect to Internet");
return;
}
}
}
void bleTask(void*)
{
for (;;) {
Serial.println("Requesting values from BLE sensor");
if (mjHtSensor.requestUpdate()) {
Serial.printf("T=%0.2fºC H=%0.2f%%", mjHtSensor.temperature(), mjHtSensor.humidity());
Serial.println();
delay(30000);
}
else {
Serial.println("Failed to request values from BLE sensor");
delay(1000);
}
}
}
void setup()
{
Serial.begin(115200);
Serial.println("Starting ESP32 Demo");
modemSerial.begin(57600, SERIAL_8N1, MODEM_TX_PIN, MODEM_RX_PIN);
bot.begin();
BLEDevice::init("ESP32Demo");
BLEDevice::setPower(ESP_PWR_LVL_P7);
xTaskCreatePinnedToCore(bleTask, "bleTask", 4096,
nullptr, 0, nullptr, 1);
}
void loop()
{
checkConnection();
bot.processIncomingMessages();
if (mjHtSensor.available() && mjHtSensor.updateTime() > lastSendTime) {
StreamString text;
text.printf("T=%0.2fºC H=%0.2f%%", mjHtSensor.temperature(), mjHtSensor.humidity());
bot.publish(text);
lastSendTime = mjHtSensor.updateTime();
}
if (millis() - mjHtSensor.updateTime() > 300000) {
ESP.restart();
}
delay(1000);
}