zenitheesc / alcantara Goto Github PK
View Code? Open in Web Editor NEWMobile Ground Station for stratospheric probe monitoring and rescue. Goes well with the Zenith Monitor app.
Mobile Ground Station for stratospheric probe monitoring and rescue. Goes well with the Zenith Monitor app.
Para facilitar o uso do Bluetooth, inicialmente, será utilizado o Bluetooth Clássico, em vez do BLE, que possui maior economia de energia. Sendo assim, em momentos futuros deve-se buscar a implementação do BLE ou caso seja constatada a viabilidade energética do Bluetooth, sem drenar muita energia ou prejudicar outras funções da placa, manter-se a implementação atual.
Portanto, utilizando a biblioteca BluetoothSerial.h, será implementado um dispositivo BT-Slave, pelo qual serão passados os pacotes recebidos para visualização no dispositivo que se conectar à Alcântara.
Criar uma branch com uma estrutura de pastas para o desenvolvimento do projeto da Arduino IDE
git checkout -b firmware
Folder structure:
Alcantara/
| - ...
| - firmware/
| - alcantara/
| - acantara.ino
A ideia é construir aos poucos o firmware. O primeiro é o hello world, que envolve:
Em teoria é tudo bem rapidinho :)
Terminando essa parte, tem outro issue com a tarefa mais relacionada a funcionalidade da Alcantara.
Como a Alcântara estará lidando com várias tarefas acontecendo simultaneamente, como receber dados do rádio, processar esses dados recebidos, enviar os dados via UART, salvar os dados no cartão SD, piscar o LED indicando o modo de operação atual, entre outras, um RTOS é uma implementação interessante para gerenciar tais tarefas e quais delas devem acontecer dada sua prioridade para o funcionamento do dispositivo.
Sendo assim, utilizando a biblioteca FreeRTOS.h
, serão implementadas três tasks principais:
A Alcântara possuirá vários modos de operação, devido a diferença no tipo de protocolo de comunicação utilizado para envio de cada pacote (LoRa ou FSK) e nas funções que irão parsear os dados.
Para que, acidentalmente, não aconteça alguma desconfiguração do dispositivo, será necessário implementar uma forma de armazenar as configurações atuais para que, após um reset acidental ou devido a falhas, as últimas configurações continuem em vigor.
Para isso será necessário utilizar a biblioteca preferences.h
para armazenar as configurações na memória Flash da ESP32, permitindo ao usuário manter as configurações antigas ou substituí-las ao ligar, e, em caso de não haver resposta durante um período de tempo, assumir que o usuário não está configurando o dispositivo e então retomar os valores já armazenados para as configurações.
Para facilitar a leitura dos dados tratados pela Alcântara, será utilizado o Bluetooth Low Energy (BLE) para transmitir esses dados para um dispositivo próximo, assim, será possível ler os dados a partir do terminal bluetooth de um dispositivo celular, por exemplo. Isto será importante para ter acesso aos dados de localização da sonda, ou outros dados de interesse.
Sendo assim, utilizando as bibliotecas BLEDevice.h, BLEUtils.h e BLEServer.h, será implementado um servidor BLE, pelo qual serão passados os pacotes recebidos para visualização no dispositivo que se conectar à Alcântara.
O objetivo da Alcantara é processar e repassar os pacotes vindo do rádio para interfaces como UART e BLE. Então a operação
mais importante é converter pacotes do rádio em strings csv. Mas ela se comporta de diferentes maneiras dependendo do contexto. Ela pode estar em uma de duas redes (OBSAT ou Zenith). Dependendo de qual das duas, ela irá processar tipos de pacotes diferentes.
A entrada do sistema será um array de bytes vindo do rádio. dentro desse array o primeiro byte indica o tipo de pacote. Os pacotes podem ser:
Então será necessário uso de unions
para converter os dados entre um conjunto de bytes e uma struct
. Com os dados extraídos, é
bom que sejam feitos checks simples para evitar propagar dados obviamente incorretos. Finalmente as informações da struct
devem ser convertidos na string adequada.
Pode supor as structs como:
typedef struct {
uint8_t day, month, year;
uint8_t second, minute, hour;
float latitude, longitude, altitude;
float speed_x, speed_y, speed_z;
} gps_event_t;
typedef struct {
float latitude, longitude, altitude;
float preassure_primary;
float temp_1, temp_2, temp_3;
float v_1, v_2, v_3;
float i_1, i_2, i_3;
float batt_charge;
uint8_t seconds, minutes, hours;
uint8_t packet_id;
} radio_full_packet_values_t;
typedef struct {
float latitude, longitude, altitude;
float preassure_primary;
float batt_charge;
uint8_t seconds, minutes, hours;
uint8_t packet_id;
} radio_reduced_packet_values_t;
typedef uint8_t obc_blob_t[92];
typedef struct {
uint8_t id;
obc_blob_t data;
} radio_obsat_packet_values_t;
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.