First
commit
6057ec7e56
@ -0,0 +1 @@
|
||||
.pio
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1,20 @@
|
||||
; PlatformIO Project Configuration File
|
||||
;
|
||||
; Build options: build flags, source filter
|
||||
; Upload options: custom upload port, speed and extra flags
|
||||
; Library options: dependencies, extra library storages
|
||||
; Advanced options: extra scripting
|
||||
;
|
||||
; Please visit documentation for the other options and examples
|
||||
; https://docs.platformio.org/page/projectconf.html
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
board = nodemcuv2
|
||||
framework = arduino
|
||||
lib_deps =
|
||||
adafruit/RTClib@^2.1.1
|
||||
dfrobot/DFRobot_QMC5883@^1.0.0
|
||||
juerd/ESP-WiFiSettings@^3.8.0
|
||||
https://github.com/sivar2311/WebMonitor
|
||||
upload_flags = --auth=senha1234
|
@ -0,0 +1,36 @@
|
||||
#include "comm.h"
|
||||
|
||||
#include <ArduinoOTA.h>
|
||||
#include <WiFiSettings.h>
|
||||
|
||||
|
||||
void setup_ota() {
|
||||
ArduinoOTA.setHostname(WIFI_SSID);
|
||||
ArduinoOTA.setPassword(WIFI_PASSWORD);
|
||||
ArduinoOTA.begin();
|
||||
}
|
||||
|
||||
void setup_wifi() {
|
||||
WiFiSettings.hostname = WIFI_SSID;
|
||||
WiFiSettings.password = WIFI_PASSWORD;
|
||||
|
||||
WiFiSettings.onPortal = []() {
|
||||
setup_ota();
|
||||
};
|
||||
WiFiSettings.onPortalWaitLoop = []() {
|
||||
ArduinoOTA.handle();
|
||||
};
|
||||
|
||||
WiFiSettings.connect();
|
||||
}
|
||||
|
||||
void setup_comm() {
|
||||
setup_wifi();
|
||||
setup_ota();
|
||||
WebMonitor.begin();
|
||||
}
|
||||
|
||||
void comms_loop() {
|
||||
ArduinoOTA.handle();
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
#include <WebMonitor.h>
|
||||
|
||||
#define WIFI_SSID "VynTracker"
|
||||
#define WIFI_PASSWORD "senha1234"
|
||||
|
||||
void setup_ota();
|
||||
void setup_wifi();
|
||||
void setup_comm();
|
||||
|
||||
void comms_loop();
|
@ -0,0 +1,20 @@
|
||||
#ifndef COORDS_H
|
||||
#define COORDS_H
|
||||
|
||||
class AzAlt {
|
||||
public:
|
||||
float azimuth;
|
||||
float altitude;
|
||||
|
||||
RADec toRADec();
|
||||
}
|
||||
|
||||
class RADec {
|
||||
public:
|
||||
float rightAngle;
|
||||
float decimation;
|
||||
|
||||
AzAlt toAzAt();
|
||||
}
|
||||
|
||||
#endif
|
@ -0,0 +1,32 @@
|
||||
#include "comm.h"
|
||||
#include "servo.h"
|
||||
|
||||
#include <SPI.h>
|
||||
#include <LittleFS.h>
|
||||
|
||||
ServoController controller;
|
||||
|
||||
void setup() {
|
||||
controller.initServos();
|
||||
LittleFS.begin();
|
||||
setup_comm();
|
||||
|
||||
pinMode(15, OUTPUT);
|
||||
pinMode(12, OUTPUT);
|
||||
pinMode(13, OUTPUT);
|
||||
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
comms_loop();
|
||||
|
||||
controller.updateHeading();
|
||||
|
||||
digitalWrite(15, 1);
|
||||
WebMonitor.printf("ON!");
|
||||
delay(1000);
|
||||
digitalWrite(15, 0);
|
||||
WebMonitor.printf("OFF!");
|
||||
delay(1000);
|
||||
}
|
@ -0,0 +1,337 @@
|
||||
/*#include <SPI.h>
|
||||
#include <Wire.h>
|
||||
#include <Servo.h>
|
||||
#include <RTClib.h>
|
||||
#include <Arduino.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <DFRobot_QMC5883.h>
|
||||
|
||||
#define PORT 10001
|
||||
#define SERIAL_RATE 115200
|
||||
#define SSID "Vyn"
|
||||
#define PASSWD "test123321"
|
||||
#define LOCATION "\x19\x19\x2A\x01\x31\x10\x18\x01"
|
||||
#define VERSION "040101"
|
||||
|
||||
|
||||
WiFiClient Client;
|
||||
WiFiServer Server(PORT);
|
||||
|
||||
Servo servo;
|
||||
RTC_DS1307 rtc;
|
||||
DFRobot_QMC5883 compass(&Wire, 0x0D);
|
||||
|
||||
String recv();
|
||||
void send(String str);
|
||||
void reply(String str);
|
||||
void printDate(DateTime date);
|
||||
void printTime(DateTime time);
|
||||
void syncDateTime(String str);
|
||||
|
||||
|
||||
int16_t mx, my, mz;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(SERIAL_RATE);
|
||||
WiFi.begin(SSID, PASSWD);
|
||||
|
||||
while (!Serial);
|
||||
|
||||
Serial.print("Conectando em SSID: ");
|
||||
Serial.print(SSID);
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(250);
|
||||
Serial.print(".");
|
||||
}
|
||||
Serial.println();
|
||||
|
||||
Serial.print("Conectado! Endereço: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
|
||||
Server.begin();
|
||||
Serial.println("Servidor iniciado!");
|
||||
|
||||
while (!compass.begin()) {
|
||||
Serial.println("Could not find a valid 5883 sensor, check wiring!");
|
||||
delay(500);
|
||||
}
|
||||
|
||||
if (!rtc.begin()) {
|
||||
Serial.println("Erro iniciando RTC.");
|
||||
while(1);
|
||||
}
|
||||
|
||||
if (!rtc.isrunning()) {
|
||||
Serial.print("RTC não está rodando. Setando o tempo em: ");
|
||||
Serial.print(__DATE__);
|
||||
Serial.print(" ");
|
||||
Serial.println(__TIME__);
|
||||
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
|
||||
}
|
||||
|
||||
if(compass.isQMC()) {
|
||||
Serial.println("Initialize QMC5883");
|
||||
compass.setRange(QMC5883_RANGE_8GA);
|
||||
Serial.print("compass range is:");
|
||||
Serial.println(compass.getRange());
|
||||
|
||||
compass.setMeasurementMode(QMC5883_CONTINOUS);
|
||||
Serial.print("compass measurement mode is:");
|
||||
Serial.println(compass.getMeasurementMode());
|
||||
|
||||
compass.setDataRate(QMC5883_DATARATE_200HZ);
|
||||
Serial.print("compass data rate is:");
|
||||
Serial.println(compass.getDataRate());
|
||||
|
||||
compass.setSamples(QMC5883_SAMPLES_8);
|
||||
Serial.print("compass samples is:");
|
||||
Serial.println(compass.getSamples());
|
||||
}
|
||||
|
||||
pinMode(12, INPUT);
|
||||
pinMode(14, INPUT);
|
||||
|
||||
DateTime now = rtc.now();
|
||||
printDate(now);
|
||||
printTime(now);
|
||||
pinMode(2, OUTPUT);
|
||||
|
||||
servo.attach(2, 500, 2500);
|
||||
}
|
||||
|
||||
void printDate(DateTime date) {
|
||||
Serial.print(date.day());
|
||||
Serial.print("/");
|
||||
Serial.print(date.month(), DEC);
|
||||
Serial.print("/");
|
||||
Serial.print(date.year(), DEC);
|
||||
Serial.print(" (");
|
||||
Serial.print(date.dayOfTheWeek(), DEC);
|
||||
Serial.println(")");
|
||||
}
|
||||
|
||||
void printTime(DateTime time) {
|
||||
Serial.print(time.hour(), DEC);
|
||||
Serial.print(":");
|
||||
Serial.print(time.minute(), DEC);
|
||||
Serial.print(":");
|
||||
Serial.println(time.second(), DEC);
|
||||
}
|
||||
|
||||
bool moving = true;
|
||||
bool aligned = true;
|
||||
uint8_t dst = 0;
|
||||
uint8_t tz = 252;
|
||||
String loc = "34AB0500,12CE0500";
|
||||
|
||||
void loop() {
|
||||
float declinationAngle = (-20-(15.0/60.0))/(180/PI);
|
||||
|
||||
compass.setDeclinationAngle(declinationAngle);
|
||||
sVector_t mag = compass.readRaw();
|
||||
compass.getHeadingDegrees();
|
||||
Serial.print("X:");
|
||||
Serial.print(mag.XAxis);
|
||||
Serial.print(" Y:");
|
||||
Serial.print(mag.YAxis);
|
||||
Serial.print(" Z:");
|
||||
Serial.println(mag.ZAxis);
|
||||
Serial.print("Degress = ");
|
||||
Serial.println(mag.HeadingDegress);
|
||||
|
||||
delay(250);
|
||||
|
||||
Client = Server.accept();
|
||||
|
||||
if (Client) {
|
||||
while (Client.connected()) {
|
||||
moving = digitalRead(12);
|
||||
aligned = digitalRead(14);
|
||||
Client.flush();
|
||||
|
||||
String str = recv();
|
||||
|
||||
//Empty response
|
||||
if (str.startsWith("Ç")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
///HANDSHAKE
|
||||
//Ping
|
||||
if (str.startsWith("K")) {
|
||||
reply(str.substring(1));
|
||||
}
|
||||
//Firmware version
|
||||
if (str.startsWith("V")) {
|
||||
reply(VERSION);
|
||||
}
|
||||
//Location
|
||||
if (str.startsWith("w")) {
|
||||
reply(LOCATION);
|
||||
}
|
||||
//Tracking mode
|
||||
if (str.startsWith("t")) {
|
||||
String tmp = "F";
|
||||
tmp.setCharAt(0, '1');
|
||||
|
||||
reply(tmp);
|
||||
}
|
||||
//Device version
|
||||
if (str.startsWith("P\x01")) {
|
||||
String tmp = "FF";
|
||||
tmp.setCharAt(0, '2');
|
||||
tmp.setCharAt(1, '3');
|
||||
|
||||
reply(tmp);
|
||||
}
|
||||
//Mount model
|
||||
if (str.startsWith("m")) {
|
||||
String tmp = "F";
|
||||
tmp.setCharAt(0, 4);
|
||||
|
||||
reply(tmp);
|
||||
}
|
||||
//Failed
|
||||
if (str.startsWith("##")) {
|
||||
Client.stop();
|
||||
}
|
||||
|
||||
///STATUS
|
||||
//GOTO?
|
||||
if (str.startsWith("L")) {
|
||||
reply(moving ? "1" : "0");
|
||||
}
|
||||
//Aligned?
|
||||
if (str.startsWith("J")) {
|
||||
String tmp = "F";
|
||||
tmp.setCharAt(0, aligned ? 1 : '0');
|
||||
|
||||
reply(tmp);
|
||||
}
|
||||
if (str.startsWith("M")) {
|
||||
reply("");
|
||||
}
|
||||
|
||||
|
||||
///SYNC
|
||||
//Position
|
||||
if (str.startsWith("W")) {
|
||||
//TODO: store pos
|
||||
reply("");
|
||||
}
|
||||
//Hour and date
|
||||
if (str.startsWith("H")) {
|
||||
syncDateTime(str.substring(1));
|
||||
reply("");
|
||||
}
|
||||
if (str.startsWith("h")) {
|
||||
DateTime now = rtc.now();
|
||||
String datetime = "FFFFFFFF";
|
||||
|
||||
datetime.setCharAt(0, now.hour());
|
||||
datetime.setCharAt(1, now.minute());
|
||||
datetime.setCharAt(2, now.second());
|
||||
datetime.setCharAt(3, now.month());
|
||||
datetime.setCharAt(4, now.day());
|
||||
datetime.setCharAt(5, now.year()-2000);
|
||||
datetime.setCharAt(6, tz);
|
||||
datetime.setCharAt(7, dst);
|
||||
|
||||
datetime.replace("\n", "\x10");
|
||||
|
||||
reply(datetime);
|
||||
}
|
||||
//Precise RA/DEC
|
||||
if (str.startsWith("e")) {
|
||||
reply(loc);
|
||||
}
|
||||
if (str.startsWith("r")) {
|
||||
loc = str.substring(1);
|
||||
String rightAscencion = loc.substring(0, 8);
|
||||
Serial.println(rightAscencion);
|
||||
String decimation = loc.substring(9);
|
||||
Serial.println(decimation);
|
||||
|
||||
double ra = strtoul(rightAscencion.c_str(), NULL, 16);
|
||||
ra = ra/4294967296;
|
||||
ra = ra*360;
|
||||
|
||||
double dec = strtoul(decimation.c_str(), NULL, 16);
|
||||
dec = dec/4294967296;
|
||||
dec = dec*360;
|
||||
|
||||
|
||||
|
||||
reply("");
|
||||
}
|
||||
}
|
||||
|
||||
if (!Client.connected()) {
|
||||
Serial.println("Cliente desconectado :(");
|
||||
Client.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void syncDateTime(String str) {
|
||||
tz = str.charAt(6);
|
||||
dst = str.charAt(7);
|
||||
|
||||
uint8_t hr = str.charAt(0);
|
||||
uint8_t mn = str.charAt(1);
|
||||
uint8_t sc = str.charAt(2);
|
||||
uint8_t mo = str.charAt(3);
|
||||
uint8_t dy = str.charAt(4);
|
||||
uint16_t y = str.charAt(5);
|
||||
|
||||
hr = dst ? hr-1 : hr;
|
||||
|
||||
DateTime dt = DateTime(
|
||||
y, mo, dy,
|
||||
hr, mn, sc
|
||||
);
|
||||
|
||||
if (!dt.isValid()) {
|
||||
char temp[] = "DD/MM/YY hh:mm:ss";
|
||||
|
||||
Serial.print("Data recebida é invalida! Impossível sincronizar: ");
|
||||
Serial.println(dt.toString(temp));
|
||||
return;
|
||||
}
|
||||
|
||||
rtc.adjust(dt);
|
||||
dt = rtc.now();
|
||||
|
||||
Serial.println("Tempo ajustado!");
|
||||
printDate(dt);
|
||||
printTime(dt);
|
||||
}
|
||||
|
||||
String recv() {
|
||||
String str = "";
|
||||
|
||||
while (Client.available()) {
|
||||
str += (char)(Client.read());
|
||||
}
|
||||
|
||||
if (str.length() == 0) {
|
||||
str = "Ç";
|
||||
} else {
|
||||
Serial.print("R: ");
|
||||
Serial.println(str);
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
void reply(String str) {
|
||||
Client.flush();
|
||||
Serial.print("S: ");
|
||||
Serial.println(str += "#");
|
||||
byte n = Client.print(str.c_str());
|
||||
Serial.print("S: ");
|
||||
Serial.print(n);
|
||||
Serial.println("b");
|
||||
}*/
|
@ -0,0 +1,35 @@
|
||||
#include "servo.h"
|
||||
|
||||
|
||||
void ServoController::initServos() {
|
||||
HrzSrv.attach(12, 500, 2500);
|
||||
delay(50);
|
||||
VrtSrv.attach(13, 500, 2500);
|
||||
}
|
||||
|
||||
/*void ServoController::initMag() {
|
||||
|
||||
}*/
|
||||
|
||||
void ServoController::updateHeading() {
|
||||
for (int i = 0; i <= 180; i+=5) {
|
||||
HrzSrv.write(i);
|
||||
delay(20);
|
||||
VrtSrv.write(i);
|
||||
delay(200);
|
||||
}
|
||||
for (int i = 180; i >= 0; i-=5) {
|
||||
HrzSrv.write(i);
|
||||
delay(20);
|
||||
VrtSrv.write(i);
|
||||
delay(200);
|
||||
}
|
||||
}
|
||||
|
||||
void ServoController::moveToAzAlt() {
|
||||
|
||||
}
|
||||
|
||||
void ServoController::moveToRADec() {
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
#include <Servo.h>
|
||||
#include <DFRobot_QMC5883.h>
|
||||
|
||||
#ifndef SERVO_H
|
||||
#define SERVO_H
|
||||
|
||||
class ServoController {
|
||||
private:
|
||||
float headingDegress;
|
||||
|
||||
Servo HrzSrv;
|
||||
Servo VrtSrv;
|
||||
DFRobot_QMC5883 mag;
|
||||
|
||||
public:
|
||||
void initServos();
|
||||
//void initMag(): mag~{&Wire, 0xD};
|
||||
void moveToAzAlt();
|
||||
void moveToRADec();
|
||||
void updateHeading();
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue