diff --git a/NodeMCUWiFiModule.ino b/NodeMCUWiFiModule.ino index f6fab71..11acc7b 100644 --- a/NodeMCUWiFiModule.ino +++ b/NodeMCUWiFiModule.ino @@ -1,82 +1,97 @@ #include -#include #include +#include -#define WIFI_SSID "" -#define WIFI_PASS "" +#define WIFI_SSID "KAIPPUZHAKKUNNEL" +#define WIFI_PASS "7042754150" -#define IP_BROADCAST "192.168.1.255" -#define UDP_PORT 8176 +WiFiServer server(80); -String status = ""; -float distance = -1; -float duration; -WiFiUDP client; - -const int triggerPin = D6; -const int echoPin = D5; - -SPI_DEVICE_TXBIT_LSBFIRST; +SoftwareSerial sensorSerial; +unsigned long int lastPrintTime = 0; +unsigned long int lastWiFiCheck = 0; +int distance_d = 0; void setup() { delay(5000); + WiFi.mode(WIFI_STA); + WiFi.setAutoReconnect(true); WiFi.begin(WIFI_SSID, WIFI_PASS); - pinMode(echoPin, INPUT); - pinMode(triggerPin, OUTPUT); - - status = "Connecting"; while(WiFi.status() != WL_CONNECTED) { delay(500); } - status = WiFi.localIP().toString(); + String status = WiFi.localIP().toString(); Serial.begin(9600); Serial.println("Got IP: " + status); - int err = client.begin(81); - if(err == 0) { - Serial.println("Failed to create UDP Socket"); - } - else { - Serial.println("Created UDP Socket at port 81"); - } - Serial.println(String("IP BROADCAST ID SET TO: ") + String(IP_BROADCAST)); - Serial.println(String("UDP PORT SET TO: ") + String(UDP_PORT)); + sensorSerial.begin(9600, SWSERIAL_8N1, D5, D6, false, 64); + server.begin(); } + void loop() { - digitalWrite(triggerPin, LOW); - delayMicroseconds(2); - digitalWrite(triggerPin, HIGH); - delayMicroseconds(10); - digitalWrite(triggerPin, LOW); - duration = pulseIn(echoPin, HIGH); - distance = (duration*.0343)/2; - - if(WiFi.status() != WL_CONNECTED) { - WiFi.begin(WIFI_SSID, WIFI_PASS); - while(WiFi.status() != WL_CONNECTED) { - delay(500); + uint8_t data_header = 0xFF; + uint8_t data[3]; //comprises of data_high, data_low & checksum. + if(sensorSerial.available() >= 4) { + if(sensorSerial.read() == 0xFF) { + data[0] = sensorSerial.read(); + data[1] = sensorSerial.read(); + data[2] = sensorSerial.read(); + uint8_t checksum = (data_header + data[0] + data[1]) & 0xFF; + bool correct_checksum = false; + if(data[2] == checksum) { + correct_checksum = true; + distance_d = (data[0] << 8) | data[1]; + } + else { + while(sensorSerial.available()) { + sensorSerial.read(); + } + } + if(millis() - lastPrintTime >= 3000) { + Serial.println("Got Header Byte."); + if(correct_checksum) + Serial.println("Checksum is correct."); + else + Serial.println("Checksum is incorrect."); + Serial.printf("Current Distance: %d mm\n", distance_d); + lastPrintTime = millis(); + } } } - String d = String(distance); - String d2 = String(duration); - Serial.println("Distance is: " + d); - Serial.println("Duration is: " + d2); - byte *buff = new byte[4]; - byte *array = (byte *) &distance; - for(int i=0;i<4;i++) { - buff[i] = array[3-i]; + if(WiFi.status() != WL_CONNECTED) { + if(millis() - lastWiFiCheck >= 10000) { + WiFi.reconnect(); + lastWiFiCheck = millis(); + } + return; } - Serial.print("Data flipped is: "); - for(int i=0;i<4;i++) { - Serial.print(buff[i], HEX); - } - Serial.println(""); + WiFiClient client = server.available(); + if (client) { + unsigned long clientTimeout = millis(); + Serial.println("New Client."); + while(client.connected() && !client.available()) { + if (millis() - clientTimeout > 1000) { + Serial.println("Client timeout."); + client.stop(); + return; + } + delay(1); + } - client.beginPacket(IP_BROADCAST, UDP_PORT); - client.write(buff, sizeof(float)); - client.endPacket(); - delay(3000); - delete[] buff; + if (client.available()) { + while (client.available()) { + client.read(); + } + } + + client.println("HTTP/1.1 200 OK"); + client.println("Content-Type: application/json"); + client.println("Connection: close"); + client.println(); + client.printf("{\"distance\": %d, \"unit\": \"mm\"}\n", distance_d); + client.stop(); + Serial.println("Client disconnected."); + } }