First steps
This commit is contained in:
parent
aecd5783a6
commit
814df25aba
@ -1,11 +1,42 @@
|
||||
#include "ArduinoUtils.h"
|
||||
|
||||
#if defined(ARDUINO)
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <HTTPClient.h>
|
||||
|
||||
#if defined(ARDUINO_ARCH_ESP8266)
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266httpUpdate.h>
|
||||
#elif defined(ESP32)
|
||||
#include <HTTPUpdate.h>
|
||||
#include <WiFi.h>
|
||||
#endif
|
||||
|
||||
bool StartWifi(const char *wifiSsid, const char *wifiPassword,
|
||||
bool hotspotFallback) {
|
||||
const char* hotspotSSID = "Roboid";
|
||||
const char* hotspotPassword = "alchemy7000";
|
||||
|
||||
#if ESP32
|
||||
// Flash storage
|
||||
#include "Preferences.h"
|
||||
|
||||
#define PREFERENCES_NAMESPACE "roboidControl"
|
||||
Preferences wifiPreferences;
|
||||
|
||||
#define STORAGE_KEY_WIFI "rc/wifi"
|
||||
struct WifiCredentials {
|
||||
char ssid[32] = "\0";
|
||||
char password[32] = "\0";
|
||||
} credentials;
|
||||
|
||||
#define STORAGE_KEY_NSS "rc/nss"
|
||||
struct NssServer {
|
||||
char ipAddress[16] = "127.0.0.1\0";
|
||||
unsigned short port = 7681;
|
||||
} nssServer;
|
||||
#endif
|
||||
|
||||
bool StartWifi(const char* wifiSsid, const char* wifiPassword, bool hotspotFallback) {
|
||||
#if UNO_R4 || ARDUINO_ARCH_RP2040
|
||||
if (WiFi.status() == WL_NO_MODULE) {
|
||||
Serial.println("WiFi not present, WiFiSync is disabled");
|
||||
@ -83,10 +114,8 @@ bool StartWifi(const char *wifiSsid, const char *wifiPassword,
|
||||
#if ESP32
|
||||
printf("Checking credentials in flash\n");
|
||||
wifiPreferences.begin(PREFERENCES_NAMESPACE);
|
||||
wifiPreferences.getBytes(STORAGE_KEY_WIFI, &credentials,
|
||||
sizeof(credentials));
|
||||
if (strcmp(wifiSsid, credentials.ssid) != 0 ||
|
||||
strcmp(wifiPassword, credentials.password) != 0) {
|
||||
wifiPreferences.getBytes(STORAGE_KEY_WIFI, &credentials, sizeof(credentials));
|
||||
if (strcmp(wifiSsid, credentials.ssid) != 0 || strcmp(wifiPassword, credentials.password) != 0) {
|
||||
printf("Updating credentials in flash...");
|
||||
const int ssidLen = strlen(wifiSsid);
|
||||
if (ssidLen < 32) {
|
||||
@ -99,8 +128,7 @@ bool StartWifi(const char *wifiSsid, const char *wifiPassword,
|
||||
memcpy(credentials.password, wifiPassword, pwdLen);
|
||||
credentials.password[pwdLen] = '\0';
|
||||
}
|
||||
wifiPreferences.putBytes(STORAGE_KEY_WIFI, &credentials,
|
||||
sizeof(credentials));
|
||||
wifiPreferences.putBytes(STORAGE_KEY_WIFI, &credentials, sizeof(credentials));
|
||||
printf(" completed.\n");
|
||||
}
|
||||
wifiPreferences.end();
|
||||
@ -132,18 +160,26 @@ void CheckFirmware(String url, String FIRMWARE_NAME, int FIRMWARE_VERSION) {
|
||||
Serial.println("Preparing to update firmware.");
|
||||
|
||||
String firmwareURL = url + FIRMWARE_NAME + ".bin";
|
||||
#if defined(ESP32)
|
||||
t_httpUpdate_return ret = httpUpdate.update(client, firmwareURL);
|
||||
#else
|
||||
t_httpUpdate_return ret = ESPhttpUpdate.update(client, firmwareURL);
|
||||
#endif
|
||||
switch (ret) {
|
||||
case HTTP_UPDATE_FAILED:
|
||||
Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s",
|
||||
ESPhttpUpdate.getLastError(),
|
||||
ESPhttpUpdate.getLastErrorString().c_str());
|
||||
break;
|
||||
case HTTP_UPDATE_NO_UPDATES:
|
||||
Serial.println("HTTP_UPDATE_NO_UPDATES");
|
||||
break;
|
||||
case HTTP_UPDATE_OK:
|
||||
break;
|
||||
case HTTP_UPDATE_FAILED:
|
||||
#if defined(ESP32)
|
||||
Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s", httpUpdate.getLastError(),
|
||||
httpUpdate.getLastErrorString().c_str());
|
||||
#else
|
||||
Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s", ESPhttpUpdate.getLastError(),
|
||||
ESPhttpUpdate.getLastErrorString().c_str());
|
||||
#endif
|
||||
break;
|
||||
case HTTP_UPDATE_NO_UPDATES:
|
||||
Serial.println("HTTP_UPDATE_NO_UPDATES");
|
||||
break;
|
||||
case HTTP_UPDATE_OK:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
Serial.println("No Firmware update necessary.");
|
||||
|
@ -1,8 +1,13 @@
|
||||
#include "UdpArduino.h"
|
||||
#include "Participant.h"
|
||||
|
||||
#if defined(ARDUINO)
|
||||
#if defined(ARDUINO_ARCH_ESP8266)
|
||||
#include <ESP8266WiFi.h>
|
||||
#elif defined(ESP32)
|
||||
#include <WiFi.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace Passer {
|
||||
namespace RoboidControl {
|
||||
namespace Arduino {
|
||||
@ -45,7 +50,7 @@ void Participant::Receive() {
|
||||
senderAddress.toCharArray(sender_ipAddress, 16);
|
||||
int sender_port = udp.remotePort();
|
||||
|
||||
Participant* remoteParticipant = this->GetParticipant(sender_ipAddress, sender_port);
|
||||
RoboidControl::Participant* remoteParticipant = this->GetParticipant(sender_ipAddress, sender_port);
|
||||
if (remoteParticipant == nullptr) {
|
||||
remoteParticipant = this->AddParticipant(sender_ipAddress, sender_port);
|
||||
// std::cout << "New sender " << sender_ipAddress << ":" << sender_port
|
||||
@ -75,7 +80,7 @@ bool Participant::Send(RemoteParticipant* remoteParticipant, int bufferSize) {
|
||||
|
||||
bool Participant::Publish(IMessage* msg) {
|
||||
#ifdef ARDUINO
|
||||
int bufferSize = msg->Serialize(this->buffer);
|
||||
int bufferSize = msg->Serialize((char*)this->buffer);
|
||||
if (bufferSize <= 0)
|
||||
return true;
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "Participant.h"
|
||||
#include "../Participant.h"
|
||||
|
||||
namespace Passer {
|
||||
namespace RoboidControl {
|
@ -2,7 +2,7 @@
|
||||
|
||||
#include "Thing.h"
|
||||
|
||||
#include "Arduino/UdpArduino.h"
|
||||
#include "Arduino/Participant.h"
|
||||
#include "Posix/Participant.h"
|
||||
#include "Windows/Participant.h"
|
||||
|
||||
|
@ -30,7 +30,7 @@ namespace RoboidControl {
|
||||
/// @brief A participant is device which can communicate with other participants
|
||||
class Participant : public RemoteParticipant {
|
||||
public:
|
||||
char buffer[1024];
|
||||
unsigned char buffer[1024];
|
||||
long publishInterval = 3000; // 3 seconds
|
||||
// unsigned char networkId = 0;
|
||||
|
||||
|
11
Sensors/DigitalSensor.cpp
Normal file
11
Sensors/DigitalSensor.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "DigitalSensor.h"
|
||||
|
||||
namespace Passer {
|
||||
namespace RoboidControl {
|
||||
|
||||
DigitalSensor::DigitalSensor() {}
|
||||
|
||||
DigitalSensor::DigitalSensor(unsigned char networkId, unsigned char thingId) {}
|
||||
|
||||
} // namespace RoboidControl
|
||||
} // namespace Passer
|
23
Sensors/DigitalSensor.h
Normal file
23
Sensors/DigitalSensor.h
Normal file
@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include "Thing.h"
|
||||
|
||||
namespace Passer {
|
||||
namespace RoboidControl {
|
||||
|
||||
/// @brief A digital (on/off, 1/0, true/false) sensor
|
||||
class DigitalSensor : public Thing {
|
||||
public:
|
||||
/// @brief The sigital state
|
||||
bool state = 0;
|
||||
|
||||
/// @brief The default constructor
|
||||
DigitalSensor();
|
||||
/// @brief Create a temperature sensor with the given ID
|
||||
/// @param networkId The network ID of the sensor
|
||||
/// @param thingId The ID of the thing
|
||||
DigitalSensor(unsigned char networkId, unsigned char thingId);
|
||||
};
|
||||
|
||||
} // namespace RoboidControl
|
||||
} // namespace Passer
|
12
Thing.cpp
12
Thing.cpp
@ -6,6 +6,9 @@
|
||||
#include <list>
|
||||
#include <string.h>
|
||||
|
||||
namespace Passer {
|
||||
namespace RoboidControl {
|
||||
|
||||
Thing::Thing(Type thingType) : Thing((unsigned char)thingType) {}
|
||||
|
||||
Thing::Thing(unsigned char thingType) {
|
||||
@ -142,6 +145,12 @@ Thing *Thing::GetChildByIndex(unsigned char ix) { return this->children[ix]; }
|
||||
|
||||
void Thing::SetModel(const char *url) { this->modelUrl = url; }
|
||||
|
||||
#if defined(ARDUINO)
|
||||
void Thing::Update() {
|
||||
Update(millis());
|
||||
}
|
||||
#endif
|
||||
|
||||
void Thing::GenerateBinary(char *buffer, unsigned char *ix) {
|
||||
(void)buffer;
|
||||
(void)ix;
|
||||
@ -210,4 +219,5 @@ Spherical16 Thing::GetAngularVelocity() { return this->angularVelocity; }
|
||||
// thing->Update(currentTimeMs);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
//}
|
||||
}}
|
4
Thing.h
4
Thing.h
@ -154,6 +154,10 @@ public:
|
||||
/// the only official supported model format is .obj
|
||||
void SetModel(const char *url);
|
||||
|
||||
#if defined(ARDUINO)
|
||||
void Update();
|
||||
#endif
|
||||
|
||||
/// @brief Updates the state of the thing
|
||||
/// @param currentTimeMs The current clock time in milliseconds
|
||||
virtual void Update(unsigned long currentTimeMs) { (void)currentTimeMs; };
|
||||
|
Loading…
x
Reference in New Issue
Block a user