From 28a49950baf35180c6ec5fc73b4c06b47b5f682a Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Fri, 31 May 2024 12:57:57 +0200 Subject: [PATCH 01/11] change ending from going to mainscreen to endscreen --- .../java/com/example/fitbot/ui/activities/FitnessActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 3c07cfb..8a40859 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -85,7 +85,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall int randomMessageIndex = (int) Math.floor(Math.random() * EXERCISE_NOT_FOUND_MESSAGES.length); Pepper.say(EXERCISE_NOT_FOUND_MESSAGES[randomMessageIndex]); Pepper.say(EXERCISE_NOT_FOUND_SEEK_HELP_MESSAGE); - NavigationManager.navigateToActivity(this, MainActivity.class); + NavigationManager.navigateToActivity(this, EndScreenActivity.class); }); }); From bc3c720fc26cbf017278b81388a5a032c2272b90 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Fri, 31 May 2024 12:58:04 +0200 Subject: [PATCH 02/11] OOP --- code/arduino/Movement-sensor-code/Movement-sensor-code.ino | 2 +- code/arduino/Movement-sensor-code/headerFIle.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino index 3bb3e92..15c5a57 100644 --- a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino +++ b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino @@ -34,7 +34,7 @@ struct acceleration { accelData.z, "data"); // %d = int, %f = floatation, %s = string - connectivity.httpPost("192.168.137.243", "/", 3445, buffer, strlen(buffer), "application/json"); + connectivity.httpPost(IP_ADDRESS, "/", 3445, buffer, strlen(buffer), "application/json"); lastTime = currentTime; } } diff --git a/code/arduino/Movement-sensor-code/headerFIle.h b/code/arduino/Movement-sensor-code/headerFIle.h index b065b3e..8e3480e 100644 --- a/code/arduino/Movement-sensor-code/headerFIle.h +++ b/code/arduino/Movement-sensor-code/headerFIle.h @@ -12,4 +12,6 @@ WebSocketsClient webSocket; #define pass "12345678" #define BUFFER_SIZE 1024 #define DEVICE_ID 1 +#define IP_ADDRESS "192.168.137.12" + char *buffer = (char *)malloc(sizeof(char) * BUFFER_SIZE); From 61dde9568478cbb9df1240a175c2a39344a42a97 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Fri, 31 May 2024 16:07:39 +0200 Subject: [PATCH 03/11] Added so pepper sends its ip to another ip --- .../fitbot/ui/activities/MainActivity.java | 11 ++- .../com/example/fitbot/util/Networking.java | 76 +++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 code/src/Fitbot/app/src/main/java/com/example/fitbot/util/Networking.java diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/MainActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/MainActivity.java index 2d86787..3aaca38 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/MainActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/MainActivity.java @@ -1,5 +1,6 @@ package com.example.fitbot.ui.activities; +import static com.example.fitbot.util.Networking.sendIpAddress; import android.annotation.SuppressLint; import android.content.Intent; import android.net.Uri; @@ -17,6 +18,10 @@ import android.widget.Button; import com.example.fitbot.R; import com.example.fitbot.util.NavigationManager; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; + public class MainActivity extends AppCompatActivity { // Variables @@ -30,7 +35,6 @@ public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - // Set full screen mode to hide status bar getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); @@ -49,6 +53,7 @@ public class MainActivity extends AppCompatActivity { // Hide system UI NavigationManager.hideSystemUI(this); + sendIpAddress(this); } private void setUpUi() { @@ -106,4 +111,8 @@ public class MainActivity extends AppCompatActivity { super.onBackPressed(); } } + + } + + diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/Networking.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/Networking.java new file mode 100644 index 0000000..c5bd970 --- /dev/null +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/Networking.java @@ -0,0 +1,76 @@ +package com.example.fitbot.util; + +import android.content.Context; +import android.net.wifi.WifiManager; +import android.os.AsyncTask; +import android.util.Log; + +import java.io.OutputStream; +import java.math.BigInteger; +import java.net.HttpURLConnection; +import java.net.InetAddress; +import java.net.URL; +import java.net.UnknownHostException; +import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; + +public class Networking { + + public static void sendIpAddress(final Context context) { + new AsyncTask() { + @Override + protected Void doInBackground(Void... params) { + String ipAddress = getIPAddress(context); + String jsonInputString = "{\"ip\":\"" + + ipAddress + + "\"}"; + + byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8); + HttpURLConnection conn = null; + try { + URL url = new URL("http://145.109.171.85:42069/set-ip"); // Replace with your Node server URL + conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setDoOutput(true); + + OutputStream os = conn.getOutputStream(); + os.write(input, 0, input.length); + os.close(); + + int responseCode = conn.getResponseCode(); + Log.i("NetworkUtils", "Response Code: " + responseCode); + } catch (Exception e) { + Log.e("NetworkUtils", "Error sending IP address", e); + } finally { + if (conn != null) { + conn.disconnect(); + } + } + return null; + } + }.execute(); + } + + + private static String getIPAddress(Context context) { + WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); + int ipAddress = wifiManager.getConnectionInfo().getIpAddress(); + + // Convert little-endian to big-endian if needed + if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) { + ipAddress = Integer.reverseBytes(ipAddress); + } + + byte[] ipByteArray = BigInteger.valueOf(ipAddress).toByteArray(); + + String ip = ""; + try { + ip = InetAddress.getByAddress(ipByteArray).getHostAddress(); + } catch (UnknownHostException ex) { + Log.e("WIFIIP", "Unable to get host address."); + } + + return ip; + } +} \ No newline at end of file From b9b4a9ca9b488b6c99c988bbd48af4d046878415 Mon Sep 17 00:00:00 2001 From: Niels Gras Date: Fri, 31 May 2024 16:32:06 +0200 Subject: [PATCH 04/11] chore: Update Connectivity class with fetchIPAddress method --- .../Movement-sensor-code/Connectivity.cpp | 48 ++++++++++++++----- .../Movement-sensor-code/Connectivity.h | 5 +- .../Movement-sensor-code.ino | 4 +- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/code/arduino/Movement-sensor-code/Connectivity.cpp b/code/arduino/Movement-sensor-code/Connectivity.cpp index 6e96ca3..e56767e 100644 --- a/code/arduino/Movement-sensor-code/Connectivity.cpp +++ b/code/arduino/Movement-sensor-code/Connectivity.cpp @@ -8,23 +8,49 @@ void Connectivity::connectWiFi(char* ssid, char* pass){ } } -void Connectivity::websocketSetup(char* ip, uint16_t port, char* adress){ - //ws server address, port and URL - webSocket.begin(ip , port, adress); - // try every 500 again if connection has failed - webSocket.setReconnectInterval(500); -} +// void Connectivity::websocketSetup(char* ip, uint16_t port, char* adress){ +// //ws server address, port and URL +// webSocket.begin(ip , port, adress); +// // try every 500 again if connection has failed +// webSocket.setReconnectInterval(500); +// } -void Connectivity::sendData(float roll, float pitch, float yaw){ - String message = "{\"Sensor\": 1, \"roll\":\"" + String(roll) + "\",\"pitch\":\"" + String(pitch) + "\",\"yaw\":\"" + String(yaw) + "\"}"; - webSocket.sendTXT(message); +// void Connectivity::sendData(float roll, float pitch, float yaw){ +// String message = "{\"Sensor\": 1, \"roll\":\"" + String(roll) + "\",\"pitch\":\"" + String(pitch) + "\",\"yaw\":\"" + String(yaw) + "\"}"; +// webSocket.sendTXT(message); +// } + +const char* getServerURL = "http://145.109.171.85:42069/get-ip"; +String ipAddress = ""; + +String Connectivity::fetchIPAddress() { + if (WiFi.status() == WL_CONNECTED) { + HTTPClient http; + WiFiClient client; + http.begin(client, getServerURL); + + int httpCode = http.GET(); + if (httpCode > 0) { + if (httpCode == HTTP_CODE_OK) { + ipAddress = http.getString(); + } + } else { + Serial.printf("GET request failed, error: %s\n", http.errorToString(httpCode).c_str()); + } + + http.end(); + } else { + Serial.println("WiFi not connected"); + } + return ipAddress; // Add this return statement } /** Send a POST request to a server with provided data */ int Connectivity::httpPost(const char *serverAddress, const char *serverSubPath, const unsigned short serverPort, const char *data, const size_t dataLength, const char *contentType) { - if ( wifi_client.connect(serverAddress, serverPort)) { + WiFiClient wifi_client; // Ensure WiFiClient is declared and initialized + if (wifi_client.connect(serverAddress, serverPort)) { wifi_client.printf("POST %s HTTP/1.1\r\n", serverSubPath); wifi_client.printf("Content-Type: %s\r\n", contentType); wifi_client.printf("Content-Length: %d\r\n", dataLength); @@ -35,4 +61,4 @@ int Connectivity::httpPost(const char *serverAddress, const char *serverSubPath, } return 1; -} \ No newline at end of file +} diff --git a/code/arduino/Movement-sensor-code/Connectivity.h b/code/arduino/Movement-sensor-code/Connectivity.h index 90742aa..6de0109 100644 --- a/code/arduino/Movement-sensor-code/Connectivity.h +++ b/code/arduino/Movement-sensor-code/Connectivity.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -18,12 +19,12 @@ public: void websocketSetup(char* ip, uint16_t port, char* adress); void sendData(float roll, float pitch, float yaw); int httpPost(const char *serverAddress, const char *serverSubPath, const unsigned short serverPort, const char *data, const size_t dataLength, const char *contentType); - + String fetchIPAddress(); private: ESP8266WiFiMulti wifi; WiFiClient wifi_client; - WebSocketsClient webSocket; + // WebSocketsClient webSocket; }; diff --git a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino index 3bb3e92..061f12d 100644 --- a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino +++ b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino @@ -4,6 +4,7 @@ void setup() { //connect to internet and start sensor connectivity.connectWiFi(ssid, pass); sensorManager.sensorSetup(); + Serial.begin(9600); } unsigned long lastTime = 0; // will store the last time the code was run @@ -12,7 +13,6 @@ void loop() { SensorManager::eulerAngles eulerRotation = sensorManager.getEulerAngles(); // SensorManager::acceleration rotationAcceleration = sensorManager.getAcelleration(); - struct acceleration { float x = 9; float y = 9; @@ -34,7 +34,7 @@ struct acceleration { accelData.z, "data"); // %d = int, %f = floatation, %s = string - connectivity.httpPost("192.168.137.243", "/", 3445, buffer, strlen(buffer), "application/json"); + connectivity.httpPost(connectivity.fetchIPAddress(), "/", 3445, buffer, strlen(buffer), "application/json"); lastTime = currentTime; } } From a080b6c737e8a5de220f919ee7fa4bbe0913aee4 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Fri, 31 May 2024 16:35:41 +0200 Subject: [PATCH 05/11] Script to pass ip adres from pepper to esp --- code/server/ipSender/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 code/server/ipSender/index.js diff --git a/code/server/ipSender/index.js b/code/server/ipSender/index.js new file mode 100644 index 0000000..dc68c2d --- /dev/null +++ b/code/server/ipSender/index.js @@ -0,0 +1,22 @@ +const express = require('express'); +const app = express(); + +app.use(express.json()); // for parsing application/json + +let ipAddress = ''; // to store the received IP address + +// endpoint to receive an IP address from an external source +app.post('/set-ip', (req, res) => { + ipAddress = req.body.ip; + console.log('IP address received:', ipAddress); +}); + +// endpoint for the ESP32 to fetch the IP address +app.get('/get-ip', (req, res) => { + res.json({ ip: ipAddress }); + console.log('IP address sent to ESP32'); +}); + +app.listen(42069, () => { + console.log('Server is running on port 42069'); +}); \ No newline at end of file From eda0601228dbec87f8d2975888f40f57415d309a Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Fri, 31 May 2024 16:36:05 +0200 Subject: [PATCH 06/11] Added permissions to android manifest --- code/src/Fitbot/app/src/main/AndroidManifest.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/src/Fitbot/app/src/main/AndroidManifest.xml b/code/src/Fitbot/app/src/main/AndroidManifest.xml index 326887c..c28ce66 100644 --- a/code/src/Fitbot/app/src/main/AndroidManifest.xml +++ b/code/src/Fitbot/app/src/main/AndroidManifest.xml @@ -10,13 +10,15 @@ + + + + - - Date: Mon, 3 Jun 2024 11:53:21 +0200 Subject: [PATCH 07/11] fitness layout finished --- .../main/res/drawable/ic_baseline_info_24.xml | 10 ++ .../main/res/drawable/ic_baseline_info_40.xml | 5 + .../main/res/drawable/ic_baseline_info_48.xml | 5 + .../main/res/drawable/red_button_gradient.xml | 2 +- .../src/main/res/layout/activity_fitness.xml | 35 +++-- .../sebas/dailyUpdates.md | 130 ++++++++++++++++++ 6 files changed, 175 insertions(+), 12 deletions(-) create mode 100644 code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_24.xml create mode 100644 code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_40.xml create mode 100644 code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_48.xml diff --git a/code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_24.xml b/code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_24.xml new file mode 100644 index 0000000..17255b7 --- /dev/null +++ b/code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_40.xml b/code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_40.xml new file mode 100644 index 0000000..df12462 --- /dev/null +++ b/code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_40.xml @@ -0,0 +1,5 @@ + + + diff --git a/code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_48.xml b/code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_48.xml new file mode 100644 index 0000000..15875d1 --- /dev/null +++ b/code/src/Fitbot/app/src/main/res/drawable/ic_baseline_info_48.xml @@ -0,0 +1,5 @@ + + + diff --git a/code/src/Fitbot/app/src/main/res/drawable/red_button_gradient.xml b/code/src/Fitbot/app/src/main/res/drawable/red_button_gradient.xml index 6983a91..a087a43 100644 --- a/code/src/Fitbot/app/src/main/res/drawable/red_button_gradient.xml +++ b/code/src/Fitbot/app/src/main/res/drawable/red_button_gradient.xml @@ -2,7 +2,7 @@ + android:layout_gravity="center"> + +