Repository navigation
Expand file tree
/
Copy pathcontroller.txt
More file actions
93 lines (75 loc) · 6.89 KB
/
Copy pathcontroller.txt
File metadata and controls
93 lines (75 loc) · 6.89 KB
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
// ---- Blynk IoT 2.0 template definitions MUST come first ----
#define BLYNK_TEMPLATE_ID "TMPL3Zo49Nb9U" // Replace with your Blynk IoT template ID
#define BLYNK_TEMPLATE_NAME "EnviRover" // Replace with your Blynk IoT template name
#define BLYNK_AUTH_TOKEN "Iwi_UKTzvawcSH6r7EgaVYBgrG-N55qe" // Replace with your device auth token
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <HardwareSerial.h>
// ---- LoRa ----
HardwareSerial LoRa(1);
// ---- WiFi credentials ----
char ssid[] = "Airtel_nare_7416"; // Replace with your WiFi SSID
char pass[] = "air20125"; // Replace with your WiFi password
void setup() {
Serial.begin(115200);
LoRa.begin(115200, SERIAL_8N1, 16, 17); // RX=16, TX=17
Serial.println("🎮 LoRa Controller Ready");
// ---- LoRa module setup ----
LoRa.println("AT+RESET"); delay(1000);
LoRa.println("AT+ADDRESS=2"); delay(200);
LoRa.println("AT+NETWORKID=5"); delay(200);
LoRa.println("AT+PARAMETER=12,7,1,4"); delay(200);
LoRa.println("AT+BAND=868000000"); delay(200);
Serial.println("✅ Ready to receive telemetry\n");
// ---- Connect to Blynk IoT ----
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
Blynk.run(); // Keep Blynk running
// ---- Send control commands via Serial ----
if (Serial.available()) {
char cmd = Serial.read();
String msg = String(cmd);
String atCmd = "AT+SEND=1," + String(msg.length()) + "," + msg;
LoRa.println(atCmd);
Serial.print("➡ Command Sent: ");
Serial.println(msg);
}
// ---- Receive telemetry from LoRa ----
if (LoRa.available()) {
String incoming = LoRa.readStringUntil('\n');
if (incoming.startsWith("+RCV=")) {
int secondComma = incoming.indexOf(',', incoming.indexOf(',') + 1);
int thirdComma = incoming.indexOf(',', secondComma + 1);
if (secondComma != -1 && thirdComma != -1) {
String payload = incoming.substring(secondComma + 1, thirdComma);
payload.trim();
Serial.println("📡 Raw Telemetry: " + payload);
// ---- Parse sensors: T, H, L, G ----
String temp = "", hum = "", light = "", gas = "";
int tStart = payload.indexOf("T:") + 2;
int tEnd = payload.indexOf("C");
if (tStart > 1 && tEnd > tStart) temp = payload.substring(tStart, tEnd);
int hStart = payload.indexOf("H:") + 2;
int hEnd = payload.indexOf("%", hStart);
if (hStart > 1 && hEnd > hStart) hum = payload.substring(hStart, hEnd);
int lStart = payload.indexOf("L:") + 2;
int lEnd = payload.indexOf("%", lStart);
if (lStart > 1 && lEnd > lStart) light = payload.substring(lStart, lEnd);
int gStart = payload.indexOf("G:") + 2;
if (gStart > 1 && gStart < payload.length()) gas = payload.substring(gStart);
// ---- Print telemetry to Serial ----
Serial.println("🌡 Temp: " + temp + " °C");
Serial.println("💧 Hum: " + hum + " %");
Serial.println("💡 Light: " + light + " %");
Serial.println("🟢 MQ2: " + gas + "\n");
// ---- Send telemetry to Blynk ----
if (temp.length() > 0) Blynk.virtualWrite(V0, temp.toFloat());
if (hum.length() > 0) Blynk.virtualWrite(V1, hum.toFloat());
if (gas.length() > 0) Blynk.virtualWrite(V2, gas.toInt());
if (light.length() > 0) Blynk.virtualWrite(V3, light.toFloat());
}
}
}
}