Adding ESP8266 code; modified for the latest password for LEDE
authorrtrimana <rtrimana@uci.edu>
Fri, 16 Jun 2017 18:39:55 +0000 (11:39 -0700)
committerrtrimana <rtrimana@uci.edu>
Fri, 16 Jun 2017 18:39:55 +0000 (11:39 -0700)
benchmarks/other/MicrocontrollerCode/esp8266_sprinkler/esp_sprinkler/esp_sprinkler.ino [new file with mode: 0644]
benchmarks/other/MicrocontrollerCode/esp8266_sprinkler/protocol.txt [new file with mode: 0644]
benchmarks/other/MicrocontrollerCode/esp_how_to_upload.txt [new file with mode: 0644]

diff --git a/benchmarks/other/MicrocontrollerCode/esp8266_sprinkler/esp_sprinkler/esp_sprinkler.ino b/benchmarks/other/MicrocontrollerCode/esp8266_sprinkler/esp_sprinkler/esp_sprinkler.ino
new file mode 100644 (file)
index 0000000..0f1d855
--- /dev/null
@@ -0,0 +1,280 @@
+#include <ESP8266WiFi.h>
+#include <WiFiUdp.h>
+
+// wifi credentials
+#define WIFI_SSID   ("LEDE")
+#define WIFI_PASSWD ("1qaz2wsx3edcEsp")
+
+// the port the UDP will use.
+#define UDP_PORT (5556)
+
+// UDP connection
+WiFiUDP udp;
+
+#define NUMBER_OF_OUTPUTS (9)
+int outputsPins[9] = {13, 12, 14, 16, 15, 2, 0, 4, 5};
+int outputPinsState[9];
+int outputPinsDuration[9];
+unsigned long outputPinsRemainingDuration[9];
+
+unsigned long prevMillis = 0;
+
+// Function Declarations
+void parseUdpData(char* _data, int _length);
+void setPin(int _pin, int _state, int _duration);
+void sendPinInfo();
+
+void setup()
+{
+    // Enable the Serial Connection
+    Serial.begin(115200);
+    delay(100);
+
+    // We start by connecting to a WiFi network
+    Serial.println();
+    Serial.println();
+    Serial.print("Connecting to ");
+    Serial.println(WIFI_SSID);
+
+    // WiFi.begin(ssid, password);
+    WiFi.begin(WIFI_SSID, WIFI_PASSWD);
+
+
+    while (WiFi.status() != WL_CONNECTED)
+    {
+        delay(500);
+        Serial.print(".");
+    }
+
+    Serial.println("");
+    Serial.println("WiFi connected");
+    Serial.println("IP address: ");
+    Serial.println(WiFi.localIP());
+
+    // start the UDP on the specific port
+    udp.begin(UDP_PORT);
+
+    // Setup the pins for output
+    for (int i = 0; i < NUMBER_OF_OUTPUTS; ++i)
+    {
+        pinMode(outputsPins[i], OUTPUT);
+        digitalWrite(outputsPins[i], LOW);
+        outputPinsState[i] = 0;
+    }
+}
+
+
+void loop()
+{
+    // Check if there is a packet available
+    int packetSize = udp.parsePacket();
+
+    // there is data
+    if (packetSize > 0)
+    {
+        IPAddress remoteIp = udp.remoteIP();
+
+        //buffer to hold incoming packet
+        char packetBuffer[1024];
+        memset(packetBuffer, 0, 1024);
+
+        int len = udp.read(packetBuffer, 255);
+        parseUdpData(packetBuffer, len);
+    }
+
+    if (prevMillis == 0)
+    {
+        prevMillis = millis();
+        return;
+    }
+
+    unsigned long currentMillis = millis();
+
+    // Handle rollover
+    if (prevMillis >= currentMillis)
+    {
+        prevMillis = currentMillis;
+        return;
+    }
+
+    // get the millisecond difference
+    unsigned long difference = (currentMillis - prevMillis);
+
+    // wait 1 second
+    if ( difference > 1000)
+    {
+        // update the previous millis to current millis
+        prevMillis = currentMillis;
+
+        for (int i = 0; i < NUMBER_OF_OUTPUTS; i++)
+        {
+            if ((outputPinsState[i] == 1) && (outputPinsDuration[i] != -1))
+            {
+                outputPinsRemainingDuration[i] -= difference;
+
+                if (outputPinsRemainingDuration[i] <= 0)
+                {
+                    setPin(i, 0, -1);
+                }
+            }
+        }
+    }
+}
+
+
+
+void parseUdpData(char* _data, int _length)
+{
+    // Packet is not large enough for any valid command
+    if (_length < 3)
+    {
+        return;
+    }
+
+    Serial.println("packetDataArrived");
+
+    // convert into a String object for easy processing
+    char dataTmp[_length + 1];
+    dataTmp[_length] = 0;
+    memcpy(dataTmp, _data, _length);
+    String data = String(dataTmp);
+
+    String commandType = data.substring(0, 3);
+
+    if (commandType.equals("GET"))
+    {
+        Serial.println("GET Command");
+        sendPinInfo();
+    }
+    else if (commandType.equals("SET"))
+    {
+        Serial.println("SET Command");
+
+        // count the number of commas present
+        int commaCount = 0;
+        for (int i = 0; i < data.length(); i++)
+        {
+            if (data.charAt(i) == ',')
+            {
+                commaCount++;
+            }
+        }
+
+        // data is incorrectly formated
+        if (commaCount != 3)
+        {
+            return;
+        }
+
+        // find the comma positions
+        int commaPos[3];
+        for (int i = 0; i < 3; i++)
+        {
+            if (i == 0)
+            {
+                commaPos[i] = data.indexOf(',');
+            }
+            else
+            {
+                commaPos[i] = data.indexOf(',', commaPos[i - 1] + 1);
+            }
+        }
+
+        // split the string into the value positions based on the commas
+        String a = data.substring(commaPos[0], commaPos[1]);
+        String b = data.substring(commaPos[1], commaPos[2]);
+        String c = data.substring(commaPos[2], data.length());
+
+        // remove the commas from the string
+        a = a.substring(1, a.length());
+        b = b.substring(1, b.length());
+        c = c.substring(1, c.length());
+
+        // get rid of the leading and trailing white spaces
+        a.trim();
+        b.trim();
+        c.trim();
+
+        // Convert to an integer
+        int aInt = a.toInt();
+        int bInt = b.toInt();
+        int cInt = c.toInt();
+
+        // set the pins
+        // convert pin number from starting at 1 to starting at 0
+        setPin(aInt - 1, bInt, cInt);
+    }
+}
+
+
+
+void setPin(int _pin, int _state, int _duration)
+{
+    // Serial.print(_pin);
+    // Serial.print(" ,");
+    // Serial.print(outputsPins[_pin]);
+    // Serial.print(" ,");
+    // Serial.print(_state);
+    // Serial.print(" ,");
+    // Serial.print(_duration);
+    // Serial.println();
+
+
+    // update the pin state info
+    outputPinsState[_pin] = _state;
+    outputPinsDuration[_pin] = _duration;
+    outputPinsRemainingDuration[_pin] = _duration;
+
+    // set the pin mode
+    if (_state == 0)
+    {
+        digitalWrite(outputsPins[_pin], LOW);
+    }
+    else
+    {
+        digitalWrite(outputsPins[_pin], HIGH);
+    }
+}
+
+
+
+void sendPinInfo()
+{
+    String retString = "";
+
+    for (int i = 0; i < NUMBER_OF_OUTPUTS; i++)
+    {
+        retString += (i + 1);
+        retString += ", ";
+        retString += outputPinsState[i];
+        retString += ", ";
+        retString += outputPinsDuration[i];
+        retString += "\n";
+    }
+
+    udp.beginPacket(udp.remoteIP(), udp.remotePort());
+    udp.write(retString.c_str());
+    udp.endPacket();
+
+    Serial.println(retString);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/benchmarks/other/MicrocontrollerCode/esp8266_sprinkler/protocol.txt b/benchmarks/other/MicrocontrollerCode/esp8266_sprinkler/protocol.txt
new file mode 100644 (file)
index 0000000..4fc0ac2
--- /dev/null
@@ -0,0 +1,4 @@
+Pin values start at 1
+
+SET, <pinNum>, <value>, <Duration>
+GET 
\ No newline at end of file
diff --git a/benchmarks/other/MicrocontrollerCode/esp_how_to_upload.txt b/benchmarks/other/MicrocontrollerCode/esp_how_to_upload.txt
new file mode 100644 (file)
index 0000000..54dfa95
--- /dev/null
@@ -0,0 +1 @@
+https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/using-arduino-ide
\ No newline at end of file