Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions iot/.vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"/Users/alexandrebedel/Desktop/Msc/esp/iot/include",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/src",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/lib/uart_frame",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/lib/GoPLUS2",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/.pio/libdeps/m5stack-core-esp32/UUID",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/.pio/libdeps/m5stack-core-esp32/Adafruit NeoPixel",
Expand Down Expand Up @@ -221,7 +222,6 @@
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/variants/m5stack_core_esp32",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
Expand Down Expand Up @@ -251,6 +251,7 @@
"/Users/alexandrebedel/Desktop/Msc/esp/iot/include",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/src",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/lib/uart_frame",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/lib/GoPLUS2",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/.pio/libdeps/m5stack-core-esp32/UUID",
"/Users/alexandrebedel/Desktop/Msc/esp/iot/.pio/libdeps/m5stack-core-esp32/Adafruit NeoPixel",
Expand Down Expand Up @@ -461,7 +462,6 @@
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/variants/m5stack_core_esp32",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
"/Users/alexandrebedel/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
Expand Down Expand Up @@ -503,7 +503,7 @@
"ARDUINO=10812",
"ARDUINO_VARIANT=\"m5stack_core_esp32\"",
"ARDUINO_BOARD=\"M5Stack Core ESP32\"",
"ARDUINO_PARTITION_default",
"ARDUINO_PARTITION_default_8MB",
""
],
"cStandard": "gnu99",
Expand Down
3 changes: 2 additions & 1 deletion iot/.vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
"sstream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"cinttypes": "cpp"
"cinttypes": "cpp",
"m5stack.h": "c"
}
}
3 changes: 3 additions & 0 deletions iot/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,6 @@ lib_deps =
lbussy/LCBUrl@^1.1.9
adafruit/Adafruit NeoPixel@^1.12.0
robtillaart/UUID@^0.1.6
board_upload.flash_size = 8MB
board_upload.maximum_size = 8388608
board_build.partitions = default_8MB.csv
120 changes: 71 additions & 49 deletions iot/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,60 +1,82 @@
#include <M5Stack.h>
#include "core.h"
#include "camera.h"
#include "filesystem.h"
#include "network.h"
#include "servo.h"
#include "motion.h"
#include "led.h"

bool closeTimeout = false;
String binId = "";
unsigned long lastPictureTime = millis();
unsigned long currentTime = millis();
auto expoAddr = [](String binId, IPAddress ip = IPAddress(172, 20, 10, 2)) -> String
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

#define SERVICE_UUID "0693C92E-8A68-41AA-83E2-AA0B17F70168"
#define CHARACTERISTIC_UUID "1F5FF96C-AA4A-4159-BCE4-6C25350CB78B"

BLEServer *pServer = NULL;
BLECharacteristic *pCharacteristic = NULL;
bool deviceConnected = false;

class MyServerCallbacks : public BLEServerCallbacks
{
void onConnect(BLEServer *pServer)
{
Serial.println("Connected");
deviceConnected = true;
}

void onDisconnect(BLEServer *pServer)
{
Serial.println("Disconnected");
deviceConnected = false;
}
};

class MyCallbacks : public BLECharacteristicCallbacks
{
return String("exp://") + ip.toString() + ":8081/--/" + binId;
void onWrite(BLECharacteristic *pCharacteristic)
{
std::string value = pCharacteristic->getValue();

// Handle received data
Serial.print("Received data: ");
Serial.println(value.c_str());
}
};

void setup()
{
M5.begin();
Serial.begin(9600);
Network::init();
Filesystem::init();
ServoMotor::init();
Camera::init();
Motion::init();
Led::init();
lastPictureTime = millis();
xTaskCreatePinnedToCore(ServoMotor::buttonsTask, "buttonsTask", 4096, NULL, 1, NULL, 0);
Serial.println("Setip");
Serial.begin(9600);

// Initialize BLE
BLEDevice::init("M5-Stack");
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());

// Create service and characteristic
BLEService *pService = pServer->createService(SERVICE_UUID);
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE |
BLECharacteristic::PROPERTY_NOTIFY |
BLECharacteristic::PROPERTY_INDICATE);
pCharacteristic->setCallbacks(new MyCallbacks());
pCharacteristic->addDescriptor(new BLE2902());

// Start the service
pService->start();

// Start advertising
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->start();

Serial.println("BLE server started");
}

void loop()
{
String type = "";

// if (binId.isEmpty())
// {
// binId = Filesystem::getBinId();
// M5.Lcd.qrcode(expoAddr(binId));
// }
if (Motion::isDetected())
{
Serial.println("Detected something");
Led::on();
Serial.println("Taking a picture");
type = Camera::detectTrashType();
lastPictureTime = millis();
closeTimeout = true;
}
currentTime = millis();
if (currentTime - lastPictureTime >= 10 * 1000 && closeTimeout)
{
Serial.println("Closing the servo motor after 10 seconds");
Led::off();
ServoMotor::close(SERVO_BOXES[type]);
closeTimeout = false;
}
// Check if device is connected
if (deviceConnected)
{
M5.Lcd.println("Device connected");
// Do something when device is connected
}

delay(1000);
}
58 changes: 58 additions & 0 deletions iot/src/main.cpp.bak
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#include <M5Stack.h>
#include "core.h"
#include "camera.h"
#include "filesystem.h"
#include "network.h"
#include "servo.h"
#include "motion.h"
#include "led.h"

bool closeTimeout = false;
String binId = "";
unsigned long lastPictureTime = millis();
unsigned long currentTime = millis();
auto expoAddr = [](String binId, IPAddress ip = IPAddress(172, 20, 10, 2)) -> String
{
return String("exp://") + ip.toString() + ":8081/--/" + binId;
};

void setup()
{
M5.begin();
Serial.begin(9600);
Network::init();
Filesystem::init();
ServoMotor::init();
Camera::init();
Motion::init();
Led::init();
lastPictureTime = millis();
xTaskCreatePinnedToCore(ServoMotor::buttonsTask, "buttonsTask", 4096, NULL, 1, NULL, 0);
}

void loop()
{
String type = "";

if (binId.isEmpty())
{
binId = Filesystem::getBinId();
M5.Lcd.qrcode(expoAddr(binId));
}
if (Motion::isDetected())
{
Led::on();
Serial.println("Taking a picture");
type = Camera::detectTrashType();
lastPictureTime = millis();
closeTimeout = true;
}
currentTime = millis();
if (currentTime - lastPictureTime >= 10 * 1000 && closeTimeout)
{
Serial.println("Closing the servo motor after 10 seconds");
Led::off();
ServoMotor::close(SERVO_BOXES[type]);
closeTimeout = false;
}
}
97 changes: 97 additions & 0 deletions iot/src/main.cpp.bak2
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#include <M5Stack.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include <set>

#define SERVICEUUID "0693C92E-8A68-41AA-83E2-AA0B17F70168"
#define CHARACTERISTICUUID "1F5FF96C-AA4A-4159-BCE4-6C25350CB78B"

BLEServer *pServer = NULL;
BLEService *pService = NULL;
BLECharacteristic *pCharacteristic = NULL;
std::set<uint16_t> connectedClients;

class MyServerCallbacks : public BLEServerCallbacks
{
void onConnect(BLEServer *pServer)
{
// Get connId of the connected client
uint16_t connId = pServer->getConnId();
connectedClients.insert(connId);
Serial.print("Client connected with connId: ");
Serial.println(connId);

String data = "Hello from Arduino!";
pCharacteristic->setValue(data.c_str());
pCharacteristic->notify();
}

void onDisconnect(BLEServer *pServer)
{
// Get connId of the disconnected client
uint16_t connId = pServer->getConnId();
connectedClients.erase(connId);
Serial.print("Client disconnected with connId: ");
Serial.println(connId);
}
};

class MyCallbacks : public BLECharacteristicCallbacks
{
void onWrite(BLECharacteristic *pCharacteristic)
{
std::string value = pCharacteristic->getValue();
Serial.print("Received data: ");
Serial.println(value.c_str());
}
};

void setup()
{
M5.begin();
Serial.begin(9600);

// Set the advertising name
BLEDevice::init("M5-Stack");
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());

pService = pServer->createService(SERVICEUUID);
pCharacteristic = pService->createCharacteristic(
CHARACTERISTICUUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE |
BLECharacteristic::PROPERTY_NOTIFY |
BLECharacteristic::PROPERTY_INDICATE);

// Add a descriptor
pCharacteristic->setCallbacks(new MyCallbacks());
pCharacteristic->addDescriptor(new BLE2902());

// Start the service
pService->start();
// Start advertising
pServer->getAdvertising()->start();

M5.Lcd.println("BLE server started");
Serial.println("BLE server started");
}

void loop()
{
if (M5.BtnA.wasPressed())
{
M5.Lcd.println("Cleaning clients");
for (auto &id : connectedClients)
{
M5.Lcd.println("Cleaning client: " + id);
pServer->disconnect(id);
}
connectedClients.clear();
pServer->getAdvertising()->start();
}
M5.update();
// Handle BLE events
}
1 change: 1 addition & 0 deletions mobile/Routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const Tabs: FC = () => {
name="Dashboard"
component={HomeScreen}
options={{
headerShown: binId !== undefined,
tabBarIcon: ({ color, size }) => (
<FontAwesomeIcon icon={faChartLine} size={size} color={color} />
),
Expand Down
15 changes: 15 additions & 0 deletions mobile/android/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# OSX
#
.DS_Store

# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof

# Bundle artifacts
*.jsbundle
Loading